super_diff 0.5.3 → 0.6.1
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.
- checksums.yaml +4 -4
- data/README.md +46 -19
- data/lib/super_diff.rb +1 -7
- data/lib/super_diff/colorized_document_extensions.rb +4 -4
- data/lib/super_diff/configuration.rb +32 -22
- data/lib/super_diff/csi.rb +2 -1
- data/lib/super_diff/diff_formatters/collection.rb +1 -1
- data/lib/super_diff/diff_formatters/multiline_string.rb +4 -4
- data/lib/super_diff/equality_matchers/array.rb +2 -2
- data/lib/super_diff/equality_matchers/default.rb +2 -2
- data/lib/super_diff/equality_matchers/hash.rb +2 -2
- data/lib/super_diff/equality_matchers/multiline_string.rb +2 -2
- data/lib/super_diff/equality_matchers/primitive.rb +2 -2
- data/lib/super_diff/equality_matchers/singleline_string.rb +2 -2
- data/lib/super_diff/gem_version.rb +45 -0
- data/lib/super_diff/rspec.rb +7 -0
- data/lib/super_diff/rspec/matcher_text_builders/base.rb +7 -7
- data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +6 -6
- data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +1 -1
- data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +4 -4
- data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +1 -1
- data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +5 -5
- data/lib/super_diff/rspec/monkey_patches.rb +21 -13
- data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +12 -1
- data/lib/super_diff/version.rb +1 -1
- data/spec/examples.txt +390 -5
- data/spec/integration/rspec/be_falsey_matcher_spec.rb +10 -10
- data/spec/integration/rspec/be_matcher_spec.rb +100 -100
- data/spec/integration/rspec/be_nil_matcher_spec.rb +10 -10
- data/spec/integration/rspec/be_predicate_matcher_spec.rb +103 -103
- data/spec/integration/rspec/be_truthy_matcher_spec.rb +10 -10
- data/spec/integration/rspec/contain_exactly_matcher_spec.rb +107 -107
- data/spec/integration/rspec/eq_matcher_spec.rb +230 -230
- data/spec/integration/rspec/have_attributes_matcher_spec.rb +129 -129
- data/spec/integration/rspec/have_predicate_matcher_spec.rb +65 -65
- data/spec/integration/rspec/include_matcher_spec.rb +73 -73
- data/spec/integration/rspec/match_array_matcher_spec.rb +119 -119
- data/spec/integration/rspec/match_matcher_spec.rb +274 -274
- data/spec/integration/rspec/raise_error_matcher_spec.rb +86 -86
- data/spec/integration/rspec/respond_to_matcher_spec.rb +240 -240
- data/spec/integration/rspec/third_party_matcher_spec.rb +8 -8
- data/spec/integration/rspec/unhandled_errors_spec.rb +5 -5
- data/spec/spec_helper.rb +22 -13
- data/spec/support/integration/helpers.rb +6 -2
- data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +1 -1
- data/spec/support/integration/test_programs/base.rb +2 -0
- data/spec/support/integration/test_programs/rspec_active_record.rb +1 -1
- data/spec/support/integration/test_programs/rspec_active_support.rb +17 -0
- data/spec/support/integration/test_programs/rspec_rails.rb +1 -1
- data/spec/support/shared_examples/active_record.rb +108 -108
- data/spec/support/shared_examples/hash_with_indifferent_access.rb +196 -232
- data/spec/tmp/integration_spec.rb +15 -0
- data/spec/unit/equality_matchers/main_spec.rb +403 -403
- data/super_diff.gemspec +1 -1
- metadata +11 -3
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            shared_examples_for "integration with HashWithIndifferentAccess" do
         | 
| 2 2 | 
             
              describe "and RSpec's #eq matcher" do
         | 
| 3 | 
            -
                context "when the actual | 
| 3 | 
            +
                context "when the actual   value is a HashWithIndifferentAccess" do
         | 
| 4 4 | 
             
                  context "and both hashes are one-dimensional" do
         | 
| 5 5 | 
             
                    context "and the expected hash contains symbol keys" do
         | 
| 6 6 | 
             
                      it "produces the correct output" do
         | 
| @@ -12,7 +12,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 12 12 | 
             
                              state: "CA",
         | 
| 13 13 | 
             
                              zip: "90382",
         | 
| 14 14 | 
             
                            }
         | 
| 15 | 
            -
                            actual | 
| 15 | 
            +
                            actual   = HashWithIndifferentAccess.new({
         | 
| 16 16 | 
             
                              line_1: "456 Ponderosa Ct.",
         | 
| 17 17 | 
             
                              city: "Oakland",
         | 
| 18 18 | 
             
                              state: "CA",
         | 
| @@ -20,35 +20,32 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 20 20 | 
             
                            })
         | 
| 21 21 | 
             
                            expect(actual).to eq(expected)
         | 
| 22 22 | 
             
                          TEST
         | 
| 23 | 
            -
                          program =  | 
| 24 | 
            -
                            snippet,
         | 
| 25 | 
            -
                            color_enabled: color_enabled,
         | 
| 26 | 
            -
                          )
         | 
| 23 | 
            +
                          program = make_program(snippet, color_enabled: color_enabled)
         | 
| 27 24 |  | 
| 28 25 | 
             
                          expected_output = build_expected_output(
         | 
| 29 26 | 
             
                            color_enabled: color_enabled,
         | 
| 30 27 | 
             
                            snippet: "expect(actual).to eq(expected)",
         | 
| 31 28 | 
             
                            expectation: proc {
         | 
| 32 29 | 
             
                              line do
         | 
| 33 | 
            -
                                plain | 
| 34 | 
            -
                                 | 
| 30 | 
            +
                                plain    %|Expected |
         | 
| 31 | 
            +
                                actual   %|#<HashWithIndifferentAccess { "line_1" => "456 Ponderosa Ct.", "city" => "Oakland", "state" => "CA", "zip" => "91234" }>|
         | 
| 35 32 | 
             
                              end
         | 
| 36 33 |  | 
| 37 34 | 
             
                              line do
         | 
| 38 | 
            -
                                plain | 
| 39 | 
            -
                                 | 
| 35 | 
            +
                                plain    %|   to eq |
         | 
| 36 | 
            +
                                expected %|{ line_1: "123 Main St.", city: "Hill Valley", state: "CA", zip: "90382" }|
         | 
| 40 37 | 
             
                              end
         | 
| 41 38 | 
             
                            },
         | 
| 42 39 | 
             
                            diff: proc {
         | 
| 43 | 
            -
                              plain_line | 
| 44 | 
            -
                               | 
| 45 | 
            -
                               | 
| 46 | 
            -
                               | 
| 47 | 
            -
                               | 
| 48 | 
            -
                              plain_line | 
| 49 | 
            -
                               | 
| 50 | 
            -
                               | 
| 51 | 
            -
                              plain_line | 
| 40 | 
            +
                              plain_line    %|  #<HashWithIndifferentAccess {|
         | 
| 41 | 
            +
                              expected_line %|-   "line_1" => "123 Main St.",|
         | 
| 42 | 
            +
                              actual_line   %|+   "line_1" => "456 Ponderosa Ct.",|
         | 
| 43 | 
            +
                              expected_line %|-   "city" => "Hill Valley",|
         | 
| 44 | 
            +
                              actual_line   %|+   "city" => "Oakland",|
         | 
| 45 | 
            +
                              plain_line    %|    "state" => "CA",|
         | 
| 46 | 
            +
                              expected_line %|-   "zip" => "90382"|
         | 
| 47 | 
            +
                              actual_line   %|+   "zip" => "91234"|
         | 
| 48 | 
            +
                              plain_line    %|  }>|
         | 
| 52 49 | 
             
                            },
         | 
