transpec 2.2.3 → 2.2.4
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 +4 -0
- data/lib/transpec/syntax/allow.rb +1 -1
- data/lib/transpec/syntax/expect.rb +1 -1
- data/lib/transpec/syntax/mixin/expect_base.rb +11 -1
- data/lib/transpec/version.rb +1 -1
- data/spec/transpec/syntax/expect_spec.rb +90 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bea6a3efb55602879556ab0afcb57ff1afc5ad19
|
4
|
+
data.tar.gz: 4c9d3f104c8c8865565162539cee360343c6adc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c07e7a00f5a850dd2e67e02321d0ec2b4e5243f53de50af9d4d7176fc0747a0384a2bdd1eaab1e34b184f8d9668cfa11362030578dbc963def63592b52bb9eb
|
7
|
+
data.tar.gz: ef36576b3df8b682a823b81e0164b0be5cdc35fb0ff7219659e8487813acf4058c3a81b0ef60bb4a86cf09f15f62bd919dd68e464783f08162f82aae62496737
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
## Development
|
4
4
|
|
5
|
+
## v2.2.4
|
6
|
+
|
7
|
+
* Avoid crash on invalid `expect` syntax expectations (e.g. `expect(obj)` without following `to` or `expect(obj).to` taking no matcher). ([#71](https://github.com/yujinakayama/transpec/issues/71))
|
8
|
+
|
5
9
|
## v2.2.3
|
6
10
|
|
7
11
|
* Handle `its(:attr) { should have(n).items }`. ([#68](https://github.com/yujinakayama/transpec/pull/68))
|
@@ -9,7 +9,7 @@ module Transpec
|
|
9
9
|
include Mixin::ExpectBase
|
10
10
|
|
11
11
|
def dynamic_analysis_target?
|
12
|
-
super &&
|
12
|
+
super && [:allow, :allow_any_instance_of].include?(method_name)
|
13
13
|
end
|
14
14
|
|
15
15
|
def method_name_for_instance
|
@@ -14,7 +14,7 @@ module Transpec
|
|
14
14
|
add_matcher RaiseError
|
15
15
|
|
16
16
|
def dynamic_analysis_target?
|
17
|
-
super &&
|
17
|
+
super && [:expect, :expect_any_instance_of].include?(method_name)
|
18
18
|
end
|
19
19
|
|
20
20
|
def method_name_for_instance
|
@@ -17,6 +17,10 @@ module Transpec
|
|
17
17
|
add_matcher Receive
|
18
18
|
end
|
19
19
|
|
20
|
+
def dynamic_analysis_target?
|
21
|
+
super && receiver_node.nil? && matcher_node
|
22
|
+
end
|
23
|
+
|
20
24
|
def current_syntax_type
|
21
25
|
:expect
|
22
26
|
end
|
@@ -36,15 +40,21 @@ module Transpec
|
|
36
40
|
end
|
37
41
|
|
38
42
|
def to_node
|
43
|
+
return nil unless parent_node
|
44
|
+
|
39
45
|
if parent_node.block_type? && parent_node.children.first.equal?(node)
|
40
46
|
parent_node.parent_node
|
41
|
-
|
47
|
+
elsif parent_node.send_type? && parent_node.children.first.equal?(node)
|
42
48
|
parent_node
|
49
|
+
else
|
50
|
+
nil
|
43
51
|
end
|
44
52
|
end
|
45
53
|
|
46
54
|
def matcher_node
|
55
|
+
return nil unless to_node
|
47
56
|
to_arg_node = to_node.children[2]
|
57
|
+
return nil unless to_arg_node
|
48
58
|
Util.each_forward_chained_node(to_arg_node, :include_origin)
|
49
59
|
.select(&:send_type?).to_a.last
|
50
60
|
end
|
data/lib/transpec/version.rb
CHANGED
@@ -9,6 +9,96 @@ module Transpec
|
|
9
9
|
include_context 'parsed objects'
|
10
10
|
include_context 'syntax object', Expect, :expect_object
|
11
11
|
|
12
|
+
describe '#conversion_target?' do
|
13
|
+
let(:target_node) do
|
14
|
+
ast.each_node do |node|
|
15
|
+
next unless node.send_type?
|
16
|
+
method_name = node.children[1]
|
17
|
+
next unless method_name == :expect
|
18
|
+
return node
|
19
|
+
end
|
20
|
+
fail 'No #expect node is found!'
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:expect_object) do
|
24
|
+
Expect.new(target_node)
|
25
|
+
end
|
26
|
+
|
27
|
+
subject { expect_object.conversion_target? }
|
28
|
+
|
29
|
+
context 'when the #expect node is chained by #to' do
|
30
|
+
context 'and taking a matcher properly' do
|
31
|
+
let(:source) do
|
32
|
+
<<-END
|
33
|
+
describe 'example' do
|
34
|
+
it 'is valid expectation' do
|
35
|
+
expect(obj).to matcher
|
36
|
+
end
|
37
|
+
end
|
38
|
+
END
|
39
|
+
end
|
40
|
+
|
41
|
+
it { should be_true }
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'but taking no matcher' do
|
45
|
+
let(:source) do
|
46
|
+
<<-END
|
47
|
+
describe 'example' do
|
48
|
+
it 'is invalid expectation' do
|
49
|
+
expect(obj).to
|
50
|
+
end
|
51
|
+
end
|
52
|
+
END
|
53
|
+
end
|
54
|
+
|
55
|
+
it { should be_false }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'when the #expect node is chained by #not_to' do
|
60
|
+
let(:source) do
|
61
|
+
<<-END
|
62
|
+
describe 'example' do
|
63
|
+
it 'is valid expectation' do
|
64
|
+
expect(obj).not_to matcher
|
65
|
+
end
|
66
|
+
end
|
67
|
+
END
|
68
|
+
end
|
69
|
+
|
70
|
+
it { should be_true }
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'when the #expect node is not chained' do
|
74
|
+
let(:source) do
|
75
|
+
<<-END
|
76
|
+
describe 'example' do
|
77
|
+
it 'is invalid expectation' do
|
78
|
+
expect(obj)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
END
|
82
|
+
end
|
83
|
+
|
84
|
+
it { should be_false }
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'when the #expect node is not chained and taken as a argument by another method' do
|
88
|
+
let(:source) do
|
89
|
+
<<-END
|
90
|
+
describe 'example' do
|
91
|
+
it 'is invalid expectation' do
|
92
|
+
do_something(expect(obj))
|
93
|
+
end
|
94
|
+
end
|
95
|
+
END
|
96
|
+
end
|
97
|
+
|
98
|
+
it { should be_false }
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
12
102
|
describe '#subject_node' do
|
13
103
|
context 'when the subject is a normal argument' do
|
14
104
|
let(:source) do
|