super_diff 0.1.0 → 0.2.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 (206) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +117 -89
  3. data/lib/super_diff.rb +33 -47
  4. data/lib/super_diff/active_record.rb +41 -0
  5. data/lib/super_diff/active_record/diff_formatters.rb +10 -0
  6. data/lib/super_diff/active_record/diff_formatters/active_record_relation.rb +23 -0
  7. data/lib/super_diff/active_record/differs.rb +10 -0
  8. data/lib/super_diff/active_record/differs/active_record_relation.rb +30 -0
  9. data/lib/super_diff/active_record/object_inspection.rb +14 -0
  10. data/lib/super_diff/active_record/object_inspection/inspectors.rb +16 -0
  11. data/lib/super_diff/active_record/object_inspection/inspectors/active_record_model.rb +38 -0
  12. data/lib/super_diff/active_record/object_inspection/inspectors/active_record_relation.rb +18 -0
  13. data/lib/super_diff/active_record/object_inspection/map_extension.rb +18 -0
  14. data/lib/super_diff/active_record/operation_sequences.rb +10 -0
  15. data/lib/super_diff/active_record/operation_sequences/active_record_relation.rb +16 -0
  16. data/lib/super_diff/active_record/operational_sequencers.rb +14 -0
  17. data/lib/super_diff/active_record/operational_sequencers/active_record_model.rb +19 -0
  18. data/lib/super_diff/active_record/operational_sequencers/active_record_relation.rb +24 -0
  19. data/lib/super_diff/active_support.rb +33 -0
  20. data/lib/super_diff/active_support/diff_formatters.rb +10 -0
  21. data/lib/super_diff/active_support/diff_formatters/hash_with_indifferent_access.rb +36 -0
  22. data/lib/super_diff/active_support/differs.rb +10 -0
  23. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +36 -0
  24. data/lib/super_diff/active_support/object_inspection.rb +14 -0
  25. data/lib/super_diff/active_support/object_inspection/inspectors.rb +12 -0
  26. data/lib/super_diff/active_support/object_inspection/inspectors/hash_with_indifferent_access.rb +18 -0
  27. data/lib/super_diff/active_support/object_inspection/map_extension.rb +15 -0
  28. data/lib/super_diff/active_support/operation_sequences.rb +10 -0
  29. data/lib/super_diff/active_support/operation_sequences/hash_with_indifferent_access.rb +16 -0
  30. data/lib/super_diff/active_support/operational_sequencers.rb +10 -0
  31. data/lib/super_diff/active_support/operational_sequencers/hash_with_indifferent_access.rb +21 -0
  32. data/lib/super_diff/colorized_document_extensions.rb +17 -0
  33. data/lib/super_diff/csi.rb +45 -15
  34. data/lib/super_diff/csi/bold_sequence.rb +9 -0
  35. data/lib/super_diff/csi/color.rb +62 -0
  36. data/lib/super_diff/csi/color_sequence_block.rb +28 -0
  37. data/lib/super_diff/csi/colorized_document.rb +72 -0
  38. data/lib/super_diff/csi/document.rb +183 -0
  39. data/lib/super_diff/csi/eight_bit_color.rb +72 -26
  40. data/lib/super_diff/csi/four_bit_color.rb +63 -29
  41. data/lib/super_diff/csi/twenty_four_bit_color.rb +79 -18
  42. data/lib/super_diff/csi/uncolorized_document.rb +29 -0
  43. data/lib/super_diff/diff_formatter.rb +10 -15
  44. data/lib/super_diff/diff_formatters.rb +10 -1
  45. data/lib/super_diff/diff_formatters/base.rb +12 -17
  46. data/lib/super_diff/diff_formatters/collection.rb +81 -50
  47. data/lib/super_diff/diff_formatters/{object.rb → custom_object.rb} +12 -9
  48. data/lib/super_diff/diff_formatters/default_object.rb +48 -0
  49. data/lib/super_diff/diff_formatters/multiline_string.rb +31 -0
  50. data/lib/super_diff/differ.rb +35 -32
  51. data/lib/super_diff/differs.rb +16 -1
  52. data/lib/super_diff/differs/array.rb +2 -2
  53. data/lib/super_diff/differs/base.rb +11 -21
  54. data/lib/super_diff/differs/custom_object.rb +26 -0
  55. data/lib/super_diff/differs/default_object.rb +25 -0
  56. data/lib/super_diff/differs/empty.rb +1 -1
  57. data/lib/super_diff/differs/hash.rb +2 -2
  58. data/lib/super_diff/differs/{multi_line_string.rb → multiline_string.rb} +6 -5
  59. data/lib/super_diff/equality_matcher.rb +9 -22
  60. data/lib/super_diff/equality_matchers.rb +19 -1
  61. data/lib/super_diff/equality_matchers/array.rb +6 -4
  62. data/lib/super_diff/equality_matchers/base.rb +8 -16
  63. data/lib/super_diff/equality_matchers/default.rb +60 -0
  64. data/lib/super_diff/equality_matchers/hash.rb +6 -4
  65. data/lib/super_diff/equality_matchers/{multi_line_string.rb → multiline_string.rb} +9 -6
  66. data/lib/super_diff/equality_matchers/primitive.rb +34 -0
  67. data/lib/super_diff/equality_matchers/{single_line_string.rb → singleline_string.rb} +7 -5
  68. data/lib/super_diff/helpers.rb +17 -81
  69. data/lib/super_diff/no_differ_available_error.rb +22 -0
  70. data/lib/super_diff/{errors.rb → no_operational_sequencer_available_error.rb} +0 -0
  71. data/lib/super_diff/object_inspection.rb +24 -0
  72. data/lib/super_diff/object_inspection/inspection_tree.rb +144 -0
  73. data/lib/super_diff/object_inspection/inspector.rb +27 -0
  74. data/lib/super_diff/object_inspection/inspectors.rb +18 -0
  75. data/lib/super_diff/object_inspection/inspectors/array.rb +22 -0
  76. data/lib/super_diff/object_inspection/inspectors/custom_object.rb +27 -0
  77. data/lib/super_diff/object_inspection/inspectors/default_object.rb +47 -0
  78. data/lib/super_diff/object_inspection/inspectors/hash.rb +22 -0
  79. data/lib/super_diff/object_inspection/inspectors/primitive.rb +13 -0
  80. data/lib/super_diff/object_inspection/inspectors/string.rb +13 -0
  81. data/lib/super_diff/object_inspection/map.rb +28 -0
  82. data/lib/super_diff/object_inspection/nodes.rb +49 -0
  83. data/lib/super_diff/object_inspection/nodes/base.rb +86 -0
  84. data/lib/super_diff/object_inspection/nodes/break.rb +15 -0
  85. data/lib/super_diff/object_inspection/nodes/inspection.rb +15 -0
  86. data/lib/super_diff/object_inspection/nodes/nesting.rb +16 -0
  87. data/lib/super_diff/object_inspection/nodes/text.rb +15 -0
  88. data/lib/super_diff/object_inspection/nodes/when_empty.rb +30 -0
  89. data/lib/super_diff/object_inspection/nodes/when_multiline.rb +22 -0
  90. data/lib/super_diff/object_inspection/nodes/when_non_empty.rb +30 -0
  91. data/lib/super_diff/object_inspection/nodes/when_singleline.rb +24 -0
  92. data/lib/super_diff/operation_sequences.rb +9 -0
  93. data/lib/super_diff/operation_sequences/base.rb +1 -1
  94. data/lib/super_diff/operation_sequences/{object.rb → custom_object.rb} +4 -3
  95. data/lib/super_diff/operation_sequences/default_object.rb +25 -0
  96. data/lib/super_diff/operational_sequencer.rb +23 -18
  97. data/lib/super_diff/operational_sequencers.rb +12 -1
  98. data/lib/super_diff/operational_sequencers/array.rb +65 -62
  99. data/lib/super_diff/operational_sequencers/base.rb +18 -26
  100. data/lib/super_diff/operational_sequencers/custom_object.rb +35 -0
  101. data/lib/super_diff/operational_sequencers/{object.rb → default_object.rb} +21 -11
  102. data/lib/super_diff/operational_sequencers/hash.rb +8 -5
  103. data/lib/super_diff/operational_sequencers/{multi_line_string.rb → multiline_string.rb} +11 -6
  104. data/lib/super_diff/operations.rb +6 -0
  105. data/lib/super_diff/operations/binary_operation.rb +14 -34
  106. data/lib/super_diff/operations/unary_operation.rb +11 -2
  107. data/lib/super_diff/rails.rb +1 -0
  108. data/lib/super_diff/recursion_guard.rb +47 -0
  109. data/lib/super_diff/rspec-rails.rb +2 -0
  110. data/lib/super_diff/rspec.rb +52 -8
  111. data/lib/super_diff/rspec/augmented_matcher.rb +98 -0
  112. data/lib/super_diff/rspec/configuration.rb +31 -0
  113. data/lib/super_diff/rspec/differ.rb +60 -16
  114. data/lib/super_diff/rspec/differs.rb +13 -0
  115. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +23 -0
  116. data/lib/super_diff/rspec/differs/partial_array.rb +22 -0
  117. data/lib/super_diff/rspec/differs/partial_hash.rb +22 -0
  118. data/lib/super_diff/rspec/differs/partial_object.rb +22 -0
  119. data/lib/super_diff/rspec/matcher_text_builders.rb +24 -0
  120. data/lib/super_diff/rspec/matcher_text_builders/base.rb +155 -0
  121. data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +78 -0
  122. data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +14 -0
  123. data/lib/super_diff/rspec/matcher_text_builders/match.rb +23 -0
  124. data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +13 -0
  125. data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +99 -0
  126. data/lib/super_diff/rspec/matcher_text_template.rb +240 -0
  127. data/lib/super_diff/rspec/monkey_patches.rb +601 -98
  128. data/lib/super_diff/rspec/object_inspection.rb +8 -0
  129. data/lib/super_diff/rspec/object_inspection/inspectors.rb +24 -0
  130. data/lib/super_diff/rspec/object_inspection/inspectors/collection_containing_exactly.rb +19 -0
  131. data/lib/super_diff/rspec/object_inspection/inspectors/partial_array.rb +22 -0
  132. data/lib/super_diff/rspec/object_inspection/inspectors/partial_hash.rb +21 -0
  133. data/lib/super_diff/rspec/object_inspection/inspectors/partial_object.rb +21 -0
  134. data/lib/super_diff/rspec/object_inspection/map_extension.rb +23 -0
  135. data/lib/super_diff/rspec/operational_sequencers.rb +22 -0
  136. data/lib/super_diff/rspec/operational_sequencers/collection_containing_exactly.rb +97 -0
  137. data/lib/super_diff/rspec/operational_sequencers/partial_array.rb +23 -0
  138. data/lib/super_diff/rspec/operational_sequencers/partial_hash.rb +32 -0
  139. data/lib/super_diff/rspec/operational_sequencers/partial_object.rb +64 -0
  140. data/lib/super_diff/version.rb +1 -1
  141. data/spec/examples.txt +328 -46
  142. data/spec/integration/rails/active_record_spec.rb +19 -0
  143. data/spec/integration/rails/hash_with_indifferent_access_spec.rb +19 -0
  144. data/spec/integration/rspec/be_falsey_matcher_spec.rb +53 -0
  145. data/spec/integration/rspec/be_matcher_spec.rb +565 -0
  146. data/spec/integration/rspec/be_nil_matcher_spec.rb +53 -0
  147. data/spec/integration/rspec/be_predicate_matcher_spec.rb +546 -0
  148. data/spec/integration/rspec/be_truthy_matcher_spec.rb +57 -0
  149. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +368 -0
  150. data/spec/integration/rspec/eq_matcher_spec.rb +874 -0
  151. data/spec/integration/rspec/have_attributes_matcher_spec.rb +299 -0
  152. data/spec/integration/rspec/include_matcher_spec.rb +350 -0
  153. data/spec/integration/rspec/match_matcher_spec.rb +1258 -0
  154. data/spec/integration/rspec/raise_error_matcher_spec.rb +350 -0
  155. data/spec/integration/rspec/respond_to_matcher_spec.rb +994 -0
  156. data/spec/integration/rspec/unhandled_errors_spec.rb +94 -0
  157. data/spec/spec_helper.rb +19 -4
  158. data/spec/support/colorizer.rb +9 -0
  159. data/spec/support/command_runner.rb +4 -0
  160. data/spec/support/integration/helpers.rb +179 -0
  161. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +79 -41
  162. data/spec/support/models/a.rb +11 -0
  163. data/spec/support/models/active_record/person.rb +26 -0
  164. data/spec/support/models/active_record/shipping_address.rb +29 -0
  165. data/spec/support/models/customer.rb +24 -0
  166. data/spec/support/models/empty_class.rb +6 -0
  167. data/spec/support/models/item.rb +10 -0
  168. data/spec/support/models/order.rb +9 -0
  169. data/spec/support/models/person.rb +20 -0
  170. data/spec/support/models/player.rb +33 -0
  171. data/spec/support/models/shipping_address.rb +34 -0
  172. data/spec/support/ruby_versions.rb +7 -0
  173. data/spec/support/shared_examples/active_record.rb +338 -0
  174. data/spec/support/shared_examples/hash_with_indifferent_access.rb +233 -0
  175. data/spec/unit/equality_matcher_spec.rb +579 -171
  176. data/spec/unit/object_inspection_spec.rb +1092 -0
  177. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +23 -0
  178. data/spec/unit/rspec/matchers/be_falsey_spec.rb +9 -0
  179. data/spec/unit/rspec/matchers/be_nil_spec.rb +9 -0
  180. data/spec/unit/rspec/matchers/be_predicate_spec.rb +31 -0
  181. data/spec/unit/rspec/matchers/be_spec.rb +17 -0
  182. data/spec/unit/rspec/matchers/be_truthy_spec.rb +9 -0
  183. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +11 -0
  184. data/spec/unit/rspec/matchers/eq_spec.rb +9 -0
  185. data/spec/unit/rspec/matchers/have_attributes_spec.rb +11 -0
  186. data/spec/unit/rspec/matchers/include_spec.rb +21 -0
  187. data/spec/unit/rspec/matchers/match_spec.rb +9 -0
  188. data/spec/unit/rspec/matchers/raise_error_spec.rb +29 -0
  189. data/spec/unit/rspec/matchers/respond_to_spec.rb +78 -0
  190. data/super_diff.gemspec +4 -2
  191. metadata +231 -34
  192. data/lib/super_diff/csi/color_helper.rb +0 -52
  193. data/lib/super_diff/csi/eight_bit_sequence.rb +0 -27
  194. data/lib/super_diff/csi/four_bit_sequence.rb +0 -24
  195. data/lib/super_diff/csi/sequence.rb +0 -22
  196. data/lib/super_diff/csi/twenty_four_bit_sequence.rb +0 -27
  197. data/lib/super_diff/diff_formatters/multi_line_string.rb +0 -31
  198. data/lib/super_diff/differs/object.rb +0 -68
  199. data/lib/super_diff/equality_matchers/object.rb +0 -18
  200. data/lib/super_diff/value_inspection.rb +0 -11
  201. data/spec/integration/rspec_spec.rb +0 -261
  202. data/spec/support/color_helper.rb +0 -49
  203. data/spec/support/person.rb +0 -23
  204. data/spec/support/person_diff_formatter.rb +0 -15
  205. data/spec/support/person_operation_sequence.rb +0 -14
  206. data/spec/support/person_operational_sequencer.rb +0 -19
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "Integration with Rails's ActiveRecord class", type: :integration do
4
+ context "when using 'super_diff/rspec-rails'" do
5
+ include_context "integration with ActiveRecord"
6
+
7
+ def make_program(test, color_enabled:)
8
+ make_rspec_rails_test_program(test, color_enabled: color_enabled)
9
+ end
10
+ end
11
+
12
+ context "when using 'super_diff/active_record'" do
13
+ include_context "integration with ActiveRecord"
14
+
15
+ def make_program(test, color_enabled:)
16
+ make_rspec_active_record_program(test, color_enabled: color_enabled)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "Integration with Rails's HashWithIndifferentAccess", type: :integration do
4
+ context "when using 'super_diff/rspec-rails'" do
5
+ include_context "integration with HashWithIndifferentAccess"
6
+
7
+ def make_program(test, color_enabled:)
8
+ make_rspec_rails_test_program(test, color_enabled: color_enabled)
9
+ end
10
+ end
11
+
12
+ context "when using 'super_diff/active_support'" do
13
+ include_context "integration with HashWithIndifferentAccess"
14
+
15
+ def make_program(test, color_enabled:)
16
+ make_rspec_active_support_program(test, color_enabled: color_enabled)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,53 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "Integration with RSpec's #be_falsey matcher", type: :integration do
4
+ it "produces the correct failure message when used in the positive" do
5
+ as_both_colored_and_uncolored do |color_enabled|
6
+ snippet = %|expect(:foo).to be_falsey|
7
+ program = make_plain_test_program(snippet, color_enabled: color_enabled)
8
+
9
+ expected_output = build_expected_output(
10
+ color_enabled: color_enabled,
11
+ snippet: snippet,
12
+ expectation: proc {
13
+ line do
14
+ plain "Expected "
15
+ beta %|:foo|
16
+ plain " to be "
17
+ alpha %|falsey|
18
+ plain "."
19
+ end
20
+ },
21
+ )
22
+
23
+ expect(program).
24
+ to produce_output_when_run(expected_output).
25
+ in_color(color_enabled)
26
+ end
27
+ end
28
+
29
+ it "produces the correct failure message when used in the negative" do
30
+ as_both_colored_and_uncolored do |color_enabled|
31
+ snippet = %|expect(false).not_to be_falsey|
32
+ program = make_plain_test_program(snippet, color_enabled: color_enabled)
33
+
34
+ expected_output = build_expected_output(
35
+ color_enabled: color_enabled,
36
+ snippet: snippet,
37
+ expectation: proc {
38
+ line do
39
+ plain "Expected "
40
+ beta %|false|
41
+ plain " not to be "
42
+ alpha %|falsey|
43
+ plain "."
44
+ end
45
+ },
46
+ )
47
+
48
+ expect(program).
49
+ to produce_output_when_run(expected_output).
50
+ in_color(color_enabled)
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,565 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "Integration with RSpec's #be matcher", type: :integration do
4
+ context "with a boolean" do
5
+ context "when comparing with false" do
6
+ it "produces the correct failure message when used in the positive" do
7
+ as_both_colored_and_uncolored do |color_enabled|
8
+ program =
9
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
10
+ expect(true).to be(false)
11
+ TEST
12
+
13
+ expected_output = build_expected_output(
14
+ color_enabled: color_enabled,
15
+ snippet: %|expect(true).to be(false)|,
16
+ expectation: proc {
17
+ line do
18
+ plain "Expected "
19
+ beta %|true|
20
+ plain " to equal "
21
+ alpha %|false|
22
+ plain "."
23
+ end
24
+ },
25
+ )
26
+
27
+ expect(program).
28
+ to produce_output_when_run(expected_output).
29
+ in_color(color_enabled)
30
+ end
31
+ end
32
+
33
+ it "produces the correct failure message when used in the negative" do
34
+ as_both_colored_and_uncolored do |color_enabled|
35
+ program =
36
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
37
+ expect(false).not_to be(false)
38
+ TEST
39
+
40
+ expected_output = build_expected_output(
41
+ color_enabled: color_enabled,
42
+ snippet: %|expect(false).not_to be(false)|,
43
+ expectation: proc {
44
+ line do
45
+ plain "Expected "
46
+ beta %|false|
47
+ plain " not to equal "
48
+ alpha %|false|
49
+ plain "."
50
+ end
51
+ },
52
+ )
53
+
54
+ expect(program).
55
+ to produce_output_when_run(expected_output).
56
+ in_color(color_enabled)
57
+ end
58
+ end
59
+ end
60
+
61
+ context "when comparing with true" do
62
+ it "produces the correct failure message when used in the positive" do
63
+ as_both_colored_and_uncolored do |color_enabled|
64
+ program =
65
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
66
+ expect(false).to be(true)
67
+ TEST
68
+
69
+ expected_output = build_expected_output(
70
+ color_enabled: color_enabled,
71
+ snippet: %|expect(false).to be(true)|,
72
+ expectation: proc {
73
+ line do
74
+ plain "Expected "
75
+ beta %|false|
76
+ plain " to equal "
77
+ alpha %|true|
78
+ plain "."
79
+ end
80
+ },
81
+ )
82
+
83
+ expect(program).
84
+ to produce_output_when_run(expected_output).
85
+ in_color(color_enabled)
86
+ end
87
+ end
88
+
89
+ it "produces the correct failure message when used in the negative" do
90
+ as_both_colored_and_uncolored do |color_enabled|
91
+ program =
92
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
93
+ expect(true).not_to be(true)
94
+ TEST
95
+
96
+ expected_output = build_expected_output(
97
+ color_enabled: color_enabled,
98
+ snippet: %|expect(true).not_to be(true)|,
99
+ expectation: proc {
100
+ line do
101
+ plain "Expected "
102
+ beta %|true|
103
+ plain " not to equal "
104
+ alpha %|true|
105
+ plain "."
106
+ end
107
+ },
108
+ )
109
+
110
+ expect(program).
111
+ to produce_output_when_run(expected_output).
112
+ in_color(color_enabled)
113
+ end
114
+ end
115
+ end
116
+ end
117
+
118
+ context "with no arguments" do
119
+ it "produces the correct failure message when used in the positive" do
120
+ as_both_colored_and_uncolored do |color_enabled|
121
+ program =
122
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
123
+ expect(nil).to be
124
+ TEST
125
+
126
+ expected_output = build_expected_output(
127
+ color_enabled: color_enabled,
128
+ snippet: %|expect(nil).to be|,
129
+ expectation: proc {
130
+ line do
131
+ plain "Expected "
132
+ beta %|nil|
133
+ plain " to be "
134
+ alpha %|truthy|
135
+ plain "."
136
+ end
137
+ },
138
+ )
139
+
140
+ expect(program).
141
+ to produce_output_when_run(expected_output).
142
+ in_color(color_enabled)
143
+ end
144
+ end
145
+
146
+ it "produces the correct failure message when used in the negative" do
147
+ as_both_colored_and_uncolored do |color_enabled|
148
+ program =
149
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
150
+ expect(:something).not_to be
151
+ TEST
152
+
153
+ expected_output = build_expected_output(
154
+ color_enabled: color_enabled,
155
+ snippet: %|expect(:something).not_to be|,
156
+ expectation: proc {
157
+ line do
158
+ plain "Expected "
159
+ beta %|:something|
160
+ plain " not to be "
161
+ alpha %|truthy|
162
+ plain "."
163
+ end
164
+ },
165
+ )
166
+
167
+ expect(program).
168
+ to produce_output_when_run(expected_output).
169
+ in_color(color_enabled)
170
+ end
171
+ end
172
+ end
173
+
174
+ context "with ==" do
175
+ it "produces the correct failure message when used in the positive" do
176
+ as_both_colored_and_uncolored do |color_enabled|
177
+ program =
178
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
179
+ expect(nil).to be == :foo
180
+ TEST
181
+
182
+ expected_output = build_expected_output(
183
+ color_enabled: color_enabled,
184
+ snippet: %|expect(nil).to be == :foo|,
185
+ expectation: proc {
186
+ line do
187
+ plain "Expected "
188
+ beta %|nil|
189
+ plain " to == "
190
+ alpha %|:foo|
191
+ plain "."
192
+ end
193
+ },
194
+ )
195
+
196
+ expect(program).
197
+ to produce_output_when_run(expected_output).
198
+ in_color(color_enabled)
199
+ end
200
+ end
201
+
202
+ it "produces the correct failure message when used in the negative" do
203
+ as_both_colored_and_uncolored do |color_enabled|
204
+ program =
205
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
206
+ expect(:foo).not_to be == :foo
207
+ TEST
208
+
209
+ expected_output = build_expected_output(
210
+ color_enabled: color_enabled,
211
+ snippet: %|expect(:foo).not_to be == :foo|,
212
+ expectation: proc {
213
+ line do
214
+ plain "Expected "
215
+ beta %|:foo|
216
+ plain " not to == "
217
+ alpha %|:foo|
218
+ plain "."
219
+ end
220
+ },
221
+ )
222
+
223
+ expect(program).
224
+ to produce_output_when_run(expected_output).
225
+ in_color(color_enabled)
226
+ end
227
+ end
228
+ end
229
+
230
+ context "with <" do
231
+ it "produces the correct failure message when used in the positive" do
232
+ as_both_colored_and_uncolored do |color_enabled|
233
+ program =
234
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
235
+ expect(1).to be < 1
236
+ TEST
237
+
238
+ expected_output = build_expected_output(
239
+ color_enabled: color_enabled,
240
+ snippet: %|expect(1).to be < 1|,
241
+ expectation: proc {
242
+ line do
243
+ plain "Expected "
244
+ beta %|1|
245
+ plain " to be < "
246
+ alpha %|1|
247
+ plain "."
248
+ end
249
+ },
250
+ )
251
+
252
+ expect(program).
253
+ to produce_output_when_run(expected_output).
254
+ in_color(color_enabled)
255
+ end
256
+ end
257
+
258
+ it "produces the correct failure message when used in the negative" do
259
+ as_both_colored_and_uncolored do |color_enabled|
260
+ program =
261
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
262
+ expect(0).not_to be < 1
263
+ TEST
264
+
265
+ expected_output = build_expected_output(
266
+ color_enabled: color_enabled,
267
+ snippet: %|expect(0).not_to be < 1|,
268
+ expectation: proc {
269
+ line do
270
+ plain "Expected "
271
+ beta %|0|
272
+ plain " not to be < "
273
+ alpha %|1|
274
+ plain "."
275
+ end
276
+ },
277
+ )
278
+
279
+ expect(program).
280
+ to produce_output_when_run(expected_output).
281
+ in_color(color_enabled)
282
+ end
283
+ end
284
+ end
285
+
286
+ context "with <=" do
287
+ it "produces the correct failure message when used in the positive" do
288
+ as_both_colored_and_uncolored do |color_enabled|
289
+ program =
290
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
291
+ expect(1).to be <= 0
292
+ TEST
293
+
294
+ expected_output = build_expected_output(
295
+ color_enabled: color_enabled,
296
+ snippet: %|expect(1).to be <= 0|,
297
+ expectation: proc {
298
+ line do
299
+ plain "Expected "
300
+ beta %|1|
301
+ plain " to be <= "
302
+ alpha %|0|
303
+ plain "."
304
+ end
305
+ },
306
+ )
307
+
308
+ expect(program).
309
+ to produce_output_when_run(expected_output).
310
+ in_color(color_enabled)
311
+ end
312
+ end
313
+
314
+ it "produces the correct failure message when used in the negative" do
315
+ as_both_colored_and_uncolored do |color_enabled|
316
+ program =
317
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
318
+ expect(0).not_to be <= 0
319
+ TEST
320
+
321
+ expected_output = build_expected_output(
322
+ color_enabled: color_enabled,
323
+ snippet: %|expect(0).not_to be <= 0|,
324
+ expectation: proc {
325
+ line do
326
+ plain "Expected "
327
+ beta %|0|
328
+ plain " not to be <= "
329
+ alpha %|0|
330
+ plain "."
331
+ end
332
+ },
333
+ )
334
+
335
+ expect(program).
336
+ to produce_output_when_run(expected_output).
337
+ in_color(color_enabled)
338
+ end
339
+ end
340
+ end
341
+
342
+ context "with >=" do
343
+ it "produces the correct failure message when used in the positive" do
344
+ as_both_colored_and_uncolored do |color_enabled|
345
+ program =
346
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
347
+ expect(1).to be >= 2
348
+ TEST
349
+
350
+ expected_output = build_expected_output(
351
+ color_enabled: color_enabled,
352
+ snippet: %|expect(1).to be >= 2|,
353
+ expectation: proc {
354
+ line do
355
+ plain "Expected "
356
+ beta %|1|
357
+ plain " to be >= "
358
+ alpha %|2|
359
+ plain "."
360
+ end
361
+ },
362
+ )
363
+
364
+ expect(program).
365
+ to produce_output_when_run(expected_output).
366
+ in_color(color_enabled)
367
+ end
368
+ end
369
+
370
+ it "produces the correct failure message when used in the negative" do
371
+ as_both_colored_and_uncolored do |color_enabled|
372
+ program =
373
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
374
+ expect(2).not_to be >= 2
375
+ TEST
376
+
377
+ expected_output = build_expected_output(
378
+ color_enabled: color_enabled,
379
+ snippet: %|expect(2).not_to be >= 2|,
380
+ expectation: proc {
381
+ line do
382
+ plain "Expected "
383
+ beta %|2|
384
+ plain " not to be >= "
385
+ alpha %|2|
386
+ plain "."
387
+ end
388
+ },
389
+ )
390
+
391
+ expect(program).
392
+ to produce_output_when_run(expected_output).
393
+ in_color(color_enabled)
394
+ end
395
+ end
396
+ end
397
+
398
+ context "with >" do
399
+ it "produces the correct failure message when used in the positive" do
400
+ as_both_colored_and_uncolored do |color_enabled|
401
+ program =
402
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
403
+ expect(1).to be > 2
404
+ TEST
405
+
406
+ expected_output = build_expected_output(
407
+ color_enabled: color_enabled,
408
+ snippet: %|expect(1).to be > 2|,
409
+ expectation: proc {
410
+ line do
411
+ plain "Expected "
412
+ beta %|1|
413
+ plain " to be > "
414
+ alpha %|2|
415
+ plain "."
416
+ end
417
+ },
418
+ )
419
+
420
+ expect(program).
421
+ to produce_output_when_run(expected_output).
422
+ in_color(color_enabled)
423
+ end
424
+ end
425
+
426
+ it "produces the correct failure message when used in the negative" do
427
+ as_both_colored_and_uncolored do |color_enabled|
428
+ program =
429
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
430
+ expect(3).not_to be > 2
431
+ TEST
432
+
433
+ expected_output = build_expected_output(
434
+ color_enabled: color_enabled,
435
+ snippet: %|expect(3).not_to be > 2|,
436
+ expectation: proc {
437
+ line do
438
+ plain "Expected "
439
+ beta %|3|
440
+ plain " not to be > "
441
+ alpha %|2|
442
+ plain "."
443
+ end
444
+ },
445
+ )
446
+
447
+ expect(program).
448
+ to produce_output_when_run(expected_output).
449
+ in_color(color_enabled)
450
+ end
451
+ end
452
+ end
453
+
454
+ context "with ===" do
455
+ it "produces the correct failure message when used in the positive" do
456
+ as_both_colored_and_uncolored do |color_enabled|
457
+ program =
458
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
459
+ expect(String).to be === :foo
460
+ TEST
461
+
462
+ expected_output = build_expected_output(
463
+ color_enabled: color_enabled,
464
+ snippet: %|expect(String).to be === :foo|,
465
+ expectation: proc {
466
+ line do
467
+ plain "Expected "
468
+ beta %|String|
469
+ plain " to === "
470
+ alpha %|:foo|
471
+ plain "."
472
+ end
473
+ },
474
+ )
475
+
476
+ expect(program).
477
+ to produce_output_when_run(expected_output).
478
+ in_color(color_enabled)
479
+ end
480
+ end
481
+
482
+ it "produces the correct failure message when used in the negative" do
483
+ as_both_colored_and_uncolored do |color_enabled|
484
+ program =
485
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
486
+ expect(String).not_to be === "foo"
487
+ TEST
488
+
489
+ expected_output = build_expected_output(
490
+ color_enabled: color_enabled,
491
+ snippet: %|expect(String).not_to be === "foo"|,
492
+ expectation: proc {
493
+ line do
494
+ plain "Expected "
495
+ beta %|String|
496
+ plain " not to === "
497
+ alpha %|"foo"|
498
+ plain "."
499
+ end
500
+ },
501
+ )
502
+
503
+ expect(program).
504
+ to produce_output_when_run(expected_output).
505
+ in_color(color_enabled)
506
+ end
507
+ end
508
+ end
509
+
510
+ context "with =~" do
511
+ it "produces the correct failure message when used in the positive" do
512
+ as_both_colored_and_uncolored do |color_enabled|
513
+ program =
514
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
515
+ expect("foo").to be =~ /bar/
516
+ TEST
517
+
518
+ expected_output = build_expected_output(
519
+ color_enabled: color_enabled,
520
+ snippet: %|expect("foo").to be =~ /bar/|,
521
+ expectation: proc {
522
+ line do
523
+ plain "Expected "
524
+ beta %|"foo"|
525
+ plain " to =~ "
526
+ alpha %|/bar/|
527
+ plain "."
528
+ end
529
+ },
530
+ )
531
+
532
+ expect(program).
533
+ to produce_output_when_run(expected_output).
534
+ in_color(color_enabled)
535
+ end
536
+ end
537
+
538
+ it "produces the correct failure message when used in the negative" do
539
+ as_both_colored_and_uncolored do |color_enabled|
540
+ program =
541
+ make_plain_test_program(<<~TEST.strip, color_enabled: color_enabled)
542
+ expect("bar").not_to be =~ /bar/
543
+ TEST
544
+
545
+ expected_output = build_expected_output(
546
+ color_enabled: color_enabled,
547
+ snippet: %|expect("bar").not_to be =~ /bar/|,
548
+ expectation: proc {
549
+ line do
550
+ plain "Expected "
551
+ beta %|"bar"|
552
+ plain " not to =~ "
553
+ alpha %|/bar/|
554
+ plain "."
555
+ end
556
+ },
557
+ )
558
+
559
+ expect(program).
560
+ to produce_output_when_run(expected_output).
561
+ in_color(color_enabled)
562
+ end
563
+ end
564
+ end
565
+ end