| 53 50 | 
             
                          )
         | 
| 54 51 |  | 
| @@ -69,7 +66,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 69 66 | 
             
                              "state" => "CA",
         | 
| 70 67 | 
             
                              "zip" => "90382",
         | 
| 71 68 | 
             
                            }
         | 
| 72 | 
            -
                            actual | 
| 69 | 
            +
                            actual   = HashWithIndifferentAccess.new({
         | 
| 73 70 | 
             
                              line_1: "456 Ponderosa Ct.",
         | 
| 74 71 | 
             
                              city: "Oakland",
         | 
| 75 72 | 
             
                              state: "CA",
         | 
| @@ -77,35 +74,32 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 77 74 | 
             
                            })
         | 
| 78 75 | 
             
                            expect(actual).to eq(expected)
         | 
| 79 76 | 
             
                          TEST
         | 
| 80 | 
            -
                          program =  | 
| 81 | 
            -
                            snippet,
         | 
| 82 | 
            -
                            color_enabled: color_enabled,
         | 
| 83 | 
            -
                          )
         | 
| 77 | 
            +
                          program = make_program(snippet, color_enabled: color_enabled)
         | 
| 84 78 |  | 
| 85 79 | 
             
                          expected_output = build_expected_output(
         | 
| 86 80 | 
             
                            color_enabled: color_enabled,
         | 
| 87 81 | 
             
                            snippet: "expect(actual).to eq(expected)",
         | 
| 88 82 | 
             
                            expectation: proc {
         | 
| 89 83 | 
             
                              line do
         | 
| 90 | 
            -
                                plain | 
| 91 | 
            -
                                 | 
| 84 | 
            +
                                plain    %|Expected |
         | 
| 85 | 
            +
                                actual   %|#<HashWithIndifferentAccess { "line_1" => "456 Ponderosa Ct.", "city" => "Oakland", "state" => "CA", "zip" => "91234" }>|
         | 
| 92 86 | 
             
                              end
         | 
| 93 87 |  | 
| 94 88 | 
             
                              line do
         | 
| 95 | 
            -
                                plain | 
| 96 | 
            -
                                 | 
| 89 | 
            +
                                plain    %|   to eq |
         | 
| 90 | 
            +
                                expected %|{ "line_1" => "123 Main St.", "city" => "Hill Valley", "state" => "CA", "zip" => "90382" }|
         | 
| 97 91 | 
             
                              end
         | 
| 98 92 | 
             
                            },
         | 
| 99 93 | 
             
                            diff: proc {
         | 
| 100 | 
            -
                              plain_line | 
| 101 | 
            -
                               | 
| 102 | 
            -
                               | 
| 103 | 
            -
                               | 
| 104 | 
            -
                               | 
| 105 | 
            -
                              plain_line | 
| 106 | 
            -
                               | 
| 107 | 
            -
                               | 
| 108 | 
            -
                              plain_line | 
| 94 | 
            +
                              plain_line    %|  #<HashWithIndifferentAccess {|
         | 
| 95 | 
            +
                              expected_line %|-   "line_1" => "123 Main St.",|
         | 
| 96 | 
            +
                              actual_line   %|+   "line_1" => "456 Ponderosa Ct.",|
         | 
| 97 | 
            +
                              expected_line %|-   "city" => "Hill Valley",|
         | 
| 98 | 
            +
                              actual_line   %|+   "city" => "Oakland",|
         | 
| 99 | 
            +
                              plain_line    %|    "state" => "CA",|
         | 
| 100 | 
            +
                              expected_line %|-   "zip" => "90382"|
         | 
| 101 | 
            +
                              actual_line   %|+   "zip" => "91234"|
         | 
| 102 | 
            +
                              plain_line    %|  }>|
         | 
| 109 103 | 
             
                            },
         | 
| 110 104 | 
             
                          )
         | 
| 111 105 |  | 
| @@ -130,7 +124,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 130 124 | 
             
                              state: "CA",
         | 
| 131 125 | 
             
                              zip: "91234",
         | 
| 132 126 | 
             
                            })
         | 
| 133 | 
            -
                            actual | 
| 127 | 
            +
                            actual   = {
         | 
| 134 128 | 
             
                              line_1: "123 Main St.",
         | 
| 135 129 | 
             
                              city: "Hill Valley",
         | 
| 136 130 | 
             
                              state: "CA",
         | 
| @@ -138,35 +132,32 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 138 132 | 
             
                            }
         | 
| 139 133 | 
             
                            expect(actual).to eq(expected)
         | 
| 140 134 | 
             
                          TEST
         | 
| 141 | 
            -
                          program =  | 
| 142 | 
            -
                            snippet,
         | 
| 143 | 
            -
                            color_enabled: color_enabled,
         | 
| 144 | 
            -
                          )
         | 
| 135 | 
            +
                          program = make_program(snippet, color_enabled: color_enabled)
         | 
