super_diff 0.9.0 → 0.10.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 (193) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +65 -26
  3. data/lib/super_diff/active_record/differs/active_record_relation.rb +1 -2
  4. data/lib/super_diff/active_record/differs.rb +1 -1
  5. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model.rb +5 -13
  6. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_relation.rb +1 -3
  7. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders.rb +2 -2
  8. data/lib/super_diff/active_record/object_inspection.rb +1 -1
  9. data/lib/super_diff/active_record/operation_tree_builders/active_record_model.rb +1 -2
  10. data/lib/super_diff/active_record/operation_tree_builders/active_record_relation.rb +1 -2
  11. data/lib/super_diff/active_record/operation_tree_builders.rb +2 -2
  12. data/lib/super_diff/active_record/operation_tree_flatteners.rb +1 -1
  13. data/lib/super_diff/active_record/operation_trees.rb +1 -1
  14. data/lib/super_diff/active_record.rb +7 -15
  15. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +5 -6
  16. data/lib/super_diff/active_support/differs.rb +1 -1
  17. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access.rb +3 -9
  18. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders.rb +1 -1
  19. data/lib/super_diff/active_support/object_inspection.rb +1 -1
  20. data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +5 -6
  21. data/lib/super_diff/active_support/operation_tree_builders.rb +1 -1
  22. data/lib/super_diff/active_support/operation_tree_flatteners.rb +1 -1
  23. data/lib/super_diff/active_support/operation_trees.rb +1 -1
  24. data/lib/super_diff/active_support.rb +6 -11
  25. data/lib/super_diff/colorized_document_extensions.rb +2 -4
  26. data/lib/super_diff/configuration.rb +14 -8
  27. data/lib/super_diff/csi/color.rb +4 -4
  28. data/lib/super_diff/csi/colorized_document.rb +12 -16
  29. data/lib/super_diff/csi/document.rb +8 -19
  30. data/lib/super_diff/csi/eight_bit_color.rb +19 -19
  31. data/lib/super_diff/csi/four_bit_color.rb +82 -31
  32. data/lib/super_diff/csi/twenty_four_bit_color.rb +12 -11
  33. data/lib/super_diff/csi/uncolorized_document.rb +2 -6
  34. data/lib/super_diff/csi.rb +10 -14
  35. data/lib/super_diff/diff_formatters/collection.rb +35 -41
  36. data/lib/super_diff/differs/default_object.rb +1 -1
  37. data/lib/super_diff/differs/defaults.rb +1 -1
  38. data/lib/super_diff/differs/main.rb +2 -13
  39. data/lib/super_diff/equality_matchers/array.rb +10 -12
  40. data/lib/super_diff/equality_matchers/base.rb +1 -1
  41. data/lib/super_diff/equality_matchers/default.rb +2 -4
  42. data/lib/super_diff/equality_matchers/defaults.rb +1 -1
  43. data/lib/super_diff/equality_matchers/hash.rb +10 -12
  44. data/lib/super_diff/equality_matchers/multiline_string.rb +11 -13
  45. data/lib/super_diff/equality_matchers/primitive.rb +10 -12
  46. data/lib/super_diff/equality_matchers/singleline_string.rb +10 -12
  47. data/lib/super_diff/equality_matchers.rb +1 -1
  48. data/lib/super_diff/errors.rb +3 -3
  49. data/lib/super_diff/gem_version.rb +3 -3
  50. data/lib/super_diff/helpers.rb +10 -10
  51. data/lib/super_diff/implementation_checks.rb +2 -2
  52. data/lib/super_diff/line.rb +3 -3
  53. data/lib/super_diff/object_inspection/inspection_tree.rb +46 -60
  54. data/lib/super_diff/object_inspection/inspection_tree_builders/array.rb +2 -6
  55. data/lib/super_diff/object_inspection/inspection_tree_builders/custom_object.rb +3 -9
  56. data/lib/super_diff/object_inspection/inspection_tree_builders/default_object.rb +5 -14
  57. data/lib/super_diff/object_inspection/inspection_tree_builders/defaults.rb +1 -1
  58. data/lib/super_diff/object_inspection/inspection_tree_builders/hash.rb +4 -12
  59. data/lib/super_diff/object_inspection/inspection_tree_builders/time_like.rb +6 -23
  60. data/lib/super_diff/object_inspection/inspection_tree_builders.rb +9 -9
  61. data/lib/super_diff/object_inspection/nodes/as_lines_when_rendering_to_lines.rb +8 -20
  62. data/lib/super_diff/object_inspection/nodes/as_prefix_when_rendering_to_lines.rb +1 -5
  63. data/lib/super_diff/object_inspection/nodes/as_prelude_when_rendering_to_lines.rb +1 -5
  64. data/lib/super_diff/object_inspection/nodes/as_single_line.rb +3 -7
  65. data/lib/super_diff/object_inspection/nodes/base.rb +9 -14
  66. data/lib/super_diff/object_inspection/nodes/inspection.rb +26 -34
  67. data/lib/super_diff/object_inspection/nodes/nesting.rb +1 -1
  68. data/lib/super_diff/object_inspection/nodes/only_when.rb +2 -6
  69. data/lib/super_diff/object_inspection/nodes/text.rb +1 -5
  70. data/lib/super_diff/object_inspection/nodes/when_empty.rb +2 -6
  71. data/lib/super_diff/object_inspection/nodes/when_non_empty.rb +2 -6
  72. data/lib/super_diff/object_inspection/nodes/when_rendering_to_lines.rb +1 -1
  73. data/lib/super_diff/object_inspection/nodes/when_rendering_to_string.rb +1 -5
  74. data/lib/super_diff/object_inspection/nodes.rb +7 -7
  75. data/lib/super_diff/object_inspection.rb +3 -3
  76. data/lib/super_diff/operation_tree_builders/array.rb +12 -11
  77. data/lib/super_diff/operation_tree_builders/base.rb +17 -15
  78. data/lib/super_diff/operation_tree_builders/custom_object.rb +8 -6
  79. data/lib/super_diff/operation_tree_builders/default_object.rb +29 -21
  80. data/lib/super_diff/operation_tree_builders/hash.rb +23 -24
  81. data/lib/super_diff/operation_tree_builders/main.rb +4 -11
  82. data/lib/super_diff/operation_tree_builders/multiline_string.rb +3 -3
  83. data/lib/super_diff/operation_tree_builders/time_like.rb +1 -11
  84. data/lib/super_diff/operation_tree_builders.rb +1 -1
  85. data/lib/super_diff/operation_tree_flatteners/base.rb +1 -5
  86. data/lib/super_diff/operation_tree_flatteners/collection.rb +13 -16
  87. data/lib/super_diff/operation_tree_flatteners/default_object.rb +1 -2
  88. data/lib/super_diff/operation_tree_flatteners/hash.rb +2 -10
  89. data/lib/super_diff/operation_tree_flatteners/multiline_string.rb +2 -1
  90. data/lib/super_diff/operation_tree_flatteners.rb +3 -3
  91. data/lib/super_diff/operation_trees/base.rb +3 -5
  92. data/lib/super_diff/operation_trees/default_object.rb +1 -3
  93. data/lib/super_diff/operations/binary_operation.rb +2 -2
  94. data/lib/super_diff/operations/unary_operation.rb +1 -1
  95. data/lib/super_diff/rails.rb +2 -1
  96. data/lib/super_diff/recursion_guard.rb +5 -4
  97. data/lib/super_diff/rspec/augmented_matcher.rb +4 -5
  98. data/lib/super_diff/rspec/differ.rb +6 -13
  99. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +3 -2
  100. data/lib/super_diff/rspec/differs/collection_including.rb +1 -1
  101. data/lib/super_diff/rspec/differs/hash_including.rb +1 -1
  102. data/lib/super_diff/rspec/differs.rb +3 -3
  103. data/lib/super_diff/rspec/matcher_text_builders/base.rb +13 -15
  104. data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +5 -7
  105. data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +3 -5
  106. data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +1 -5
  107. data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +2 -6
  108. data/lib/super_diff/rspec/matcher_text_builders.rb +5 -8
  109. data/lib/super_diff/rspec/matcher_text_template.rb +13 -16
  110. data/lib/super_diff/rspec/monkey_patches.rb +122 -116
  111. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_including.rb +8 -6
  112. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/double.rb +11 -16
  113. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/hash_including.rb +2 -1
  114. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/instance_of.rb +8 -6
  115. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/kind_of.rb +8 -6
  116. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders.rb +9 -9
  117. data/lib/super_diff/rspec/object_inspection.rb +1 -1
  118. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +11 -10
  119. data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +7 -6
  120. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +11 -10
  121. data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +22 -17
  122. data/lib/super_diff/rspec/operation_tree_builders.rb +4 -4
  123. data/lib/super_diff/rspec.rb +11 -13
  124. data/lib/super_diff/tiered_lines_elider.rb +87 -115
  125. data/lib/super_diff/tiered_lines_formatter.rb +5 -9
  126. data/lib/super_diff/version.rb +1 -1
  127. data/lib/super_diff.rb +4 -9
  128. data/spec/examples.txt +493 -485
  129. data/spec/integration/rails/active_record_spec.rb +3 -1
  130. data/spec/integration/rails/engines_spec.rb +20 -0
  131. data/spec/integration/rails/hash_with_indifferent_access_spec.rb +3 -1
  132. data/spec/integration/rspec/be_falsey_matcher_spec.rb +40 -35
  133. data/spec/integration/rspec/be_matcher_spec.rb +360 -320
  134. data/spec/integration/rspec/be_nil_matcher_spec.rb +38 -34
  135. data/spec/integration/rspec/be_predicate_matcher_spec.rb +376 -359
  136. data/spec/integration/rspec/be_truthy_matcher_spec.rb +38 -33
  137. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +242 -239
  138. data/spec/integration/rspec/eq_matcher_spec.rb +595 -557
  139. data/spec/integration/rspec/have_attributes_matcher_spec.rb +294 -286
  140. data/spec/integration/rspec/have_predicate_matcher_spec.rb +291 -297
  141. data/spec/integration/rspec/include_matcher_spec.rb +317 -215
  142. data/spec/integration/rspec/match_array_matcher_spec.rb +276 -273
  143. data/spec/integration/rspec/match_matcher_spec.rb +847 -834
  144. data/spec/integration/rspec/raise_error_matcher_spec.rb +468 -453
  145. data/spec/integration/rspec/respond_to_matcher_spec.rb +702 -697
  146. data/spec/integration/rspec/third_party_matcher_spec.rb +142 -138
  147. data/spec/integration/rspec/unhandled_errors_spec.rb +88 -84
  148. data/spec/spec_helper.rb +17 -20
  149. data/spec/support/command_runner.rb +34 -57
  150. data/spec/support/integration/helpers.rb +35 -28
  151. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +28 -23
  152. data/spec/support/integration/test_programs/base.rb +12 -17
  153. data/spec/support/integration/test_programs/plain.rb +6 -0
  154. data/spec/support/integration/test_programs/rspec_active_record.rb +4 -1
  155. data/spec/support/integration/test_programs/rspec_active_support.rb +4 -1
  156. data/spec/support/integration/test_programs/rspec_rails.rb +4 -1
  157. data/spec/support/integration/test_programs/rspec_rails_engine.rb +30 -0
  158. data/spec/support/models/active_record/person.rb +6 -4
  159. data/spec/support/models/active_record/shipping_address.rb +9 -10
  160. data/spec/support/models/customer.rb +2 -4
  161. data/spec/support/models/player.rb +3 -6
  162. data/spec/support/models/shipping_address.rb +4 -13
  163. data/spec/support/shared_examples/active_record.rb +232 -214
  164. data/spec/support/shared_examples/active_support.rb +53 -51
  165. data/spec/support/shared_examples/elided_diffs.rb +405 -381
  166. data/spec/support/shared_examples/hash_with_indifferent_access.rb +424 -388
  167. data/spec/support/shared_examples/key.rb +123 -0
  168. data/spec/support/unit/helpers.rb +1 -3
  169. data/spec/support/unit/matchers/match_output.rb +12 -13
  170. data/spec/unit/active_record/object_inspection_spec.rb +222 -206
  171. data/spec/unit/equality_matchers/main_spec.rb +1049 -984
  172. data/spec/unit/helpers_spec.rb +14 -21
  173. data/spec/unit/operation_tree_flatteners/array_spec.rb +557 -524
  174. data/spec/unit/operation_tree_flatteners/custom_object_spec.rb +619 -601
  175. data/spec/unit/operation_tree_flatteners/default_object_spec.rb +619 -621
  176. data/spec/unit/operation_tree_flatteners/hash_spec.rb +595 -556
  177. data/spec/unit/operation_tree_flatteners/multiline_string_spec.rb +102 -92
  178. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +3 -3
  179. data/spec/unit/rspec/matchers/be_predicate_spec.rb +3 -3
  180. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +1 -1
  181. data/spec/unit/rspec/matchers/have_attributes_spec.rb +1 -1
  182. data/spec/unit/rspec/matchers/have_predicate_spec.rb +2 -2
  183. data/spec/unit/rspec/matchers/include_spec.rb +2 -2
  184. data/spec/unit/rspec/matchers/match_array_spec.rb +2 -2
  185. data/spec/unit/rspec/matchers/raise_error_spec.rb +5 -5
  186. data/spec/unit/rspec/matchers/respond_to_spec.rb +23 -16
  187. data/spec/unit/rspec/object_inspection_spec.rb +349 -324
  188. data/spec/unit/super_diff_spec.rb +1542 -1449
  189. data/spec/unit/tiered_lines_elider_spec.rb +3508 -3536
  190. data/spec/unit/tiered_lines_formatter_spec.rb +54 -116
  191. data/super_diff.gemspec +13 -12
  192. metadata +73 -73
  193. data/spec/tmp/warnings_logger/all_warnings.txt +0 -2
