transpec 0.0.9 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- 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
|