| 145 136 |  | 
| 146 137 | 
             
                          expected_output = build_expected_output(
         | 
| 147 138 | 
             
                            color_enabled: color_enabled,
         | 
| 148 139 | 
             
                            snippet: "expect(actual).to eq(expected)",
         | 
| 149 140 | 
             
                            expectation: proc {
         | 
| 150 141 | 
             
                              line do
         | 
| 151 | 
            -
                                plain | 
| 152 | 
            -
                                 | 
| 142 | 
            +
                                plain    %|Expected |
         | 
| 143 | 
            +
                                actual   %|{ line_1: "123 Main St.", city: "Hill Valley", state: "CA", zip: "90382" }|
         | 
| 153 144 | 
             
                              end
         | 
| 154 145 |  | 
| 155 146 | 
             
                              line do
         | 
| 156 | 
            -
                                plain | 
| 157 | 
            -
                                 | 
| 147 | 
            +
                                plain    %|   to eq |
         | 
| 148 | 
            +
                                expected %|#<HashWithIndifferentAccess { "line_1" => "456 Ponderosa Ct.", "city" => "Oakland", "state" => "CA", "zip" => "91234" }>|
         | 
| 158 149 | 
             
                              end
         | 
| 159 150 | 
             
                            },
         | 
| 160 151 | 
             
                            diff: proc {
         | 
| 161 | 
            -
                              plain_line | 
| 162 | 
            -
                               | 
| 163 | 
            -
                               | 
| 164 | 
            -
                               | 
| 165 | 
            -
                               | 
| 166 | 
            -
                              plain_line | 
| 167 | 
            -
                               | 
| 168 | 
            -
                               | 
| 169 | 
            -
                              plain_line | 
| 152 | 
            +
                              plain_line    %|  #<HashWithIndifferentAccess {|
         | 
| 153 | 
            +
                              expected_line %|-   "line_1" => "456 Ponderosa Ct.",|
         | 
| 154 | 
            +
                              actual_line   %|+   "line_1" => "123 Main St.",|
         | 
| 155 | 
            +
                              expected_line %|-   "city" => "Oakland",|
         | 
| 156 | 
            +
                              actual_line   %|+   "city" => "Hill Valley",|
         | 
| 157 | 
            +
                              plain_line    %|    "state" => "CA",|
         | 
| 158 | 
            +
                              expected_line %|-   "zip" => "91234"|
         | 
| 159 | 
            +
                              actual_line   %|+   "zip" => "90382"|
         | 
| 160 | 
            +
                              plain_line    %|  }>|
         | 
| 170 161 | 
             
                            },
         | 
| 171 162 | 
             
                          )
         | 
| 172 163 |  | 
| @@ -177,7 +168,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 177 168 | 
             
                      end
         | 
| 178 169 | 
             
                    end
         | 
| 179 170 |  | 
| 180 | 
            -
                    context "and the actual | 
| 171 | 
            +
                    context "and the actual   hash contains string keys" do
         | 
| 181 172 | 
             
                      it "produces the correct output" do
         | 
| 182 173 | 
             
                        as_both_colored_and_uncolored do |color_enabled|
         | 
| 183 174 | 
             
                          snippet = <<~TEST.strip
         | 
| @@ -187,7 +178,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 187 178 | 
             
                              state: "CA",
         | 
| 188 179 | 
             
                              zip: "91234",
         | 
| 189 180 | 
             
                            })
         | 
| 190 | 
            -
                            actual | 
| 181 | 
            +
                            actual   = {
         | 
| 191 182 | 
             
                              "line_1" => "123 Main St.",
         | 
| 192 183 | 
             
                              "city" => "Hill Valley",
         | 
| 193 184 | 
             
                              "state" => "CA",
         | 
| @@ -195,35 +186,32 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 195 186 | 
             
                            }
         | 
| 196 187 | 
             
                            expect(actual).to eq(expected)
         | 
| 197 188 | 
             
                          TEST
         | 
| 198 | 
            -
                          program =  | 
| 199 | 
            -
                            snippet,
         | 
| 200 | 
            -
                            color_enabled: color_enabled,
         | 
| 201 | 
            -
                          )
         | 
| 189 | 
            +
                          program = make_program(snippet, color_enabled: color_enabled)
         | 
| 202 190 |  | 
| 203 191 | 
             
                          expected_output = build_expected_output(
         | 
| 204 192 | 
             
                            color_enabled: color_enabled,
         | 
| 205 193 | 
             
                            snippet: "expect(actual).to eq(expected)",
         | 
| 206 194 | 
             
                            expectation: proc {
         | 
| 207 195 | 
             
                              line do
         | 
| 208 | 
            -
                                plain | 
| 209 | 
            -
                                 | 
| 196 | 
            +
                                plain    %|Expected |
         | 
| 197 | 
            +
                                actual   %|{ "line_1" => "123 Main St.", "city" => "Hill Valley", "state" => "CA", "zip" => "90382" }|
         | 
| 210 198 | 
             
                              end
         | 
| 211 199 |  | 
| 212 200 | 
             
                              line do
         | 
| 213 | 
            -
                                plain | 
| 214 | 
            -
                                 | 
| 201 | 
            +
                                plain    %|   to eq |
         | 
| 202 | 
            +
                                expected %|#<HashWithIndifferentAccess { "line_1" => "456 Ponderosa Ct.", "city" => "Oakland", "state" => "CA", "zip" => "91234" }>|
         | 
| 215 203 | 
             
                              end
         | 
| 216 204 | 
             
                            },
         | 
| 217 205 | 
             
                            diff: proc {
         | 
| 218 | 
            -
                              plain_line | 
| 219 | 
            -
                               | 
| 220 | 
            -
                               | 
| 221 | 
            -
                               | 
| 222 | 
            -
                               | 
| 223 | 
            -
                              plain_line | 
| 224 | 
            -
                               | 
| 225 | 
            -
                               | 
| 226 | 
            -
                              plain_line | 
| 206 | 
            +
                              plain_line    %|  #<HashWithIndifferentAccess {|
         | 
| 207 | 
            +
                              expected_line %|-   "line_1" => "456 Ponderosa Ct.",|
         | 
| 208 | 
            +
                              actual_line   %|+   "line_1" => "123 Main St.",|
         | 
| 209 | 
            +
                              expected_line %|-   "city" => "Oakland",|
         | 
| 210 | 
            +
                              actual_line   %|+   "city" => "Hill Valley",|
         | 
| 211 | 
            +
                              plain_line    %|    "state" => "CA",|
         | 
| 212 | 
            +
                              expected_line %|-   "zip" => "91234"|
         | 
| 213 | 
            +
                              actual_line   %|+   "zip" => "90382"|
         | 
| 214 | 
            +
                              plain_line    %|  }>|
         | 
| 227 215 | 
             
                            },
         | 
| 228 216 | 
             
                          )
         | 
| 229 217 |  | 
| @@ -250,7 +238,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 250 238 | 
             
                                })
         | 
| 251 239 | 
             
                              ]
         | 
| 252 240 | 
             
                            })
         | 
| 253 | 
            -
                            actual | 
