super_diff 0.9.0 → 0.10.0

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