transpec 1.10.0 → 1.10.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 +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +5 -1
- data/Guardfile +1 -1
- data/Rakefile +1 -1
- data/lib/transpec/ast/node.rb +1 -41
- data/lib/transpec/report.rb +2 -2
- data/lib/transpec/syntax/have/source_builder.rb +1 -1
- data/lib/transpec/syntax/operator.rb +14 -13
- data/lib/transpec/version.rb +1 -1
- data/spec/transpec/dynamic_analyzer/rewriter_spec.rb +1 -1
- data/spec/transpec/syntax/have_spec.rb +29 -0
- data/spec/transpec/syntax/pending_spec.rb +5 -0
- data/tasks/lib/transpec_demo.rb +4 -0
- data/tasks/lib/transpec_test.rb +8 -1
- data/transpec.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44ca6a93bd2bda16ddb06a1b392b577d4058e181
|
4
|
+
data.tar.gz: 157977020a4bff523c6e261722288b3f06d49bc1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7aa89e910659d73dbe0c62bf494041cb94997f5a1d0fad85e01773dc8ff31be766f6f4f138cc0ec228391dded032e0181a75d1ba6f6cb9cd619769218db867e0
|
7
|
+
data.tar.gz: 9c902ba46ea0940d3d418bf5f9e752d97b9d19797d3543da814e41f568115dc4e17d3f8e6b0d132dd3704d06f7fc02a7efcf5a6070cfdaaf4b0bddf438f91ba5
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
## Development
|
4
4
|
|
5
|
+
## v1.10.1
|
6
|
+
|
7
|
+
* Fix a bug where `expect(hash['some_key']).to have(2).items` was converted to `expect(hash[().size).to eq(2)` ([#51](https://github.com/yujinakayama/transpec/issues/51))
|
8
|
+
|
5
9
|
## v1.10.0
|
6
10
|
|
7
11
|
* Support conversion of pending examples
|
@@ -130,7 +134,7 @@
|
|
130
134
|
|
131
135
|
## v0.2.5
|
132
136
|
|
133
|
-
* Do not touch file if the source does need to be rewritten
|
137
|
+
* Do not touch file if the source does not need to be rewritten
|
134
138
|
|
135
139
|
## v0.2.4
|
136
140
|
|
data/Guardfile
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# This group allows to skip running RuboCop if RSpec failed,
|
5
5
|
# like Red > Green (RSpec) > Refactor (RuboCop).
|
6
6
|
group :red_green_refactor, halt_on_fail: true do
|
7
|
-
guard :rspec, all_on_start: true,
|
7
|
+
guard :rspec, all_on_start: true, cmd: 'bundle exec rspec' do
|
8
8
|
watch(%r{^spec/.+_spec\.rb$})
|
9
9
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
10
10
|
watch('spec/spec_helper.rb') { "spec" }
|
data/Rakefile
CHANGED
data/lib/transpec/ast/node.rb
CHANGED
@@ -5,46 +5,6 @@ require 'parser'
|
|
5
5
|
module Transpec
|
6
6
|
module AST
|
7
7
|
class Node < Parser::AST::Node
|
8
|
-
TYPES = %w(
|
9
|
-
true false nil
|
10
|
-
int float
|
11
|
-
str dstr
|
12
|
-
sym dsym
|
13
|
-
xstr
|
14
|
-
regexp regopt
|
15
|
-
array splat
|
16
|
-
hash pair kwsplat
|
17
|
-
irange erange
|
18
|
-
self
|
19
|
-
lvar ivar cvar gvar
|
20
|
-
nth_ref back_ref
|
21
|
-
const cbase
|
22
|
-
defined?
|
23
|
-
lvasgn ivasgn cvasgn gvasgn
|
24
|
-
casgn
|
25
|
-
masgn mlhs
|
26
|
-
op_asgn or_asgn and_asgn
|
27
|
-
module class sclass
|
28
|
-
def defs undef
|
29
|
-
alias
|
30
|
-
args
|
31
|
-
arg optarg restarg blockarg shadowarg kwarg kwoptarg kwrestarg
|
32
|
-
send
|
33
|
-
super zsuper
|
34
|
-
yield
|
35
|
-
block block_pass
|
36
|
-
and or not
|
37
|
-
if
|
38
|
-
case when
|
39
|
-
while until while_post until_post for
|
40
|
-
break next redo return
|
41
|
-
begin
|
42
|
-
rescue resbody ensure retry
|
43
|
-
preexe postexe
|
44
|
-
iflipflop eflipflop
|
45
|
-
match_current_line match_with_lvasgn
|
46
|
-
).map(&:to_sym).freeze
|
47
|
-
|
48
8
|
attr_reader :metadata
|
49
9
|
|
50
10
|
def initialize(type, children = [], properties = {})
|
@@ -59,7 +19,7 @@ module Transpec
|
|
59
19
|
end
|
60
20
|
end
|
61
21
|
|
62
|
-
|
22
|
+
Parser::Meta::NODE_TYPES.each do |node_type|
|
63
23
|
method_name = "#{node_type.to_s.gsub(/\W/, '')}_type?"
|
64
24
|
define_method(method_name) do
|
65
25
|
type == node_type
|
data/lib/transpec/report.rb
CHANGED
@@ -55,7 +55,7 @@ module Transpec
|
|
55
55
|
:green
|
56
56
|
end
|
57
57
|
|
58
|
-
|
58
|
+
conversion_incomplete_caution_stats(base_color) + error_stats(base_color)
|
59
59
|
end
|
60
60
|
|
61
61
|
def stats
|
@@ -93,7 +93,7 @@ module Transpec
|
|
93
93
|
text << indentation + ' ' + colorize('to: ', :cyan) + record.converted_syntax + "\n"
|
94
94
|
end
|
95
95
|
|
96
|
-
def
|
96
|
+
def conversion_incomplete_caution_stats(color)
|
97
97
|
text = pluralize(records.count, 'conversion') + ', '
|
98
98
|
text << pluralize(conversion_errors.count, 'incomplete') + ', '
|
99
99
|
text << pluralize(annotation_count, 'caution') + ', '
|
@@ -52,7 +52,7 @@ module Transpec
|
|
52
52
|
|
53
53
|
if node.send_type? && (arg_node = node.children[2])
|
54
54
|
left_of_arg_range = map.selector.end.join(arg_node.loc.expression.begin)
|
55
|
-
|
55
|
+
if !map.selector.source.start_with?('[') && !left_of_arg_range.source.include?('(')
|
56
56
|
relative_index = left_of_arg_range.begin_pos - map.expression.begin_pos
|
57
57
|
source[relative_index, left_of_arg_range.length] = '('
|
58
58
|
source << ')'
|
@@ -21,15 +21,16 @@ module Transpec
|
|
21
21
|
|
22
22
|
def self.check_target_node_statically(node)
|
23
23
|
node = node.parent_node if node == BE_NODE
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
super(node)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.target_method?(receiver_node, method_name)
|
28
|
+
!receiver_node.nil? && OPERATORS.include?(method_name)
|
28
29
|
end
|
29
30
|
|
30
31
|
define_dynamic_analysis_request do |rewriter|
|
31
32
|
if method_name == :=~
|
32
|
-
rewriter.register_request(arg_node, :
|
33
|
+
rewriter.register_request(arg_node, :enumerable_arg?, 'is_a?(Enumerable)')
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
@@ -47,10 +48,10 @@ module Transpec
|
|
47
48
|
case method_name
|
48
49
|
when :==
|
49
50
|
convert_to_eq!(parenthesize_arg)
|
50
|
-
when :===, :<, :<=, :>, :>=
|
51
|
-
convert_to_be_operator!
|
52
51
|
when :=~
|
53
52
|
convert_to_match!(parenthesize_arg)
|
53
|
+
else
|
54
|
+
convert_to_be_operator!
|
54
55
|
end
|
55
56
|
end
|
56
57
|
|
@@ -84,7 +85,7 @@ module Transpec
|
|
84
85
|
def convert_to_match!(parenthesize_arg)
|
85
86
|
handle_anterior_of_operator!
|
86
87
|
|
87
|
-
if
|
88
|
+
if enumerable_arg?
|
88
89
|
replace(selector_range, 'match_array')
|
89
90
|
else
|
90
91
|
replace(selector_range, 'match')
|
@@ -92,11 +93,11 @@ module Transpec
|
|
92
93
|
|
93
94
|
parenthesize!(parenthesize_arg)
|
94
95
|
|
96
|
+
accurate = !enumerable_arg?.nil?
|
97
|
+
|
95
98
|
# Need to register record after all source rewrites are done
|
96
99
|
# to avoid false record when failed with overlapped rewrite.
|
97
|
-
|
98
|
-
|
99
|
-
if arg_is_enumerable?
|
100
|
+
if enumerable_arg?
|
100
101
|
register_record('=~ [1, 2]', 'match_array([1, 2])', accurate)
|
101
102
|
else
|
102
103
|
register_record('=~ /pattern/', 'match(/pattern/)', accurate)
|
@@ -111,14 +112,14 @@ module Transpec
|
|
111
112
|
end
|
112
113
|
end
|
113
114
|
|
114
|
-
def
|
115
|
+
def enumerable_arg?
|
115
116
|
case arg_node.type
|
116
117
|
when :array
|
117
118
|
true
|
118
119
|
when :regexp
|
119
120
|
false
|
120
121
|
else
|
121
|
-
runtime_data[arg_node, :
|
122
|
+
runtime_data[arg_node, :enumerable_arg?]
|
122
123
|
end
|
123
124
|
end
|
124
125
|
|
data/lib/transpec/version.rb
CHANGED
@@ -43,7 +43,7 @@ module Transpec
|
|
43
43
|
# rubocop:disable LineLength
|
44
44
|
let(:expected_source) do
|
45
45
|
<<-END
|
46
|
-
transpec_analyze((transpec_analyze((subject), self, "(string)_14_21", { :should_source_location => [:object, "method(:should).source_location"] }).should), self, "(string)_14_28", { :"=~_source_location" => [:object, "method(:=~).source_location"], :expect_available? => [:context, "self.class.ancestors.any? { |a| a.name.start_with?('RSpec::') } && respond_to?(:expect)"] }) =~ transpec_analyze((<<-HEREDOC.gsub('foo', 'bar')), self, "(string)_32_61", { :
|
46
|
+
transpec_analyze((transpec_analyze((subject), self, "(string)_14_21", { :should_source_location => [:object, "method(:should).source_location"] }).should), self, "(string)_14_28", { :"=~_source_location" => [:object, "method(:=~).source_location"], :expect_available? => [:context, "self.class.ancestors.any? { |a| a.name.start_with?('RSpec::') } && respond_to?(:expect)"] }) =~ transpec_analyze((<<-HEREDOC.gsub('foo', 'bar')), self, "(string)_32_61", { :enumerable_arg? => [:object, "is_a?(Enumerable)"] })
|
47
47
|
foo
|
48
48
|
HEREDOC
|
49
49
|
END
|
@@ -1118,6 +1118,35 @@ module Transpec
|
|
1118
1118
|
end
|
1119
1119
|
end
|
1120
1120
|
|
1121
|
+
context "when it is `expect(hash['some_key']).to have(2).items` form" do
|
1122
|
+
let(:source) do
|
1123
|
+
<<-END
|
1124
|
+
describe 'example' do
|
1125
|
+
it 'has 2 items' do
|
1126
|
+
expect(hash['some_key']).to have(2).items
|
1127
|
+
end
|
1128
|
+
end
|
1129
|
+
END
|
1130
|
+
end
|
1131
|
+
|
1132
|
+
let(:expected_source) do
|
1133
|
+
<<-END
|
1134
|
+
describe 'example' do
|
1135
|
+
it 'has 2 items' do
|
1136
|
+
expect(hash['some_key'].size).to eq(2)
|
1137
|
+
end
|
1138
|
+
end
|
1139
|
+
END
|
1140
|
+
end
|
1141
|
+
|
1142
|
+
let(:have_object) { expect_object.have_matcher }
|
1143
|
+
|
1144
|
+
fit "converts into `expect(hash['some_key'].size).to eq(2)` form" do
|
1145
|
+
have_object.convert_to_standard_expectation!
|
1146
|
+
rewritten_source.should == expected_source
|
1147
|
+
end
|
1148
|
+
end
|
1149
|
+
|
1121
1150
|
context 'when it is `it { should have(2).items }` form' do
|
1122
1151
|
let(:source) do
|
1123
1152
|
<<-END
|
@@ -157,6 +157,11 @@ module Transpec
|
|
157
157
|
it 'converts into `pending; do_something_fail` form' do
|
158
158
|
rewritten_source.should == expected_source
|
159
159
|
end
|
160
|
+
|
161
|
+
it 'adds record `pending { do_something_fail }` -> `pending; do_something_fail`' do
|
162
|
+
record.original_syntax.should == 'pending { do_something_fail }'
|
163
|
+
record.converted_syntax.should == 'pending; do_something_fail'
|
164
|
+
end
|
160
165
|
end
|
161
166
|
|
162
167
|
context "when it is singleline `pending('some reason') { do_something_fail }` form" do
|
data/tasks/lib/transpec_demo.rb
CHANGED
data/tasks/lib/transpec_test.rb
CHANGED
@@ -114,7 +114,10 @@ class TranspecTest
|
|
114
114
|
def git_clone
|
115
115
|
Dir.chdir(self.class.base_dir) do
|
116
116
|
# Disabling checkout here to suppress "detached HEAD" warning.
|
117
|
-
|
117
|
+
command = %w(git clone --no-checkout)
|
118
|
+
command.concat(%w(--depth 1)) if shallow_clone?
|
119
|
+
command.concat(['--branch', ref, url])
|
120
|
+
sh command.join(' ')
|
118
121
|
end
|
119
122
|
|
120
123
|
in_project_dir do
|
@@ -122,6 +125,10 @@ class TranspecTest
|
|
122
125
|
end
|
123
126
|
end
|
124
127
|
|
128
|
+
def shallow_clone?
|
129
|
+
true
|
130
|
+
end
|
131
|
+
|
125
132
|
def bundle_install
|
126
133
|
in_project_dir do
|
127
134
|
with_clean_bundler_env do
|
data/transpec.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
|
23
23
|
spec.required_ruby_version = '>= 1.9.3'
|
24
24
|
|
25
|
-
spec.add_runtime_dependency 'parser', '>= 2.1.
|
25
|
+
spec.add_runtime_dependency 'parser', '>= 2.1.6', '< 3.0'
|
26
26
|
spec.add_runtime_dependency 'bundler', '~> 1.3'
|
27
27
|
spec.add_runtime_dependency 'rainbow', '>= 1.99.1', '< 3.0'
|
28
28
|
spec.add_runtime_dependency 'json', '~> 1.8'
|
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.10.
|
4
|
+
version: 1.10.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-
|
11
|
+
date: 2014-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.1.
|
19
|
+
version: 2.1.6
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '3.0'
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 2.1.
|
29
|
+
version: 2.1.6
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '3.0'
|