| 241 | 
            +
                            actual   = {
         | 
| 254 242 | 
             
                              shipments: [
         | 
| 255 243 | 
             
                                {
         | 
| 256 244 | 
             
                                  estimated_delivery: {
         | 
| @@ -262,37 +250,34 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 262 250 | 
             
                            }
         | 
| 263 251 | 
             
                            expect(actual).to eq(expected)
         | 
| 264 252 | 
             
                          TEST
         | 
| 265 | 
            -
                          program =  | 
| 266 | 
            -
                            snippet,
         | 
| 267 | 
            -
                            color_enabled: color_enabled,
         | 
| 268 | 
            -
                          )
         | 
| 253 | 
            +
                          program = make_program(snippet, color_enabled: color_enabled)
         | 
| 269 254 |  | 
| 270 255 | 
             
                          expected_output = build_expected_output(
         | 
| 271 256 | 
             
                            color_enabled: color_enabled,
         | 
| 272 257 | 
             
                            snippet: "expect(actual).to eq(expected)",
         | 
| 273 258 | 
             
                            expectation: proc {
         | 
| 274 259 | 
             
                              line do
         | 
| 275 | 
            -
                                plain | 
| 276 | 
            -
                                 | 
| 260 | 
            +
                                plain    %|Expected |
         | 
| 261 | 
            +
                                actual   %|{ shipments: [{ estimated_delivery: { from: "2019-05-06", to: "2019-05-09" } }] }|
         | 
| 277 262 | 
             
                              end
         | 
| 278 263 |  | 
| 279 264 | 
             
                              line do
         | 
| 280 | 
            -
                                plain | 
| 281 | 
            -
                                 | 
| 265 | 
            +
                                plain    %|   to eq |
         | 
| 266 | 
            +
                                expected %|#<HashWithIndifferentAccess { "shipments" => [#<HashWithIndifferentAccess { "estimated_delivery" => #<HashWithIndifferentAccess { "from" => "2019-05-06", "to" => "2019-05-06" }> }>] }>|
         | 
| 282 267 | 
             
                              end
         | 
| 283 268 | 
             
                            },
         | 
| 284 269 | 
             
                            diff: proc {
         | 
| 285 | 
            -
                              plain_line | 
| 286 | 
            -
                              plain_line | 
| 287 | 
            -
                              plain_line | 
| 288 | 
            -
                              plain_line | 
| 289 | 
            -
                              plain_line | 
| 290 | 
            -
                               | 
| 291 | 
            -
                               | 
| 292 | 
            -
                              plain_line | 
| 293 | 
            -
                              plain_line | 
| 294 | 
            -
                              plain_line | 
| 295 | 
            -
                              plain_line | 
| 270 | 
            +
                              plain_line    %|  #<HashWithIndifferentAccess {|
         | 
| 271 | 
            +
                              plain_line    %|    "shipments" => [|
         | 
| 272 | 
            +
                              plain_line    %|      {|
         | 
| 273 | 
            +
                              plain_line    %|        "estimated_delivery" => {|
         | 
| 274 | 
            +
                              plain_line    %|          "from" => "2019-05-06",|
         | 
| 275 | 
            +
                              expected_line %|-         "to" => "2019-05-06"|
         | 
| 276 | 
            +
                              actual_line   %|+         "to" => "2019-05-09"|
         | 
| 277 | 
            +
                              plain_line    %|        }|
         | 
| 278 | 
            +
                              plain_line    %|      }|
         | 
| 279 | 
            +
                              plain_line    %|    ]|
         | 
| 280 | 
            +
                              plain_line    %|  }>|
         | 
| 296 281 | 
             
                            },
         | 
| 297 282 | 
             
                          )
         | 
| 298 283 |  | 
| @@ -303,7 +288,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 303 288 | 
             
                      end
         | 
| 304 289 | 
             
                    end
         | 
| 305 290 |  | 
| 306 | 
            -
                    context "and the actual | 
| 291 | 
            +
                    context "and the actual   hash contains string keys" do
         | 
| 307 292 | 
             
                      it "produces the correct output" do
         | 
| 308 293 | 
             
                        as_both_colored_and_uncolored do |color_enabled|
         | 
| 309 294 | 
             
                          snippet = <<~TEST.strip
         | 
| @@ -317,7 +302,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 317 302 | 
             
                                })
         | 
| 318 303 | 
             
                              ]
         | 
| 319 304 | 
             
                            })
         | 
| 320 | 
            -
                            actual | 
| 305 | 
            +
                            actual   = {
         | 
| 321 306 | 
             
                              'shipments' => [
         | 
| 322 307 | 
             
                                {
         | 
| 323 308 | 
             
                                  'estimated_delivery' => {
         | 
| @@ -329,37 +314,34 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 329 314 | 
             
                            }
         | 
| 330 315 | 
             
                            expect(actual).to eq(expected)
         | 
| 331 316 | 
             
                          TEST
         | 
| 332 | 
            -
                          program =  | 
| 333 | 
            -
                            snippet,
         | 
| 334 | 
            -
                            color_enabled: color_enabled,
         | 
| 335 | 
            -
                          )
         | 
| 317 | 
            +
                          program = make_program(snippet, color_enabled: color_enabled)
         | 
| 336 318 |  | 
| 337 319 | 
             
                          expected_output = build_expected_output(
         | 
| 338 320 | 
             
                            color_enabled: color_enabled,
         | 
| 339 321 | 
             
                            snippet: "expect(actual).to eq(expected)",
         | 
| 340 322 | 
             
                            expectation: proc {
         | 
| 341 323 | 
             
                              line do
         | 
| 342 | 
            -
                                plain | 
| 343 | 
            -
                                 | 
| 324 | 
            +
                                plain    %|Expected |
         | 
| 325 | 
            +
                                actual   %|{ "shipments" => [{ "estimated_delivery" => { "from" => "2019-05-06", "to" => "2019-05-09" } }] }|
         | 
| 344 326 | 
             
                              end
         | 
| 345 327 |  | 
| 346 328 | 
             
                              line do
         | 
| 347 | 
            -
                                plain | 
| 348 | 
            -
                                 | 
| 329 | 
            +
                                plain    %|   to eq |
         | 
| 330 | 
            +
                                expected %|#<HashWithIndifferentAccess { "shipments" => [#<HashWithIndifferentAccess { "estimated_delivery" => #<HashWithIndifferentAccess { "from" => "2019-05-06", "to" => "2019-05-06" }> }>] }>|
         | 
| 349 331 | 
             
                              end
         | 
| 350 332 | 
             
                            },
         | 
| 351 333 | 
             
                            diff: proc {
         | 
| 352 | 
            -
                              plain_line | 
| 353 | 
            -
                              plain_line | 
| 354 | 
            -
                              plain_line | 
| 355 | 
            -
                              plain_line | 
| 356 | 
            -
                              plain_line | 
| 357 | 
            -
                               | 
| 358 | 
            -
                               | 
| 359 | 
            -
                              plain_line | 
| 360 | 
            -
                              plain_line | 
| 361 | 
            -
                              plain_line | 
| 362 | 
            -
                              plain_line | 
| 334 | 
            +
                              plain_line    %|  #<HashWithIndifferentAccess {|
         | 
| 335 | 
            +
                              plain_line    %|    "shipments" => [|
         | 
| 336 | 
            +
                              plain_line    %|      {|
         | 
| 337 | 
            +
                              plain_line    %|        "estimated_delivery" => {|
         | 
| 338 | 
            +
                              plain_line    %|          "from" => "2019-05-06",|
         | 
| 339 | 
            +
                              expected_line %|-         "to" => "2019-05-06"|
         | 
| 340 | 
            +
                              actual_line   %|+         "to" => "2019-05-09"|
         | 
| 341 | 
            +
                              plain_line    %|        }|
         | 
| 342 | 
            +
                              plain_line    %|      }|
         | 
| 343 | 
            +
                              plain_line    %|    ]|
         | 
| 344 | 
            +
                              plain_line    %|  }>|
         | 
| 363 345 | 
             
                            },
         | 
| 364 346 | 
             
                          )
         | 
| 365 347 |  | 
| @@ -374,7 +356,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 374 356 | 
             
              end
         | 
| 375 357 |  | 
| 376 358 | 
             
              describe "and RSpec's #match matcher" do
         | 
| 377 | 
            -
                context "when the actual | 
| 359 | 
            +
                context "when the actual   value is a HashWithIndifferentAccess" do
         | 
| 378 360 | 
             
                  context "and both hashes are one-dimensional" do
         | 
| 379 361 | 
             
                    context "and the expected hash contains symbol keys" do
         | 
| 380 362 | 
             
                      it "produces the correct output" do
         | 
| @@ -386,7 +368,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 386 368 | 
             
                              state: "CA",
         | 
| 387 369 | 
             
                              zip: "90382",
         | 
| 388 370 | 
             
                            }
         | 