@@ -1,47 +1,48 @@
1
1
  require "spec_helper"
2
2
 
3
- RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integration do
3
+ RSpec.describe "Integration with RSpec's #contain_exactly matcher",
4
+ type: :integration do
4
5
  context "when a few number of values are given" do
5
6
  it "produces the correct failure message when used in the positive" do
6
7
  as_both_colored_and_uncolored do |color_enabled|
7
8
  snippet = <<~TEST.strip
8
9
  expected = ["Einie", "Marty"]
9
- actual = ["Marty", "Jennifer", "Doc"]
10
+ actual = ["Marty", "Jennifer", "Doc"]
10
11
  expect(actual).to contain_exactly(*expected)
11
12
  TEST
12
- program = make_plain_test_program(
13
- snippet,
14
- color_enabled: color_enabled,
15
- )
13
+ program = make_plain_test_program(snippet, color_enabled: color_enabled)
16
14
 
17
- expected_output = build_expected_output(
18
- color_enabled: color_enabled,
19
- snippet: %|expect(actual).to contain_exactly(*expected)|,
20
- expectation: proc {
21
- line do
22
- plain %|Expected |
23
- actual %|["Marty", "Jennifer", "Doc"]|
24
- plain %| to contain exactly |
25
- expected %|"Einie"|
26
- plain %| and |
27
- expected %|"Marty"|
28
- plain %|.|
29
- end
30
- },
31
- diff: proc {
32
- plain_line %| [|
33
- plain_line %| "Marty",|
34
- actual_line %|+ "Jennifer",|
35
- actual_line %|+ "Doc",|
36
- # expected_line %|- "Einie"| # TODO
37
- expected_line %|- "Einie",|
38
- plain_line %| ]|
39
- },
40
- )
15
+ expected_output =
16
+ build_expected_output(
17
+ color_enabled: color_enabled,
18
+ snippet: "expect(actual).to contain_exactly(*expected)",
19
+ expectation:
20
+ proc do
21
+ line do
22
+ plain "Expected "
23
+ actual %|["Marty", "Jennifer", "Doc"]|
24
+ plain " to contain exactly "
25
+ expected %|"Einie"|
26
+ plain " and "
27
+ expected %|"Marty"|
28
+ plain "."
29
+ end
30
+ end,
31
+ diff:
32
+ proc do
33
+ plain_line " ["
34
+ plain_line %| "Marty",|
35
+ actual_line %|+ "Jennifer",|
36
+ actual_line %|+ "Doc",|
37
+ # expected_line %|- "Einie"| # TODO
38
+ expected_line %|- "Einie",|
39
+ plain_line " ]"
40
+ end
41
+ )
41
42
 
