transpec 1.13.0 → 1.13.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1380a29e5d1d69345538ed009fee77b52c9c1476
4
- data.tar.gz: 76891cd865379b4e43d55e890bf076e6be404777
3
+ metadata.gz: cb62942d4b92b4b76ee2e2a74d1287ea3a54e8fb
4
+ data.tar.gz: 72298e837998e51fcb53877389d9d407f302c3dd
5
5
  SHA512:
6
- metadata.gz: 6b6f75a2ea40fa95e6cb8d7eba12ac63e6ea3d7c03bc3b8b2e0cd85b39d5a4a0215a3139aad09e980c89eaaccc8d5880392d8f4793ef5e314d37d25a755ec5f9
7
- data.tar.gz: df0ecc276f65e263cf1c0fe53275ef84d8d884e159a4ade6d92f83a3348b8d2f35829fc98b29ae6d87609a0c0d8b5d8cba66e5331e3c22aed94689473db255df
6
+ metadata.gz: 8541244f475226a74a364370e379a1c188d173e0813553e04c96f419fd805247c30703abdba3dab20db9ba92f56f48e3720ff04f99c871a67bdb306b39883249
7
+ data.tar.gz: 9f906de970f67fd2638fb26103ac8ceea32fffeb940b2fcc271c51b7a1662e9920993c70e7c1c4b1f4efd671c78b6bf3b400f884cc0037b86f8871bd46601b8a
data/.rubocop.yml CHANGED
@@ -1,10 +1,10 @@
1
1
 
2
2
  AllCops:
3
3
  Include:
4
- - tasks/*.rake
4
+ - '**/*.rake'
5
5
  Exclude:
6
- - tmp/*
7
- - vendor/*
6
+ - 'tmp/**/*'
7
+ - 'vendor/**/*'
8
8
 
9
9
  LineLength:
10
10
  Max: 100
data/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Development
4
4
 