| 389 | 
            -
                            actual | 
| 371 | 
            +
                            actual   = HashWithIndifferentAccess.new({
         | 
| 390 372 | 
             
                              line_1: "456 Ponderosa Ct.",
         | 
| 391 373 | 
             
                              city: "Oakland",
         | 
| 392 374 | 
             
                              state: "CA",
         | 
| @@ -394,35 +376,32 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 394 376 | 
             
                            })
         | 
| 395 377 | 
             
                            expect(actual).to match(expected)
         | 
| 396 378 | 
             
                          TEST
         | 
| 397 | 
            -
                          program =  | 
| 398 | 
            -
                            snippet,
         | 
| 399 | 
            -
                            color_enabled: color_enabled,
         | 
| 400 | 
            -
                          )
         | 
| 379 | 
            +
                          program = make_program(snippet, color_enabled: color_enabled)
         | 
| 401 380 |  | 
| 402 381 | 
             
                          expected_output = build_expected_output(
         | 
| 403 382 | 
             
                            color_enabled: color_enabled,
         | 
| 404 383 | 
             
                            snippet: "expect(actual).to match(expected)",
         | 
| 405 384 | 
             
                            expectation: proc {
         | 
| 406 385 | 
             
                              line do
         | 
| 407 | 
            -
                                plain | 
| 408 | 
            -
                                 | 
| 386 | 
            +
                                plain    %|Expected |
         | 
| 387 | 
            +
                                actual   %|#<HashWithIndifferentAccess { "line_1" => "456 Ponderosa Ct.", "city" => "Oakland", "state" => "CA", "zip" => "91234" }>|
         | 
| 409 388 | 
             
                              end
         | 
| 410 389 |  | 
| 411 390 | 
             
                              line do
         | 
| 412 | 
            -
                                plain | 
| 413 | 
            -
                                 | 
| 391 | 
            +
                                plain    %|to match |
         | 
| 392 | 
            +
                                expected %|{ line_1: "123 Main St.", city: "Hill Valley", state: "CA", zip: "90382" }|
         | 
| 414 393 | 
             
                              end
         | 
| 415 394 | 
             
                            },
         | 
| 416 395 | 
             
                            diff: proc {
         | 
| 417 | 
            -
                              plain_line | 
| 418 | 
            -
                               | 
| 419 | 
            -
                               | 
| 420 | 
            -
                               | 
| 421 | 
            -
                               | 
| 422 | 
            -
                              plain_line | 
| 423 | 
            -
                               | 
| 424 | 
            -
                               | 
| 425 | 
            -
                              plain_line | 
| 396 | 
            +
                              plain_line    %|  #<HashWithIndifferentAccess {|
         | 
| 397 | 
            +
                              expected_line %|-   "line_1" => "123 Main St.",|
         | 
| 398 | 
            +
                              actual_line   %|+   "line_1" => "456 Ponderosa Ct.",|
         | 
| 399 | 
            +
                              expected_line %|-   "city" => "Hill Valley",|
         | 
| 400 | 
            +
                              actual_line   %|+   "city" => "Oakland",|
         | 
| 401 | 
            +
                              plain_line    %|    "state" => "CA",|
         | 
| 402 | 
            +
                              expected_line %|-   "zip" => "90382"|
         | 
| 403 | 
            +
                              actual_line   %|+   "zip" => "91234"|
         | 
| 404 | 
            +
                              plain_line    %|  }>|
         | 
| 426 405 | 
             
                            },
         | 
| 427 406 | 
             
                          )
         | 
| 428 407 |  | 
| @@ -443,7 +422,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 443 422 | 
             
                              "state" => "CA",
         | 
| 444 423 | 
             
                              "zip" => "90382",
         | 
| 445 424 | 
             
                            }
         | 
| 446 | 
            -
                            actual | 
| 425 | 
            +
                            actual   = HashWithIndifferentAccess.new({
         | 
| 447 426 | 
             
                              line_1: "456 Ponderosa Ct.",
         | 
| 448 427 | 
             
                              city: "Oakland",
         | 
| 449 428 | 
             
                              state: "CA",
         | 
| @@ -451,35 +430,32 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 451 430 | 
             
                            })
         | 
| 452 431 | 
             
                            expect(actual).to match(expected)
         | 
| 453 432 | 
             
                          TEST
         | 
| 454 | 
            -
                          program =  | 
| 455 | 
            -
                            snippet,
         | 
| 456 | 
            -
                            color_enabled: color_enabled,
         | 
| 457 | 
            -
                          )
         | 
| 433 | 
            +
                          program = make_program(snippet, color_enabled: color_enabled)
         | 
