thor 0.14.4 → 0.14.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,88 +4,88 @@ require 'thor/runner'
4
4
  describe Thor::Runner do
5
5
  describe "#help" do
6
6
  it "shows information about Thor::Runner itself" do
7
- capture(:stdout){ Thor::Runner.start(["help"]) }.must =~ /List the available thor tasks/
7
+ capture(:stdout){ Thor::Runner.start(["help"]) }.should =~ /List the available thor tasks/
8
8
  end
9
9
 
10
10
  it "shows information about an specific Thor::Runner task" do
11
11
  content = capture(:stdout){ Thor::Runner.start(["help", "list"]) }
12
- content.must =~ /List the available thor tasks/
13
- content.must_not =~ /help \[TASK\]/
12
+ content.should =~ /List the available thor tasks/
13
+ content.should_not =~ /help \[TASK\]/
14
14
  end
15
15
 
16
16
  it "shows information about a specific Thor class" do
17
17
  content = capture(:stdout){ Thor::Runner.start(["help", "my_script"]) }
18
- content.must =~ /zoo\s+# zoo around/m
18
+ content.should =~ /zoo\s+# zoo around/m
19
19
  end
20
20
 
21
21
  it "shows information about an specific task from an specific Thor class" do
22
22
  content = capture(:stdout){ Thor::Runner.start(["help", "my_script:zoo"]) }
23
- content.must =~ /zoo around/
24
- content.must_not =~ /help \[TASK\]/
23
+ content.should =~ /zoo around/
24
+ content.should_not =~ /help \[TASK\]/
25
25
  end
26
26
 
27
27
  it "shows information about a specific Thor group class" do
28
28
  content = capture(:stdout){ Thor::Runner.start(["help", "my_counter"]) }
29
- content.must =~ /my_counter N/
29
+ content.should =~ /my_counter N/
30
30
  end
31
31
 
32
32
  it "raises error if a class/task cannot be found" do
33
33
  content = capture(:stderr){ Thor::Runner.start(["help", "unknown"]) }
34
- content.strip.must == 'Could not find task "unknown" in "default" namespace.'
34
+ content.strip.should == 'Could not find task "unknown" in "default" namespace.'
35
35
  end
36
36
  end
37
37
 
38
38
  describe "#start" do
39
39
  it "invokes a task from Thor::Runner" do
40
40
  ARGV.replace ["list"]
41
- capture(:stdout){ Thor::Runner.start }.must =~ /my_counter N/
41
+ capture(:stdout){ Thor::Runner.start }.should =~ /my_counter N/
42
42
  end
43
43
 
44
44
  it "invokes a task from a specific Thor class" do
45
45
  ARGV.replace ["my_script:zoo"]
46
- Thor::Runner.start.must be_true
46
+ Thor::Runner.start.should be_true
47
47
  end
48
48
 
49
49
  it "invokes the default task from a specific Thor class if none is specified" do
50
50
  ARGV.replace ["my_script"]
51
- Thor::Runner.start.must == "default task"
51
+ Thor::Runner.start.should == "default task"
52
52
  end
53
53
 
54
54
  it "forwads arguments to the invoked task" do
55
55
  ARGV.replace ["my_script:animal", "horse"]
56
- Thor::Runner.start.must == ["horse"]
56
+ Thor::Runner.start.should == ["horse"]
57
57
  end
58
58
 
59
59
  it "invokes tasks through shortcuts" do
60
60
  ARGV.replace ["my_script", "-T", "horse"]
61
- Thor::Runner.start.must == ["horse"]
61
+ Thor::Runner.start.should == ["horse"]
62
62
  end
63
63
 
64
64
  it "invokes a Thor::Group" do
65
65
  ARGV.replace ["my_counter", "1", "2", "--third", "3"]
66
- Thor::Runner.start.must == [1, 2, 3]
66
+ Thor::Runner.start.should == [1, 2, 3]
67
67
  end
68
68
 
69
69
  it "raises an error if class/task can't be found" do
70
70
  ARGV.replace ["unknown"]
71
71
  content = capture(:stderr){ Thor::Runner.start }
72
- content.strip.must == 'Could not find task "unknown" in "default" namespace.'
72
+ content.strip.should == 'Could not find task "unknown" in "default" namespace.'
73
73
  end
74
74
 
75
75
  it "does not swallow NoMethodErrors that occur inside the called method" do
76
76
  ARGV.replace ["my_script:call_unexistent_method"]
77
- lambda { Thor::Runner.start }.must raise_error(NoMethodError)
77
+ lambda { Thor::Runner.start }.should raise_error(NoMethodError)
78
78
  end
