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.
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