5
+ ## v1.13.1
6
+
7
+ * Fix a bug where multiline expression `expect(obj).to receive(:message)\n.and_return { value }` was converted to `expect(obj).to.receive(:message)\n { value }` and the block was interpreted as a hash literal. ([#60](https://github.com/yujinakayama/transpec/issues/60))
8
+ * Fix a bug where dynamic analysis were not run partially when there are same structure nodes in an AST with `ast` gem 2.0.
9
+
5
10
  ## v1.13.0
6
11
 
7
12
  * Improve the conversion performance.
@@ -23,7 +23,9 @@ module Transpec
23
23
  end
24
24
 
25
25
  def requests
26
- @requests ||= {}
26
+ # AST::Node#eql? returns true if two nodes have the same structure,
27
+ # even if they are not identical objects.
28
+ @requests ||= {}.compare_by_identity
27
29
  end
28
30
 
29
31
  def clear_requests!
@@ -13,8 +13,6 @@ module Transpec
13
13
 
14
14
  def remove_useless_and_return!
15
15
  return unless useless_and_return?
16
- map = and_return_node.loc
17
- and_return_range = map.dot.join(map.expression.end)
18
16
  remove(and_return_range)
19
17
  true
20
18
  end
@@ -43,6 +41,13 @@ module Transpec
43
41
  end
44
42
  end
45
43
 
44
+ private
45
+
46
+ def and_return_range
47
+ receiver_node = and_return_node.children.first
48
+ receiver_node.loc.expression.end.join(and_return_node.loc.expression.end)
49
+ end
50
+
46
51
  class UselessAndReturnRecord < Record
47
52
  def initialize(host, *)
48
53
  @host = host
@@ -15,7 +15,7 @@ module Transpec
15
15
 
16
16
  define_dynamic_analysis do |rewriter|
17
17
  code = "TranspecAnalysis.global_data[:rspec_configure_run_order] ||= 0\n" \
18
- "TranspecAnalysis.global_data[:rspec_configure_run_order] += 1"
18
+ 'TranspecAnalysis.global_data[:rspec_configure_run_order] += 1'
19
19
  rewriter.register_request(node, :run_order, code)
20
20
  end
21
21
 
@@ -5,7 +5,7 @@ module Transpec
5
5
  module Version
6
6
  MAJOR = 1
7
7
  MINOR = 13
8
- PATCH = 0
8
+ PATCH = 1
9
9
 
10
10
  def self.to_s
11
11
  [MAJOR, MINOR, PATCH].join('.')
@@ -97,24 +97,45 @@ module Transpec
97
97
  end
98
98
 
99
99
  describe '#register_request' do
100
- let(:some_node) { s(:int, 1) }
101
- let(:another_node) { s(:int, 2) }
100
+ include_context 'parsed objects'
101
+
102
+ let(:source) do
103
+ <<-END
104
+ 1
105
+ 2
106
+ END
107
+ end
108
+
109
+ let(:a_node) { ast.children[0] }
110
+ let(:another_node) { ast.children[1] }
102
111
 
103
112
  it 'stores requests for each node' do
104
- rewriter.register_request(some_node, :odd, 'odd?', :object)
113
+ rewriter.register_request(a_node, :odd, 'odd?', :object)
105
114
  rewriter.register_request(another_node, :even, 'even?', :object)
106
- rewriter.requests.should == {
107
- some_node => { odd: [:object, 'odd?'] },
108
- another_node => { even: [:object, 'even?'] }
109
- }
115
+ rewriter.requests[a_node].should == { odd: [:object, 'odd?'] }
116
+ rewriter.requests[another_node].should == { even: [:object, 'even?'] }
110
117
  end
111
118
 
112
119
  it 'merges multiple requests for same node' do
113
- rewriter.register_request(some_node, :odd, 'odd?', :object)
114
- rewriter.register_request(some_node, :even, 'even?', :object)
115
- rewriter.requests.should == {
116
- some_node => { odd: [:object, 'odd?'], even: [:object, 'even?'] }
117
- }
120
+ rewriter.register_request(a_node, :odd, 'odd?', :object)
121
+ rewriter.register_request(a_node, :even, 'even?', :object)
122
+ rewriter.requests[a_node].should == { odd: [:object, 'odd?'], even: [:object, 'even?'] }
123
+ end
124
+
125
+ context 'when there are same structure nodes but they are not identical objects' do
126
+ let(:source) do
127
+ <<-END
128
+ 1
129
+ 1
130
+ END
131
+ end
132
+
133
+ it 'properly diffrenciate them' do
134
+ rewriter.register_request(a_node, :odd, 'odd?', :object)
135
+ rewriter.register_request(another_node, :even, 'even?', :object)
136
+ rewriter.requests[a_node].should == { odd: [:object, 'odd?'] }
137
+ rewriter.requests[another_node].should == { even: [:object, 'even?'] }
138
+ end
118
139
  end
119
140
  end
120
141
  end
@@ -1132,6 +1132,62 @@ module Transpec
1132
1132
  end
1133
1133
  end
1134
1134
 
1135
+ context 'with multiline expression `obj.stub(:message)\n.and_return { value }`' do
1136
+ let(:source) do
1137
+ <<-END
1138
+ describe 'example' do
1139
+ it 'responds to #foo and returns 1' do
1140
+ subject.stub(:foo)
1141
+ .and_return { 1 }
1142
+ end
1143
+ end
1144
+ END
1145
+ end
1146
+
1147
+ let(:expected_source) do
1148
+ <<-END
1149
+ describe 'example' do
1150
+ it 'responds to #foo and returns 1' do
1151
+ subject.stub(:foo) { 1 }
1152
+ end
1153
+ end
1154
+ END
1155
+ end
1156
+
1157
+ it 'converts to `obj.stub(:message) { value }` form' \
1158
+ 'while preventing the block from being interpreted as a hash' do
1159
+ rewritten_source.should == expected_source
1160
+ end
1161
+ end
1162
+
1163
+ context 'with multiline expression `obj.stub(:message).\nand_return { value }`' do
1164
+ let(:source) do
1165
+ <<-END
1166
+ describe 'example' do
1167
+ it 'responds to #foo and returns 1' do
1168
+ subject.stub(:foo).
1169
+ and_return { 1 }
1170
+ end
1171
+ end
1172
+ END
1173
+ end
1174
+
1175
+ let(:expected_source) do
1176
+ <<-END
1177
+ describe 'example' do
1178
+ it 'responds to #foo and returns 1' do
1179
+ subject.stub(:foo) { 1 }
1180
+ end
1181
+ end
1182
+ END
1183
+ end
1184
+
1185
+ it 'converts to `obj.stub(:message) { value }` form' \
1186
+ 'while preventing the block from being interpreted as a hash' do
1187
+ rewritten_source.should == expected_source
1188
+ end
1189
+ end
1190
+
1135
1191
  context 'with expression `obj.stub(:message).and_return`' do
1136
1192
  let(:source) do
1137
1193
  <<-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: 1.13.0
4
+ version: 1.13.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuji Nakayama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-16 00:00:00.000000000 Z
11
+ date: 2014-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser