transpec 2.2.1 → 2.2.2

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: a6b25e36a9c0ed121a64efdb418255cc4c503112
4
- data.tar.gz: ce7f2540fc51d7649fdad98c22e5e8994d7c74c5
3
+ metadata.gz: 2ed03b5875402e2f2a94f50eb8ebdd856f61aa84
4
+ data.tar.gz: e81942f93e064ebac963ff6d17090bbe2e0b05f8
5
5
  SHA512:
6
- metadata.gz: eb1a7aea414278e08a8f850edda5fef805f6be73428daa30bd32c855766bd6a0c7168ea4e9266b796436a5d3f1dabf4370a3a7bf8640519164b1635a3eacf08c
7
- data.tar.gz: 11b6fd391046cf62018406f835d9655061dcb9f28c0745e3f4b7041ec4a56630c12869eea41c3a3e409a4fdf884741a5aebef81741840fec65d216cc74b87667
6
+ metadata.gz: 26f7db5953c2390bcd8da34b50b8a7c99252a032fdf8027de238de7f186f585e41c82cb0f749588709ff754ca7dd1b7c6df641cd0dd6a7a1b3a7a062d49ed328
7
+ data.tar.gz: f936d2b514378479df192efe6980d56865477ab749f1e593878f1b98b285d22d3cf26ebf8ff888e1b1107699e2b13c05e0ed94cefcbcffb54640f3eaea2d13b1
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Development
4
4
 
5
+ ## v2.2.2
6
+
7
+ * Fix error on dynamic analysis when the project have `.rspec` file containing some `--require` options and the required file contains some RSpec API.
8
+
5
9
  ## v2.2.1
6
10
 
7
11
  * Fix invalid conversion of `pending` with block including an empty line.
data/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Transpec
8
8
 