| 458 434 |  | 
| 459 435 | 
             
                          expected_output = build_expected_output(
         | 
| 460 436 | 
             
                            color_enabled: color_enabled,
         | 
| 461 437 | 
             
                            snippet: "expect(actual).to match(expected)",
         | 
| 462 438 | 
             
                            expectation: proc {
         | 
| 463 439 | 
             
                              line do
         | 
| 464 | 
            -
                                plain | 
| 465 | 
            -
                                 | 
| 440 | 
            +
                                plain    %|Expected |
         | 
| 441 | 
            +
                                actual   %|#<HashWithIndifferentAccess { "line_1" => "456 Ponderosa Ct.", "city" => "Oakland", "state" => "CA", "zip" => "91234" }>|
         | 
| 466 442 | 
             
                              end
         | 
| 467 443 |  | 
| 468 444 | 
             
                              line do
         | 
| 469 | 
            -
                                plain | 
| 470 | 
            -
                                 | 
| 445 | 
            +
                                plain    %|to match |
         | 
| 446 | 
            +
                                expected %|{ "line_1" => "123 Main St.", "city" => "Hill Valley", "state" => "CA", "zip" => "90382" }|
         | 
| 471 447 | 
             
                              end
         | 
| 472 448 | 
             
                            },
         | 
| 473 449 | 
             
                            diff: proc {
         | 
| 474 | 
            -
                              plain_line | 
| 475 | 
            -
                               | 
| 476 | 
            -
                               | 
| 477 | 
            -
                               | 
| 478 | 
            -
                               | 
| 479 | 
            -
                              plain_line | 
| 480 | 
            -
                               | 
| 481 | 
            -
                               | 
| 482 | 
            -
                              plain_line | 
| 450 | 
            +
                              plain_line    %|  #<HashWithIndifferentAccess {|
         | 
| 451 | 
            +
                              expected_line %|-   "line_1" => "123 Main St.",|
         | 
| 452 | 
            +
                              actual_line   %|+   "line_1" => "456 Ponderosa Ct.",|
         | 
| 453 | 
            +
                              expected_line %|-   "city" => "Hill Valley",|
         | 
| 454 | 
            +
                              actual_line   %|+   "city" => "Oakland",|
         | 
| 455 | 
            +
                              plain_line    %|    "state" => "CA",|
         | 
| 456 | 
            +
                              expected_line %|-   "zip" => "90382"|
         | 
| 457 | 
            +
                              actual_line   %|+   "zip" => "91234"|
         | 
| 458 | 
            +
                              plain_line    %|  }>|
         | 
| 483 459 | 
             
                            },
         | 
| 484 460 | 
             
                          )
         | 
| 485 461 |  | 
| @@ -494,7 +470,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 494 470 |  | 
| 495 471 | 
             
                context "when the expected value is a HashWithIndifferentAccess" do
         | 
| 496 472 | 
             
                  context "and both hashes are one-dimensional" do
         | 
| 497 | 
            -
                    context "and the actual | 
| 473 | 
            +
                    context "and the actual   hash contains symbol keys" do
         | 
| 498 474 | 
             
                      it "produces the correct output" do
         | 
| 499 475 | 
             
                        as_both_colored_and_uncolored do |color_enabled|
         | 
| 500 476 | 
             
                          snippet = <<~TEST.strip
         | 
| @@ -504,7 +480,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 504 480 | 
             
                              state: "CA",
         | 
| 505 481 | 
             
                              zip: "91234",
         | 
| 506 482 | 
             
                            })
         | 
| 507 | 
            -
                            actual | 
| 483 | 
            +
                            actual   = {
         | 
| 508 484 | 
             
                              line_1: "123 Main St.",
         | 
| 509 485 | 
             
                              city: "Hill Valley",
         | 
| 510 486 | 
             
                              state: "CA",
         | 
| @@ -512,35 +488,32 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 512 488 | 
             
                            }
         | 
| 513 489 | 
             
                            expect(actual).to match(expected)
         | 
| 514 490 | 
             
                          TEST
         | 
| 515 | 
            -
                          program =  | 
| 516 | 
            -
                            snippet,
         | 
| 517 | 
            -
                            color_enabled: color_enabled,
         | 
| 518 | 
            -
                          )
         | 
| 491 | 
            +
                          program = make_program(snippet, color_enabled: color_enabled)
         | 
| 519 492 |  | 
| 520 493 | 
             
                          expected_output = build_expected_output(
         | 
| 521 494 | 
             
                            color_enabled: color_enabled,
         | 
| 522 495 | 
             
                            snippet: "expect(actual).to match(expected)",
         | 
| 523 496 | 
             
                            expectation: proc {
         | 
| 524 497 | 
             
                              line do
         | 
| 525 | 
            -
                                plain | 
| 526 | 
            -
                                 | 
| 498 | 
            +
                                plain    %|Expected |
         | 
| 499 | 
            +
                                actual   %|{ line_1: "123 Main St.", city: "Hill Valley", state: "CA", zip: "90382" }|
         | 
| 527 500 | 
             
                              end
         | 
| 528 501 |  | 
| 529 502 | 
             
                              line do
         | 
| 530 | 
            -
                                plain | 
| 531 | 
            -
                                 | 
| 503 | 
            +
                                plain    %|to match |
         | 
| 504 | 
            +
                                expected %|#<HashWithIndifferentAccess { "line_1" => "456 Ponderosa Ct.", "city" => "Oakland", "state" => "CA", "zip" => "91234" }>|
         | 
| 532 505 | 
             
                              end
         | 
| 533 506 | 
             
                            },
         | 
| 534 507 | 
             
                            diff: proc {
         | 
| 535 | 
            -
                              plain_line | 
| 536 | 
            -
                               | 
| 537 | 
            -
                               | 
| 538 | 
            -
                               | 
| 539 | 
            -
                               | 
| 540 | 
            -
                              plain_line | 
| 541 | 
            -
                               | 
| 542 | 
            -
                               | 
| 543 | 
            -
                              plain_line | 
| 508 | 
            +
                              plain_line    %|  #<HashWithIndifferentAccess {|
         | 
| 509 | 
            +
                              expected_line %|-   "line_1" => "456 Ponderosa Ct.",|
         | 
| 510 | 
            +
                              actual_line   %|+   "line_1" => "123 Main St.",|
         | 
| 511 | 
            +
                              expected_line %|-   "city" => "Oakland",|
         | 
| 512 | 
            +
                              actual_line   %|+   "city" => "Hill Valley",|
         | 
| 513 | 
            +
                              plain_line    %|    "state" => "CA",|
         | 
| 514 | 
            +
                              expected_line %|-   "zip" => "91234"|
         | 
| 515 | 
            +
                              actual_line   %|+   "zip" => "90382"|
         | 
| 516 | 
            +
                              plain_line    %|  }>|
         | 
| 544 517 | 
             
                            },
         | 
