super_diff 0.10.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model.rb +24 -12
  3. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_relation.rb +15 -6
  4. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access.rb +23 -8
  5. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/ordered_options.rb +46 -0
  6. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders.rb +4 -0
  7. data/lib/super_diff/active_support.rb +2 -1
  8. data/lib/super_diff/differs/date_like.rb +15 -0
  9. data/lib/super_diff/differs/defaults.rb +1 -0
  10. data/lib/super_diff/differs.rb +1 -0
  11. data/lib/super_diff/errors.rb +0 -4
  12. data/lib/super_diff/object_inspection/inspection_tree.rb +25 -20
  13. data/lib/super_diff/object_inspection/inspection_tree_builders/array.rb +31 -12
  14. data/lib/super_diff/object_inspection/inspection_tree_builders/custom_object.rb +19 -9
  15. data/lib/super_diff/object_inspection/inspection_tree_builders/date_like.rb +51 -0
  16. data/lib/super_diff/object_inspection/inspection_tree_builders/default_object.rb +46 -21
  17. data/lib/super_diff/object_inspection/inspection_tree_builders/defaults.rb +1 -0
  18. data/lib/super_diff/object_inspection/inspection_tree_builders/hash.rb +39 -14
  19. data/lib/super_diff/object_inspection/inspection_tree_builders/primitive.rb +3 -5
  20. data/lib/super_diff/object_inspection/inspection_tree_builders/time_like.rb +31 -20
  21. data/lib/super_diff/object_inspection/inspection_tree_builders.rb +4 -0
  22. data/lib/super_diff/object_inspection/nodes/as_lines_when_rendering_to_lines.rb +3 -2
  23. data/lib/super_diff/operation_tree_builders/date_like.rb +15 -0
  24. data/lib/super_diff/operation_tree_builders/defaults.rb +1 -1
  25. data/lib/super_diff/operation_tree_builders.rb +1 -0
  26. data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +3 -7
  27. data/lib/super_diff/rspec/monkey_patches.rb +59 -8
  28. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_containing_exactly.rb +14 -7
  29. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_including.rb +19 -13
  30. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/double.rb +30 -26
  31. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/generic_describable_matcher.rb +19 -0
  32. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/hash_including.rb +19 -14
  33. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/instance_of.rb +9 -10
  34. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/kind_of.rb +9 -10
  35. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/object_having_attributes.rb +14 -7
  36. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/value_within.rb +10 -11
  37. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders.rb +4 -0
  38. data/lib/super_diff/rspec.rb +10 -9
  39. data/lib/super_diff/version.rb +1 -1
  40. data/lib/super_diff.rb +9 -0
  41. data/spec/examples.txt +543 -493
  42. data/spec/integration/rails/engines_spec.rb +8 -3
  43. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +19 -19
  44. data/spec/integration/rspec/eq_matcher_spec.rb +111 -39
  45. data/spec/integration/rspec/generic_describable_matchers_spec.rb +177 -0
  46. data/spec/integration/rspec/have_attributes_matcher_spec.rb +25 -25
  47. data/spec/integration/rspec/include_matcher_spec.rb +23 -23
  48. data/spec/integration/rspec/magic_metadata_spec.rb +51 -0
  49. data/spec/integration/rspec/match_array_matcher_spec.rb +30 -30
  50. data/spec/integration/rspec/match_matcher_spec.rb +93 -93
  51. data/spec/integration/rspec/raise_error_matcher_spec.rb +813 -69
  52. data/spec/internal/log/test.log +0 -0
  53. data/spec/spec_helper.rb +3 -0
  54. data/spec/support/integration/helpers.rb +15 -10
  55. data/spec/support/integration/matchers.rb +34 -0
  56. data/spec/support/integration/test_programs/base.rb +6 -6
  57. data/spec/support/integration/test_programs/rspec_rails_engine.rb +3 -13
  58. data/spec/support/shared_examples/active_record.rb +33 -33
  59. data/spec/support/shared_examples/active_support.rb +125 -4
  60. data/spec/support/shared_examples/elided_diffs.rb +48 -48
  61. data/spec/support/shared_examples/hash_with_indifferent_access.rb +88 -88
  62. data/spec/support/shared_examples/key.rb +10 -10
  63. data/spec/unit/active_support/object_inspection_spec.rb +170 -0
  64. data/spec/unit/rspec/matchers/raise_error_spec.rb +43 -11
  65. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +91 -0
  66. data/spec/unit/rspec/object_inspection_spec.rb +2 -2
  67. data/spec/unit/super_diff_spec.rb +64 -0
  68. metadata +17 -4
  69. data/lib/super_diff/errors/no_diff_formatter_available_error.rb +0 -21
  70. data/lib/super_diff/errors/no_operational_sequencer_available_error.rb +0 -22