9
- **Transpec** is a tool for converting your specs to the latest [RSpec](http://rspec.info/) syntax with static and dynamic code analysis.
9
+ **Transpec** is a tool for converting your specs to the latest [RSpec](https://relishapp.com/rspec/) syntax with static and dynamic code analysis.
10
10
 
11
11
  With Transpec you can upgrade your RSpec 2 specs to RSpec 3 in no time.
12
12
  It supports [conversions](#supported-conversions) for almost all of the RSpec 3 changes – not only the `expect` syntax.
@@ -728,6 +728,7 @@ Targets:
728
728
  lambda { do_something }.should raise_error
729
729
  proc { do_something }.should raise_error
730
730
  -> { do_something }.should raise_error
731
+ expect { do_something }.should raise_error
731
732
  ```
732
733
 
733
734
  Will be converted to:
data/README.md.erb CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Transpec
8
8
 
9
- **Transpec** is a tool for converting your specs to the latest [RSpec](http://rspec.info/) syntax with static and dynamic code analysis.
9
+ **Transpec** is a tool for converting your specs to the latest [RSpec](https://relishapp.com/rspec/) syntax with static and dynamic code analysis.
10
10
 
11
11
  With Transpec you can upgrade your RSpec 2 specs to RSpec 3 in no time.
12
12
  It supports [conversions](#supported-conversions) for almost all of the RSpec 3 changes – not only the `expect` syntax.
@@ -799,6 +799,7 @@ example = <<END
799
799
  lambda { do_something }.should raise_error
800
800
  proc { do_something }.should raise_error
801
801
  -> { do_something }.should raise_error
802
+ expect { do_something }.should raise_error
802
803
  END
803
804
  -%>
804
805
  ```
@@ -26,15 +26,15 @@ module Transpec
26
26
  def rewrite(processed_source)
27
27
  fail processed_source.syntax_error if processed_source.syntax_error
28
28
 
29
- source_rewriter = Parser::Source::Rewriter.new(processed_source.buffer)
29
+ source_rewriter = create_source_rewriter(processed_source)
30
30
  incomplete = false
31
- source_rewriter.diagnostics.consumer = proc do
31
+
32
+ begin
33
+ process(processed_source.ast, source_rewriter)
34
+ rescue OverlappedRewriteError
32
35
  incomplete = true
33
- fail OverlappedRewriteError
34
36
  end
35
37
 
36
- process(processed_source.ast, source_rewriter)
37
-
38
38
  rewritten_source = source_rewriter.process
39
39
  rewritten_source = rewrite_source(rewritten_source, processed_source.path) if incomplete
40
40
 
@@ -43,6 +43,14 @@ module Transpec
43
43
 
44
44
  private
45
45
 
46
+ def create_source_rewriter(processed_source)
47
+ Parser::Source::Rewriter.new(processed_source.buffer).tap do |source_rewriter|
48
+ source_rewriter.diagnostics.consumer = proc do
49
+ fail OverlappedRewriteError
50
+ end
51
+ end
52
+ end
53
+
46
54
  def process(ast, source_rewriter) # rubocop:disable UnusedMethodArgument
47
55
  fail NotImplementedError
48
56
  end
@@ -36,7 +36,6 @@ module Transpec
36
36
  ast.each_node do |node|
37
37
  begin
38
38
  dispatch_node(node, source_rewriter, runtime_data, report)
39
- rescue OverlappedRewriteError # rubocop:disable HandleExceptions
40
39
  rescue ConversionError => error
41
40
  report.conversion_errors << error
42
41
  end
@@ -15,7 +15,7 @@ require 'English'
15
15
  module Transpec
16
16
  class DynamicAnalyzer
17
17
  ANALYSIS_METHOD = 'transpec_analyze'
18
- HELPER_FILE = 'transpec_analysis_helper.rb'
18
+ HELPER_TEMPLATE_FILE = 'transpec_analysis_helper.rb.erb'
19
19
  RESULT_FILE = 'transpec_analysis_result.json'
20
20
 
21
21
  attr_reader :project, :rspec_command, :silent
@@ -44,9 +44,8 @@ module Transpec
44
44
  def analyze(paths = [])
45
45
  in_copied_project do
46
46
  rewrite_specs(paths)
47
-
48
- File.write(HELPER_FILE, helper_source)
49
-
47
+ put_analysis_helper
48
+ modify_dot_rspec
50
49
  run_rspec(paths)
51
50
 
52
51
  begin
@@ -59,6 +58,24 @@ module Transpec
59
58
  end
60
59
  end
61
60
 
61
+ def copy_recursively(source_root, destination_root)
62
+ source_root = File.expand_path(source_root)
63
+ source_root_pathname = Pathname.new(source_root)
64
+
65
+ destination_root = File.expand_path(destination_root)
66
+ if File.directory?(destination_root)
67
+ destination_root = File.join(destination_root, File.basename(source_root))
68
+ end
69
+
70
+ Find.find(source_root) do |source_path|
71
+ relative_path = Pathname.new(source_path).relative_path_from(source_root_pathname).to_s
72
+ destination_path = File.join(destination_root, relative_path)
73
+ copy(source_path, destination_path)
74
+ end
75
+ end
76
+
77
+ private
78
+
62
79
  def in_copied_project
63
80
  return yield if @in_copied_project
64
81
 
@@ -77,8 +94,6 @@ module Transpec
77
94
 
78
95
  def run_rspec(paths)
79
96
  project.with_bundler_clean_env do
80
- ENV['SPEC_OPTS'] = ['-r', "./#{HELPER_FILE}"].shelljoin
81
-
82
97
  command = "#{rspec_command} #{paths.shelljoin}"
83
98
 
84
99
  if silent?
@@ -89,24 +104,6 @@ module Transpec
89
104
  end
90
105
  end
91
106
 
92
- def copy_recursively(source_root, destination_root)
93
- source_root = File.expand_path(source_root)
94
- source_root_pathname = Pathname.new(source_root)
95
-
96
- destination_root = File.expand_path(destination_root)
97
- if File.directory?(destination_root)
98
- destination_root = File.join(destination_root, File.basename(source_root))
99
- end
100
-
101
- Find.find(source_root) do |source_path|
102
- relative_path = Pathname.new(source_path).relative_path_from(source_root_pathname).to_s
103
- destination_path = File.join(destination_root, relative_path)
104
- copy(source_path, destination_path)
105
- end
106
- end
107
-
108
- private
109
-
110
107
  def rewrite_specs(paths)
111
108
  rewriter = Rewriter.new
112
109
 
@@ -118,12 +115,27 @@ module Transpec
118
115
  end
119
116
  end
120
117
 
118
+ def helper_filename
119
+ File.basename(HELPER_TEMPLATE_FILE, '.erb')
120
+ end
121
+
121
122
  def helper_source
122
- erb_path = File.join(File.dirname(__FILE__), 'dynamic_analyzer', 'helper.rb.erb')
123
+ erb_path = File.join(File.dirname(__FILE__), 'dynamic_analyzer', HELPER_TEMPLATE_FILE)
123
124
  erb = ERB.new(File.read(erb_path), nil)
124
125
  erb.result(binding)
125
126
  end
126
127
 
128
+ def put_analysis_helper
129
+ File.write(helper_filename, helper_source)
130
+ end
131
+
132
+ def modify_dot_rspec
133
+ filename = '.rspec'
134
+ content = "--require ./#{helper_filename}\n"
135
+ content << File.read(filename) if File.exist?(filename)
136
+ File.write(filename, content)
137
+ end
138
+
127
139
  def copy(source, destination)
128
140
  if File.symlink?(source)
129
141
  File.symlink(File.readlink(source), destination)
@@ -79,7 +79,6 @@ module Transpec
79
79
 
80
80
  source_rewriter.insert_before(source_range, front)
81
81
  source_rewriter.insert_after(source_range, rear)
82
- rescue OverlappedRewriteError # rubocop:disable HandleExceptions
83
82
  end
84
83
 
85
84
  def build_wrapper_codes(node, analysis_codes)
@@ -2,7 +2,7 @@ module TranspecAnalysis
2
2
  @base_path = Dir.pwd
3
3
 
4
4
  def self.temporary_data
5
- @data ||= {}
5
+ @temporary_data ||= {}
6
6
  end
7
7
 
8
8
  def self.data
@@ -19,18 +19,18 @@ module Transpec
19
19
  def convert_to_conditional_matcher!(form_of_be_falsey = 'be_falsey')
20
20
  replacement = be_true? ? 'be_truthy' : form_of_be_falsey
21
21
  replace(expression_range, replacement)
22
- register_record(replacement)
22
+ add_record(replacement)
23
23
  end
24
24
 
25
25
  def convert_to_exact_matcher!
26
26
  replacement = be_true? ? 'be true' : 'be false'
27
27
  replace(expression_range, replacement)
28
- register_record(replacement)
28
+ add_record(replacement)
29
29
  end
30
30
 
31
31
  private
32
32
 
33
- def register_record(converted_syntax)
33
+ def add_record(converted_syntax)
34
34
  report.records << Record.new(method_name.to_s, converted_syntax)
35
35
  end
36
36
  end
@@ -23,12 +23,12 @@ module Transpec
23
23
 
24
24
  replace(expression_range, be_within_source)
25
25
 
26
- register_record
26
+ add_record
27
27
  end
28
28
 
29
29
  private
30
30
 
31
- def register_record
31
+ def add_record
32
32
  report.records << Record.new('be_close(expected, delta)', 'be_within(delta).of(expected)')
33
33
  end
34
34
  end
@@ -28,7 +28,7 @@ module Transpec
28
28
  replace(selector_range, 'RSpec.current_example')
29
29
  end
30
30
 
31
- register_record
31
+ add_record
32
32
  end
33
33
 
34
34
  private
@@ -69,7 +69,7 @@ module Transpec
69
69
  send_node.children[1]
70
70
  end
71
71
 
72
- def register_record
72
+ def add_record
73
73
  if block_node
74
74
  prefix = "#{block_method_name}"
75
75
  prefix << '(:name)' if HELPER_METHODS.include?(block_method_name)
@@ -15,12 +15,12 @@ module Transpec
15
15
  def convert_to_double!
16
16
  return if method_name == :double
17
17
  replace(selector_range, 'double')
18
- register_record
18
+ add_record
19
19
  end
20
20
 
21
21
  private
22
22
 
23
- def register_record
23
+ def add_record
24
24
  report.records << Record.new("#{method_name}('something')", "double('something')")
25
25
  end
26
26
  end
@@ -28,7 +28,7 @@ module Transpec
28
28
  def convert_pending_selector_to_skip!
29
29
  return unless method_name == :pending
30
30
  replace(selector_range, 'skip')
31
- register_record("pending 'is an example' { }", "skip 'is an example' { }")
31
+ add_record("pending 'is an example' { }", "skip 'is an example' { }")
32
32
  end
33
33
 
34
34
  def convert_pending_metadata_to_skip!
@@ -36,11 +36,11 @@ module Transpec
36
36
  next unless pending_symbol?(node)
37
37
  replace(symbol_range_without_colon(node), 'skip')
38
38
  if node.parent_node.pair_type?
39
- register_record("it 'is an example', :pending => value { }",
40
- "it 'is an example', :skip => value { }")
39
+ add_record("it 'is an example', :pending => value { }",
40
+ "it 'is an example', :skip => value { }")
41
41
  else
42
- register_record("it 'is an example', :pending { }",
43
- "it 'is an example', :skip { }")
42
+ add_record("it 'is an example', :pending { }",
43
+ "it 'is an example', :skip { }")
44
44
  end
45
45
  end
46
46
  end
@@ -60,7 +60,7 @@ module Transpec
60
60
  end
61
61
  end
62
62
 
63
- def register_record(original_syntax, converted_syntax)
63
+ def add_record(original_syntax, converted_syntax)
64
64
  report.records << Record.new(original_syntax, converted_syntax)
65
65
  end
66
66
  end
@@ -37,7 +37,7 @@ module Transpec
37
37
  def convert_to_standard_expectation!(parenthesize_matcher_arg = true)
38
38
  replace(expectation.subject_range, replacement_subject_source) if explicit_subject?
39
39
  replace(matcher_range, source_builder.replacement_matcher_source(parenthesize_matcher_arg))
40
- register_record if explicit_subject?
40
+ add_record if explicit_subject?
41
41
  end
42
42
 
43
43
  def explicit_subject?
@@ -131,7 +131,7 @@ module Transpec
131
131
  end
132
132
  end
133
133
 
134
- def register_record
134
+ def add_record
135
135
  report.records << HaveRecord.new(self)
136
136
  end
137
137
  end
@@ -21,7 +21,7 @@ module Transpec
21
21
  def convert_scope_name!
22
22
  return if !scope_name || !replacement_scope_name
23
23
  replace(arg_range, replacement_scope_name.inspect)
24
- register_record
24
+ add_record
25
25
  end
26
26
 
27
27
  private
@@ -35,7 +35,7 @@ module Transpec
35
35
  SCOPE_ALIASES[scope_name]
36
36
  end
37
37
 
38
- def register_record
38
+ def add_record
39
39
  original_syntax = "#{method_name}(#{scope_name.inspect}) { }"
40
40
  converted_syntax = "#{method_name}(#{replacement_scope_name.inspect}) { }"
41
41
  report.records << Record.new(original_syntax, converted_syntax)
@@ -30,7 +30,7 @@ module Transpec
30
30
  replace(range_from_its_to_front_of_block, 'it ')
31
31
  insert_after(block_node.loc.expression, rear)
32
32
 
33
- register_record
33
+ add_record
34
34
  end
35
35
 
36
36
  def attribute_expression
@@ -93,7 +93,7 @@ module Transpec
93
93
  expression_range.join(block_node.loc.begin.begin)
94
94
  end
95
95
 
96
- def register_record
96
+ def add_record
97
97
  report.records << Record.new(original_syntax, converted_syntax)
98
98
  end
99
99
 
@@ -71,7 +71,7 @@ module Transpec
71
71
 
72
72
  replace(expression_range, source)
73
73
 
74
- register_record(type)
74
+ add_record(type)
75
75
  end
76
76
 
77
77
  def convert_deprecated_method!
@@ -79,21 +79,21 @@ module Transpec
79
79
 
80
80
  replace(selector_range, replacement_method_for_deprecated_method)
81
81
 
82
- register_record(:deprecated)
82
+ add_record(:deprecated)
83
83
  end
84
84
 
85
85
  def remove_no_message_allowance!
86
86
  return unless allow_no_message?
87
87
  super
88
- register_record(:no_message_allowance)
88
+ add_record(:no_message_allowance)
89
89
  end
90
90
 
91
91
  def remove_useless_and_return!
92
- super && register_record(:useless_and_return)
92
+ super && add_record(:useless_and_return)
93
93
  end
94
94
 
95
95
  def add_receiver_arg_to_any_instance_implementation_block!
96
- super && register_record(:any_instance_block)
96
+ super && add_record(:any_instance_block)
97
97
  end
98
98
 
99
99
  private
@@ -169,7 +169,7 @@ module Transpec
169
169
  end
170
170
  end
171
171
 
172
- def register_record(conversion_type)
172
+ def add_record(conversion_type)
173
173
  record_class = case conversion_type
174
174
  when :deprecated then DeprecatedMethodRecord
175
175
  when :no_message_allowance then NoMessageAllowanceRecord
@@ -31,7 +31,7 @@ module Transpec
31
31
 
32
32
  @current_syntax_type = :expect
33
33
 
34
- register_record(negative_form)
34
+ add_record(negative_form)
35
35
  end
36
36
 
37
37
  def convert_have_items_to_standard_should!
@@ -140,7 +140,7 @@ module Transpec
140
140
  expand_range_to_adjacent_whitespaces(example_block_node.loc.end, :begin)
141
141
  end
142
142
 
143
- def register_record(negative_form_of_to)
143
+ def add_record(negative_form_of_to)
144
144
  original_syntax = 'it { should'
145
145
  converted_syntax = 'it { is_expected.'
146
146
 
@@ -64,13 +64,13 @@ module Transpec
64
64
  handle_anterior_of_operator!
65
65
  replace(selector_range, 'eq')
66
66
  parenthesize!(parenthesize_arg)
67
- register_record(nil, 'eq(expected)')
67
+ add_record(nil, 'eq(expected)')
68
68
  end
69
69
 
70
70
  def convert_to_be_operator!
71
71
  return if prefixed_with_be?
72
72
  insert_before(selector_range, 'be ')
73
- register_record(nil, "be #{method_name} expected")
73
+ add_record(nil, "be #{method_name} expected")
74
74
  end
75
75
 
76
76
  def convert_to_match!(parenthesize_arg)
@@ -89,9 +89,9 @@ module Transpec
89
89
  # Need to register record after all source rewrites are done
90
90
  # to avoid false record when failed with overlapped rewrite.
91
91
  if enumerable_arg?
92
- register_record('=~ [1, 2]', 'match_array([1, 2])', accurate)
92
+ add_record('=~ [1, 2]', 'match_array([1, 2])', accurate)
93
93
  else
94
- register_record('=~ /pattern/', 'match(/pattern/)', accurate)
94
+ add_record('=~ /pattern/', 'match(/pattern/)', accurate)
95
95
  end
96
96
  end
97
97
 
@@ -157,7 +157,7 @@ module Transpec
157
157
  end
158
158
  end
159
159
 
160
- def register_record(original_syntax, converted_syntax, accurate = true)
160
+ def add_record(original_syntax, converted_syntax, accurate = true)
161
161
  original_syntax ||= "#{method_name} expected"
162
162
  annotation = AccuracyAnnotation.new(matcher_range) unless accurate
163
163
  report.records << Record.new(original_syntax, converted_syntax, annotation)
@@ -29,7 +29,7 @@ module Transpec
29
29
 
30
30
  def convert_to_skip!
31
31
  replace(selector_range, 'skip')
32
- register_record('pending', 'skip')
32
+ add_record('pending', 'skip')
33
33
  end
34
34
 
35
35
  def unblock!
@@ -46,7 +46,7 @@ module Transpec
46
46
  remove(line_range(block_node.loc.end))
47
47
  end
48
48
 
49
- register_record('pending { do_something_fail }', 'pending; do_something_fail')
49
+ add_record('pending { do_something_fail }', 'pending; do_something_fail')
50
50
  end
51
51
 
52
52
  def outdent!(target_node, base_node)
@@ -97,7 +97,7 @@ module Transpec
97
97
  block_body_node.loc.expression.end.join(block_node.loc.end)
98
98
  end
99
99
 
100
- def register_record(original_syntax, converted_syntax)
100
+ def add_record(original_syntax, converted_syntax)
101
101
  report.records << Record.new(original_syntax, converted_syntax)
102
102
  end
103
103
  end
@@ -21,12 +21,12 @@ module Transpec
21
21
 
22
22
  remove(parentheses_range)
23
23
 
24
- register_record
24
+ add_record
25
25
  end
26
26
 
27
27
  private
28
28
 
29
- def register_record
29
+ def add_record
30
30
  original_syntax = 'expect { }.not_to raise_error('
31
31
 
32
32
  if arg_nodes.first.const_type?
@@ -42,7 +42,7 @@ module Transpec
42
42
  replace(should_range, positive? ? 'to' : negative_form)
43
43
 
44
44
  @current_syntax_type = :expect
45
- register_record(negative_form)
45
+ add_record(negative_form)
46
46
  end
47
47
 
48
48
  private
@@ -64,7 +64,7 @@ module Transpec
64
64
  send_node.loc.expression
65
65
  end
66
66
 
67
- def register_record(negative_form_of_to)
67
+ def add_record(negative_form_of_to)
68
68
  if proc_subject?
69
69
  original_syntax = "#{range_of_subject_method_taking_block.source} { }.should"
70
70
  converted_syntax = 'expect { }.'
@@ -51,7 +51,7 @@ module Transpec
51
51
  end
52
52
 
53
53
  convert_to_syntax!('expect', negative_form)
54
- register_record(ExpectRecord, negative_form)
54
+ add_record(ExpectRecord, negative_form)
55
55
  end
56
56
 
57
57
  def allowize_useless_expectation!(negative_form = 'not_to')
@@ -64,7 +64,7 @@ module Transpec
64
64
  convert_to_syntax!('allow', negative_form)
65
65
  remove_no_message_allowance!
66
66
 
67
- register_record(AllowRecord, negative_form)
67
+ add_record(AllowRecord, negative_form)
68
68
  end
69
69
 
70
70
  def stubize_useless_expectation!
@@ -73,15 +73,15 @@ module Transpec
73
73
  replace(selector_range, 'stub')
74
74
  remove_no_message_allowance!
75
75
 
76
- register_record(StubRecord)
76
+ add_record(StubRecord)
77
77
  end
78
78
 
79
79
  def remove_useless_and_return!
80
- super && register_record(MonkeyPatchUselessAndReturnRecord)
80
+ super && add_record(MonkeyPatchUselessAndReturnRecord)
81
81
  end
82
82
 
83
83
  def add_receiver_arg_to_any_instance_implementation_block!
84
- super && register_record(MonkeyPatchAnyInstanceBlockRecord)
84
+ super && add_record(MonkeyPatchAnyInstanceBlockRecord)
85
85
  end
86
86
 
87
87
  private
@@ -158,7 +158,7 @@ module Transpec
158
158
  end
159
159
  end
160
160
 
161
- def register_record(record_class, negative_form_of_to = nil)
161
+ def add_record(record_class, negative_form_of_to = nil)
162
162
  report.records << record_class.new(self, negative_form_of_to)
163
163
  end
164
164
 
@@ -5,7 +5,7 @@ module Transpec
5
5
  module Version
6
6
  MAJOR = 2
7
7
  MINOR = 2
8
- PATCH = 1
8
+ PATCH = 2
9
9
 
10
10
  def self.to_s
11
11
  [MAJOR, MINOR, PATCH].join('.')
@@ -85,7 +85,7 @@ module Transpec
85
85
  end
86
86
  end
87
87
 
88
- context 'when the source has overlapped convert targets' do
88
+ context 'when the source has overlapped conversion targets' do
89
89
  let(:source) do
90
90
  <<-END
91
91
  describe 'example group' do
@@ -9,6 +9,11 @@ module Transpec
9
9
  include ::AST::Sexp
10
10
  include_context 'isolated environment'
11
11
 
12
+ def find_node_in_file(file_path, &block)
13
+ processed_source = ProcessedSource.parse_file(file_path)
14
+ processed_source.ast.each_node.find(&block)
15
+ end
16
+
12
17
  subject(:dynamic_analyzer) { DynamicAnalyzer.new(rspec_command: rspec_command, silent: true) }
13
18
  let(:rspec_command) { nil }
14
19
 
@@ -65,6 +70,12 @@ module Transpec
65
70
  end
66
71
 
67
72
  describe '#analyze' do
73
+ before do
74
+ create_file(spec_file_path, source)
75
+ end
76
+
77
+ let(:spec_file_path) { 'spec/example_spec.rb' }
78
+
68
79
  let(:source) do
69
80
  <<-END
70
81
  describe [1, 2] do
@@ -75,12 +86,6 @@ module Transpec
75
86
  END
76
87
  end
77
88
 
78
- let(:file_path) { 'spec/example_spec.rb' }
79
-
80
- before do
81
- create_file(file_path, source)
82
- end
83
-
84
89
  context 'when already in copied project directory' do
85
90
  it 'does not change working directory' do
86
91
  DynamicAnalyzer.new(silent: true) do |analyzer|
@@ -93,7 +98,7 @@ module Transpec
93
98
  context 'when no path is passed' do
94
99
  it 'rewrites all files in the "spec" directory' do
95
100
  DynamicAnalyzer::Rewriter.any_instance.should_receive(:rewrite_file!) do |spec|
96
- spec.path.should == file_path
101
+ spec.path.should == spec_file_path
97
102
  end
98
103
 
99
104
  dynamic_analyzer.analyze
@@ -107,10 +112,10 @@ module Transpec
107
112
 
108
113
  it 'rewrites only files in the passed paths' do
109
114
  DynamicAnalyzer::Rewriter.any_instance.should_receive(:rewrite_file!) do |spec|
110
- spec.path.should == file_path
115
+ spec.path.should == spec_file_path
111
116
  end
112
117
 
113
- dynamic_analyzer.analyze([file_path])
118
+ dynamic_analyzer.analyze([spec_file_path])
114
119
  end
115
120
  end
116
121
 
@@ -156,6 +161,45 @@ module Transpec
156
161
  end
157
162
  end
158
163
 
164
+ context 'when there is a .rspec file containing `--require spec_helper`' do
165
+ before do
166
+ create_file('.rspec', '--require spec_helper')
167
+ end
168
+
169
+ context 'and the spec/spec_helper.rb contains some code that is dynamic analysis target' do
170
+ before do
171
+ create_file('spec/spec_helper.rb', <<-END)
172
+ RSpec.configure { }
173
+
174
+ def some_helper_method_used_in_each_spec
175
+ end
176
+ END
177
+ end
178
+
179
+ let(:source) do
180
+ <<-END
181
+ some_helper_method_used_in_each_spec
182
+
183
+ describe 'something' do
184
+ end
185
+ END
186
+ end
187
+
188
+ it 'does not raise error' do
189
+ -> { dynamic_analyzer.analyze }.should_not raise_error
190
+ end
191
+
192
+ it 'preserves the existing `--require`' do
193
+ describe_node = find_node_in_file(spec_file_path) do |node|
194
+ node.send_type? && node.children[1] == :describe
195
+ end
196
+
197
+ runtime_data = dynamic_analyzer.analyze
198
+ runtime_data.run?(describe_node).should be_true
199
+ end
200
+ end
201
+ end
202
+
159
203
  runtime_data_cache = {}
160
204
 
161
205
  subject(:runtime_data) do
@@ -171,19 +215,9 @@ module Transpec
171
215
  end
172
216
 
173
217
  describe 'an element of the runtime data' do
174
- let(:ast) do
175
- source_buffer = Parser::Source::Buffer.new(file_path)
176
- source_buffer.source = source
177
-
178
- builder = AST::Builder.new
179
-
180
- parser = Parser::CurrentRuby.new(builder)
181
- parser.parse(source_buffer)
182
- end
183
-
184
218
  let(:target_node) do
185
- ast.each_descendent_node do |node|
186
- return node if node == s(:send, nil, :subject)
219
+ find_node_in_file(spec_file_path) do |node|
220
+ node == s(:send, nil, :subject)
187
221
  end
188
222
  end
189
223
 
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: 2.2.1
4
+ version: 2.2.2
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-06-03 00:00:00.000000000 Z
11
+ date: 2014-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -262,10 +262,10 @@ files:
262
262
  - lib/transpec/conversion_error.rb
263
263
  - lib/transpec/converter.rb
264
264
  - lib/transpec/dynamic_analyzer.rb
265
- - lib/transpec/dynamic_analyzer/helper.rb.erb
266
265
  - lib/transpec/dynamic_analyzer/node_util.rb
267
266
  - lib/transpec/dynamic_analyzer/rewriter.rb
268
267
  - lib/transpec/dynamic_analyzer/runtime_data.rb
268
+ - lib/transpec/dynamic_analyzer/transpec_analysis_helper.rb.erb
269
269
  - lib/transpec/file_finder.rb
270
270
  - lib/transpec/git.rb
271
271
  - lib/transpec/option_parser.rb