42
- expect(program).
43
- to produce_output_when_run(expected_output).
44
- in_color(color_enabled)
43
+ expect(program).to produce_output_when_run(expected_output).in_color(
44
+ color_enabled
45
+ )
45
46
  end
46
47
  end
47
48
 
@@ -51,30 +52,29 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
51
52
  values = ["Einie", "Marty"]
52
53
  expect(values).not_to contain_exactly(*values)
53
54
  TEST
54
- program = make_plain_test_program(
55
- snippet,
56
- color_enabled: color_enabled,
57
- )
55
+ program = make_plain_test_program(snippet, color_enabled: color_enabled)
58
56
 
59
- expected_output = build_expected_output(
60
- color_enabled: color_enabled,
61
- snippet: %|expect(values).not_to contain_exactly(*values)|,
62
- expectation: proc {
63
- line do
64
- plain %|Expected |
65
- actual %|["Einie", "Marty"]|
66
- plain %| not to contain exactly |
67
- expected %|"Einie"|
68
- plain %| and |
69
- expected %|"Marty"|
70
- plain %|.|
71
- end
72
- },
73
- )
57
+ expected_output =
58
+ build_expected_output(
59
+ color_enabled: color_enabled,
60
+ snippet: "expect(values).not_to contain_exactly(*values)",
61
+ expectation:
62
+ proc do
63
+ line do
64
+ plain "Expected "
65
+ actual %|["Einie", "Marty"]|
66
+ plain " not to contain exactly "
67
+ expected %|"Einie"|
68
+ plain " and "
69
+ expected %|"Marty"|
70
+ plain "."
71
+ end
72
+ end
73
+ )
74
74
 