| 545 518 | 
             
                          )
         | 
| 546 519 |  | 
| @@ -551,7 +524,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 551 524 | 
             
                      end
         | 
| 552 525 | 
             
                    end
         | 
| 553 526 |  | 
| 554 | 
            -
                    context "and the actual | 
| 527 | 
            +
                    context "and the actual   hash contains string keys" do
         | 
| 555 528 | 
             
                      it "produces the correct output" do
         | 
| 556 529 | 
             
                        as_both_colored_and_uncolored do |color_enabled|
         | 
| 557 530 | 
             
                          snippet = <<~TEST.strip
         | 
| @@ -561,7 +534,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 561 534 | 
             
                              state: "CA",
         | 
| 562 535 | 
             
                              zip: "91234",
         | 
| 563 536 | 
             
                            })
         | 
| 564 | 
            -
                            actual | 
| 537 | 
            +
                            actual   = {
         | 
| 565 538 | 
             
                              "line_1" => "123 Main St.",
         | 
| 566 539 | 
             
                              "city" => "Hill Valley",
         | 
| 567 540 | 
             
                              "state" => "CA",
         | 
| @@ -569,35 +542,32 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 569 542 | 
             
                            }
         | 
| 570 543 | 
             
                            expect(actual).to match(expected)
         | 
| 571 544 | 
             
                          TEST
         | 
| 572 | 
            -
                          program =  | 
| 573 | 
            -
                            snippet,
         | 
| 574 | 
            -
                            color_enabled: color_enabled,
         | 
| 575 | 
            -
                          )
         | 
| 545 | 
            +
                          program = make_program(snippet, color_enabled: color_enabled)
         | 
| 576 546 |  | 
| 577 547 | 
             
                          expected_output = build_expected_output(
         | 
| 578 548 | 
             
                            color_enabled: color_enabled,
         | 
| 579 549 | 
             
                            snippet: "expect(actual).to match(expected)",
         | 
| 580 550 | 
             
                            expectation: proc {
         | 
| 581 551 | 
             
                              line do
         | 
| 582 | 
            -
                                plain | 
| 583 | 
            -
                                 | 
| 552 | 
            +
                                plain    %|Expected |
         | 
| 553 | 
            +
                                actual   %|{ "line_1" => "123 Main St.", "city" => "Hill Valley", "state" => "CA", "zip" => "90382" }|
         | 
| 584 554 | 
             
                              end
         | 
| 585 555 |  | 
| 586 556 | 
             
                              line do
         | 
| 587 | 
            -
                                plain | 
| 588 | 
            -
                                 | 
| 557 | 
            +
                                plain    %|to match |
         | 
| 558 | 
            +
                                expected %|#<HashWithIndifferentAccess { "line_1" => "456 Ponderosa Ct.", "city" => "Oakland", "state" => "CA", "zip" => "91234" }>|
         | 
| 589 559 | 
             
                              end
         | 
| 590 560 | 
             
                            },
         | 
| 591 561 | 
             
                            diff: proc {
         | 
| 592 | 
            -
                              plain_line | 
| 593 | 
            -
                               | 
| 594 | 
            -
                               | 
| 595 | 
            -
                               | 
| 596 | 
            -
                               | 
| 597 | 
            -
                              plain_line | 
| 598 | 
            -
                               | 
| 599 | 
            -
                               | 
| 600 | 
            -
                              plain_line | 
| 562 | 
            +
                              plain_line    %|  #<HashWithIndifferentAccess {|
         | 
| 563 | 
            +
                              expected_line %|-   "line_1" => "456 Ponderosa Ct.",|
         | 
| 564 | 
            +
                              actual_line   %|+   "line_1" => "123 Main St.",|
         | 
| 565 | 
            +
                              expected_line %|-   "city" => "Oakland",|
         | 
| 566 | 
            +
                              actual_line   %|+   "city" => "Hill Valley",|
         | 
| 567 | 
            +
                              plain_line    %|    "state" => "CA",|
         | 
| 568 | 
            +
                              expected_line %|-   "zip" => "91234"|
         | 
| 569 | 
            +
                              actual_line   %|+   "zip" => "90382"|
         | 
| 570 | 
            +
                              plain_line    %|  }>|
         | 
| 601 571 | 
             
                            },
         | 
| 602 572 | 
             
                          )
         | 
| 603 573 |  | 
| @@ -610,7 +580,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 610 580 | 
             
                  end
         | 
| 611 581 |  | 
| 612 582 | 
             
                  context "and both hashes are multi-dimensional" do
         | 
| 613 | 
            -
                    context "and the actual | 
| 583 | 
            +
                    context "and the actual   hash contains symbol keys" do
         | 
| 614 584 | 
             
                      it "produces the correct output" do
         | 
| 615 585 | 
             
                        as_both_colored_and_uncolored do |color_enabled|
         | 
| 616 586 | 
             
                          snippet = <<~TEST.strip
         | 
| @@ -624,7 +594,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 624 594 | 
             
                                })
         | 
| 625 595 | 
             
                              ]
         | 
| 626 596 | 
             
                            })
         | 
| 627 | 
            -
                            actual | 
