transpec 0.0.9 → 0.0.10
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/CHANGELOG.md +5 -0
- data/README.md +30 -14
- data/README.md.erb +30 -14
- data/lib/transpec/ast/builder.rb +13 -0
- data/lib/transpec/ast/node.rb +37 -0
- data/lib/transpec/cli.rb +1 -1
- data/lib/transpec/rewriter.rb +7 -5
- data/lib/transpec/syntax/able_to_allow_no_message.rb +73 -0
- data/lib/transpec/syntax/{any_instanceable.rb → able_to_target_any_instance.rb} +1 -1
- data/lib/transpec/syntax/method_stub.rb +3 -3
- data/lib/transpec/syntax/should_receive.rb +11 -9
- data/lib/transpec/version.rb +1 -1
- data/spec/support/shared_context.rb +4 -3
- data/spec/transpec/ast/node_spec.rb +106 -0
- data/spec/transpec/cli_spec.rb +1 -1
- data/spec/transpec/rewriter_spec.rb +20 -20
- data/spec/transpec/syntax/method_stub_spec.rb +44 -9
- data/spec/transpec/syntax/should_receive_spec.rb +79 -9
- metadata +8 -6
- data/lib/transpec/syntax/any_number_of_timesable.rb +0 -42
- data/spec/support/ast_helper.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e92704929f93992b64fdcb82e658214425bd23cb
|
4
|
+
data.tar.gz: c224583a7f8d0e0c44bf7f3a715d1c3aeff090ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1da1c8cd1bd30a65f25836b87e7ee6454158eeb7f69462b54e13614cbbc4af90002f1625af5077b5868c249498d356efe6dfc06a4b79c05c5ebe497afae015db
|
7
|
+
data.tar.gz: 758cb3a86ee46ea070c0a03c814d9c9aa81a82b853e950b5e2ba508ba101df78d63aa24092044609cb52fdc23a5fff90c0646908017d7b1a5c9cbfbb4b1e3748
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,11 @@
|
|
2
2
|
|
3
3
|
## Master
|
4
4
|
|
5
|
+
## v0.0.10
|
6
|
+
|
7
|
+
* Support conversion of `at_least(0)`
|
8
|
+
* Add `-f` shorthand for `--force` option
|
9
|
+
|
5
10
|
## v0.0.9
|
6
11
|
|
7
12
|
* Use `--disable allow_to_receive` to disable conversion from `obj.should_receive(:foo).any_number_of_times` to `allow(obj).to receive(:foo)` (Previously it was `--disable expect_to_receive`)
|
data/README.md
CHANGED
@@ -103,6 +103,7 @@ Before converting your specs:
|
|
103
103
|
|
104
104
|
* Make sure your project has `rspec` gem dependency `2.14` or later. If not, change your `*.gemspec` or `Gemfile` to do so.
|
105
105
|
* Run `rspec` and check if all the specs pass.
|
106
|
+
* Ensure the Git repository is clean. (You don't want to mix up your changes and Transpec's changes, right?)
|
106
107
|
|
107
108
|
Then, run `transpec` with no arguments in the project root directory:
|
108
109
|
|
@@ -123,7 +124,7 @@ After the conversion, run `rspec` again and check if all pass.
|
|
123
124
|
|
124
125
|
## Options
|
125
126
|
|
126
|
-
###
|
127
|
+
### `-f/--force`
|
127
128
|
|
128
129
|
Force processing even if the current Git repository is not clean.
|
129
130
|
|
@@ -222,7 +223,8 @@ expect(obj).not_to matcher
|
|
222
223
|
expect(obj).to_not matcher # with `--negative-form to_not`
|
223
224
|
```
|
224
225
|
|
225
|
-
Disabled by: `--disable expect_to_matcher`
|
226
|
+
* Disabled by: `--disable expect_to_matcher`
|
227
|
+
* Related Information: [Myron Marston » RSpec's New Expectation Syntax](http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax)
|
226
228
|
|
227
229
|
### Operator matchers
|
228
230
|
|
@@ -242,6 +244,8 @@ expect('string').to match(/^str/)
|
|
242
244
|
expect([1, 2, 3]).to match_array([2, 1, 3])
|
243
245
|
```
|
244
246
|
|
247
|
+
* Related Information: [Myron Marston » RSpec's New Expectation Syntax](http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax#almost_all_matchers_are_supported)
|
248
|
+
|
245
249
|
### `be_close` matcher
|
246
250
|
|
247
251
|
```ruby
|
@@ -252,9 +256,10 @@ expect([1, 2, 3]).to match_array([2, 1, 3])
|
|
252
256
|
(1.0 / 3.0).should be_within(0.001).of(0.333)
|
253
257
|
```
|
254
258
|
|
255
|
-
Disabled by: `--disable deprecated`
|
259
|
+
* Disabled by: `--disable deprecated`
|
260
|
+
* Related Information: [New be within matcher and RSpec.deprecate fix · rspec/rspec-expectations](https://github.com/rspec/rspec-expectations/pull/32)
|
256
261
|
|
257
|
-
###
|
262
|
+
### Expectations on Proc
|
258
263
|
|
259
264
|
```ruby
|
260
265
|
# Target
|
@@ -266,7 +271,8 @@ proc { do_something }.should raise_error
|
|
266
271
|
expect { do_something }.to raise_error
|
267
272
|
```
|
268
273
|
|
269
|
-
Disabled by: `--disable expect_to_matcher`
|
274
|
+
* Disabled by: `--disable expect_to_matcher`
|
275
|
+
* Related Information: [Myron Marston » RSpec's New Expectation Syntax](http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax#unification_of_block_vs_value_syntaxes)
|
270
276
|
|
271
277
|
### Negative error expectations with specific error
|
272
278
|
|
@@ -282,7 +288,8 @@ expect { do_something }.not_to raise_error
|
|
282
288
|
lambda { do_something }.should_not raise_error # with `--disable expect_to_matcher`
|
283
289
|
```
|
284
290
|
|
285
|
-
Disabled by: `--disable deprecated`
|
291
|
+
* Disabled by: `--disable deprecated`
|
292
|
+
* Related Information: [Consider deprecating `expect { }.not_to raise_error(SpecificErrorClass)` · rspec/rspec-expectations](https://github.com/rspec/rspec-expectations/issues/231)
|
286
293
|
|
287
294
|
### Message expectations
|
288
295
|
|
@@ -296,15 +303,18 @@ expect(obj).to receive(:foo)
|
|
296
303
|
expect_any_instance_of(SomeClass).to receive(:foo)
|
297
304
|
```
|
298
305
|
|
299
|
-
Disabled by: `--disable expect_to_receive`
|
306
|
+
* Disabled by: `--disable expect_to_receive`
|
307
|
+
* Related Information: [RSpec's new message expectation syntax - Tea is awesome.](http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/)
|
300
308
|
|
301
|
-
### Message expectations
|
309
|
+
### Message expectations that are actually method stubs
|
302
310
|
|
303
311
|
```ruby
|
304
312
|
# Target
|
305
313
|
obj.should_receive(:foo).any_number_of_times
|
314
|
+
obj.should_receive(:foo).at_least(0)
|
306
315
|
|
307
316
|
SomeClass.any_instance.should_receive(:foo).any_number_of_times
|
317
|
+
SomeClass.any_instance.should_receive(:foo).at_least(0)
|
308
318
|
|
309
319
|
# Converted
|
310
320
|
allow(obj).to receive(:foo)
|
@@ -314,7 +324,8 @@ allow_any_instance_of(SomeClass).to receive(:foo)
|
|
314
324
|
SomeClass.any_instance.stub(:foo) # with `--disable allow_to_receive`
|
315
325
|
```
|
316
326
|
|
317
|
-
Disabled by: `--disable deprecated`
|
327
|
+
* Disabled by: `--disable deprecated`
|
328
|
+
* Related Information: [Don't allow at_least(0) · rspec/rspec-mocks](https://github.com/rspec/rspec-mocks/issues/133)
|
318
329
|
|
319
330
|
### Method stubs
|
320
331
|
|
@@ -339,7 +350,8 @@ allow(obj).to receive(:bar).and_return(2)
|
|
339
350
|
allow_any_instance_of(SomeClass).to receive(:foo)
|
340
351
|
```
|
341
352
|
|
342
|
-
Disabled by: `--disable allow_to_receive`
|
353
|
+
* Disabled by: `--disable allow_to_receive`
|
354
|
+
* Related Information: [RSpec's new message expectation syntax - Tea is awesome.](http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/)
|
343
355
|
|
344
356
|
### Deprecated method stub aliases
|
345
357
|
|
@@ -353,20 +365,23 @@ obj.stub(:foo) # with `--disable allow_to_receive`
|
|
353
365
|
obj.unstub(:foo)
|
354
366
|
```
|
355
367
|
|
356
|
-
Disabled by: `--disable deprecated`
|
368
|
+
* Disabled by: `--disable deprecated`
|
369
|
+
* Related Information: [Consider deprecating and/or removing #stub! and #unstub! at some point · rspec/rspec-mocks](https://github.com/rspec/rspec-mocks/issues/122)
|
357
370
|
|
358
|
-
### Method stubs with
|
371
|
+
### Method stubs with deprecated specification of number of times
|
359
372
|
|
360
373
|
```ruby
|
361
374
|
# Target
|
362
375
|
obj.stub(:foo).any_number_of_times
|
376
|
+
obj.stub(:foo).at_least(0)
|
363
377
|
|
364
378
|
# Converted
|
365
379
|
allow(obj).to receive(:foo)
|
366
380
|
obj.stub(:foo) # with `--disable allow_to_receive`
|
367
381
|
```
|
368
382
|
|
369
|
-
Disabled by: `--disable deprecated`
|
383
|
+
* Disabled by: `--disable deprecated`
|
384
|
+
* Related Information: [Don't allow at_least(0) · rspec/rspec-mocks](https://github.com/rspec/rspec-mocks/issues/133)
|
370
385
|
|
371
386
|
### Deprecated test double aliases
|
372
387
|
|
@@ -379,7 +394,8 @@ mock('something')
|
|
379
394
|
double('something')
|
380
395
|
```
|
381
396
|
|
382
|
-
Disabled by: `--disable deprecated`
|
397
|
+
* Disabled by: `--disable deprecated`
|
398
|
+
* Related Information: [Deprecate "stub" for doubles · rspec/rspec-mocks](https://github.com/rspec/rspec-mocks/issues/214)
|
383
399
|
|
384
400
|
## Compatibility
|
385
401
|
|
data/README.md.erb
CHANGED
@@ -76,6 +76,7 @@ Before converting your specs:
|
|
76
76
|
|
77
77
|
* Make sure your project has `rspec` gem dependency `<%= rspec_version %>` or later. If not, change your `*.gemspec` or `Gemfile` to do so.
|
78
78
|
* Run `rspec` and check if all the specs pass.
|
79
|
+
* Ensure the Git repository is clean. (You don't want to mix up your changes and Transpec's changes, right?)
|
79
80
|
|
80
81
|
Then, run `transpec` with no arguments in the project root directory:
|
81
82
|
|
@@ -96,7 +97,7 @@ After the conversion, run `rspec` again and check if all pass.
|
|
96
97
|
|
97
98
|
## Options
|
98
99
|
|
99
|
-
###
|
100
|
+
### `-f/--force`
|
100
101
|
|
101
102
|
Force processing even if the current Git repository is not clean.
|
102
103
|
|
@@ -218,7 +219,8 @@ expect(obj).not_to matcher
|
|
218
219
|
expect(obj).to_not matcher # with `--negative-form to_not`
|
219
220
|
```
|
220
221
|
|
221
|
-
Disabled by: `--disable expect_to_matcher`
|
222
|
+
* Disabled by: `--disable expect_to_matcher`
|
223
|
+
* Related Information: [Myron Marston » RSpec's New Expectation Syntax](http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax)
|
222
224
|
|
223
225
|
### Operator matchers
|
224
226
|
|
@@ -238,6 +240,8 @@ expect('string').to match(/^str/)
|
|
238
240
|
expect([1, 2, 3]).to match_array([2, 1, 3])
|
239
241
|
```
|
240
242
|
|
243
|
+
* Related Information: [Myron Marston » RSpec's New Expectation Syntax](http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax#almost_all_matchers_are_supported)
|
244
|
+
|
241
245
|
### `be_close` matcher
|
242
246
|
|
243
247
|
```ruby
|
@@ -248,9 +252,10 @@ expect([1, 2, 3]).to match_array([2, 1, 3])
|
|
248
252
|
(1.0 / 3.0).should be_within(0.001).of(0.333)
|
249
253
|
```
|
250
254
|
|
251
|
-
Disabled by: `--disable deprecated`
|
255
|
+
* Disabled by: `--disable deprecated`
|
256
|
+
* Related Information: [New be within matcher and RSpec.deprecate fix · rspec/rspec-expectations](https://github.com/rspec/rspec-expectations/pull/32)
|
252
257
|
|
253
|
-
###
|
258
|
+
### Expectations on Proc
|
254
259
|
|
255
260
|
```ruby
|
256
261
|
# Target
|
@@ -262,7 +267,8 @@ proc { do_something }.should raise_error
|
|
262
267
|
expect { do_something }.to raise_error
|
263
268
|
```
|
264
269
|
|
265
|
-
Disabled by: `--disable expect_to_matcher`
|
270
|
+
* Disabled by: `--disable expect_to_matcher`
|
271
|
+
* Related Information: [Myron Marston » RSpec's New Expectation Syntax](http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax#unification_of_block_vs_value_syntaxes)
|
266
272
|
|
267
273
|
### Negative error expectations with specific error
|
268
274
|
|
@@ -278,7 +284,8 @@ expect { do_something }.not_to raise_error
|
|
278
284
|
lambda { do_something }.should_not raise_error # with `--disable expect_to_matcher`
|
279
285
|
```
|
280
286
|
|
281
|
-
Disabled by: `--disable deprecated`
|
287
|
+
* Disabled by: `--disable deprecated`
|
288
|
+
* Related Information: [Consider deprecating `expect { }.not_to raise_error(SpecificErrorClass)` · rspec/rspec-expectations](https://github.com/rspec/rspec-expectations/issues/231)
|
282
289
|
|
283
290
|
### Message expectations
|
284
291
|
|
@@ -292,15 +299,18 @@ expect(obj).to receive(:foo)
|
|
292
299
|
expect_any_instance_of(SomeClass).to receive(:foo)
|
293
300
|
```
|
294
301
|
|
295
|
-
Disabled by: `--disable expect_to_receive`
|
302
|
+
* Disabled by: `--disable expect_to_receive`
|
303
|
+
* Related Information: [RSpec's new message expectation syntax - Tea is awesome.](http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/)
|
296
304
|
|
297
|
-
### Message expectations
|
305
|
+
### Message expectations that are actually method stubs
|
298
306
|
|
299
307
|
```ruby
|
300
308
|
# Target
|
301
309
|
obj.should_receive(:foo).any_number_of_times
|
310
|
+
obj.should_receive(:foo).at_least(0)
|
302
311
|
|
303
312
|
SomeClass.any_instance.should_receive(:foo).any_number_of_times
|
313
|
+
SomeClass.any_instance.should_receive(:foo).at_least(0)
|
304
314
|
|
305
315
|
# Converted
|
306
316
|
allow(obj).to receive(:foo)
|
@@ -310,7 +320,8 @@ allow_any_instance_of(SomeClass).to receive(:foo)
|
|
310
320
|
SomeClass.any_instance.stub(:foo) # with `--disable allow_to_receive`
|
311
321
|
```
|
312
322
|
|
313
|
-
Disabled by: `--disable deprecated`
|
323
|
+
* Disabled by: `--disable deprecated`
|
324
|
+
* Related Information: [Don't allow at_least(0) · rspec/rspec-mocks](https://github.com/rspec/rspec-mocks/issues/133)
|
314
325
|
|
315
326
|
### Method stubs
|
316
327
|
|
@@ -335,7 +346,8 @@ allow(obj).to receive(:bar).and_return(2)
|
|
335
346
|
allow_any_instance_of(SomeClass).to receive(:foo)
|
336
347
|
```
|
337
348
|
|
338
|
-
Disabled by: `--disable allow_to_receive`
|
349
|
+
* Disabled by: `--disable allow_to_receive`
|
350
|
+
* Related Information: [RSpec's new message expectation syntax - Tea is awesome.](http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/)
|
339
351
|
|
340
352
|
### Deprecated method stub aliases
|
341
353
|
|
@@ -349,20 +361,23 @@ obj.stub(:foo) # with `--disable allow_to_receive`
|
|
349
361
|
obj.unstub(:foo)
|
350
362
|
```
|
351
363
|
|
352
|
-
Disabled by: `--disable deprecated`
|
364
|
+
* Disabled by: `--disable deprecated`
|
365
|
+
* Related Information: [Consider deprecating and/or removing #stub! and #unstub! at some point · rspec/rspec-mocks](https://github.com/rspec/rspec-mocks/issues/122)
|
353
366
|
|
354
|
-
### Method stubs with
|
367
|
+
### Method stubs with deprecated specification of number of times
|
355
368
|
|
356
369
|
```ruby
|
357
370
|
# Target
|
358
371
|
obj.stub(:foo).any_number_of_times
|
372
|
+
obj.stub(:foo).at_least(0)
|
359
373
|
|
360
374
|
# Converted
|
361
375
|
allow(obj).to receive(:foo)
|
362
376
|
obj.stub(:foo) # with `--disable allow_to_receive`
|
363
377
|
```
|
364
378
|
|
365
|
-
Disabled by: `--disable deprecated`
|
379
|
+
* Disabled by: `--disable deprecated`
|
380
|
+
* Related Information: [Don't allow at_least(0) · rspec/rspec-mocks](https://github.com/rspec/rspec-mocks/issues/133)
|
366
381
|
|
367
382
|
### Deprecated test double aliases
|
368
383
|
|
@@ -375,7 +390,8 @@ mock('something')
|
|
375
390
|
double('something')
|
376
391
|
```
|
377
392
|
|
378
|
-
Disabled by: `--disable deprecated`
|
393
|
+
* Disabled by: `--disable deprecated`
|
394
|
+
* Related Information: [Deprecate "stub" for doubles · rspec/rspec-mocks](https://github.com/rspec/rspec-mocks/issues/214)
|
379
395
|
|
380
396
|
## Compatibility
|
381
397
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'parser'
|
4
|
+
|
5
|
+
module Transpec
|
6
|
+
module AST
|
7
|
+
class Node < Parser::AST::Node
|
8
|
+
def each_child_node
|
9
|
+
return to_enum(__method__) unless block_given?
|
10
|
+
|
11
|
+
children.each do |child|
|
12
|
+
next unless child.is_a?(self.class)
|
13
|
+
yield child
|
14
|
+
end
|
15
|
+
|
16
|
+
self
|
17
|
+
end
|
18
|
+
|
19
|
+
def child_nodes
|
20
|
+
each_child_node.to_a
|
21
|
+
end
|
22
|
+
|
23
|
+
def each_descendent_node(&block)
|
24
|
+
return to_enum(__method__) unless block_given?
|
25
|
+
|
26
|
+
each_child_node do |child_node|
|
27
|
+
yield child_node
|
28
|
+
child_node.each_child_node(&block)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def descendent_nodes
|
33
|
+
each_descendent_node.to_a
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/transpec/cli.rb
CHANGED
data/lib/transpec/rewriter.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
require 'transpec/ast/builder'
|
3
4
|
require 'transpec/ast/scanner'
|
4
5
|
require 'transpec/configuration'
|
5
6
|
require 'transpec/syntax'
|
@@ -54,7 +55,8 @@ module Transpec
|
|
54
55
|
end
|
55
56
|
|
56
57
|
def parse(source_buffer)
|
57
|
-
|
58
|
+
builder = AST::Builder.new
|
59
|
+
parser = Parser::CurrentRuby.new(builder)
|
58
60
|
ast = parser.parse(source_buffer)
|
59
61
|
ast
|
60
62
|
end
|
@@ -99,12 +101,12 @@ module Transpec
|
|
99
101
|
end
|
100
102
|
|
101
103
|
def process_should_receive(should_receive)
|
102
|
-
if should_receive.
|
104
|
+
if should_receive.useless_expectation?
|
103
105
|
if @configuration.replace_deprecated_method?
|
104
106
|
if @configuration.convert_to_allow_to_receive?
|
105
|
-
should_receive.
|
107
|
+
should_receive.allowize_useless_expectation!(@configuration.negative_form_of_to)
|
106
108
|
else
|
107
|
-
should_receive.
|
109
|
+
should_receive.stubize_useless_expectation!
|
108
110
|
end
|
109
111
|
elsif @configuration.convert_to_expect_to_receive?
|
110
112
|
should_receive.expectize!(@configuration.negative_form_of_to)
|
@@ -125,7 +127,7 @@ module Transpec
|
|
125
127
|
method_stub.replace_deprecated_method!
|
126
128
|
end
|
127
129
|
|
128
|
-
method_stub.
|
130
|
+
method_stub.remove_allowance_for_no_message! if @configuration.replace_deprecated_method?
|
129
131
|
end
|
130
132
|
|
131
133
|
def process_be_close(be_close)
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'transpec/syntax'
|
4
|
+
|
5
|
+
module Transpec
|
6
|
+
class Syntax
|
7
|
+
module AbleToAllowNoMessage
|
8
|
+
include ::AST::Sexp
|
9
|
+
|
10
|
+
def allow_no_message?
|
11
|
+
any_number_of_times? || at_least_zero?
|
12
|
+
end
|
13
|
+
|
14
|
+
def remove_allowance_for_no_message!
|
15
|
+
remove_any_number_of_times!
|
16
|
+
remove_at_least_zero!
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def any_number_of_times?
|
22
|
+
!any_number_of_times_node.nil?
|
23
|
+
end
|
24
|
+
|
25
|
+
def at_least_zero?
|
26
|
+
!at_least_zero_node.nil?
|
27
|
+
end
|
28
|
+
|
29
|
+
def remove_any_number_of_times!
|
30
|
+
return unless any_number_of_times?
|
31
|
+
remove_dot_and_method!(any_number_of_times_node)
|
32
|
+
end
|
33
|
+
|
34
|
+
def remove_at_least_zero!
|
35
|
+
return unless at_least_zero?
|
36
|
+
remove_dot_and_method!(at_least_zero_node)
|
37
|
+
end
|
38
|
+
|
39
|
+
def remove_dot_and_method!(send_node)
|
40
|
+
map = send_node.loc
|
41
|
+
dot_and_method_range = map.dot.join(map.expression.end)
|
42
|
+
remove(dot_and_method_range)
|
43
|
+
end
|
44
|
+
|
45
|
+
def any_number_of_times_node
|
46
|
+
each_following_chained_method_node do |chained_node|
|
47
|
+
method_name = chained_node.children[1]
|
48
|
+
return chained_node if method_name == :any_number_of_times
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def at_least_zero_node
|
53
|
+
each_following_chained_method_node do |chained_node|
|
54
|
+
_, method_name, arg_node = *chained_node
|
55
|
+
next unless method_name == :at_least
|
56
|
+
return chained_node if arg_node == s(:int, 0)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def each_following_chained_method_node
|
61
|
+
return to_enum(__method__) unless block_given?
|
62
|
+
|
63
|
+
@ancestor_nodes.reverse.reduce(@node) do |child_node, parent_node|
|
64
|
+
return unless [:send, :block].include?(parent_node.type)
|
65
|
+
return unless parent_node.children.first == child_node
|
66
|
+
yield parent_node, child_node
|
67
|
+
parent_node
|
68
|
+
end
|
69
|
+
nil
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
3
|
require 'transpec/syntax'
|
4
|
-
require 'transpec/syntax/
|
5
|
-
require 'transpec/syntax/
|
4
|
+
require 'transpec/syntax/able_to_allow_no_message'
|
5
|
+
require 'transpec/syntax/able_to_target_any_instance'
|
6
6
|
require 'transpec/util'
|
7
7
|
require 'English'
|
8
8
|
|
9
9
|
module Transpec
|
10
10
|
class Syntax
|
11
11
|
class MethodStub < Syntax
|
12
|
-
include
|
12
|
+
include AbleToAllowNoMessage, AbleToTargetAnyInstance, Util
|
13
13
|
|
14
14
|
RECEIVER_CLASS_WHITELIST = ['Typhoeus']
|
15
15
|
|
@@ -2,13 +2,15 @@
|
|
2
2
|
|
3
3
|
require 'transpec/syntax'
|
4
4
|
require 'transpec/syntax/expectizable'
|
5
|
-
require 'transpec/syntax/
|
6
|
-
require 'transpec/syntax/
|
5
|
+
require 'transpec/syntax/able_to_allow_no_message'
|
6
|
+
require 'transpec/syntax/able_to_target_any_instance'
|
7
7
|
|
8
8
|
module Transpec
|
9
9
|
class Syntax
|
10
10
|
class ShouldReceive < Syntax
|
11
|
-
include Expectizable,
|
11
|
+
include Expectizable, AbleToAllowNoMessage, AbleToTargetAnyInstance
|
12
|
+
|
13
|
+
alias_method :useless_expectation?, :allow_no_message?
|
12
14
|
|
13
15
|
def positive?
|
14
16
|
method_name == :should_receive
|
@@ -18,18 +20,18 @@ module Transpec
|
|
18
20
|
convert_to_syntax!('expect', negative_form)
|
19
21
|
end
|
20
22
|
|
21
|
-
def
|
22
|
-
return unless
|
23
|
+
def allowize_useless_expectation!(negative_form = 'not_to')
|
24
|
+
return unless useless_expectation?
|
23
25
|
|
24
26
|
convert_to_syntax!('allow', negative_form)
|
25
|
-
|
27
|
+
remove_allowance_for_no_message!
|
26
28
|
end
|
27
29
|
|
28
|
-
def
|
29
|
-
return unless
|
30
|
+
def stubize_useless_expectation!(negative_form = 'not_to')
|
31
|
+
return unless useless_expectation?
|
30
32
|
|
31
33
|
replace(selector_range, 'stub')
|
32
|
-
|
34
|
+
remove_allowance_for_no_message!
|
33
35
|
end
|
34
36
|
|
35
37
|
private
|
data/lib/transpec/version.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
require 'transpec/ast/builder'
|
3
4
|
require 'transpec/ast/scanner'
|
4
5
|
require 'transpec/syntax/should'
|
5
6
|
require 'parser'
|
@@ -15,9 +16,9 @@ shared_context 'parsed objects' do
|
|
15
16
|
end
|
16
17
|
|
17
18
|
let(:ast) do
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
builder = Transpec::AST::Builder.new
|
20
|
+
parser = Parser::CurrentRuby.new(builder)
|
21
|
+
parser.parse(source_buffer)
|
21
22
|
end
|
22
23
|
|
23
24
|
let(:source_rewriter) { Parser::Source::Rewriter.new(source_buffer) }
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'transpec/ast/node'
|
5
|
+
|
6
|
+
module Transpec
|
7
|
+
module AST
|
8
|
+
describe Node do
|
9
|
+
include ::AST::Sexp
|
10
|
+
include_context 'parsed objects'
|
11
|
+
|
12
|
+
let(:source) do
|
13
|
+
<<-END
|
14
|
+
def some_method(arg_a, arg_b)
|
15
|
+
do_something(arg_a)
|
16
|
+
end
|
17
|
+
END
|
18
|
+
end
|
19
|
+
|
20
|
+
# (def :some_method
|
21
|
+
# (args
|
22
|
+
# (arg :arg_a)
|
23
|
+
# (arg :arg_b))
|
24
|
+
# (send nil :do_something
|
25
|
+
# (lvar :arg_a)))
|
26
|
+
|
27
|
+
describe '#each_child_node' do
|
28
|
+
let(:expected_types) { [:args, :send] }
|
29
|
+
|
30
|
+
context 'when a block is given' do
|
31
|
+
it 'yields each child node' do
|
32
|
+
index = 0
|
33
|
+
|
34
|
+
ast.each_child_node do |node|
|
35
|
+
expected_type = expected_types[index]
|
36
|
+
node.type.should == expected_type
|
37
|
+
index += 1
|
38
|
+
end
|
39
|
+
|
40
|
+
index.should_not == 0
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'returns itself' do
|
44
|
+
returned_value = ast.each_child_node { }
|
45
|
+
returned_value.should be(ast)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when no block is given' do
|
50
|
+
it 'returns enumerator' do
|
51
|
+
ast.each_child_node.should be_a(Enumerator)
|
52
|
+
end
|
53
|
+
|
54
|
+
describe 'the returned enumerator' do
|
55
|
+
it 'enumerates the child nodes' do
|
56
|
+
enumerator = ast.each_child_node
|
57
|
+
|
58
|
+
expected_types.each do |expected_type|
|
59
|
+
enumerator.next.type.should == expected_type
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '#each_descendent_node' do
|
67
|
+
let(:expected_types) { [:args, :arg, :arg, :send, :lvar] }
|
68
|
+
|
69
|
+
context 'when a block is given' do
|
70
|
+
it 'yields each descendent node with depth first order' do
|
71
|
+
index = 0
|
72
|
+
|
73
|
+
ast.each_descendent_node do |node|
|
74
|
+
expected_type = expected_types[index]
|
75
|
+
node.type.should == expected_type
|
76
|
+
index += 1
|
77
|
+
end
|
78
|
+
|
79
|
+
index.should_not == 0
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'returns itself' do
|
83
|
+
returned_value = ast.each_descendent_node { }
|
84
|
+
returned_value.should be(ast)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'when no block is given' do
|
89
|
+
it 'returns enumerator' do
|
90
|
+
ast.each_descendent_node.should be_a(Enumerator)
|
91
|
+
end
|
92
|
+
|
93
|
+
describe 'the returned enumerator' do
|
94
|
+
it 'enumerates the child nodes' do
|
95
|
+
enumerator = ast.each_descendent_node
|
96
|
+
|
97
|
+
expected_types.each do |expected_type|
|
98
|
+
enumerator.next.type.should == expected_type
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
data/spec/transpec/cli_spec.rb
CHANGED
@@ -172,8 +172,8 @@ module Transpec
|
|
172
172
|
end
|
173
173
|
end
|
174
174
|
|
175
|
-
context 'when ShouldReceive#
|
176
|
-
before { should_receive_object.stub(:
|
175
|
+
context 'when ShouldReceive#useless_expectation? returns true' do
|
176
|
+
before { should_receive_object.stub(:useless_expectation?).and_return(true) }
|
177
177
|
|
178
178
|
context 'and Configuration#replace_deprecated_method? is true' do
|
179
179
|
before { configuration.replace_deprecated_method = true }
|
@@ -188,8 +188,8 @@ module Transpec
|
|
188
188
|
context 'and Configuration#negative_form_of_to is "not_to"' do
|
189
189
|
before { configuration.negative_form_of_to = 'not_to' }
|
190
190
|
|
191
|
-
it 'invokes ShouldReceive#
|
192
|
-
should_receive_object.should_receive(:
|
191
|
+
it 'invokes ShouldReceive#allowize_useless_expectation! with "not_to"' do
|
192
|
+
should_receive_object.should_receive(:allowize_useless_expectation!).with('not_to')
|
193
193
|
rewriter.process_should_receive(should_receive_object)
|
194
194
|
end
|
195
195
|
end
|
@@ -197,8 +197,8 @@ module Transpec
|
|
197
197
|
context 'and Configuration#negative_form_of_to is "to_not"' do
|
198
198
|
before { configuration.negative_form_of_to = 'to_not' }
|
199
199
|
|
200
|
-
it 'invokes ShouldReceive#
|
201
|
-
should_receive_object.should_receive(:
|
200
|
+
it 'invokes ShouldReceive#allowize_useless_expectation! with "to_not"' do
|
201
|
+
should_receive_object.should_receive(:allowize_useless_expectation!).with('to_not')
|
202
202
|
rewriter.process_should_receive(should_receive_object)
|
203
203
|
end
|
204
204
|
end
|
@@ -213,8 +213,8 @@ module Transpec
|
|
213
213
|
context "and Configuration#convert_to_expect_to_receive? is #{convert_to_expect_to_receive}" do
|
214
214
|
before { configuration.convert_to_expect_to_receive = convert_to_expect_to_receive }
|
215
215
|
|
216
|
-
it 'invokes ShouldReceive#
|
217
|
-
should_receive_object.should_receive(:
|
216
|
+
it 'invokes ShouldReceive#stubize_useless_expectation!' do
|
217
|
+
should_receive_object.should_receive(:stubize_useless_expectation!)
|
218
218
|
rewriter.process_should_receive(should_receive_object)
|
219
219
|
end
|
220
220
|
end
|
@@ -261,8 +261,8 @@ module Transpec
|
|
261
261
|
end
|
262
262
|
end
|
263
263
|
|
264
|
-
context 'when ShouldReceive#
|
265
|
-
before { should_receive_object.stub(:
|
264
|
+
context 'when ShouldReceive#useless_expectation? returns false' do
|
265
|
+
before { should_receive_object.stub(:useless_expectation?).and_return(false) }
|
266
266
|
|
267
267
|
context 'and Configuration#convert_to_expect_to_receive? is true' do
|
268
268
|
before { configuration.convert_to_expect_to_receive = true }
|
@@ -349,16 +349,16 @@ module Transpec
|
|
349
349
|
end
|
350
350
|
end
|
351
351
|
|
352
|
-
shared_examples 'invokes MethodStub#
|
353
|
-
it 'invokes MethodStub#
|
354
|
-
method_stub_object.should_receive(:
|
352
|
+
shared_examples 'invokes MethodStub#remove_allowance_for_no_message!' do
|
353
|
+
it 'invokes MethodStub#remove_allowance_for_no_message!' do
|
354
|
+
method_stub_object.should_receive(:remove_allowance_for_no_message!)
|
355
355
|
rewriter.process_method_stub(method_stub_object)
|
356
356
|
end
|
357
357
|
end
|
358
358
|
|
359
|
-
shared_examples 'does not invoke MethodStub#
|
360
|
-
it 'does not invoke MethodStub#
|
361
|
-
method_stub_object.should_not_receive(:
|
359
|
+
shared_examples 'does not invoke MethodStub#remove_allowance_for_no_message!' do
|
360
|
+
it 'does not invoke MethodStub#remove_allowance_for_no_message!' do
|
361
|
+
method_stub_object.should_not_receive(:remove_allowance_for_no_message!)
|
362
362
|
rewriter.process_method_stub(method_stub_object)
|
363
363
|
end
|
364
364
|
end
|
@@ -371,7 +371,7 @@ module Transpec
|
|
371
371
|
|
372
372
|
include_examples 'invokes MethodStub#allowize!'
|
373
373
|
include_examples 'does not invoke MethodStub#replace_deprecated_method!'
|
374
|
-
include_examples 'invokes MethodStub#
|
374
|
+
include_examples 'invokes MethodStub#remove_allowance_for_no_message!'
|
375
375
|
end
|
376
376
|
|
377
377
|
context 'and Configuration#replace_deprecated_method? is false' do
|
@@ -379,7 +379,7 @@ module Transpec
|
|
379
379
|
|
380
380
|
include_examples 'invokes MethodStub#allowize!'
|
381
381
|
include_examples 'does not invoke MethodStub#replace_deprecated_method!'
|
382
|
-
include_examples 'does not invoke MethodStub#
|
382
|
+
include_examples 'does not invoke MethodStub#remove_allowance_for_no_message!'
|
383
383
|
end
|
384
384
|
end
|
385
385
|
|
@@ -391,7 +391,7 @@ module Transpec
|
|
391
391
|
|
392
392
|
include_examples 'does not invoke MethodStub#allowize!'
|
393
393
|
include_examples 'invokes MethodStub#replace_deprecated_method!'
|
394
|
-
include_examples 'invokes MethodStub#
|
394
|
+
include_examples 'invokes MethodStub#remove_allowance_for_no_message!'
|
395
395
|
end
|
396
396
|
|
397
397
|
context 'and Configuration#replace_deprecated_method? is false' do
|
@@ -399,7 +399,7 @@ module Transpec
|
|
399
399
|
|
400
400
|
include_examples 'does not invoke MethodStub#allowize!'
|
401
401
|
include_examples 'does not invoke MethodStub#replace_deprecated_method!'
|
402
|
-
include_examples 'does not invoke MethodStub#
|
402
|
+
include_examples 'does not invoke MethodStub#remove_allowance_for_no_message!'
|
403
403
|
end
|
404
404
|
end
|
405
405
|
end
|
@@ -24,10 +24,8 @@ module Transpec
|
|
24
24
|
let(:in_example_group_context?) { true }
|
25
25
|
|
26
26
|
describe '.target_node?' do
|
27
|
-
include ASTHelper
|
28
|
-
|
29
27
|
let(:send_node) do
|
30
|
-
|
28
|
+
ast.each_descendent_node do |node|
|
31
29
|
next unless node.type == :send
|
32
30
|
method_name = node.children[1]
|
33
31
|
next unless method_name == :stub
|
@@ -53,7 +51,9 @@ module Transpec
|
|
53
51
|
context 'when #stub node with Typhoeus receiver is passed' do
|
54
52
|
let(:source) do
|
55
53
|
<<-END
|
56
|
-
|
54
|
+
it "is not RSpec's #stub" do
|
55
|
+
::Typhoeus.stub(url, :method => method).and_return(response)
|
56
|
+
end
|
57
57
|
END
|
58
58
|
end
|
59
59
|
|
@@ -423,8 +423,8 @@ module Transpec
|
|
423
423
|
end
|
424
424
|
end
|
425
425
|
|
426
|
-
describe '#
|
427
|
-
subject { method_stub_object.
|
426
|
+
describe '#allow_no_message?' do
|
427
|
+
subject { method_stub_object.allow_no_message? }
|
428
428
|
|
429
429
|
context 'when it is `subject.stub(:method).any_number_of_times` form' do
|
430
430
|
let(:source) do
|
@@ -450,6 +450,18 @@ module Transpec
|
|
450
450
|
it { should be_true }
|
451
451
|
end
|
452
452
|
|
453
|
+
context 'when it is `subject.stub(:method).at_least(0)` form' do
|
454
|
+
let(:source) do
|
455
|
+
<<-END
|
456
|
+
it 'responds to #foo' do
|
457
|
+
subject.stub(:foo).at_least(0)
|
458
|
+
end
|
459
|
+
END
|
460
|
+
end
|
461
|
+
|
462
|
+
it { should be_true }
|
463
|
+
end
|
464
|
+
|
453
465
|
context 'when it is `subject.stub(:method)` form' do
|
454
466
|
let(:source) do
|
455
467
|
<<-END
|
@@ -463,7 +475,7 @@ module Transpec
|
|
463
475
|
end
|
464
476
|
end
|
465
477
|
|
466
|
-
describe '#
|
478
|
+
describe '#remove_allowance_for_no_message!' do
|
467
479
|
context 'when it is `subject.stub(:method).any_number_of_times` form' do
|
468
480
|
let(:source) do
|
469
481
|
<<-END
|
@@ -482,7 +494,30 @@ module Transpec
|
|
482
494
|
end
|
483
495
|
|
484
496
|
it 'removes `.any_number_of_times`' do
|
485
|
-
method_stub_object.
|
497
|
+
method_stub_object.remove_allowance_for_no_message!
|
498
|
+
rewritten_source.should == expected_source
|
499
|
+
end
|
500
|
+
end
|
501
|
+
|
502
|
+
context 'when it is `subject.stub(:method).at_least(0)` form' do
|
503
|
+
let(:source) do
|
504
|
+
<<-END
|
505
|
+
it 'responds to #foo' do
|
506
|
+
subject.stub(:foo).at_least(0)
|
507
|
+
end
|
508
|
+
END
|
509
|
+
end
|
510
|
+
|
511
|
+
let(:expected_source) do
|
512
|
+
<<-END
|
513
|
+
it 'responds to #foo' do
|
514
|
+
subject.stub(:foo)
|
515
|
+
end
|
516
|
+
END
|
517
|
+
end
|
518
|
+
|
519
|
+
it 'removes `.at_least(0)`' do
|
520
|
+
method_stub_object.remove_allowance_for_no_message!
|
486
521
|
rewritten_source.should == expected_source
|
487
522
|
end
|
488
523
|
end
|
@@ -497,7 +532,7 @@ module Transpec
|
|
497
532
|
end
|
498
533
|
|
499
534
|
it 'does nothing' do
|
500
|
-
method_stub_object.
|
535
|
+
method_stub_object.remove_allowance_for_no_message!
|
501
536
|
rewritten_source.should == source
|
502
537
|
end
|
503
538
|
end
|
@@ -283,8 +283,8 @@ module Transpec
|
|
283
283
|
end
|
284
284
|
end
|
285
285
|
|
286
|
-
describe '#
|
287
|
-
subject { should_receive_object.
|
286
|
+
describe '#useless_expectation?' do
|
287
|
+
subject { should_receive_object.useless_expectation? }
|
288
288
|
|
289
289
|
context 'when it is `subject.should_receive(:method).any_number_of_times` form' do
|
290
290
|
let(:source) do
|
@@ -310,6 +310,30 @@ module Transpec
|
|
310
310
|
it { should be_true }
|
311
311
|
end
|
312
312
|
|
313
|
+
context 'when it is `subject.should_receive(:method).at_least(0)` form' do
|
314
|
+
let(:source) do
|
315
|
+
<<-END
|
316
|
+
it 'responds to #foo' do
|
317
|
+
subject.should_receive(:foo).at_least(0)
|
318
|
+
end
|
319
|
+
END
|
320
|
+
end
|
321
|
+
|
322
|
+
it { should be_true }
|
323
|
+
end
|
324
|
+
|
325
|
+
context 'when it is `subject.should_receive(:method).at_least(1)` form' do
|
326
|
+
let(:source) do
|
327
|
+
<<-END
|
328
|
+
it 'receives #foo at least once' do
|
329
|
+
subject.should_receive(:foo).with(1).at_least(1)
|
330
|
+
end
|
331
|
+
END
|
332
|
+
end
|
333
|
+
|
334
|
+
it { should be_false }
|
335
|
+
end
|
336
|
+
|
313
337
|
context 'when it is `subject.should_receive(:method)` form' do
|
314
338
|
let(:source) do
|
315
339
|
<<-END
|
@@ -323,7 +347,7 @@ module Transpec
|
|
323
347
|
end
|
324
348
|
end
|
325
349
|
|
326
|
-
describe '#
|
350
|
+
describe '#allowize_useless_expectation!' do
|
327
351
|
context 'when it is `subject.should_receive(:method).any_number_of_times` form' do
|
328
352
|
let(:source) do
|
329
353
|
<<-END
|
@@ -342,7 +366,7 @@ module Transpec
|
|
342
366
|
end
|
343
367
|
|
344
368
|
it 'converts into `allow(subject).to receive(:method)` form' do
|
345
|
-
should_receive_object.
|
369
|
+
should_receive_object.allowize_useless_expectation!
|
346
370
|
rewritten_source.should == expected_source
|
347
371
|
end
|
348
372
|
end
|
@@ -365,7 +389,53 @@ module Transpec
|
|
365
389
|
end
|
366
390
|
|
367
391
|
it 'converts into `allow_any_instance_of(subject).to receive(:method)` form' do
|
368
|
-
should_receive_object.
|
392
|
+
should_receive_object.allowize_useless_expectation!
|
393
|
+
rewritten_source.should == expected_source
|
394
|
+
end
|
395
|
+
end
|
396
|
+
|
397
|
+
context 'when it is `subject.should_receive(:method).at_least(0)` form' do
|
398
|
+
let(:source) do
|
399
|
+
<<-END
|
400
|
+
it 'responds to #foo' do
|
401
|
+
subject.should_receive(:foo).at_least(0)
|
402
|
+
end
|
403
|
+
END
|
404
|
+
end
|
405
|
+
|
406
|
+
let(:expected_source) do
|
407
|
+
<<-END
|
408
|
+
it 'responds to #foo' do
|
409
|
+
allow(subject).to receive(:foo)
|
410
|
+
end
|
411
|
+
END
|
412
|
+
end
|
413
|
+
|
414
|
+
it 'converts into `allow(subject).to receive(:method)` form' do
|
415
|
+
should_receive_object.allowize_useless_expectation!
|
416
|
+
rewritten_source.should == expected_source
|
417
|
+
end
|
418
|
+
end
|
419
|
+
|
420
|
+
context 'when it is `SomeClass.any_instance.should_receive(:method).at_least(0)` form' do
|
421
|
+
let(:source) do
|
422
|
+
<<-END
|
423
|
+
it 'responds to #foo' do
|
424
|
+
SomeClass.any_instance.should_receive(:foo).at_least(0)
|
425
|
+
end
|
426
|
+
END
|
427
|
+
end
|
428
|
+
|
429
|
+
let(:expected_source) do
|
430
|
+
<<-END
|
431
|
+
it 'responds to #foo' do
|
432
|
+
allow_any_instance_of(SomeClass).to receive(:foo)
|
433
|
+
end
|
434
|
+
END
|
435
|
+
end
|
436
|
+
|
437
|
+
it 'converts into `allow_any_instance_of(subject).to receive(:method)` form' do
|
438
|
+
should_receive_object.allowize_useless_expectation!
|
369
439
|
rewritten_source.should == expected_source
|
370
440
|
end
|
371
441
|
end
|
@@ -380,13 +450,13 @@ module Transpec
|
|
380
450
|
end
|
381
451
|
|
382
452
|
it 'does nothing' do
|
383
|
-
should_receive_object.
|
453
|
+
should_receive_object.allowize_useless_expectation!
|
384
454
|
rewritten_source.should == source
|
385
455
|
end
|
386
456
|
end
|
387
457
|
end
|
388
458
|
|
389
|
-
describe '#
|
459
|
+
describe '#stubize_useless_expectation!' do
|
390
460
|
context 'when it is `subject.should_receive(:method).any_number_of_times` form' do
|
391
461
|
let(:source) do
|
392
462
|
<<-END
|
@@ -405,7 +475,7 @@ module Transpec
|
|
405
475
|
end
|
406
476
|
|
407
477
|
it 'converts into `subject.stub(:method)` form' do
|
408
|
-
should_receive_object.
|
478
|
+
should_receive_object.stubize_useless_expectation!
|
409
479
|
rewritten_source.should == expected_source
|
410
480
|
end
|
411
481
|
end
|
@@ -420,7 +490,7 @@ module Transpec
|
|
420
490
|
end
|
421
491
|
|
422
492
|
it 'does nothing' do
|
423
|
-
should_receive_object.
|
493
|
+
should_receive_object.stubize_useless_expectation!
|
424
494
|
rewritten_source.should == source
|
425
495
|
end
|
426
496
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: transpec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuji Nakayama
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -171,6 +171,8 @@ files:
|
|
171
171
|
- Rakefile
|
172
172
|
- bin/transpec
|
173
173
|
- lib/transpec.rb
|
174
|
+
- lib/transpec/ast/builder.rb
|
175
|
+
- lib/transpec/ast/node.rb
|
174
176
|
- lib/transpec/ast/scanner.rb
|
175
177
|
- lib/transpec/ast/scope_stack.rb
|
176
178
|
- lib/transpec/cli.rb
|
@@ -178,8 +180,8 @@ files:
|
|
178
180
|
- lib/transpec/git.rb
|
179
181
|
- lib/transpec/rewriter.rb
|
180
182
|
- lib/transpec/syntax.rb
|
181
|
-
- lib/transpec/syntax/
|
182
|
-
- lib/transpec/syntax/
|
183
|
+
- lib/transpec/syntax/able_to_allow_no_message.rb
|
184
|
+
- lib/transpec/syntax/able_to_target_any_instance.rb
|
183
185
|
- lib/transpec/syntax/be_close.rb
|
184
186
|
- lib/transpec/syntax/double.rb
|
185
187
|
- lib/transpec/syntax/expectizable.rb
|
@@ -195,9 +197,9 @@ files:
|
|
195
197
|
- spec/.rubocop.yml
|
196
198
|
- spec/spec_helper.rb
|
197
199
|
- spec/spec_spec.rb
|
198
|
-
- spec/support/ast_helper.rb
|
199
200
|
- spec/support/file_helper.rb
|
200
201
|
- spec/support/shared_context.rb
|
202
|
+
- spec/transpec/ast/node_spec.rb
|
201
203
|
- spec/transpec/ast/scanner_spec.rb
|
202
204
|
- spec/transpec/ast/scope_stack_spec.rb
|
203
205
|
- spec/transpec/cli_spec.rb
|
@@ -242,9 +244,9 @@ test_files:
|
|
242
244
|
- spec/.rubocop.yml
|
243
245
|
- spec/spec_helper.rb
|
244
246
|
- spec/spec_spec.rb
|
245
|
-
- spec/support/ast_helper.rb
|
246
247
|
- spec/support/file_helper.rb
|
247
248
|
- spec/support/shared_context.rb
|
249
|
+
- spec/transpec/ast/node_spec.rb
|
248
250
|
- spec/transpec/ast/scanner_spec.rb
|
249
251
|
- spec/transpec/ast/scope_stack_spec.rb
|
250
252
|
- spec/transpec/cli_spec.rb
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require 'transpec/syntax'
|
4
|
-
|
5
|
-
module Transpec
|
6
|
-
class Syntax
|
7
|
-
module AnyNumberOfTimesable
|
8
|
-
def any_number_of_times?
|
9
|
-
!any_number_of_times_node.nil?
|
10
|
-
end
|
11
|
-
|
12
|
-
def remove_any_number_of_times!
|
13
|
-
return unless any_number_of_times?
|
14
|
-
|
15
|
-
map = any_number_of_times_node.loc
|
16
|
-
dot_any_number_of_times_range = map.dot.join(map.selector)
|
17
|
-
remove(dot_any_number_of_times_range)
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def any_number_of_times_node
|
23
|
-
each_following_chained_method_node do |chained_node|
|
24
|
-
method_name = chained_node.children[1]
|
25
|
-
return chained_node if method_name == :any_number_of_times
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def each_following_chained_method_node
|
30
|
-
return to_enum(__method__) unless block_given?
|
31
|
-
|
32
|
-
@ancestor_nodes.reverse.reduce(@node) do |child_node, parent_node|
|
33
|
-
return unless [:send, :block].include?(parent_node.type)
|
34
|
-
return unless parent_node.children.first == child_node
|
35
|
-
yield parent_node, child_node
|
36
|
-
parent_node
|
37
|
-
end
|
38
|
-
nil
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
data/spec/support/ast_helper.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module ASTHelper
|
4
|
-
def scan_node(node, options = {}, &block)
|
5
|
-
yield node if options[:include_origin_node]
|
6
|
-
|
7
|
-
node.children.each do |child|
|
8
|
-
next unless child.is_a?(Parser::AST::Node)
|
9
|
-
yield child
|
10
|
-
scan_node(child, &block)
|
11
|
-
end
|
12
|
-
|
13
|
-
nil
|
14
|
-
end
|
15
|
-
end
|