75
- expect(program).
76
- to produce_output_when_run(expected_output).
77
- in_color(color_enabled)
75
+ expect(program).to produce_output_when_run(expected_output).in_color(
76
+ color_enabled
77
+ )
78
78
  end
79
79
  end
80
80
  end
@@ -91,7 +91,7 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
91
91
  "George McFly",
92
92
  "Lorraine McFly"
93
93
  ]
94
- actual = [
94
+ actual = [
95
95
  "Marty McFly",
96
96
  "Doc Brown",
97
97
  "Einie",
@@ -99,49 +99,50 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
99
99
  ]
100
100
  expect(actual).to contain_exactly(*expected)
101
101
  TEST
102
- program = make_plain_test_program(
103
- snippet,
104
- color_enabled: color_enabled,
105
- )
102
+ program =
103
+ make_plain_test_program(snippet, color_enabled: color_enabled)
106
104
 
107
- expected_output = build_expected_output(
108
- color_enabled: color_enabled,
109
- snippet: %|expect(actual).to contain_exactly(*expected)|,
110
- expectation: proc {
111
- line do
112
- plain %| Expected |
113
- actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
114
- end
105
+ expected_output =
106
+ build_expected_output(
107
+ color_enabled: color_enabled,
108
+ snippet: "expect(actual).to contain_exactly(*expected)",
109
+ expectation:
110
+ proc do
111
+ line do
112
+ plain " Expected "
113
+ actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
114
+ end
115
115
 
116
- line do
117
- plain %|to contain exactly |
118
- expected %|"Doc Brown"|
119
- plain %|, |
120
- expected %|"Marty McFly"|
121
- plain %|, |
122
- expected %|"Biff Tannen"|
123
- plain %|, |
124
- expected %|"George McFly"|
125
- plain %| and |
126
- expected %|"Lorraine McFly"|
127
- end
128
- },
129
- diff: proc {
130
- plain_line %| [|
131
- plain_line %| "Marty McFly",|
132
- plain_line %| "Doc Brown",|
133
- plain_line %| "Lorraine McFly",|
134
- actual_line %|+ "Einie",|
135
- expected_line %|- "Biff Tannen",|
136
- # expected_line %|- "George McFly"| # TODO
137
- expected_line %|- "George McFly",|
138
- plain_line %| ]|
139
- },
140
- )
116
+ line do
117
+ plain "to contain exactly "
118
+ expected %|"Doc Brown"|
119
+ plain ", "
120
+ expected %|"Marty McFly"|
121
+ plain ", "
122
+ expected %|"Biff Tannen"|
123
+ plain ", "
124
+ expected %|"George McFly"|
125
+ plain " and "
126
+ expected %|"Lorraine McFly"|
127
+ end
128
+ end,
129
+ diff:
130
+ proc do
131
+ plain_line " ["
132
+ plain_line %| "Marty McFly",|
133
+ plain_line %| "Doc Brown",|
134
+ plain_line %| "Lorraine McFly",|
135
+ actual_line %|+ "Einie",|
136
+ expected_line %|- "Biff Tannen",|
137
+ # expected_line %|- "George McFly"| # TODO
138
+ expected_line %|- "George McFly",|
139
+ plain_line " ]"
140
+ end
141
+ )
141
142
 
142
- expect(program).
143
- to produce_output_when_run(expected_output).
144
- in_color(color_enabled)
143
+ expect(program).to produce_output_when_run(expected_output).in_color(
144
+ color_enabled
145
+ )
145
146
  end
146
147
  end
147
148
 
@@ -156,37 +157,37 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
156
157
  ]
