lightning 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +9 -0
- data/README.rdoc +53 -125
- data/Rakefile +14 -40
- data/bin/lightning +4 -0
- data/bin/lightning-complete +1 -10
- data/bin/lightning-translate +4 -0
- data/lib/lightning.rb +36 -50
- data/lib/lightning/bolt.rb +53 -26
- data/lib/lightning/builder.rb +87 -0
- data/lib/lightning/commands.rb +92 -69
- data/lib/lightning/commands/bolt.rb +63 -0
- data/lib/lightning/commands/core.rb +57 -0
- data/lib/lightning/commands/function.rb +76 -0
- data/lib/lightning/commands/shell_command.rb +38 -0
- data/lib/lightning/commands_util.rb +75 -0
- data/lib/lightning/completion.rb +72 -28
- data/lib/lightning/completion_map.rb +42 -39
- data/lib/lightning/config.rb +92 -57
- data/lib/lightning/function.rb +70 -0
- data/lib/lightning/generator.rb +77 -43
- data/lib/lightning/generators.rb +53 -0
- data/lib/lightning/generators/misc.rb +12 -0
- data/lib/lightning/generators/ruby.rb +32 -0
- data/lib/lightning/util.rb +70 -0
- data/lib/lightning/version.rb +3 -0
- data/test/bolt_test.rb +16 -28
- data/test/builder_test.rb +54 -0
- data/test/commands_test.rb +98 -0
- data/test/completion_map_test.rb +31 -54
- data/test/completion_test.rb +106 -36
- data/test/config_test.rb +22 -56
- data/test/function_test.rb +90 -0
- data/test/generator_test.rb +73 -0
- data/test/lightning.yml +26 -34
- data/test/test_helper.rb +80 -15
- metadata +42 -20
- data/VERSION.yml +0 -4
- data/bin/lightning-full_path +0 -18
- data/bin/lightning-install +0 -7
- data/lib/lightning/bolts.rb +0 -12
- data/lightning.yml.example +0 -87
- data/lightning_completions.example +0 -147
- data/test/lightning_test.rb +0 -58
@@ -0,0 +1,98 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
context "Commands:" do
|
4
|
+
# this test seems to run much longer than expected i.e. 0.02
|
5
|
+
# rr and raising?
|
6
|
+
test "run_command handles unexpected error" do
|
7
|
+
mock($stderr).puts(/^Error: Unexpected/)
|
8
|
+
mock(Commands).complete(anything) { raise "Unexpected" }
|
9
|
+
run_command :complete
|
10
|
+
end
|
11
|
+
|
12
|
+
test "complete defaults to ARGV if no ENV['COMP_LINE']" do
|
13
|
+
mock(Completion).complete('o-a Col', anything)
|
14
|
+
capture_stdout { run_command(:complete, ['o-a', 'Col']) }
|
15
|
+
end
|
16
|
+
|
17
|
+
test "complete prints usage for no arguments" do
|
18
|
+
capture_stdout { run_command(:complete, []) }.should =~ /^Usage/
|
19
|
+
end
|
20
|
+
|
21
|
+
test "complete prints error for invalid command" do
|
22
|
+
capture_stdout { run_command(:complete, ['invalid','invalid']) }.should =~ /^#Error.*Please/m
|
23
|
+
end
|
24
|
+
|
25
|
+
test "translate prints usage for no arguments" do
|
26
|
+
capture_stdout { run_command(:translate, []) }.should =~ /^Usage/
|
27
|
+
end
|
28
|
+
|
29
|
+
test "translate prints error for invalid command" do
|
30
|
+
capture_stdout { run_command(:translate, %w{invalid blah}) }.should =~ /#Error/
|
31
|
+
end
|
32
|
+
|
33
|
+
test "command prints usage with -h" do
|
34
|
+
capture_stdout { run_command :install, ['-h'] }.should =~ /^Usage/
|
35
|
+
end
|
36
|
+
|
37
|
+
context "first install" do
|
38
|
+
before_all {
|
39
|
+
@old_config = Lightning.config
|
40
|
+
Lightning.config = Lightning::Config.new({})
|
41
|
+
@old_functions = Lightning.functions
|
42
|
+
Lightning.functions = nil
|
43
|
+
|
44
|
+
mock(Lightning.config).save.times(2)
|
45
|
+
mock(Commands).first_install? { true }.times(2)
|
46
|
+
stub.instance_of(Generator).call_generator { [] }
|
47
|
+
mock(File).open(anything, 'w')
|
48
|
+
@stdout = capture_stdout { run_command :install }
|
49
|
+
}
|
50
|
+
|
51
|
+
assert "generates default bolts" do
|
52
|
+
Generator::DEFAULT_GENERATORS.all? {|e| Lightning.config[:bolts].key?(e) }
|
53
|
+
end
|
54
|
+
|
55
|
+
assert "default bolts are global" do
|
56
|
+
Generator::DEFAULT_GENERATORS.all? {|e| Lightning.config[:bolts][e]['global'] }
|
57
|
+
end
|
58
|
+
|
59
|
+
test "builds 8 default functions" do
|
60
|
+
expected = %w{cd-gem cd-local_ruby cd-ruby cd-wild echo-gem echo-local_ruby echo-ruby echo-wild}
|
61
|
+
Lightning.functions.keys.sort.should == expected
|
62
|
+
end
|
63
|
+
|
64
|
+
test "prints correct install message" do
|
65
|
+
@stdout.should =~ /^Created.*lightningrc\nCreated.*functions\.sh for bash/m
|
66
|
+
end
|
67
|
+
|
68
|
+
after_all { Lightning.config = @old_config; Lightning.functions = @old_functions }
|
69
|
+
end
|
70
|
+
|
71
|
+
context "run" do
|
72
|
+
test "with no command prints usage" do
|
73
|
+
mock(Commands).print_help
|
74
|
+
Commands.run []
|
75
|
+
end
|
76
|
+
|
77
|
+
test "with aliased command executes correct command" do
|
78
|
+
mock(Commands).run_command('bolt', [])
|
79
|
+
Commands.run ['b']
|
80
|
+
end
|
81
|
+
|
82
|
+
test "with -h prints usage" do
|
83
|
+
mock(Commands).print_help
|
84
|
+
Commands.run ['-h']
|
85
|
+
end
|
86
|
+
|
87
|
+
test "with invalid command prints messaged and usage" do
|
88
|
+
mock(Commands).print_help
|
89
|
+
capture_stdout { Commands.run ['blah'] }.should =~ /Command 'blah'/
|
90
|
+
end
|
91
|
+
|
92
|
+
test "passes -h as command argument" do
|
93
|
+
mock(Commands).print_command_help.never
|
94
|
+
mock(Commands).complete(['blah', '-h'])
|
95
|
+
Commands.run(['complete', 'blah', '-h'])
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
data/test/completion_map_test.rb
CHANGED
@@ -1,58 +1,35 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
2
|
|
3
|
-
|
3
|
+
context "CompletionMap" do
|
4
|
+
def create_map(path_hash, new_options={})
|
5
|
+
stub(Dir).glob('blah/*', File::FNM_DOTMATCH) { path_hash.values }
|
6
|
+
@completion_map = CompletionMap.new('blah/*', new_options)
|
7
|
+
end
|
8
|
+
|
9
|
+
test "creates basic map" do
|
10
|
+
expected_map = {"path1"=>"/dir1/path1", "path2"=>"/dir1/path2"}
|
11
|
+
create_map(expected_map)
|
12
|
+
@completion_map.map.should == expected_map
|
13
|
+
end
|
14
|
+
|
15
|
+
test "ignores paths from Lightning.ignore_paths" do
|
16
|
+
CompletionMap.ignore_paths = ['path1', 'dir2', '\.\.?$']
|
17
|
+
expected_map = {"path1"=>"/dir1/path1", "path2"=>"/dir1/path2", 'path3'=>'/dir2/path3', '.'=>'/dir1/path4/.'}
|
18
|
+
create_map(expected_map)
|
19
|
+
@completion_map.map.should == slice_hash(expected_map, 'path2')
|
20
|
+
CompletionMap.ignore_paths = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
test "creates map with duplicates" do
|
24
|
+
expected_map = {"path1///dir3"=>"/dir3/path1", "path2"=>"/dir1/path2", "path1///dir1"=>"/dir1/path1", "path1///dir2"=>"/dir2/path1"}
|
25
|
+
create_map(expected_map)
|
26
|
+
@completion_map.map.should == expected_map
|
27
|
+
end
|
4
28
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
test "creates basic map" do
|
12
|
-
expected_map = {"path1"=>"/dir1/path1", "path2"=>"/dir1/path2"}
|
13
|
-
create_map(expected_map)
|
14
|
-
assert_equal expected_map, @completion_map.map
|
15
|
-
end
|
16
|
-
|
17
|
-
test "ignores paths from Lightning.ignore_paths" do
|
18
|
-
Lightning.stub!(:ignore_paths, :return=>['path1'])
|
19
|
-
expected_map = {"path1"=>"/dir1/path1", "path2"=>"/dir1/path2"}
|
20
|
-
create_map(expected_map)
|
21
|
-
assert_equal expected_map.slice('path2'), @completion_map.map
|
22
|
-
end
|
23
|
-
|
24
|
-
test "creates map with duplicates" do
|
25
|
-
expected_map = {"path1//dir3"=>"/dir3/path1", "path2"=>"/dir1/path2", "path1//dir1"=>"/dir1/path1", "path1//dir2"=>"/dir2/path1"}
|
26
|
-
create_map(expected_map)
|
27
|
-
assert_equal expected_map, @completion_map.map
|
28
|
-
end
|
29
|
-
|
30
|
-
test "fetches correct path completion" do
|
31
|
-
map = {"path1"=>"/dir1/path1", "path2"=>"/dir1/path2"}
|
32
|
-
create_map(map)
|
33
|
-
assert_equal '/dir1/path1', @completion_map['path1']
|
34
|
-
end
|
35
|
-
|
36
|
-
test "creates alias map" do
|
37
|
-
create_map({}, :aliases=>{'path3'=>'/dir1/path3'}, :global_aliases=>{'path2'=>'/dir1/path2'})
|
38
|
-
assert_equal({"path2"=>"/dir1/path2", "path3"=>"/dir1/path3"}, @completion_map.alias_map)
|
39
|
-
end
|
40
|
-
|
41
|
-
test "fetches correct alias completion" do
|
42
|
-
create_map({}, :aliases=>{'path3'=>'/dir1/path3'})
|
43
|
-
assert_equal '/dir1/path3', @completion_map['path3']
|
44
|
-
end
|
45
|
-
|
46
|
-
test "fetches correct global alias completion" do
|
47
|
-
map = {"path1"=>"/dir1/path1", "path2"=>"/dir1/path2"}
|
48
|
-
create_map(map, :global_aliases=>{'path3'=>'/dir1/path3'})
|
49
|
-
assert_equal '/dir1/path3', @completion_map['path3']
|
50
|
-
end
|
51
|
-
|
52
|
-
test "keys include aliases" do
|
53
|
-
map = {"path2"=>"/dir1/path2"}
|
54
|
-
create_map(map, :global_aliases=>{'path3'=>'/dir1/path3'})
|
55
|
-
assert_arrays_equal ['path2','path3'], @completion_map.keys
|
56
|
-
end
|
29
|
+
test "ignores duplicate paths created by overlapping globs" do
|
30
|
+
mock(Dir).glob('/usr/**', File::FNM_DOTMATCH) { ['/usr/lib/path1', '/usr/lib/path2'] }
|
31
|
+
mock(Dir).glob('/usr/lib/*', File::FNM_DOTMATCH) { ['/usr/lib/path1'] }
|
32
|
+
@completion_map = CompletionMap.new('/usr/**', '/usr/lib/*')
|
33
|
+
@completion_map.map.should == {'path1'=>'/usr/lib/path1', 'path2'=>'/usr/lib/path2'}
|
57
34
|
end
|
58
|
-
end
|
35
|
+
end
|
data/test/completion_test.rb
CHANGED
@@ -1,49 +1,119 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
3
|
+
context "Completion" do
|
4
|
+
before {
|
5
|
+
@command = 'blah';
|
6
|
+
cmd = Function.new 'name'=>@command, 'bolt'=>Bolt.new('blah')
|
7
|
+
stub(cmd).completions { ['at', 'ap', 'blah.rb', 'has space'] }
|
8
|
+
Lightning.functions[@command] = cmd
|
9
|
+
}
|
10
|
+
|
11
|
+
def tab(input, expected, complete_regex=false)
|
12
|
+
Lightning.config[:complete_regex] = complete_regex
|
13
|
+
mock(Commands).puts(expected)
|
14
|
+
run_command :complete, [@command, 'cd-test '+ input]
|
15
|
+
end
|
16
|
+
|
17
|
+
test "from script matches" do
|
18
|
+
tab 'a', %w{at ap}
|
19
|
+
end
|
20
|
+
|
21
|
+
test "ending with space matches everything" do
|
22
|
+
tab 'a ', ["at", "ap", "blah.rb", "has\\ space"]
|
23
|
+
end
|
24
|
+
|
25
|
+
test "has no matches" do
|
26
|
+
tab 'zaza', []
|
27
|
+
end
|
28
|
+
|
29
|
+
test "has no matches for a local directory" do
|
30
|
+
tab 'bling/ok', []
|
31
|
+
end
|
32
|
+
|
33
|
+
test "with multiple words matches last word" do
|
34
|
+
tab '-r b', ['blah.rb']
|
35
|
+
end
|
36
|
+
|
37
|
+
test "with multiple words matches quoted last word" do
|
38
|
+
tab '-r "b"', ['blah.rb']
|
39
|
+
end
|
40
|
+
|
41
|
+
test "with multiple words matches shell escaped last word" do
|
42
|
+
tab 'lib has\\ ', ['has\\ space']
|
43
|
+
end
|
44
|
+
|
45
|
+
test "in nonexistent subdirectory errors properly" do
|
46
|
+
tab 'at/', Completion.error_array("Nonexistent directory.")
|
47
|
+
end
|
48
|
+
|
49
|
+
test "in bolt subdirectory matches" do
|
50
|
+
mock(Dir).entries('at') { ['..', '.', 'f1']}
|
51
|
+
tab 'at/', ['at/f1']
|
52
|
+
end
|
53
|
+
|
54
|
+
test "in nested bolt subdirectory matches" do
|
55
|
+
mock(Dir).entries('at/the') { ['f1']}
|
56
|
+
tab 'at/the/', ['at/the/f1']
|
57
|
+
end
|
58
|
+
|
59
|
+
test "for directory in bolt subdirectory matches and appends / " do
|
60
|
+
stub(File).directory? { true }
|
61
|
+
mock(Dir).entries('at/the') { %w{ab lib}}
|
62
|
+
tab 'at/the/l', ['at/the/lib/']
|
63
|
+
end
|
64
|
+
|
65
|
+
test "for file in bolt subdirectory matches" do
|
66
|
+
mock(Dir).entries('at/the') { %w{ab ge fe fi fo}}
|
67
|
+
tab 'at/the/f', ['at/the/fe', 'at/the/fi', 'at/the/fo']
|
68
|
+
end
|
69
|
+
|
70
|
+
test "in bolt file's superdirectory matches" do
|
71
|
+
mock(File).expand_path('blah.rb/..') { '/dir' }
|
72
|
+
mock(Dir).entries('/dir') { ['f1', 'f2'] }
|
73
|
+
tab 'blah.rb/../', ['blah.rb/../f1', 'blah.rb/../f2']
|
74
|
+
end
|
75
|
+
|
76
|
+
test "in bolt file's superdirectory's subdirectory matches" do
|
77
|
+
mock(File).expand_path('blah.rb/../sub') { '/dir/sub' }
|
78
|
+
mock(Dir).entries('/dir/sub') { ['f1', 'f2'] }
|
79
|
+
tab 'blah.rb/../sub/', ['blah.rb/../sub/f1', 'blah.rb/../sub/f2']
|
80
|
+
end
|
81
|
+
|
82
|
+
context "with a regex" do
|
83
|
+
test "matches starting letters" do
|
84
|
+
tab 'a', %w{at ap}, true
|
13
85
|
end
|
14
|
-
|
15
|
-
test "
|
16
|
-
|
17
|
-
@completion = Lightning::Completion.new('cd-test a', @key)
|
18
|
-
assert_arrays_equal %w{at ap}, @completion.matches
|
86
|
+
|
87
|
+
test "and asterisk matches" do
|
88
|
+
tab '[ab]*', %w{at ap blah.rb}, true
|
19
89
|
end
|
20
|
-
|
21
|
-
test "with
|
22
|
-
|
23
|
-
@completion = Lightning::Completion.new('cd-test -test a', @key)
|
24
|
-
assert_arrays_equal %w{at ap}, @completion.matches
|
90
|
+
|
91
|
+
test "with space matches" do
|
92
|
+
tab 'has', ['has\\ space']
|
25
93
|
end
|
26
|
-
|
27
|
-
test "with
|
28
|
-
|
29
|
-
@completion = Lightning::Completion.new('cd-test *', @key)
|
30
|
-
assert_arrays_equal %w{at ap blah}, @completion.matches
|
94
|
+
|
95
|
+
test "with typed space matches" do
|
96
|
+
tab 'has\\ ', ['has\\ space']
|
31
97
|
end
|
32
|
-
|
33
|
-
test "
|
34
|
-
|
35
|
-
@completion = Lightning::Completion.new('cd-test []', @key)
|
36
|
-
assert !@completion.matches.grep(/Error/).empty?
|
98
|
+
|
99
|
+
test "which is invalid errors gracefully" do
|
100
|
+
tab '[]', Completion.error_array('Invalid regular expression.'), true
|
37
101
|
end
|
38
102
|
end
|
39
|
-
|
103
|
+
end
|
104
|
+
|
105
|
+
context "Completion misc" do
|
40
106
|
test "blob_to_regex converts * to .*" do
|
41
|
-
@lc =
|
42
|
-
|
107
|
+
@lc = Completion.new('blah', nil)
|
108
|
+
@lc.blob_to_regex('*a*blah').should == '.*a.*blah'
|
43
109
|
end
|
44
|
-
|
110
|
+
|
45
111
|
test "blob_to_regex doesn't modify .*" do
|
46
|
-
@lc =
|
47
|
-
|
112
|
+
@lc = Completion.new('blah', nil)
|
113
|
+
@lc.blob_to_regex('.*blah.*').should == '.*blah.*'
|
114
|
+
end
|
115
|
+
|
116
|
+
test "Completion error array must be more than one element to display and not complete error" do
|
117
|
+
Completion.error_array("testing").size.should > 1
|
48
118
|
end
|
49
119
|
end
|
data/test/config_test.rb
CHANGED
@@ -1,62 +1,28 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
assert @config[:generated_file].is_a?(String)
|
24
|
-
end
|
25
|
-
|
26
|
-
should "have a commands key which is an array" do
|
27
|
-
assert @config[:commands].is_a?(Array)
|
28
|
-
end
|
29
|
-
|
30
|
-
should "have a command with valid keys" do
|
31
|
-
assert @config[:commands][0].slice('name', 'map_to', 'description').values.all? {|e| e.is_a?(String)}
|
32
|
-
assert @config[:commands][0]['paths'].is_a?(Array)
|
33
|
-
end
|
34
|
-
|
35
|
-
should "have a paths key which is a hash" do
|
36
|
-
assert @config[:paths].is_a?(Hash)
|
37
|
-
end
|
38
|
-
|
39
|
-
should "have an ignore_paths key which is an array" do
|
40
|
-
assert @config[:ignore_paths].is_a?(Array)
|
41
|
-
end
|
3
|
+
context "A config" do
|
4
|
+
before_all {
|
5
|
+
@config = Lightning::Config.new
|
6
|
+
}
|
7
|
+
|
8
|
+
assert "has keys that are symbols" do
|
9
|
+
@config.keys.all? {|e| e.is_a?(Symbol)}
|
10
|
+
end
|
11
|
+
|
12
|
+
assert "has read supported keys" do
|
13
|
+
supported_keys = [:source_file, :ignore_paths, :bolts, :complete_regex]
|
14
|
+
supported_keys.all? {|e| @config.key?(e) }
|
15
|
+
end
|
16
|
+
|
17
|
+
assert "has a source_file key which is a string" do
|
18
|
+
@config[:source_file].is_a?(String)
|
19
|
+
end
|
20
|
+
|
21
|
+
assert "has a bolts key which is a hash" do
|
22
|
+
@config[:bolts].is_a?(Hash)
|
42
23
|
end
|
43
24
|
|
44
|
-
|
45
|
-
|
46
|
-
config = {:commands=>[{'name'=>'c1', 'map_to'=>'s1'}]}
|
47
|
-
assert ! Lightning::Config.configure_commands_and_paths(config)[:commands][0]['bolt_key'].nil?
|
48
|
-
end
|
49
|
-
|
50
|
-
test "adds generated bolt key to config.paths if it didn't exist" do
|
51
|
-
config = {:commands=>[{'name'=>'c1', 'map_to'=>'s1', 'paths'=>['*']}]}
|
52
|
-
new_config = Lightning::Config.configure_commands_and_paths(config)
|
53
|
-
bolt_key = new_config[:commands][0]['bolt_key']
|
54
|
-
assert new_config[:paths].has_key?(bolt_key)
|
55
|
-
end
|
56
|
-
|
57
|
-
test "adds reference to bolt key if command.paths is a string" do
|
58
|
-
config = {:commands=>[{'name'=>'c1', 'map_to'=>'s1', 'paths'=>'blah'}]}
|
59
|
-
assert_equal 'blah', Lightning::Config.configure_commands_and_paths(config)[:commands][0]['bolt_key']
|
60
|
-
end
|
25
|
+
assert "has an ignore_paths key which is an array" do
|
26
|
+
@config[:ignore_paths].is_a?(Array)
|
61
27
|
end
|
62
28
|
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
context "Function" do
|
4
|
+
def create_function(attributes={})
|
5
|
+
# bolt, path and aliases depend on test/lightning.yml
|
6
|
+
@fn = Function.new({'name'=>'blah', 'bolt'=>Bolt.new('app'), 'desc'=>'blah'}.merge(attributes))
|
7
|
+
@fn.completion_map.map = {'path1'=>'/dir/path1','path2'=>'/dir/path2',
|
8
|
+
'path3'=>'/dir/path3', 'file 1'=>'/dir/file 1'}
|
9
|
+
end
|
10
|
+
|
11
|
+
def translate(input, *expected)
|
12
|
+
Lightning.functions['blah'] = @fn
|
13
|
+
mock(Commands).puts(expected.join("\n"))
|
14
|
+
run_command :translate, ['blah'] + input.split(' ')
|
15
|
+
end
|
16
|
+
|
17
|
+
before_all do
|
18
|
+
create_function
|
19
|
+
@map = @fn.completion_map
|
20
|
+
end
|
21
|
+
|
22
|
+
test "has correct completions" do
|
23
|
+
assert_arrays_equal %w{a1 a2}+['file 1']+%w{path1 path2 path3}, @fn.completions
|
24
|
+
end
|
25
|
+
|
26
|
+
test "has bolt's globs" do
|
27
|
+
@fn.globs.should.not.be.empty?
|
28
|
+
@fn.globs.should == @fn.bolt.globs
|
29
|
+
end
|
30
|
+
|
31
|
+
test "has bolt's aliases" do
|
32
|
+
@fn.aliases.should.not.be.empty?
|
33
|
+
@fn.aliases.should == @fn.bolt.aliases
|
34
|
+
end
|
35
|
+
|
36
|
+
test "can have a desc" do
|
37
|
+
@fn.desc.should.not.be.empty?
|
38
|
+
end
|
39
|
+
|
40
|
+
test "translates a completion" do
|
41
|
+
translate 'path1', @map['path1']
|
42
|
+
end
|
43
|
+
|
44
|
+
test "translates multiple completions separately" do
|
45
|
+
translate 'path1 path2', @map['path1'], @map['path2']
|
46
|
+
end
|
47
|
+
|
48
|
+
test "translates instant multiple completions (..)" do
|
49
|
+
translate 'path.. blah a1', @map['path1'], @map['path2'], @map['path3'], 'blah', @map['a1']
|
50
|
+
end
|
51
|
+
|
52
|
+
test "translates instant multiple completions containing spaces" do
|
53
|
+
translate 'file..', @map['file 1']
|
54
|
+
end
|
55
|
+
|
56
|
+
test "translates non-completion to same string" do
|
57
|
+
translate 'blah', 'blah'
|
58
|
+
end
|
59
|
+
|
60
|
+
test "translates completion anywhere amongst non-completions" do
|
61
|
+
translate '-r path1', "-r", "#{@map['path1']}"
|
62
|
+
translate '-r path1 doc/', "-r", "#{@map['path1']}", "doc/"
|
63
|
+
end
|
64
|
+
|
65
|
+
test "translates completion embedded in subdirectory completion" do
|
66
|
+
translate '-r path1/sub/dir', "-r", "#{@map['path1']}/sub/dir"
|
67
|
+
end
|
68
|
+
|
69
|
+
test "translates completion with a superdirectory" do
|
70
|
+
mock(File).expand_path("#{@map['path1']}/../file1") { '/dir/file1' }
|
71
|
+
translate 'path1/../file1', '/dir/file1'
|
72
|
+
end
|
73
|
+
|
74
|
+
test "translates completion over alias" do
|
75
|
+
translate 'path3', '/dir/path3'
|
76
|
+
end
|
77
|
+
|
78
|
+
test "translates alias" do
|
79
|
+
translate 'a1', @map['a1']
|
80
|
+
end
|
81
|
+
|
82
|
+
after_all { Lightning.config[:aliases] = {}}
|
83
|
+
|
84
|
+
context "function attributes:" do
|
85
|
+
test "post_path added after each translation" do
|
86
|
+
create_function 'post_path'=>'/rdoc/index.html'
|
87
|
+
translate '-r path1 path2', "-r", "/dir/path1/rdoc/index.html", "/dir/path2/rdoc/index.html"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|