79
79
 
80
80
  it "does not swallow Thor::Group InvocationError" do
81
81
  ARGV.replace ["whiny_generator"]
82
- lambda { Thor::Runner.start }.must raise_error(ArgumentError, /Are you sure it has arity equals to 0\?/)
82
+ lambda { Thor::Runner.start }.should raise_error(ArgumentError, /Are you sure it has arity equals to 0\?/)
83
83
  end
84
84
 
85
85
  it "does not swallow Thor InvocationError" do
86
86
  ARGV.replace ["my_script:animal"]
87
87
  content = capture(:stderr) { Thor::Runner.start }
88
- content.strip.must == '"animal" was called incorrectly. Call as "thor my_script:animal TYPE".'
88
+ content.strip.should == '"animal" was called incorrectly. Call as "thor my_script:animal TYPE".'
89
89
  end
90
90
  end
91
91
 
@@ -112,53 +112,53 @@ describe Thor::Runner do
112
112
  it "gives a list of the available tasks" do
113
113
  ARGV.replace ["list"]
114
114
  content = capture(:stdout) { Thor::Runner.start }
115
- content.must =~ /amazing:describe NAME\s+# say that someone is amazing/m
115
+ content.should =~ /amazing:describe NAME\s+# say that someone is amazing/m
116
116
  end
117
117
 
118
118
  it "gives a list of the available Thor::Group classes" do
119
119
  ARGV.replace ["list"]
120
- capture(:stdout) { Thor::Runner.start }.must =~ /my_counter N/
120
+ capture(:stdout) { Thor::Runner.start }.should =~ /my_counter N/
121
121
  end
122
122
 
123
123
  it "can filter a list of the available tasks by --group" do
124
124
  ARGV.replace ["list", "--group", "standard"]
125
- capture(:stdout) { Thor::Runner.start }.must =~ /amazing:describe NAME/
125
+ capture(:stdout) { Thor::Runner.start }.should =~ /amazing:describe NAME/
126
126
  ARGV.replace []
127
- capture(:stdout) { Thor::Runner.start }.must_not =~ /my_script:animal TYPE/
127
+ capture(:stdout) { Thor::Runner.start }.should_not =~ /my_script:animal TYPE/
128
128
  ARGV.replace ["list", "--group", "script"]
129
- capture(:stdout) { Thor::Runner.start }.must =~ /my_script:animal TYPE/
129
+ capture(:stdout) { Thor::Runner.start }.should =~ /my_script:animal TYPE/
130
130
  end
131
131
 
132
132
  it "can skip all filters to show all tasks using --all" do
133
133
  ARGV.replace ["list", "--all"]
134
134
  content = capture(:stdout) { Thor::Runner.start }
135
- content.must =~ /amazing:describe NAME/
136
- content.must =~ /my_script:animal TYPE/
135
+ content.should =~ /amazing:describe NAME/
136
+ content.should =~ /my_script:animal TYPE/
137
137
  end
138
138
 
139
139
  it "doesn't list superclass tasks in the subclass" do
140
140
  ARGV.replace ["list"]
141
- capture(:stdout) { Thor::Runner.start }.must_not =~ /amazing:help/
141
+ capture(:stdout) { Thor::Runner.start }.should_not =~ /amazing:help/
142
142
  end
143
143
 
144
144
  it "presents tasks in the default namespace with an empty namespace" do
145
145
  ARGV.replace ["list"]
146
- capture(:stdout) { Thor::Runner.start }.must =~ /^thor :cow\s+# prints 'moo'/m
146
+ capture(:stdout) { Thor::Runner.start }.should =~ /^thor :cow\s+# prints 'moo'/m
147
147
  end
148
148
 
149
149
  it "runs tasks with an empty namespace from the default namespace" do
150
150
  ARGV.replace [":task_conflict"]
151
- capture(:stdout) { Thor::Runner.start }.must == "task\n"
151
+ capture(:stdout) { Thor::Runner.start }.should == "task\n"
152
152
  end
153
153
 
154
154
  it "runs groups even when there is a task with the same name" do
155
155
  ARGV.replace ["task_conflict"]
156
- capture(:stdout) { Thor::Runner.start }.must == "group\n"
156
+ capture(:stdout) { Thor::Runner.start }.should == "group\n"
157
157
  end
158
158
 
159
159
  it "runs tasks with no colon in the default namespace" do
160
160
  ARGV.replace ["cow"]
161
- capture(:stdout) { Thor::Runner.start }.must == "moo\n"
161
+ capture(:stdout) { Thor::Runner.start }.should == "moo\n"
162
162
  end
163
163
  end
164
164
 
