transpec 0.2.6 → 1.0.0
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/.gitignore +1 -0
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +10 -0
- data/README.md +111 -56
- data/README.md.erb +117 -62
- data/lib/transpec/ast/node.rb +41 -0
- data/lib/transpec/base_rewriter.rb +55 -0
- data/lib/transpec/cli.rb +43 -153
- data/lib/transpec/configuration.rb +13 -9
- data/lib/transpec/{rewriter.rb → converter.rb} +44 -71
- data/lib/transpec/dynamic_analyzer/rewriter.rb +94 -0
- data/lib/transpec/dynamic_analyzer/runtime_data.rb +27 -0
- data/lib/transpec/dynamic_analyzer.rb +166 -0
- data/lib/transpec/file_finder.rb +53 -0
- data/lib/transpec/option_parser.rb +166 -0
- data/lib/transpec/{context.rb → static_context_inspector.rb} +2 -2
- data/lib/transpec/syntax/be_close.rb +7 -9
- data/lib/transpec/syntax/double.rb +6 -10
- data/lib/transpec/syntax/expect.rb +35 -0
- data/lib/transpec/syntax/have.rb +195 -0
- data/lib/transpec/syntax/method_stub.rb +22 -27
- data/lib/transpec/syntax/mixin/allow_no_message.rb +73 -0
- data/lib/transpec/syntax/mixin/any_instance.rb +22 -0
- data/lib/transpec/syntax/mixin/expectizable.rb +26 -0
- data/lib/transpec/syntax/mixin/have_matcher.rb +23 -0
- data/lib/transpec/syntax/mixin/monkey_patch.rb +37 -0
- data/lib/transpec/syntax/mixin/send.rb +109 -0
- data/lib/transpec/syntax/{matcher.rb → operator_matcher.rb} +27 -14
- data/lib/transpec/syntax/raise_error.rb +6 -10
- data/lib/transpec/syntax/rspec_configure.rb +29 -28
- data/lib/transpec/syntax/should.rb +45 -15
- data/lib/transpec/syntax/should_receive.rb +44 -16
- data/lib/transpec/syntax.rb +29 -21
- data/lib/transpec/util.rb +12 -2
- data/lib/transpec/version.rb +3 -3
- data/spec/spec_helper.rb +8 -6
- data/spec/support/cache_helper.rb +50 -0
- data/spec/support/shared_context.rb +49 -1
- data/spec/transpec/ast/node_spec.rb +65 -0
- data/spec/transpec/cli_spec.rb +33 -242
- data/spec/transpec/commit_message_spec.rb +2 -2
- data/spec/transpec/configuration_spec.rb +12 -8
- data/spec/transpec/{rewriter_spec.rb → converter_spec.rb} +198 -148
- data/spec/transpec/dynamic_analyzer/rewriter_spec.rb +183 -0
- data/spec/transpec/dynamic_analyzer_spec.rb +164 -0
- data/spec/transpec/file_finder_spec.rb +118 -0
- data/spec/transpec/option_parser_spec.rb +185 -0
- data/spec/transpec/{context_spec.rb → static_context_inspector_spec.rb} +27 -12
- data/spec/transpec/syntax/be_close_spec.rb +8 -4
- data/spec/transpec/syntax/double_spec.rb +105 -12
- data/spec/transpec/syntax/expect_spec.rb +83 -0
- data/spec/transpec/syntax/have_spec.rb +599 -0
- data/spec/transpec/syntax/method_stub_spec.rb +276 -115
- data/spec/transpec/syntax/{matcher_spec.rb → operator_matcher_spec.rb} +277 -98
- data/spec/transpec/syntax/raise_error_spec.rb +92 -46
- data/spec/transpec/syntax/should_receive_spec.rb +298 -92
- data/spec/transpec/syntax/should_spec.rb +230 -44
- data/spec/transpec/util_spec.rb +2 -9
- data/tasks/lib/transpec_demo.rb +1 -1
- data/tasks/lib/transpec_test.rb +5 -7
- data/tasks/test.rake +5 -1
- data/transpec.gemspec +1 -1
- metadata +46 -22
- data/lib/transpec/syntax/able_to_allow_no_message.rb +0 -73
- data/lib/transpec/syntax/able_to_target_any_instance.rb +0 -24
- data/lib/transpec/syntax/expectizable.rb +0 -27
- data/lib/transpec/syntax/send_node_syntax.rb +0 -57
@@ -1,73 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require 'transpec/syntax'
|
4
|
-
|
5
|
-
module Transpec
|
6
|
-
class Syntax
|
7
|
-
module AbleToAllowNoMessage
|
8
|
-
include ::AST::Sexp
|
9
|
-
|
10
|
-
def allow_no_message?
|
11
|
-
any_number_of_times? || at_least_zero?
|
12
|
-
end
|
13
|
-
|
14
|
-
def remove_allowance_for_no_message!
|
15
|
-
remove_any_number_of_times!
|
16
|
-
remove_at_least_zero!
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def any_number_of_times?
|
22
|
-
!any_number_of_times_node.nil?
|
23
|
-
end
|
24
|
-
|
25
|
-
def at_least_zero?
|
26
|
-
!at_least_zero_node.nil?
|
27
|
-
end
|
28
|
-
|
29
|
-
def remove_any_number_of_times!
|
30
|
-
return unless any_number_of_times?
|
31
|
-
remove_dot_and_method!(any_number_of_times_node)
|
32
|
-
end
|
33
|
-
|
34
|
-
def remove_at_least_zero!
|
35
|
-
return unless at_least_zero?
|
36
|
-
remove_dot_and_method!(at_least_zero_node)
|
37
|
-
end
|
38
|
-
|
39
|
-
def remove_dot_and_method!(send_node)
|
40
|
-
map = send_node.loc
|
41
|
-
dot_and_method_range = map.dot.join(map.expression.end)
|
42
|
-
remove(dot_and_method_range)
|
43
|
-
end
|
44
|
-
|
45
|
-
def any_number_of_times_node
|
46
|
-
each_following_chained_method_node do |chained_node|
|
47
|
-
method_name = chained_node.children[1]
|
48
|
-
return chained_node if method_name == :any_number_of_times
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def at_least_zero_node
|
53
|
-
each_following_chained_method_node do |chained_node|
|
54
|
-
_, method_name, arg_node = *chained_node
|
55
|
-
next unless method_name == :at_least
|
56
|
-
return chained_node if arg_node == s(:int, 0)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def each_following_chained_method_node
|
61
|
-
return to_enum(__method__) unless block_given?
|
62
|
-
|
63
|
-
@ancestor_nodes.reverse.reduce(@node) do |child_node, parent_node|
|
64
|
-
return unless [:send, :block].include?(parent_node.type)
|
65
|
-
return unless parent_node.children.first == child_node
|
66
|
-
yield parent_node, child_node
|
67
|
-
parent_node
|
68
|
-
end
|
69
|
-
nil
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require 'transpec/syntax/send_node_syntax'
|
4
|
-
|
5
|
-
module Transpec
|
6
|
-
class Syntax
|
7
|
-
module AbleToTargetAnyInstance
|
8
|
-
include SendNodeSyntax
|
9
|
-
|
10
|
-
def any_instance?
|
11
|
-
!class_node_of_any_instance.nil?
|
12
|
-
end
|
13
|
-
|
14
|
-
def class_node_of_any_instance
|
15
|
-
return nil unless subject_node.type == :send
|
16
|
-
return nil unless subject_node.children.count == 2
|
17
|
-
receiver_node, method_name = *subject_node
|
18
|
-
return nil unless method_name == :any_instance
|
19
|
-
return nil unless receiver_node.type == :const
|
20
|
-
receiver_node
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require 'transpec/syntax/send_node_syntax'
|
4
|
-
require 'transpec/util'
|
5
|
-
|
6
|
-
module Transpec
|
7
|
-
class Syntax
|
8
|
-
module Expectizable
|
9
|
-
include SendNodeSyntax
|
10
|
-
|
11
|
-
def wrap_subject_in_expect!
|
12
|
-
wrap_subject_with_method!('expect')
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def wrap_subject_with_method!(method)
|
18
|
-
if Util.in_parentheses?(subject_node)
|
19
|
-
insert_before(subject_range, method)
|
20
|
-
else
|
21
|
-
insert_before(subject_range, "#{method}(")
|
22
|
-
insert_after(subject_range, ')')
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require 'transpec/syntax'
|
4
|
-
|
5
|
-
module Transpec
|
6
|
-
class Syntax
|
7
|
-
module SendNodeSyntax
|
8
|
-
def receiver_node
|
9
|
-
@node.children[0]
|
10
|
-
end
|
11
|
-
|
12
|
-
alias_method :subject_node, :receiver_node
|
13
|
-
|
14
|
-
def method_name
|
15
|
-
@node.children[1]
|
16
|
-
end
|
17
|
-
|
18
|
-
def arg_node
|
19
|
-
@node.children[2]
|
20
|
-
end
|
21
|
-
|
22
|
-
def arg_nodes
|
23
|
-
@node.children[2..-1]
|
24
|
-
end
|
25
|
-
|
26
|
-
def selector_range
|
27
|
-
@node.loc.selector
|
28
|
-
end
|
29
|
-
|
30
|
-
def receiver_range
|
31
|
-
receiver_node.loc.expression
|
32
|
-
end
|
33
|
-
|
34
|
-
alias_method :subject_range, :receiver_range
|
35
|
-
|
36
|
-
def arg_range
|
37
|
-
arg_node.loc.expression
|
38
|
-
end
|
39
|
-
|
40
|
-
def parentheses_range
|
41
|
-
selector_range.end.join(expression_range.end)
|
42
|
-
end
|
43
|
-
|
44
|
-
def range_in_between_receiver_and_selector
|
45
|
-
receiver_range.end.join(selector_range.begin)
|
46
|
-
end
|
47
|
-
|
48
|
-
def range_in_between_selector_and_arg
|
49
|
-
selector_range.end.join(arg_range.begin)
|
50
|
-
end
|
51
|
-
|
52
|
-
def range_after_arg
|
53
|
-
arg_range.end.join(expression_range.end)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|