157
158
  expect(values).not_to contain_exactly(*values)
158
159
  TEST
159
- program = make_plain_test_program(
160
- snippet,
161
- color_enabled: color_enabled,
162
- )
160
+ program =
161
+ make_plain_test_program(snippet, color_enabled: color_enabled)
163
162
 
164
- expected_output = build_expected_output(
165
- color_enabled: color_enabled,
166
- snippet: %|expect(values).not_to contain_exactly(*values)|,
167
- newline_before_expectation: true,
168
- expectation: proc {
169
- line do
170
- plain %| Expected |
171
- actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
172
- end
163
+ expected_output =
164
+ build_expected_output(
165
+ color_enabled: color_enabled,
166
+ snippet: "expect(values).not_to contain_exactly(*values)",
167
+ newline_before_expectation: true,
168
+ expectation:
169
+ proc do
170
+ line do
171
+ plain " Expected "
172
+ actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
173
+ end
173
174
 
174
- line do
175
- plain %|not to contain exactly |
176
- expected %|"Marty McFly"|
177
- plain %|, |
178
- expected %|"Doc Brown"|
179
- plain %|, |
180
- expected %|"Einie"|
181
- plain %| and |
182
- expected %|"Lorraine McFly"|
183
- end
184
- },
185
- )
175
+ line do
176
+ plain "not to contain exactly "
177
+ expected %|"Marty McFly"|
178
+ plain ", "
179
+ expected %|"Doc Brown"|
180
+ plain ", "
181
+ expected %|"Einie"|
182
+ plain " and "
183
+ expected %|"Lorraine McFly"|
184
+ end
185
+ end
186
+ )
186
187
 
