transpec 1.3.1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/.travis.yml +1 -3
- data/CHANGELOG.md +9 -0
- data/README.md +141 -24
- data/README.md.erb +136 -24
- data/lib/transpec/ast/node.rb +7 -3
- data/lib/transpec/cli.rb +1 -1
- data/lib/transpec/configuration.rb +1 -0
- data/lib/transpec/converter.rb +31 -2
- data/lib/transpec/dynamic_analyzer.rb +1 -1
- data/lib/transpec/option_parser.rb +12 -9
- data/lib/transpec/project.rb +23 -12
- data/lib/transpec/rspec_version.rb +18 -4
- data/lib/transpec/static_context_inspector.rb +0 -15
- data/lib/transpec/syntax/example.rb +83 -0
- data/lib/transpec/syntax/expect.rb +5 -0
- data/lib/transpec/syntax/have.rb +111 -54
- data/lib/transpec/syntax/method_stub.rb +58 -37
- data/lib/transpec/syntax/mixin/allow_no_message.rb +2 -0
- data/lib/transpec/syntax/mixin/any_instance.rb +2 -0
- data/lib/transpec/syntax/mixin/should_base.rb +39 -0
- data/lib/transpec/syntax/oneliner_should.rb +218 -0
- data/lib/transpec/syntax/operator_matcher.rb +1 -0
- data/lib/transpec/syntax/should.rb +3 -30
- data/lib/transpec/util.rb +54 -0
- data/lib/transpec/version.rb +2 -2
- data/spec/support/shared_context.rb +21 -29
- data/spec/transpec/ast/node_spec.rb +1 -1
- data/spec/transpec/commit_message_spec.rb +29 -23
- data/spec/transpec/configuration_spec.rb +1 -0
- data/spec/transpec/converter_spec.rb +208 -5
- data/spec/transpec/dynamic_analyzer_spec.rb +2 -2
- data/spec/transpec/option_parser_spec.rb +1 -0
- data/spec/transpec/project_spec.rb +10 -0
- data/spec/transpec/rspec_version_spec.rb +52 -28
- data/spec/transpec/static_context_inspector_spec.rb +2 -2
- data/spec/transpec/syntax/be_boolean_spec.rb +6 -13
- data/spec/transpec/syntax/be_close_spec.rb +2 -9
- data/spec/transpec/syntax/double_spec.rb +2 -9
- data/spec/transpec/syntax/example_spec.rb +249 -0
- data/spec/transpec/syntax/expect_spec.rb +1 -1
- data/spec/transpec/syntax/have_spec.rb +127 -22
- data/spec/transpec/syntax/its_spec.rb +9 -18
- data/spec/transpec/syntax/method_stub_spec.rb +193 -158
- data/spec/transpec/syntax/oneliner_should_spec.rb +653 -0
- data/spec/transpec/syntax/operator_matcher_spec.rb +7 -8
- data/spec/transpec/syntax/raise_error_spec.rb +6 -13
- data/spec/transpec/syntax/rspec_configure_spec.rb +1 -8
- data/spec/transpec/syntax/should_receive_spec.rb +19 -28
- data/spec/transpec/syntax/should_spec.rb +18 -16
- data/spec/transpec/util_spec.rb +30 -0
- data/transpec.gemspec +8 -7
- metadata +49 -28
@@ -13,8 +13,8 @@ module Transpec
|
|
13
13
|
let(:rspec_command) { nil }
|
14
14
|
|
15
15
|
describe '.new' do
|
16
|
-
context 'when
|
17
|
-
it 'yields instance' do
|
16
|
+
context 'when block is passed' do
|
17
|
+
it 'yields the instance' do
|
18
18
|
yielded = false
|
19
19
|
|
20
20
|
DynamicAnalyzer.new(silent: true) do |analyzer|
|
@@ -68,6 +68,16 @@ module Transpec
|
|
68
68
|
rspec_version.to_s.should == RSpec::Core::Version::STRING
|
69
69
|
end
|
70
70
|
end
|
71
|
+
|
72
|
+
context 'when failed checking version' do
|
73
|
+
before do
|
74
|
+
IO.stub(:popen).and_return(nil)
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'raises error' do
|
78
|
+
-> { rspec_version }.should raise_error(/failed checking/i)
|
79
|
+
end
|
80
|
+
end
|
71
81
|
end
|
72
82
|
end
|
73
83
|
end
|
@@ -7,38 +7,62 @@ module Transpec
|
|
7
7
|
describe RSpecVersion do
|
8
8
|
subject(:rspec_version) { RSpecVersion.new(version_string) }
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
it { should == expected }
|
10
|
+
shared_examples 'feature availability' do |method, expectations|
|
11
|
+
describe "##{method}" do
|
12
|
+
subject { rspec_version.send(method) }
|
13
|
+
|
14
|
+
expectations.each do |version, expected|
|
15
|
+
context "when the version is #{version}" do
|
16
|
+
let(:version_string) { version }
|
17
|
+
|
18
|
+
it "returns #{expected.inspect}" do
|
19
|
+
should be expected
|
20
|
+
end
|
21
|
+
end
|
23
22
|
end
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
['2.
|
32
|
-
['
|
33
|
-
['
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
26
|
+
[:be_truthy_available?, :yielded_example_available?].each do |method|
|
27
|
+
include_examples 'feature availability', method, [
|
28
|
+
['2.14.0', false],
|
29
|
+
['2.99.0.beta1', true],
|
30
|
+
['2.99.0', true],
|
31
|
+
['3.0.0.beta1', true],
|
32
|
+
['3.0.0', true]
|
33
|
+
]
|
34
|
+
end
|
35
|
+
|
36
|
+
[:one_liner_is_expected_available?].each do |method|
|
37
|
+
include_examples 'feature availability', method, [
|
38
|
+
['2.14.0', false],
|
39
|
+
['2.99.0.beta1', false],
|
40
|
+
['2.99.0.beta2', true],
|
41
|
+
['2.99.0', true],
|
42
|
+
['3.0.0.beta1', true],
|
43
|
+
['3.0.0', true]
|
44
|
+
]
|
45
|
+
end
|
46
|
+
|
47
|
+
[:receive_messages_available?].each do |method|
|
48
|
+
include_examples 'feature availability', method, [
|
49
|
+
['2.14.0', false],
|
50
|
+
['2.99.0.beta1', false],
|
51
|
+
['2.99.0', false],
|
52
|
+
['3.0.0.beta1', true],
|
53
|
+
['3.0.0', true]
|
54
|
+
]
|
55
|
+
end
|
56
|
+
|
57
|
+
[:receive_message_chain_available?].each do |method|
|
58
|
+
include_examples 'feature availability', method, [
|
59
|
+
['2.14.0', false],
|
60
|
+
['2.99.0.beta1', false],
|
61
|
+
['2.99.0', false],
|
62
|
+
['3.0.0.beta1', false],
|
63
|
+
['3.0.0.beta2', true],
|
64
|
+
['3.0.0', true]
|
65
|
+
]
|
42
66
|
end
|
43
67
|
end
|
44
68
|
end
|
@@ -143,7 +143,7 @@ module Transpec
|
|
143
143
|
end
|
144
144
|
end
|
145
145
|
|
146
|
-
it { should
|
146
|
+
it { should be expected }
|
147
147
|
end
|
148
148
|
|
149
149
|
describe '#non_monkey_patch_mock_available?' do
|
@@ -156,7 +156,7 @@ module Transpec
|
|
156
156
|
end
|
157
157
|
end
|
158
158
|
|
159
|
-
it { should
|
159
|
+
it { should be expected }
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
@@ -7,14 +7,7 @@ module Transpec
|
|
7
7
|
class Syntax
|
8
8
|
describe BeBoolean do
|
9
9
|
include_context 'parsed objects'
|
10
|
-
|
11
|
-
subject(:be_boolean_object) do
|
12
|
-
ast.each_node do |node|
|
13
|
-
next unless BeBoolean.target_node?(node)
|
14
|
-
return BeBoolean.new(node, source_rewriter)
|
15
|
-
end
|
16
|
-
fail 'No be_boolean node is found!'
|
17
|
-
end
|
10
|
+
include_context 'syntax object', BeBoolean, :be_boolean_object
|
18
11
|
|
19
12
|
let(:record) { be_boolean_object.report.records.last }
|
20
13
|
|
@@ -50,7 +43,7 @@ module Transpec
|
|
50
43
|
rewritten_source.should == expected_source
|
51
44
|
end
|
52
45
|
|
53
|
-
it 'adds record
|
46
|
+
it 'adds record `be_true` -> `be_truthy`' do
|
54
47
|
record.original_syntax.should == 'be_true'
|
55
48
|
record.converted_syntax.should == 'be_truthy'
|
56
49
|
end
|
@@ -81,7 +74,7 @@ module Transpec
|
|
81
74
|
rewritten_source.should == expected_source
|
82
75
|
end
|
83
76
|
|
84
|
-
it 'adds record
|
77
|
+
it 'adds record `be_false` -> `be_falsey`' do
|
85
78
|
record.original_syntax.should == 'be_false'
|
86
79
|
record.converted_syntax.should == 'be_falsey'
|
87
80
|
end
|
@@ -103,7 +96,7 @@ module Transpec
|
|
103
96
|
rewritten_source.should == expected_source
|
104
97
|
end
|
105
98
|
|
106
|
-
it 'adds record
|
99
|
+
it 'adds record `be_false` -> `be_falsy`' do
|
107
100
|
record.original_syntax.should == 'be_false'
|
108
101
|
record.converted_syntax.should == 'be_falsy'
|
109
102
|
end
|
@@ -141,7 +134,7 @@ module Transpec
|
|
141
134
|
rewritten_source.should == expected_source
|
142
135
|
end
|
143
136
|
|
144
|
-
it 'adds record
|
137
|
+
it 'adds record `be_true` -> `be true`' do
|
145
138
|
record.original_syntax.should == 'be_true'
|
146
139
|
record.converted_syntax.should == 'be true'
|
147
140
|
end
|
@@ -172,7 +165,7 @@ module Transpec
|
|
172
165
|
rewritten_source.should == expected_source
|
173
166
|
end
|
174
167
|
|
175
|
-
it 'adds record
|
168
|
+
it 'adds record `be_false` -> `be false`' do
|
176
169
|
record.original_syntax.should == 'be_false'
|
177
170
|
record.converted_syntax.should == 'be false'
|
178
171
|
end
|
@@ -7,14 +7,7 @@ module Transpec
|
|
7
7
|
class Syntax
|
8
8
|
describe BeClose do
|
9
9
|
include_context 'parsed objects'
|
10
|
-
|
11
|
-
subject(:be_close_object) do
|
12
|
-
ast.each_node do |node|
|
13
|
-
next unless BeClose.target_node?(node)
|
14
|
-
return BeClose.new(node, source_rewriter)
|
15
|
-
end
|
16
|
-
fail 'No be_close node is found!'
|
17
|
-
end
|
10
|
+
include_context 'syntax object', BeClose, :be_close_object
|
18
11
|
|
19
12
|
describe '#convert_to_be_within!' do
|
20
13
|
before do
|
@@ -46,7 +39,7 @@ module Transpec
|
|
46
39
|
rewritten_source.should == expected_source
|
47
40
|
end
|
48
41
|
|
49
|
-
it 'adds record
|
42
|
+
it 'adds record `be_close(expected, delta)` -> `be_within(delta).of(expected)`' do
|
50
43
|
record = be_close_object.report.records.first
|
51
44
|
record.original_syntax.should == 'be_close(expected, delta)'
|
52
45
|
record.converted_syntax.should == 'be_within(delta).of(expected)'
|
@@ -7,14 +7,7 @@ module Transpec
|
|
7
7
|
class Syntax
|
8
8
|
describe Double do
|
9
9
|
include_context 'parsed objects'
|
10
|
-
|
11
|
-
subject(:double_object) do
|
12
|
-
ast.each_node do |node|
|
13
|
-
next unless Double.target_node?(node)
|
14
|
-
return Double.new(node, source_rewriter)
|
15
|
-
end
|
16
|
-
fail 'No double node is found!'
|
17
|
-
end
|
10
|
+
include_context 'syntax object', Double, :double_object
|
18
11
|
|
19
12
|
describe '.target_node?' do
|
20
13
|
let(:send_node) do
|
@@ -151,7 +144,7 @@ module Transpec
|
|
151
144
|
rewritten_source.should == expected_source
|
152
145
|
end
|
153
146
|
|
154
|
-
it "adds record
|
147
|
+
it "adds record `#{method}('something')` -> `double('something')`" do
|
155
148
|
record = double_object.report.records.first
|
156
149
|
record.original_syntax.should == "#{method}('something')"
|
157
150
|
record.converted_syntax.should == "double('something')"
|
@@ -0,0 +1,249 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'transpec/syntax/example'
|
5
|
+
|
6
|
+
module Transpec
|
7
|
+
class Syntax
|
8
|
+
describe Example do
|
9
|
+
include_context 'parsed objects'
|
10
|
+
include_context 'syntax object', Example, :example_object
|
11
|
+
|
12
|
+
let(:record) { example_object.report.records.last }
|
13
|
+
|
14
|
+
describe '#convert!' do
|
15
|
+
before do
|
16
|
+
example_object.convert! unless example.metadata[:no_auto_convert]
|
17
|
+
end
|
18
|
+
|
19
|
+
(Util::EXAMPLE_METHODS + Util::HOOK_METHODS).each do |method|
|
20
|
+
context "when it is `#{method} do example end` form" do
|
21
|
+
let(:source) do
|
22
|
+
<<-END
|
23
|
+
describe 'example' do
|
24
|
+
#{method} do
|
25
|
+
do_something if example.metadata[:foo]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
END
|
29
|
+
end
|
30
|
+
|
31
|
+
let(:expected_source) do
|
32
|
+
<<-END
|
33
|
+
describe 'example' do
|
34
|
+
#{method} do |example|
|
35
|
+
do_something if example.metadata[:foo]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
END
|
39
|
+
end
|
40
|
+
|
41
|
+
it "converts into `#{method} do |example| example end` form" do
|
42
|
+
rewritten_source.should == expected_source
|
43
|
+
end
|
44
|
+
|
45
|
+
it "adds record `#{method} { example }` -> `#{method} { |example| example }`" do
|
46
|
+
record.original_syntax.should == "#{method} { example }"
|
47
|
+
record.converted_syntax.should == "#{method} { |example| example }"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
Util::HELPER_METHODS.each do |method|
|
53
|
+
context "when it is `#{method}(:name) do example end` form" do
|
54
|
+
let(:source) do
|
55
|
+
<<-END
|
56
|
+
describe 'example' do
|
57
|
+
#{method}(:name) do
|
58
|
+
do_something if example.metadata[:foo]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
END
|
62
|
+
end
|
63
|
+
|
64
|
+
let(:expected_source) do
|
65
|
+
<<-END
|
66
|
+
describe 'example' do
|
67
|
+
#{method}(:name) do |example|
|
68
|
+
do_something if example.metadata[:foo]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
END
|
72
|
+
end
|
73
|
+
|
74
|
+
it "converts into `#{method}(:name) do |example| example end` form" do
|
75
|
+
rewritten_source.should == expected_source
|
76
|
+
end
|
77
|
+
|
78
|
+
it "adds record `#{method}(:name) { example }` -> `#{method}(:name) { |example| example }`" do
|
79
|
+
record.original_syntax.should == "#{method}(:name) { example }"
|
80
|
+
record.converted_syntax.should == "#{method}(:name) { |example| example }"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'when it is `after { example }` form' do
|
86
|
+
let(:source) do
|
87
|
+
<<-END
|
88
|
+
describe 'example' do
|
89
|
+
after {
|
90
|
+
do_something if example.metadata[:foo]
|
91
|
+
}
|
92
|
+
end
|
93
|
+
END
|
94
|
+
end
|
95
|
+
|
96
|
+
let(:expected_source) do
|
97
|
+
<<-END
|
98
|
+
describe 'example' do
|
99
|
+
after { |example|
|
100
|
+
do_something if example.metadata[:foo]
|
101
|
+
}
|
102
|
+
end
|
103
|
+
END
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'converts into `after { |example| example }` form' do
|
107
|
+
rewritten_source.should == expected_source
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context 'when it is `after do running_example end` form' do
|
112
|
+
let(:source) do
|
113
|
+
<<-END
|
114
|
+
describe 'example' do
|
115
|
+
after do
|
116
|
+
do_something if running_example.metadata[:foo]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
END
|
120
|
+
end
|
121
|
+
|
122
|
+
let(:expected_source) do
|
123
|
+
<<-END
|
124
|
+
describe 'example' do
|
125
|
+
after do |example|
|
126
|
+
do_something if example.metadata[:foo]
|
127
|
+
end
|
128
|
+
end
|
129
|
+
END
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'converts into `after do |example| example end` form' do
|
133
|
+
rewritten_source.should == expected_source
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
context 'when the wrapper block contains multiple invocation of `example`', :no_auto_convert do
|
138
|
+
let(:source) do
|
139
|
+
<<-END
|
140
|
+
describe 'example' do
|
141
|
+
after do
|
142
|
+
do_something if example.metadata[:foo]
|
143
|
+
puts example.description
|
144
|
+
end
|
145
|
+
end
|
146
|
+
END
|
147
|
+
end
|
148
|
+
|
149
|
+
let(:expected_source) do
|
150
|
+
<<-END
|
151
|
+
describe 'example' do
|
152
|
+
after do |example|
|
153
|
+
do_something if example.metadata[:foo]
|
154
|
+
puts example.description
|
155
|
+
end
|
156
|
+
end
|
157
|
+
END
|
158
|
+
end
|
159
|
+
|
160
|
+
let(:example_objects) do
|
161
|
+
ast.each_node.reduce([]) do |objects, node|
|
162
|
+
objects << Example.new(node, source_rewriter, runtime_data) if Example.target_node?(node)
|
163
|
+
objects
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'adds only a block argument' do
|
168
|
+
example_objects.size.should eq(2)
|
169
|
+
example_objects.each(&:convert!)
|
170
|
+
rewritten_source.should == expected_source
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
context 'when it is `around do |ex| example end` form' do
|
175
|
+
let(:source) do
|
176
|
+
<<-END
|
177
|
+
describe 'example' do
|
178
|
+
around do |ex|
|
179
|
+
do_something if example.metadata[:foo]
|
180
|
+
end
|
181
|
+
end
|
182
|
+
END
|
183
|
+
end
|
184
|
+
|
185
|
+
let(:expected_source) do
|
186
|
+
<<-END
|
187
|
+
describe 'example' do
|
188
|
+
around do |ex|
|
189
|
+
do_something if ex.metadata[:foo]
|
190
|
+
end
|
191
|
+
end
|
192
|
+
END
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'converts into `around do |ex| ex end` form' do
|
196
|
+
rewritten_source.should == expected_source
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
context 'when it is `def helper_method example; end` form' do
|
201
|
+
let(:source) do
|
202
|
+
<<-END
|
203
|
+
module Helper
|
204
|
+
def display_description
|
205
|
+
puts example.description
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
describe 'example' do
|
210
|
+
include Helper
|
211
|
+
|
212
|
+
after do
|
213
|
+
display_description
|
214
|
+
end
|
215
|
+
end
|
216
|
+
END
|
217
|
+
end
|
218
|
+
|
219
|
+
let(:expected_source) do
|
220
|
+
<<-END
|
221
|
+
module Helper
|
222
|
+
def display_description
|
223
|
+
puts RSpec.current_example.description
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
describe 'example' do
|
228
|
+
include Helper
|
229
|
+
|
230
|
+
after do
|
231
|
+
display_description
|
232
|
+
end
|
233
|
+
end
|
234
|
+
END
|
235
|
+
end
|
236
|
+
|
237
|
+
it 'converts into `def helper_method RSpec.current_example; end` form' do
|
238
|
+
rewritten_source.should == expected_source
|
239
|
+
end
|
240
|
+
|
241
|
+
it 'adds record `def helper_method example; end` -> `def helper_method RSpec.current_example; end`' do
|
242
|
+
record.original_syntax.should == 'def helper_method example; end'
|
243
|
+
record.converted_syntax.should == 'def helper_method RSpec.current_example; end'
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|