transpec 0.2.6 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|