187
- expect(program).
188
- to produce_output_when_run(expected_output).
189
- in_color(color_enabled)
188
+ expect(program).to produce_output_when_run(expected_output).in_color(
189
+ color_enabled
190
+ )
190
191
  end
191
192
  end
192
193
  end
@@ -202,7 +203,7 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
202
203
  /Georg McFly/,
203
204
  /Lorrain McFly/
204
205
  ]
205
- actual = [
206
+ actual = [
206
207
  "Marty McFly",
207
208
  "Doc Brown",
208
209
  "Einie",
@@ -210,50 +211,51 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
210
211
  ]
211
212
  expect(actual).to contain_exactly(*expected)
212
213
  TEST
213
- program = make_plain_test_program(
214
- snippet,
215
- color_enabled: color_enabled,
216
- )
214
+ program =
215
+ make_plain_test_program(snippet, color_enabled: color_enabled)
217
216
 
218
- expected_output = build_expected_output(
219
- color_enabled: color_enabled,
220
- snippet: %|expect(actual).to contain_exactly(*expected)|,
221
- expectation: proc {
222
- line do
223
- plain %| Expected |
224
- actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
225
- end
217
+ expected_output =
218
+ build_expected_output(
219
+ color_enabled: color_enabled,
220
+ snippet: "expect(actual).to contain_exactly(*expected)",
221
+ expectation:
222
+ proc do
223
+ line do
224
+ plain " Expected "
225
+ actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
226
+ end
226
227
 
227
- line do
228
- plain %|to contain exactly |
229
- expected %|/ Brown$/|
230
- plain %|, |
231
- expected %|"Marty McFly"|
232
- plain %|, |
233
- expected %|"Biff Tannen"|
234
- plain %|, |
235
- expected %|/Georg McFly/|
236
- plain %| and |
237
- expected %|/Lorrain McFly/|
238
- end
239
- },
240
- diff: proc {
241
- plain_line %| [|
242
- plain_line %| "Marty McFly",|
243
- plain_line %| "Doc Brown",|
244
- actual_line %|+ "Einie",|
245
- actual_line %|+ "Lorraine McFly",|
246
- expected_line %|- "Biff Tannen",|
247
- expected_line %|- /Georg McFly/,|
248
- # expected_line %|- /Lorrain McFly/| # TODO
249
- expected_line %|- /Lorrain McFly/,|
250
- plain_line %| ]|
251
- },
252
- )
228
+ line do
229
+ plain "to contain exactly "
230
+ expected "/ Brown$/"
231
+ plain ", "
232
+ expected %|"Marty McFly"|
233
+ plain ", "
234
+ expected %|"Biff Tannen"|
235
+ plain ", "
236
+ expected "/Georg McFly/"
237
+ plain " and "
238
+ expected "/Lorrain McFly/"
239
+ end
240
+ end,
241
+ diff:
242
+ proc do
243
+ plain_line " ["
244
+ plain_line %| "Marty McFly",|
245
+ plain_line %| "Doc Brown",|
246
+ actual_line %|+ "Einie",|
247
+ actual_line %|+ "Lorraine McFly",|
248
+ expected_line %|- "Biff Tannen",|
249
+ expected_line "- /Georg McFly/,"
250
+ # expected_line %|- /Lorrain McFly/| # TODO
251
+ expected_line "- /Lorrain McFly/,"
252
+ plain_line " ]"
253
+ end
254
+ )
253
255
 
254
- expect(program).
255
- to produce_output_when_run(expected_output).
256
- in_color(color_enabled)
256
+ expect(program).to produce_output_when_run(expected_output).in_color(
257
+ color_enabled
258
+ )
257
259
  end
258
260
  end
259
261
 
@@ -269,39 +271,39 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
269
271
  ]