@@ -8,8 +8,8 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher",
8
8
  it "produces the correct output when used in the positive" do
9
9
  as_both_colored_and_uncolored do |color_enabled|
10
10
  snippet = <<~TEST.strip
11
- expected = { name: "b" }
12
11
  actual = SuperDiff::Test::Person.new(name: "a", age: 9)
12
+ expected = { name: "b" }
13
13
  expect(actual).to have_attributes(expected)
14
14
  TEST
15
15
  program =
@@ -49,8 +49,8 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher",
49
49
  it "produces the correct output when used in the negative" do
50
50
  as_both_colored_and_uncolored do |color_enabled|
51
51
  snippet = <<~TEST.strip
52
- expected = { name: "a" }
53
52
  actual = SuperDiff::Test::Person.new(name: "a", age: 9)
53
+ expected = { name: "a" }
54
54
  expect(actual).not_to have_attributes(expected)
55
55
  TEST
56
56
  program =
@@ -83,8 +83,8 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher",
83
83
  it "produces the correct output" do
84
84
  as_both_colored_and_uncolored do |color_enabled|
85
85
  snippet = <<~TEST.strip
86
- expected = { name: "b", foo: "bar" }
87
86
  actual = SuperDiff::Test::Person.new(name: "a", age: 9)
87
+ expected = { name: "b", foo: "bar" }
88
88
  expect(actual).to have_attributes(expected)
89
89
  TEST
90
90
  program =
@@ -131,12 +131,6 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher",
131
131
  it "produces the correct output when used in the positive" do
132
132
  as_both_colored_and_uncolored do |color_enabled|
133
133
  snippet = <<~TEST.strip
134
- expected = {
135
- line_1: "123 Main St.",
136
- city: "Oakland",
137
- state: "CA",
138
- zip: "91234"
139
- }
140
134
  actual = SuperDiff::Test::ShippingAddress.new(
141
135
  line_1: "456 Ponderosa Ct.",
142
136
  line_2: nil,
@@ -144,6 +138,12 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher",
144
138
  state: "CA",
145
139
  zip: "90382"
146
140
  )
141
+ expected = {
142
+ line_1: "123 Main St.",
143
+ city: "Oakland",
144
+ state: "CA",
145
+ zip: "91234"
146
+ }
147
147
  expect(actual).to have_attributes(expected)
148
148
  TEST
149
149
  program =
@@ -189,19 +189,19 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher",
189
189
  it "produces the correct output when used in the negative" do
190
190
  as_both_colored_and_uncolored do |color_enabled|
191
191
  snippet = <<~TEST.strip
192
- expected = {
192
+ actual = SuperDiff::Test::ShippingAddress.new(
193
193
  line_1: "123 Main St.",
194
+ line_2: nil,
194
195
  city: "Oakland",
195
196
  state: "CA",
196
197
  zip: "91234"
197
- }
198
- actual = SuperDiff::Test::ShippingAddress.new(
198
+ )
199
+ expected = {
199
200
  line_1: "123 Main St.",
200
- line_2: nil,
201
201
  city: "Oakland",
202
202
  state: "CA",
203
203
  zip: "91234"
204
- )
204
+ }
205
205
  expect(actual).not_to have_attributes(expected)
206
206
  TEST
207
207
  program =
@@ -237,6 +237,13 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher",
237
237
  it "produces the correct output" do
238
238
  as_both_colored_and_uncolored do |color_enabled|
239
239
  snippet = <<~TEST.strip
240
+ actual = SuperDiff::Test::ShippingAddress.new(
241
+ line_1: "456 Ponderosa Ct.",
242
+ line_2: nil,
243
+ city: "Hill Valley",
244
+ state: "CA",
245
+ zip: "90382"
246
+ )
240
247
  expected = {
241
248
  line_1: "123 Main St.",
242
249
  city: "Oakland",
@@ -245,13 +252,6 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher",
245
252
  foo: "bar",
246
253
  baz: "qux"
247
254
  }
248
- actual = SuperDiff::Test::ShippingAddress.new(
249
- line_1: "456 Ponderosa Ct.",
250
- line_2: nil,
251
- city: "Hill Valley",
252
- state: "CA",
253
- zip: "90382"
254
- )
255
255
  expect(actual).to have_attributes(expected)
256
256
  TEST
257
257
  program =
@@ -307,8 +307,8 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher",
307
307
  it "displays the diff as if we were comparing hashes" do
308
308
  as_both_colored_and_uncolored do |color_enabled|
309
309
  snippet = <<~TEST.strip
310
- expected = { name: "Elliot", age: 32 }
311
310
  actual = {}
311
+ expected = { name: "Elliot", age: 32 }
312
312
  expect(actual).to have_attributes(expected)
313
313
  TEST
314
314
 
@@ -347,11 +347,12 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher",
347
347
  end
348
348
  end
349
349
 
350
- # TODO: Add as many fuzzy matchers as we can here
351
- context "that contains fuzzy matcher objects instead of an object" do
350
+ # TODO: Add as many RSpec matchers as we can here
351
+ context "that contains RSpec matchers" do
352
352
  it "displays the hash correctly" do
353
353
  as_both_colored_and_uncolored do |color_enabled|
354
354
  snippet = <<~TEST.strip
355
+ actual = {}
355
356
  expected = {
356
357
  name: "Elliot",
357
358
  shipping_address: an_object_having_attributes(
@@ -365,7 +366,6 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher",
365
366
  data: a_hash_including(active: true),
366
367
  created_at: a_value_within(1).of(Time.utc(2020, 4, 9))
367
368
  }
368
- actual = {}
369
369
 
370
370
  expect(actual).to have_attributes(expected)
371
371
  TEST
@@ -7,8 +7,8 @@ RSpec.describe "Integration with RSpec's #include matcher",
7
7
  it "produces the correct failure message when used in the positive" do
8
8
  as_both_colored_and_uncolored do |color_enabled|
9
9
  snippet = <<~TEST.strip
10
- expected = ["Marty", "Einie"]
11
10
  actual = ["Marty", "Jennifer", "Doc"]
11
+ expected = ["Marty", "Einie"]
12
12
  expect(actual).to include(*expected)
13
13
  TEST
14
14
  program =
@@ -82,18 +82,18 @@ RSpec.describe "Integration with RSpec's #include matcher",
82
82
  it "produces the correct failure message when used in the positive" do
83
83
  as_both_colored_and_uncolored do |color_enabled|
84
84
  snippet = <<~TEST.strip
85
- expected = [
85
+ actual = [
86
86
  "Marty McFly",
87
87
  "Doc Brown",
88
88
  "Einie",
89
- "Biff Tannen",
90
- "George McFly",
91
89
  "Lorraine McFly"
92
90
  ]
93
- actual = [
91
+ expected = [
94
92
  "Marty McFly",
95
93
  "Doc Brown",
96
94
  "Einie",
95
+ "Biff Tannen",
96
+ "George McFly",
97
97
  "Lorraine McFly"
98
98
  ]
99
99
  expect(actual).to include(*expected)
@@ -140,18 +140,18 @@ RSpec.describe "Integration with RSpec's #include matcher",
140
140
  it "produces the correct failure message when used in the negative" do
141
141
  as_both_colored_and_uncolored do |color_enabled|
142
142
  snippet = <<~TEST.strip
143
- expected = [
143
+ actual = [
144
144
  "Marty McFly",
145
145
  "Doc Brown",
146
146
  "Einie",
147
+ "Biff Tannen",
148
+ "George McFly",
147
149
  "Lorraine McFly"
148
150
  ]
149
- actual = [
151
+ expected = [
150
152
  "Marty McFly",
151
153
  "Doc Brown",
152
154
  "Einie",
153
- "Biff Tannen",
154
- "George McFly",
155
155
  "Lorraine McFly"
156
156
  ]
157
157
  expect(actual).not_to include(*expected)
@@ -191,8 +191,8 @@ RSpec.describe "Integration with RSpec's #include matcher",
191
191
  it "produces the correct failure message when used in the positive" do
192
192
  as_both_colored_and_uncolored do |color_enabled|
193
193
  snippet = <<~TEST.strip
194
- expected = { city: "Hill Valley", state: "CA" }
195
194
  actual = { city: "Burbank", zip: "90210" }
195
+ expected = { city: "Hill Valley", state: "CA" }
196
196
  expect(actual).to include(expected)
197
197
  TEST
198
198
  program =
@@ -234,8 +234,8 @@ RSpec.describe "Integration with RSpec's #include matcher",
234
234
  it "produces the correct failure message when used in the negative" do
235
235
  as_both_colored_and_uncolored do |color_enabled|
236
236
  snippet = <<~TEST.strip
237
- expected = { city: "Burbank" }
238
237
  actual = { city: "Burbank", zip: "90210" }
238
+ expected = { city: "Burbank" }
239
239
  expect(actual).not_to include(expected)
240
240
  TEST
241
241
  program =
@@ -266,8 +266,8 @@ RSpec.describe "Integration with RSpec's #include matcher",
266
266
  it "produces the correct failure message when fuzzy matching" do
267
267
  as_both_colored_and_uncolored do |color_enabled|
268
268
  snippet = <<~TEST.strip
269
- expected = { number: a_kind_of(Numeric), city: /burb/i, state: "CA" }
270
269
  actual = { number: 42, city: "Burbank", zip: "90210" }
270
+ expected = { number: a_kind_of(Numeric), city: /burb/i, state: "CA" }
271
271
  expect(actual).to include(expected)
272
272
  TEST
273
273
  program =
@@ -309,15 +309,15 @@ RSpec.describe "Integration with RSpec's #include matcher",
309
309
  it "produces the correct failure message when used in the positive" do
310
310
  as_both_colored_and_uncolored do |color_enabled|
311
311
  snippet = <<~TEST.strip
312
- expected = {
313
- city: "Hill Valley",
314
- zip: "90382"
315
- }
316
312
  actual = {
317
313
  city: "Burbank",
318
314
  state: "CA",
319
315
  zip: "90210"
320
316
  }
317
+ expected = {
318
+ city: "Hill Valley",
319
+ zip: "90382"
320
+ }
321
321
  expect(actual).to include(expected)
322
322
  TEST
323
323
  program =
@@ -360,8 +360,8 @@ RSpec.describe "Integration with RSpec's #include matcher",
360
360
  it "produces the correct failure message when used in the negative" do
361
361
  as_both_colored_and_uncolored do |color_enabled|
362
362
  snippet = <<~TEST.strip
363
- expected = { city: "Hill Valley", state: "CA" }
364
363
  actual = { city: "Hill Valley", state: "CA", zip: "90210" }
364
+ expected = { city: "Hill Valley", state: "CA" }
365
365
  expect(actual).not_to include(expected)
366
366
  TEST
367
367
  program =
@@ -395,12 +395,6 @@ RSpec.describe "Integration with RSpec's #include matcher",
395
395
  it "produces the correct failure message when fuzzy matching" do
396
396
  as_both_colored_and_uncolored do |color_enabled|
397
397
  snippet = <<~TEST.strip
398
- expected = {
399
- number: a_kind_of(Numeric),
400
- street: "Yoshie Circles",
401
- city: /burb/i,
402
- zip: "90382"
403
- }
404
398
  actual = {
405
399
  number: 42,
406
400
  street: "Yoshie Circles",
@@ -408,6 +402,12 @@ RSpec.describe "Integration with RSpec's #include matcher",
408
402
  state: "CA",
409
403
  zip: "90210"
410
404
  }
405
+ expected = {
406
+ number: a_kind_of(Numeric),
407
+ street: "Yoshie Circles",
408
+ city: /burb/i,
409
+ zip: "90382"
410
+ }
411
411
  expect(actual).to include(expected)
412
412
  TEST
413
413
  program =
@@ -0,0 +1,51 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "Integration with RSpec's magic metadata", type: :integration do
4
+ it "includes extra_failure_lines in failure messages" do
5
+ as_both_colored_and_uncolored do |color_enabled|
6
+ snippet = <<~TEST.strip
7
+ RSpec.describe "test" do
8
+ it { expect(true).to be(false) }
9
+
10
+ after do
11
+ RSpec.current_example.metadata[:extra_failure_lines] = "foo\nbar"
12
+ end
13
+ end
14
+ TEST
15
+ program =
16
+ make_plain_test_program(
17
+ snippet,
18
+ color_enabled: color_enabled,
19
+ preserve_as_whole_file: true
20
+ )
21
+
22
+ expected_output =
23
+ build_expected_output(
24
+ color_enabled: color_enabled,
25
+ test_name: "test is expected to equal false",
26
+ snippet: "it { expect(true).to be(false) }",
27
+ expectation:
28
+ proc do
29
+ line do
30
+ plain "Expected "
31
+ actual "true"
32
+ plain " to equal "
33
+ expected "false"
34
+ plain "."
35
+ end
36
+ end,
37
+ extra_failure_lines:
38
+ proc do
39
+ indent by: 5 do
40
+ line "foo"
41
+ line "bar"
42
+ end
43
+ end
44
+ )
45
+
46
+ expect(program).to produce_output_when_run(expected_output).in_color(
47
+ color_enabled
48
+ )
49
+ end
50
+ end
51
+ end
@@ -6,8 +6,8 @@ RSpec.describe "Integration with RSpec's #match_array matcher",
6
6
  it "produces the correct failure message when used in the positive" do
7
7
  as_both_colored_and_uncolored do |color_enabled|
8
8
  snippet = <<~TEST.strip
9
- expected = ["Einie", "Marty"]
10
9
  actual = ["Marty", "Jennifer", "Doc"]
10
+ expected = ["Einie", "Marty"]
11
11
  expect(actual).to match_array(expected)
12
12
  TEST
13
13
  program = make_plain_test_program(snippet, color_enabled: color_enabled)
@@ -84,6 +84,12 @@ RSpec.describe "Integration with RSpec's #match_array matcher",
84
84
  it "produces the correct failure message when used in the positive" do
85
85
  as_both_colored_and_uncolored do |color_enabled|
86
86
  snippet = <<~TEST.strip
87
+ actual = [
88
+ "Marty McFly",
89
+ "Doc Brown",
90
+ "Einie",
91
+ "Lorraine McFly"
92
+ ]
87
93
  expected = [
88
94
  "Doc Brown",
89
95
  "Marty McFly",
@@ -91,12 +97,6 @@ RSpec.describe "Integration with RSpec's #match_array matcher",
91
97
  "George McFly",
92
98
  "Lorraine McFly"
93
99
  ]
94
- actual = [
95
- "Marty McFly",
96
- "Doc Brown",
97
- "Einie",
98
- "Lorraine McFly"
99
- ]
100
100
  expect(actual).to match_array(expected)
101
101
  TEST
102
102
  program =
@@ -196,6 +196,12 @@ RSpec.describe "Integration with RSpec's #match_array matcher",
196
196
  it "produces the correct failure message when used in the positive" do
197
197
  as_both_colored_and_uncolored do |color_enabled|
198
198
  snippet = <<~TEST
199
+ actual = [
200
+ "Marty McFly",
201
+ "Doc Brown",
202
+ "Einie",
203
+ "Lorraine McFly"
204
+ ]
199
205
  expected = [
200
206
  / Brown$/,
201
207
  "Marty McFly",
@@ -203,12 +209,6 @@ RSpec.describe "Integration with RSpec's #match_array matcher",
203
209
  /Georg McFly/,
204
210
  /Lorrain McFly/
205
211
  ]
206
- actual = [
207
- "Marty McFly",
208
- "Doc Brown",
209
- "Einie",
210
- "Lorraine McFly"
211
- ]
212
212
  expect(actual).to match_array(expected)
213
213
  TEST
214
214
  program =
@@ -310,20 +310,20 @@ RSpec.describe "Integration with RSpec's #match_array matcher",
310
310
  end
311
311
  end
312
312
 
313
- context "and some of them are fuzzy objects" do
313
+ context "and some of them are RSpec matchers" do
314
314
  it "produces the correct failure message" do
315
315
  as_both_colored_and_uncolored do |color_enabled|
316
316
  snippet = <<~TEST.strip
317
- expected = [
318
- a_hash_including(foo: "bar"),
319
- a_collection_containing_exactly("zing"),
320
- an_object_having_attributes(baz: "qux"),
321
- ]
322
317
  actual = [
323
318
  { foo: "bar" },
324
319
  double(baz: "qux"),
325
320
  { blargh: "riddle" }
326
321
  ]
322
+ expected = [
323
+ a_hash_including(foo: "bar"),
324
+ a_collection_containing_exactly("zing"),
325
+ an_object_having_attributes(baz: "qux"),
326
+ ]
327
327
  expect(actual).to match_array(expected)
328
328
  TEST
329
329
  program =
@@ -379,12 +379,12 @@ RSpec.describe "Integration with RSpec's #match_array matcher",
379
379
  end
380
380
  end
381
381
 
382
- context "when the input value is a string" do
383
- it "produces the correct failure message when used in the positive" do
382
+ context "when the input value is not an array, and especially not a value that could be turned into one" do
383
+ it "produces the correct failure message, as though an array had been given" do
384
384
  as_both_colored_and_uncolored do |color_enabled|
385
385
  snippet = <<~TEST.strip
386
- expected = "Einie"
387
- actual = ["Marty", "Jennifer", "Doc"]
386
+ actual = [:marty, :jennifer, :doc]
387
+ expected = :einie
388
388
  expect(actual).to match_array(expected)
389
389
  TEST
390
390
  program = make_plain_test_program(snippet, color_enabled: color_enabled)
@@ -397,20 +397,20 @@ RSpec.describe "Integration with RSpec's #match_array matcher",
397
397
  proc do
398
398
  line do
399
399
  plain "Expected "
400
- actual %|["Marty", "Jennifer", "Doc"]|
400
+ actual "[:marty, :jennifer, :doc]"
401
401
  plain " to match array with "
402
- expected %|"Einie"|
402
+ expected ":einie"
403
403
  plain "."
404
404
  end
405
405
  end,
406
406
  diff:
407
407
  proc do
408
408
  plain_line " ["
409
- actual_line %|+ "Marty",|
410
- actual_line %|+ "Jennifer",|
411
- actual_line %|+ "Doc",|
412
- # expected_line %|- "Einie"| # TODO
413
- expected_line %|- "Einie",|
409
+ actual_line "+ :marty,"
410
+ actual_line "+ :jennifer,"
411
+ actual_line "+ :doc,"
412
+ # expected_line %|- :einie| # TODO
413
+ expected_line "- :einie,"
414
414
  plain_line " ]"
415
415
  end
416
416
  )