| 597 | 
            +
                            actual   = {
         | 
| 628 598 | 
             
                              shipments: [
         | 
| 629 599 | 
             
                                {
         | 
| 630 600 | 
             
                                  estimated_delivery: {
         | 
| @@ -636,37 +606,34 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 636 606 | 
             
                            }
         | 
| 637 607 | 
             
                            expect(actual).to match(expected)
         | 
| 638 608 | 
             
                          TEST
         | 
| 639 | 
            -
                          program =  | 
| 640 | 
            -
                            snippet,
         | 
| 641 | 
            -
                            color_enabled: color_enabled,
         | 
| 642 | 
            -
                          )
         | 
| 609 | 
            +
                          program = make_program(snippet, color_enabled: color_enabled)
         | 
| 643 610 |  | 
| 644 611 | 
             
                          expected_output = build_expected_output(
         | 
| 645 612 | 
             
                            color_enabled: color_enabled,
         | 
| 646 613 | 
             
                            snippet: "expect(actual).to match(expected)",
         | 
| 647 614 | 
             
                            expectation: proc {
         | 
| 648 615 | 
             
                              line do
         | 
| 649 | 
            -
                                plain | 
| 650 | 
            -
                                 | 
| 616 | 
            +
                                plain    %|Expected |
         | 
| 617 | 
            +
                                actual   %|{ shipments: [{ estimated_delivery: { from: "2019-05-06", to: "2019-05-09" } }] }|
         | 
| 651 618 | 
             
                              end
         | 
| 652 619 |  | 
| 653 620 | 
             
                              line do
         | 
| 654 | 
            -
                                plain | 
| 655 | 
            -
                                 | 
| 621 | 
            +
                                plain    %|to match |
         | 
| 622 | 
            +
                                expected %|#<HashWithIndifferentAccess { "shipments" => [#<HashWithIndifferentAccess { "estimated_delivery" => #<HashWithIndifferentAccess { "from" => "2019-05-06", "to" => "2019-05-06" }> }>] }>|
         | 
| 656 623 | 
             
                              end
         | 
| 657 624 | 
             
                            },
         | 
| 658 625 | 
             
                            diff: proc {
         | 
| 659 | 
            -
                              plain_line | 
| 660 | 
            -
                              plain_line | 
| 661 | 
            -
                              plain_line | 
| 662 | 
            -
                              plain_line | 
| 663 | 
            -
                              plain_line | 
| 664 | 
            -
                               | 
| 665 | 
            -
                               | 
| 666 | 
            -
                              plain_line | 
| 667 | 
            -
                              plain_line | 
| 668 | 
            -
                              plain_line | 
| 669 | 
            -
                              plain_line | 
| 626 | 
            +
                              plain_line    %|  #<HashWithIndifferentAccess {|
         | 
| 627 | 
            +
                              plain_line    %|    "shipments" => [|
         | 
| 628 | 
            +
                              plain_line    %|      {|
         | 
| 629 | 
            +
                              plain_line    %|        "estimated_delivery" => {|
         | 
| 630 | 
            +
                              plain_line    %|          "from" => "2019-05-06",|
         | 
| 631 | 
            +
                              expected_line %|-         "to" => "2019-05-06"|
         | 
| 632 | 
            +
                              actual_line   %|+         "to" => "2019-05-09"|
         | 
| 633 | 
            +
                              plain_line    %|        }|
         | 
| 634 | 
            +
                              plain_line    %|      }|
         | 
| 635 | 
            +
                              plain_line    %|    ]|
         | 
| 636 | 
            +
                              plain_line    %|  }>|
         | 
| 670 637 | 
             
                            },
         | 
| 671 638 | 
             
                          )
         | 
| 672 639 |  | 
| @@ -677,7 +644,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 677 644 | 
             
                      end
         | 
| 678 645 | 
             
                    end
         | 
| 679 646 |  | 
| 680 | 
            -
                    context "and the actual | 
| 647 | 
            +
                    context "and the actual   hash contains string keys" do
         | 
| 681 648 | 
             
                      it "produces the correct output" do
         | 
| 682 649 | 
             
                        as_both_colored_and_uncolored do |color_enabled|
         | 
| 683 650 | 
             
                          snippet = <<~TEST.strip
         | 
| @@ -691,7 +658,7 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 691 658 | 
             
                                })
         | 
| 692 659 | 
             
                              ]
         | 
| 693 660 | 
             
                            })
         | 
| 694 | 
            -
                            actual | 
| 661 | 
            +
                            actual   = {
         | 
| 695 662 | 
             
                              'shipments' => [
         | 
| 696 663 | 
             
                                {
         | 
| 697 664 | 
             
                                  'estimated_delivery' => {
         | 
| @@ -703,37 +670,34 @@ shared_examples_for "integration with HashWithIndifferentAccess" do | |
| 703 670 | 
             
                            }
         | 
| 704 671 | 
             
                            expect(actual).to match(expected)
         | 
| 705 672 | 
             
                          TEST
         | 
| 706 | 
            -
                          program =  | 
| 707 | 
            -
                            snippet,
         | 
| 708 | 
            -
                            color_enabled: color_enabled,
         | 
| 709 | 
            -
                          )
         | 
| 673 | 
            +
                          program = make_program(snippet, color_enabled: color_enabled)
         | 
| 710 674 |  | 
| 711 675 | 
             
                          expected_output = build_expected_output(
         | 
| 712 676 | 
             
                            color_enabled: color_enabled,
         | 
| 713 677 | 
             
                            snippet: "expect(actual).to match(expected)",
         | 
| 714 678 | 
             
                            expectation: proc {
         | 
| 715 679 | 
             
                              line do
         | 
| 716 | 
            -
                                plain | 
| 717 | 
            -
                                 | 
| 680 | 
            +
                                plain    %|Expected |
         | 
| 681 | 
            +
                                actual   %|{ "shipments" => [{ "estimated_delivery" => { "from" => "2019-05-06", "to" => "2019-05-09" } }] }|
         | 
| 718 682 | 
             
                              end
         | 
| 719 683 |  | 
| 720 684 | 
             
                              line do
         | 
| 721 | 
            -
                                plain | 
| 722 | 
            -
                                 | 
| 685 | 
            +
                                plain    %|to match |
         | 
| 686 | 
            +
                                expected %|#<HashWithIndifferentAccess { "shipments" => [#<HashWithIndifferentAccess { "estimated_delivery" => #<HashWithIndifferentAccess { "from" => "2019-05-06", "to" => "2019-05-06" }> }>] }>|
         | 
| 723 687 | 
             
                              end
         | 
| 724 688 | 
             
                            },
         | 
| 725 689 | 
             
                            diff: proc {
         | 
| 726 | 
            -
                              plain_line | 
| 727 | 
            -
                              plain_line | 
| 728 | 
            -
                              plain_line | 
| 729 | 
            -
                              plain_line | 
| 730 | 
            -
                              plain_line | 
| 731 | 
            -
                               | 
| 732 | 
            -
                               | 
| 733 | 
            -
                              plain_line | 
| 734 | 
            -
                              plain_line | 
| 735 | 
            -
                              plain_line | 
| 736 | 
            -
                              plain_line | 
| 690 | 
            +
                              plain_line    %|  #<HashWithIndifferentAccess {|
         | 
| 691 | 
            +
                              plain_line    %|    "shipments" => [|
         | 
| 692 | 
            +
                              plain_line    %|      {|
         | 
| 693 | 
            +
                              plain_line    %|        "estimated_delivery" => {|
         | 
| 694 | 
            +
                              plain_line    %|          "from" => "2019-05-06",|
         | 
| 695 | 
            +
                              expected_line %|-         "to" => "2019-05-06"|
         | 
| 696 | 
            +
                              actual_line   %|+         "to" => "2019-05-09"|
         | 
| 697 | 
            +
                              plain_line    %|        }|
         | 
| 698 | 
            +
                              plain_line    %|      }|
         | 
| 699 | 
            +
                              plain_line    %|    ]|
         | 
| 700 | 
            +
                              plain_line    %|  }>|
         | 
| 737 701 | 
             
                            },
         | 
| 738 702 | 
             
                          )
         | 
| 739 703 |  |