270
272
  expect(values).not_to contain_exactly(*values)
271
273
  TEST
272
- program = make_plain_test_program(
273
- snippet,
274
- color_enabled: color_enabled,
275
- )
274
+ program =
275
+ make_plain_test_program(snippet, color_enabled: color_enabled)
276
276
 
277
- expected_output = build_expected_output(
278
- color_enabled: color_enabled,
279
- snippet: %|expect(values).not_to contain_exactly(*values)|,
280
- newline_before_expectation: true,
281
- expectation: proc {
282
- line do
283
- plain %| Expected |
284
- actual %|[/ Brown$/, "Marty McFly", "Biff Tannen", /Georg McFly/, /Lorrain McFly/]|
285
- end
277
+ expected_output =
278
+ build_expected_output(
279
+ color_enabled: color_enabled,
280
+ snippet: "expect(values).not_to contain_exactly(*values)",
281
+ newline_before_expectation: true,
282
+ expectation:
283
+ proc do
284
+ line do
285
+ plain " Expected "
286
+ actual %|[/ Brown$/, "Marty McFly", "Biff Tannen", /Georg McFly/, /Lorrain McFly/]|
287
+ end
286
288
 
287
- line do
288
- plain %|not to contain exactly |
289
- expected %|/ Brown$/|
290
- plain %|, |
291
- expected %|"Marty McFly"|
292
- plain %|, |
293
- expected %|"Biff Tannen"|
294
- plain %|, |
295
- expected %|/Georg McFly/|
296
- plain %| and |
297
- expected %|/Lorrain McFly/|
298
- end
299
- },
300
- )
289
+ line do
290
+ plain "not to contain exactly "
291
+ expected "/ Brown$/"
292
+ plain ", "
293
+ expected %|"Marty McFly"|
294
+ plain ", "
295
+ expected %|"Biff Tannen"|
296
+ plain ", "
297
+ expected "/Georg McFly/"
298
+ plain " and "
299
+ expected "/Lorrain McFly/"
300
+ end
301
+ end
302
+ )
301
303
 
