transpec 0.2.6 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +1 -1
  4. data/CHANGELOG.md +10 -0
  5. data/README.md +111 -56
  6. data/README.md.erb +117 -62
  7. data/lib/transpec/ast/node.rb +41 -0
  8. data/lib/transpec/base_rewriter.rb +55 -0
  9. data/lib/transpec/cli.rb +43 -153
  10. data/lib/transpec/configuration.rb +13 -9
  11. data/lib/transpec/{rewriter.rb → converter.rb} +44 -71
  12. data/lib/transpec/dynamic_analyzer/rewriter.rb +94 -0
  13. data/lib/transpec/dynamic_analyzer/runtime_data.rb +27 -0
  14. data/lib/transpec/dynamic_analyzer.rb +166 -0
  15. data/lib/transpec/file_finder.rb +53 -0
  16. data/lib/transpec/option_parser.rb +166 -0
  17. data/lib/transpec/{context.rb → static_context_inspector.rb} +2 -2
  18. data/lib/transpec/syntax/be_close.rb +7 -9
  19. data/lib/transpec/syntax/double.rb +6 -10
  20. data/lib/transpec/syntax/expect.rb +35 -0
  21. data/lib/transpec/syntax/have.rb +195 -0
  22. data/lib/transpec/syntax/method_stub.rb +22 -27
  23. data/lib/transpec/syntax/mixin/allow_no_message.rb +73 -0
  24. data/lib/transpec/syntax/mixin/any_instance.rb +22 -0
  25. data/lib/transpec/syntax/mixin/expectizable.rb +26 -0
  26. data/lib/transpec/syntax/mixin/have_matcher.rb +23 -0
  27. data/lib/transpec/syntax/mixin/monkey_patch.rb +37 -0
  28. data/lib/transpec/syntax/mixin/send.rb +109 -0
  29. data/lib/transpec/syntax/{matcher.rb → operator_matcher.rb} +27 -14
  30. data/lib/transpec/syntax/raise_error.rb +6 -10
  31. data/lib/transpec/syntax/rspec_configure.rb +29 -28
  32. data/lib/transpec/syntax/should.rb +45 -15
  33. data/lib/transpec/syntax/should_receive.rb +44 -16
  34. data/lib/transpec/syntax.rb +29 -21
  35. data/lib/transpec/util.rb +12 -2
  36. data/lib/transpec/version.rb +3 -3
  37. data/spec/spec_helper.rb +8 -6
  38. data/spec/support/cache_helper.rb +50 -0
  39. data/spec/support/shared_context.rb +49 -1
  40. data/spec/transpec/ast/node_spec.rb +65 -0
  41. data/spec/transpec/cli_spec.rb +33 -242
  42. data/spec/transpec/commit_message_spec.rb +2 -2
  43. data/spec/transpec/configuration_spec.rb +12 -8
  44. data/spec/transpec/{rewriter_spec.rb → converter_spec.rb} +198 -148
  45. data/spec/transpec/dynamic_analyzer/rewriter_spec.rb +183 -0
  46. data/spec/transpec/dynamic_analyzer_spec.rb +164 -0
  47. data/spec/transpec/file_finder_spec.rb +118 -0
  48. data/spec/transpec/option_parser_spec.rb +185 -0
  49. data/spec/transpec/{context_spec.rb → static_context_inspector_spec.rb} +27 -12
  50. data/spec/transpec/syntax/be_close_spec.rb +8 -4
  51. data/spec/transpec/syntax/double_spec.rb +105 -12
  52. data/spec/transpec/syntax/expect_spec.rb +83 -0
  53. data/spec/transpec/syntax/have_spec.rb +599 -0
  54. data/spec/transpec/syntax/method_stub_spec.rb +276 -115
  55. data/spec/transpec/syntax/{matcher_spec.rb → operator_matcher_spec.rb} +277 -98
  56. data/spec/transpec/syntax/raise_error_spec.rb +92 -46
  57. data/spec/transpec/syntax/should_receive_spec.rb +298 -92
  58. data/spec/transpec/syntax/should_spec.rb +230 -44
  59. data/spec/transpec/util_spec.rb +2 -9
  60. data/tasks/lib/transpec_demo.rb +1 -1
  61. data/tasks/lib/transpec_test.rb +5 -7
  62. data/tasks/test.rake +5 -1
  63. data/transpec.gemspec +1 -1
  64. metadata +46 -22
  65. data/lib/transpec/syntax/able_to_allow_no_message.rb +0 -73
  66. data/lib/transpec/syntax/able_to_target_any_instance.rb +0 -24
  67. data/lib/transpec/syntax/expectizable.rb +0 -27
  68. 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