transpec 1.13.0 → 1.13.1

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 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