302
- expect(program).
303
- to produce_output_when_run(expected_output).
304
- in_color(color_enabled)
304
+ expect(program).to produce_output_when_run(expected_output).in_color(
305
+ color_enabled
306
+ )
305
307
  end
306
308
  end
307
309
  end
@@ -315,58 +317,59 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
315
317
  a_collection_containing_exactly("zing"),
316
318
  an_object_having_attributes(baz: "qux"),
317
319
  ]
318
- actual = [
320
+ actual = [
319
321
  { foo: "bar" },
320
322
  double(baz: "qux"),
321
323
  { blargh: "riddle" }
322
324
  ]
323
325
  expect(actual).to contain_exactly(*expected)
324
326
  TEST
325
- program = make_plain_test_program(
326
- snippet,
327
- color_enabled: color_enabled,
328
- )
327
+ program =
328
+ make_plain_test_program(snippet, color_enabled: color_enabled)
329
329
 
330
- expected_output = build_expected_output(
331
- color_enabled: color_enabled,
332
- snippet: %|expect(actual).to contain_exactly(*expected)|,
333
- expectation: proc {
334
- line do
335
- plain %| Expected |
336
- actual %|[{ foo: "bar" }, #<Double (anonymous) baz: "qux">, { blargh: "riddle" }]|
337
- end
330
+ expected_output =
331
+ build_expected_output(
332
+ color_enabled: color_enabled,
333
+ snippet: "expect(actual).to contain_exactly(*expected)",
334
+ expectation:
335
+ proc do
336
+ line do
337
+ plain " Expected "
338
+ actual %|[{ foo: "bar" }, #<Double (anonymous) baz: "qux">, { blargh: "riddle" }]|
339
+ end
338
340
 
339
- line do
340
- plain %|to contain exactly |
341
- expected %|#<a hash including (foo: "bar")>|
342
- plain %|, |
343
- expected %|#<a collection containing exactly ("zing")>|
344
- plain %| and |
345
- expected %|#<an object having attributes (baz: "qux")>|
346
- end
347
- },
348
- diff: proc {
349
- plain_line %| [|
350
- plain_line %| {|
351
- plain_line %| foo: "bar"|
352
- plain_line %| },|
353
- plain_line %| #<Double (anonymous) {|
354
- plain_line %| baz: "qux"|
355
- plain_line %| }>,|
356
- actual_line %|+ {|
357
- actual_line %|+ blargh: "riddle"|
358
- actual_line %|+ },|
359
- expected_line %|- #<a collection containing exactly (|
360
- expected_line %|- "zing"|
361
- # expected_line %|- )>| # TODO
362
- expected_line %|- )>,|
363
- plain_line %| ]|
364
- },
365
- )
341
+ line do
342
+ plain "to contain exactly "
343
+ expected %|#<a hash including (foo: "bar")>|
344
+ plain ", "
345
+ expected %|#<a collection containing exactly ("zing")>|
346
+ plain " and "
347
+ expected %|#<an object having attributes (baz: "qux")>|
348
+ end
349
+ end,
350
+ diff:
351
+ proc do
352
+ plain_line " ["
353
+ plain_line " {"
354
+ plain_line %| foo: "bar"|
355
+ plain_line " },"
356
+ plain_line " #<Double (anonymous) {"
357
+ plain_line %| baz: "qux"|
358
+ plain_line " }>,"
359
+ actual_line "+ {"
360
+ actual_line %|+ blargh: "riddle"|
361
+ actual_line "+ },"
362
+ expected_line "- #<a collection containing exactly ("
363
+ expected_line %|- "zing"|
364
+ # expected_line %|- )>| # TODO
365
+ expected_line "- )>,"
366
+ plain_line " ]"
367
+ end
368
+ )
366
369
 
367
- expect(program).
368
- to produce_output_when_run(expected_output).
369
- in_color(color_enabled)
370
+ expect(program).to produce_output_when_run(expected_output).in_color(
371
+ color_enabled
372
+ )
370
373
  end
371
374
  end
372
375
  end