@@ -180,8 +180,8 @@ describe Thor::Runner do
180
180
 
181
181
  it "displays the modules installed in a pretty way" do
182
182
  stdout = capture(:stdout) { Thor::Runner.start(["installed"]) }
183
- stdout.must =~ /random\s*amazing/
184
- stdout.must =~ /amazing:describe NAME\s+# say that someone is amazing/m
183
+ stdout.should =~ /random\s*amazing/
184
+ stdout.should =~ /amazing:describe NAME\s+# say that someone is amazing/m
185
185
  end
186
186
  end
187
187
 
@@ -8,10 +8,10 @@ describe Thor::Shell::Basic do
8
8
  describe "#padding" do
9
9
  it "cannot be set to below zero" do
10
10
  shell.padding = 10
11
- shell.padding.must == 10
11
+ shell.padding.should == 10
12
12
 
13
13
  shell.padding = -1
14
- shell.padding.must == 0
14
+ shell.padding.should == 0
15
15
  end
16
16
  end
17
17
 
@@ -19,7 +19,7 @@ describe Thor::Shell::Basic do
19
19
  it "prints a message to the user and gets the response" do
20
20
  $stdout.should_receive(:print).with("Should I overwrite it? ")
21
21
  $stdin.should_receive(:gets).and_return('Sure')
22
- shell.ask("Should I overwrite it?").must == "Sure"
22
+ shell.ask("Should I overwrite it?").should == "Sure"
23
23
  end
24
24
  end
25
25
 
@@ -27,11 +27,11 @@ describe Thor::Shell::Basic do
27
27
  it "asks the user and returns true if the user replies yes" do
28
28
  $stdout.should_receive(:print).with("Should I overwrite it? ")
29
29
  $stdin.should_receive(:gets).and_return('y')
30
- shell.yes?("Should I overwrite it?").must === true
30
+ shell.yes?("Should I overwrite it?").should === true
31
31
 
32
32
  $stdout.should_receive(:print).with("Should I overwrite it? ")
33
33
  $stdin.should_receive(:gets).and_return('n')
34
- shell.yes?("Should I overwrite it?").must_not === true
34
+ shell.yes?("Should I overwrite it?").should_not === true
35
35
  end
36
36
  end
37
37
 
@@ -39,11 +39,11 @@ describe Thor::Shell::Basic do
39
39
  it "asks the user and returns true if the user replies no" do
40
40
  $stdout.should_receive(:print).with("Should I overwrite it? ")
41
41
  $stdin.should_receive(:gets).and_return('n')
42
- shell.no?("Should I overwrite it?").must === true
42
+ shell.no?("Should I overwrite it?").should === true
43
43
 
44
44
  $stdout.should_receive(:print).with("Should I overwrite it? ")
45
45
  $stdin.should_receive(:gets).and_return('Yes')
46
- shell.no?("Should I overwrite it?").must === false
46
+ shell.no?("Should I overwrite it?").should === false
47
47
  end
48
48
  end
49
49
 
@@ -115,7 +115,7 @@ describe Thor::Shell::Basic do
115
115
 
116
116
  it "prints a table" do
117
117
  content = capture(:stdout){ shell.print_table(@table) }
118
- content.must == <<-TABLE
118
+ content.should == <<-TABLE
119
119
  abc #123 first three
120
120
  #0 empty
121
121
  xyz #786 last three
@@ -124,7 +124,7 @@ TABLE
124
124
 
125
125
  it "prints a table with identation" do
126
126
  content = capture(:stdout){ shell.print_table(@table, :ident => 2) }
127
- content.must == <<-TABLE
127
+ content.should == <<-TABLE
128
128
  abc #123 first three
129
129
  #0 empty
130
130
  xyz #786 last three
@@ -134,7 +134,7 @@ TABLE
134
134
  it "uses maximum terminal width" do
135
135
  shell.should_receive(:terminal_width).and_return(20)
136
136
  content = capture(:stdout){ shell.print_table(@table, :ident => 2, :truncate => true) }
137
- content.must == <<-TABLE
137
+ content.should == <<-TABLE
138
138
  abc #123 firs...
139
139
  #0 empty
140
140
  xyz #786 last...
@@ -143,7 +143,7 @@ TABLE
143
143
 
144
144
  it "honors the colwidth option" do
145
145
  content = capture(:stdout){ shell.print_table(@table, :colwidth => 10)}
146
- content.must == <<-TABLE
146
+ content.should == <<-TABLE
147
147
  abc #123 first three
148
148
  #0 empty
149
149
  xyz #786 last three
@@ -161,19 +161,19 @@ TABLE
161
161
  it "returns true if the user choose default option" do
162
162
  $stdout.stub!(:print)
163
163
  $stdin.should_receive(:gets).and_return('')
164
- shell.file_collision('foo').must be_true
164
+ shell.file_collision('foo').should be_true
165
165
  end
166
166
 
167
167
  it "returns false if the user choose no" do
168
168
  $stdout.stub!(:print)
169
169
  $stdin.should_receive(:gets).and_return('n')
170
- shell.file_collision('foo').must be_false
170
+ shell.file_collision('foo').should be_false
171
171
  end
172
172
 
173
173
  it "returns true if the user choose yes" do
174
174
  $stdout.stub!(:print)
175
175
  $stdin.should_receive(:gets).and_return('y')
176
- shell.file_collision('foo').must be_true
176
+ shell.file_collision('foo').should be_true
177
177
  end
178
178
 
179
179
  it "shows help usage if the user choose help" do
@@ -181,7 +181,7 @@ TABLE
181
181
  $stdin.should_receive(:gets).and_return('h')
182
182
  $stdin.should_receive(:gets).and_return('n')
183
183
  help = capture(:stdout){ shell.file_collision('foo') }
184
- help.must =~ /h \- help, show this help/
184
+ help.should =~ /h \- help, show this help/
185
185
  end
186
186
 
187
187
  it "quits if the user choose quit" do
@@ -191,17 +191,17 @@ TABLE
191
191
 
192
192
  lambda {
193
193
  shell.file_collision('foo')
194
- }.must raise_error(SystemExit)
194
+ }.should raise_error(SystemExit)
195
195
  end
196
196
 
197
197
  it "always returns true if the user choose always" do
198
198
  $stdout.should_receive(:print).with('Overwrite foo? (enter "h" for help) [Ynaqh] ')
199
199
  $stdin.should_receive(:gets).and_return('a')
200
200
 
201
- shell.file_collision('foo').must be_true
201
+ shell.file_collision('foo').should be_true
202
202
 
203
203
  $stdout.should_not_receive(:print)
204
- shell.file_collision('foo').must be_true
204
+ shell.file_collision('foo').should be_true
205
205
  end
206
206
 
207
207
  describe "when a block is given" do
@@ -32,9 +32,9 @@ describe Thor::Shell::Color do
32
32
  $stdin.should_receive(:gets).and_return('n')
33
33
 
34
34
  output = capture(:stdout){ shell.file_collision('spec/fixtures/doc/README'){ "README\nEND\n" } }
35
- output.must =~ /\e\[31m\- __start__\e\[0m/
36
- output.must =~ /^ README/
37
- output.must =~ /\e\[32m\+ END\e\[0m/
35
+ output.should =~ /\e\[31m\- __start__\e\[0m/
36
+ output.should =~ /^ README/
37
+ output.should =~ /\e\[32m\+ END\e\[0m/
38
38
  end
39
39
  end
40
40
  end
@@ -8,30 +8,30 @@ describe Thor::Shell do
8
8
  describe "#initialize" do
9
9
  it "sets shell value" do
10
10
  base = MyCounter.new [1, 2], { }, :shell => shell
11
- base.shell.must == shell
11
+ base.shell.should == shell
12
12
  end
13
13
 
14
14
  it "sets the base value on the shell if an accessor is available" do
15
15
  base = MyCounter.new [1, 2], { }, :shell => shell
16
- shell.base.must == base
16
+ shell.base.should == base
17
17
  end
18
18
  end
19
19
 
20
20
  describe "#shell" do
21
21
  it "returns the shell in use" do
22
- MyCounter.new([1,2]).shell.must be_kind_of(Thor::Base.shell)
22
+ MyCounter.new([1,2]).shell.should be_kind_of(Thor::Base.shell)
23
23
  end
24
-
24
+
25
25
  it "uses $THOR_SHELL" do
26
26
  class Thor::Shell::TestShell < Thor::Shell::Basic; end
27
-
28
- Thor::Base.shell.must == shell.class
27
+
28
+ Thor::Base.shell.should == shell.class
29
29
  ENV['THOR_SHELL'] = 'TestShell'
30
30
  Thor::Base.shell = nil
31
- Thor::Base.shell.must == Thor::Shell::TestShell
31
+ Thor::Base.shell.should == Thor::Shell::TestShell
32
32
  ENV['THOR_SHELL'] = ''
33
33
  Thor::Base.shell = shell.class
34
- Thor::Base.shell.must == shell.class
34
+ Thor::Base.shell.should == shell.class
35
35
  end
36
36
  end
37
37
 
@@ -39,9 +39,9 @@ describe Thor::Shell do
39
39
  it "uses padding for inside block outputs" do
40
40
  base = MyCounter.new([1,2])
41
41
  base.with_padding do
42
- capture(:stdout){ base.say_status :padding, "cool" }.strip.must == "padding cool"
42
+ capture(:stdout){ base.say_status :padding, "cool" }.strip.should == "padding cool"
43
43
  end
44
44
  end
45
45
  end
46
-
46
+
47
47
  end
@@ -1,12 +1,18 @@
1
1
  $TESTING=true
2
2
 
3
+ require 'simplecov'
4
+ SimpleCov.start do
5
+ add_group 'Libraries', 'lib'
6
+ add_group 'Specs', 'spec'
7
+ end
8
+
3
9
  $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
4
10
  require 'thor'
5
11
  require 'thor/group'
6
12
  require 'stringio'
7
13
 
8
- require 'rubygems'
9
14
  require 'rdoc'
15
+ require 'rspec'
10
16
  require 'diff/lcs' # You need diff/lcs installed to run specs (but not to run Thor).
11
17
  require 'fakeweb' # You need fakeweb installed to run specs (but not to run Thor).
12
18
 
@@ -22,21 +28,14 @@ load File.join(File.dirname(__FILE__), "fixtures", "group.thor")
22
28
  load File.join(File.dirname(__FILE__), "fixtures", "script.thor")
23
29
  load File.join(File.dirname(__FILE__), "fixtures", "invoke.thor")
24
30
 
25
- Kernel.module_eval do
26
- alias_method :must, :should
27
- alias_method :must_not, :should_not
28
- undef_method :should
29
- undef_method :should_not
30
- end
31
-
32
- Spec::Runner.configure do |config|
31
+ RSpec.configure do |config|
33
32
  def capture(stream)
34
33
  begin
35
34
  stream = stream.to_s
36
35
  eval "$#{stream} = StringIO.new"
37
36
  yield
38
37
  result = eval("$#{stream}").string
39
- ensure
38
+ ensure
40
39
  eval("$#{stream} = #{stream.upcase}")
41
40
  end
42
41
 
@@ -13,28 +13,28 @@ describe Thor::Task do
13
13
  it "includes namespace within usage" do
14
14
  Object.stub!(:namespace).and_return("foo")
15
15
  Object.stub!(:arguments).and_return([])
16
- task(:bar => :required).formatted_usage(Object).must == "foo:can_has --bar=BAR"
16
+ task(:bar => :required).formatted_usage(Object).should == "foo:can_has --bar=BAR"
17
17
  end
18
18
 
19
19
  it "removes default from namespace" do
20
20
  Object.stub!(:namespace).and_return("default:foo")
21
21
  Object.stub!(:arguments).and_return([])
22
- task(:bar => :required).formatted_usage(Object).must == ":foo:can_has --bar=BAR"
22
+ task(:bar => :required).formatted_usage(Object).should == ":foo:can_has --bar=BAR"
23
23
  end
24
24
 
25
25
  it "injects arguments into usage" do
26
26
  Object.stub!(:namespace).and_return("foo")
27
27
  Object.stub!(:arguments).and_return([ Thor::Argument.new(:bar, nil, true, :string) ])
28
- task(:foo => :required).formatted_usage(Object).must == "foo:can_has BAR --foo=FOO"
28
+ task(:foo => :required).formatted_usage(Object).should == "foo:can_has BAR --foo=FOO"
29
29
  end
30
30
  end
31
31
 
32
32
  describe "#dynamic" do
33
33
  it "creates a dynamic task with the given name" do
34
- Thor::DynamicTask.new('task').name.must == 'task'
35
- Thor::DynamicTask.new('task').description.must == 'A dynamically-generated task'
36
- Thor::DynamicTask.new('task').usage.must == 'task'
37
- Thor::DynamicTask.new('task').options.must == {}
34
+ Thor::DynamicTask.new('task').name.should == 'task'
35
+ Thor::DynamicTask.new('task').description.should == 'A dynamically-generated task'
36
+ Thor::DynamicTask.new('task').usage.should == 'task'
37
+ Thor::DynamicTask.new('task').options.should == {}
38
38
  end
39
39
 
40
40
  it "does not invoke an existing method" do
@@ -48,7 +48,7 @@ describe Thor::Task do
48
48
  it "dup options hash" do
49
49
  task = Thor::Task.new("can_has", nil, nil, nil, :foo => true, :bar => :required)
50
50
  task.dup.options.delete(:foo)
51
- task.options[:foo].must_not be_nil
51
+ task.options[:foo].should_not be_nil
52
52
  end
53
53
  end
54
54