super_diff 0.10.0 → 0.11.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 (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
@@ -4,14 +4,14 @@ shared_examples_for "a matcher that supports elided diffs" do
4
4
  it "elides the unchanged sections, preserving <maximum> number of lines within all unchanged sections (including the elision marker)" do
5
5
  as_both_colored_and_uncolored do |color_enabled|
6
6
  snippet = <<~TEST.strip
7
- expected = [
7
+ actual = [
8
8
  "Afghanistan",
9
9
  "Aland Islands",
10
10
  "Albania",
11
11
  "Algeria",
12
12
  "American Samoa",
13
13
  "Andorra",
14
- "Angola",
14
+ "Anguilla",
15
15
  "Antarctica",
16
16
  "Antigua And Barbuda",
17
17
  "Argentina",
@@ -19,14 +19,14 @@ shared_examples_for "a matcher that supports elided diffs" do
19
19
  "Aruba",
20
20
  "Australia"
21
21
  ]
22
- actual = [
22
+ expected = [
23
23
  "Afghanistan",
24
24
  "Aland Islands",
25
25
  "Albania",
26
26
  "Algeria",
27
27
  "American Samoa",
28
28
  "Andorra",
29
- "Anguilla",
29
+ "Angola",
30
30
  "Antarctica",
31
31
  "Antigua And Barbuda",
32
32
  "Argentina",
@@ -40,7 +40,7 @@ shared_examples_for "a matcher that supports elided diffs" do
40
40
  make_plain_test_program(
41
41
  snippet,
42
42
  color_enabled: color_enabled,
43
- configuration: {
43
+ super_diff_configuration: {
44
44
  diff_elision_enabled: true,
45
45
  diff_elision_maximum: 3
46
46
  }
@@ -93,14 +93,14 @@ shared_examples_for "a matcher that supports elided diffs" do
93
93
  it "does not elide anything" do
94
94
  as_both_colored_and_uncolored do |color_enabled|
95
95
  snippet = <<~TEST.strip
96
- expected = [
96
+ actual = [
97
97
  "Afghanistan",
98
98
  "Aland Islands",
99
99
  "Albania",
100
100
  "Algeria",
101
101
  "American Samoa",
102
102
  "Andorra",
103
- "Angola",
103
+ "Anguilla",
104
104
  "Antarctica",
105
105
  "Antigua And Barbuda",
106
106
  "Argentina",
@@ -108,14 +108,14 @@ shared_examples_for "a matcher that supports elided diffs" do
108
108
  "Aruba",
109
109
  "Australia"
110
110
  ]
111
- actual = [
111
+ expected = [
112
112
  "Afghanistan",
113
113
  "Aland Islands",
114
114
  "Albania",
115
115
  "Algeria",
116
116
  "American Samoa",
117
117
  "Andorra",
118
- "Anguilla",
118
+ "Angola",
119
119
  "Antarctica",
120
120
  "Antigua And Barbuda",
121
121
  "Argentina",
@@ -129,7 +129,7 @@ shared_examples_for "a matcher that supports elided diffs" do
129
129
  make_plain_test_program(
130
130
  snippet,
131
131
  color_enabled: color_enabled,
132
- configuration: {
132
+ super_diff_configuration: {
133
133
  diff_elision_enabled: false,
134
134
  diff_elision_maximum: 3
135
135
  }
@@ -190,8 +190,8 @@ shared_examples_for "a matcher that supports elided diffs" do
190
190
  it "elides the unchanged sections, preserving <maximum> number of lines within all unchanged sections (including the elision marker)" do
191
191
  as_both_colored_and_uncolored do |color_enabled|
192
192
  snippet = <<~TEST.strip
193
- expected = [
194
- "Afghanistan",
193
+ actual = [
194
+ "Zambia",
195
195
  "Aland Islands",
196
196
  "Albania",
197
197
  "Algeria",
@@ -204,10 +204,10 @@ shared_examples_for "a matcher that supports elided diffs" do
204
204
  "Argentina",
205
205
  "Armenia",
206
206
  "Aruba",
207
- "Australia"
207
+ "Zimbabwe"
208
208
  ]
209
- actual = [
210
- "Zambia",
209
+ expected = [
210
+ "Afghanistan",
211
211
  "Aland Islands",
212
212
  "Albania",
213
213
  "Algeria",
@@ -220,7 +220,7 @@ shared_examples_for "a matcher that supports elided diffs" do
220
220
  "Argentina",
221
221
  "Armenia",
222
222
  "Aruba",
223
- "Zimbabwe"
223
+ "Australia"
224
224
  ]
225
225
  expect(actual).to #{matcher}(expected)
226
226
  TEST
@@ -228,7 +228,7 @@ shared_examples_for "a matcher that supports elided diffs" do
228
228
  make_plain_test_program(
229
229
  snippet,
230
230
  color_enabled: color_enabled,
231
- configuration: {
231
+ super_diff_configuration: {
232
232
  diff_elision_enabled: true,
233
233
  diff_elision_maximum: 3
234
234
  }
@@ -280,8 +280,8 @@ shared_examples_for "a matcher that supports elided diffs" do
280
280
  it "does not elide anything" do
281
281
  as_both_colored_and_uncolored do |color_enabled|
282
282
  snippet = <<~TEST.strip
283
- expected = [
284
- "Afghanistan",
283
+ actual = [
284
+ "Zambia",
285
285
  "Aland Islands",
286
286
  "Albania",
287
287
  "Algeria",
@@ -294,10 +294,10 @@ shared_examples_for "a matcher that supports elided diffs" do
294
294
  "Argentina",
295
295
  "Armenia",
296
296
  "Aruba",
297
- "Australia"
297
+ "Zimbabwe"
298
298
  ]
299
- actual = [
300
- "Zambia",
299
+ expected = [
300
+ "Afghanistan",
301
301
  "Aland Islands",
302
302
  "Albania",
303
303
  "Algeria",
@@ -310,7 +310,7 @@ shared_examples_for "a matcher that supports elided diffs" do
310
310
  "Argentina",
311
311
  "Armenia",
312
312
  "Aruba",
313
- "Zimbabwe"
313
+ "Australia"
314
314
  ]
315
315
  expect(actual).to #{matcher}(expected)
316
316
  TEST
@@ -318,7 +318,7 @@ shared_examples_for "a matcher that supports elided diffs" do
318
318
  make_plain_test_program(
319
319
  snippet,
320
320
  color_enabled: color_enabled,
321
- configuration: {
321
+ super_diff_configuration: {
322
322
  diff_elision_enabled: false,
323
323
  diff_elision_maximum: 3
324
324
  }
@@ -383,7 +383,7 @@ shared_examples_for "a matcher that supports elided diffs" do
383
383
  # totally weird
384
384
  as_both_colored_and_uncolored do |color_enabled|
385
385
  snippet = <<~TEST.strip
386
- expected = [
386
+ actual = [
387
387
  {
388
388
  "user_id": "18949452",
389
389
  "user": {
@@ -391,6 +391,7 @@ shared_examples_for "a matcher that supports elided diffs" do
391
391
  "name": "Financial Times",
392
392
  "screen_name": "FT",
393
393
  "location": "London",
394
+ "url": "http://t.co/dnhLQpd9BY",
394
395
  "entities": {
395
396
  "url": {
396
397
  "urls": [
@@ -409,7 +410,7 @@ shared_examples_for "a matcher that supports elided diffs" do
409
410
  "urls": [
410
411
  {
411
412
  "url": "https://t.co/5BsmLs9y1Z",
412
- "expanded_url": "http://FT.com",
413
+ "display_url": "FT.com",
413
414
  "indices": [
414
415
  65,
415
416
  88
@@ -418,6 +419,7 @@ shared_examples_for "a matcher that supports elided diffs" do
418
419
  ]
419
420
  }
420
421
  },
422
+ "protected": false,
421
423
  "listed_count": 37009,
422
424
  "created_at": "Tue Jan 13 19:28:24 +0000 2009",
423
425
  "favourites_count": 38,
@@ -431,9 +433,7 @@ shared_examples_for "a matcher that supports elided diffs" do
431
433
  "is_translator": false,
432
434
  "is_translation_enabled": false,
433
435
  "profile_background_color": "FFF1E0",
434
- "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
435
- "profile_background_tile": false,
436
- "profile_image_url": "http://pbs.twimg.com/profile_images/931156393108885504/EqEMtLhM_normal.jpg",
436
+ "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
437
437
  "profile_image_url_https": "https://pbs.twimg.com/profile_images/931156393108885504/EqEMtLhM_normal.jpg",
438
438
  "profile_banner_url": "https://pbs.twimg.com/profile_banners/18949452/1581526592",
439
439
  "profile_image_extensions": {
@@ -449,7 +449,6 @@ shared_examples_for "a matcher that supports elided diffs" do
449
449
  "blocked_by": false,
450
450
  "want_retweets": false,
451
451
  "advertiser_account_type": "none",
452
- "advertiser_account_service_levels": [],
453
452
  "profile_interstitial_type": "",
454
453
  "business_profile_state": "none",
455
454
  "translator_type": "none",
@@ -464,7 +463,7 @@ shared_examples_for "a matcher that supports elided diffs" do
464
463
  "token": "117"
465
464
  }
466
465
  ]
467
- actual = [
466
+ expected = [
468
467
  {
469
468
  "user_id": "18949452",
470
469
  "user": {
@@ -472,7 +471,6 @@ shared_examples_for "a matcher that supports elided diffs" do
472
471
  "name": "Financial Times",
473
472
  "screen_name": "FT",
474
473
  "location": "London",
475
- "url": "http://t.co/dnhLQpd9BY",
476
474
  "entities": {
477
475
  "url": {
478
476
  "urls": [
@@ -491,7 +489,7 @@ shared_examples_for "a matcher that supports elided diffs" do
491
489
  "urls": [
492
490
  {
493
491
  "url": "https://t.co/5BsmLs9y1Z",
494
- "display_url": "FT.com",
492
+ "expanded_url": "http://FT.com",
495
493
  "indices": [
496
494
  65,
497
495
  88
@@ -500,7 +498,6 @@ shared_examples_for "a matcher that supports elided diffs" do
500
498
  ]
501
499
  }
502
500
  },
503
- "protected": false,
504
501
  "listed_count": 37009,
505
502
  "created_at": "Tue Jan 13 19:28:24 +0000 2009",
506
503
  "favourites_count": 38,
@@ -514,7 +511,9 @@ shared_examples_for "a matcher that supports elided diffs" do
514
511
  "is_translator": false,
515
512
  "is_translation_enabled": false,
516
513
  "profile_background_color": "FFF1E0",
517
- "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
514
+ "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
515
+ "profile_background_tile": false,
516
+ "profile_image_url": "http://pbs.twimg.com/profile_images/931156393108885504/EqEMtLhM_normal.jpg",
518
517
  "profile_image_url_https": "https://pbs.twimg.com/profile_images/931156393108885504/EqEMtLhM_normal.jpg",
519
518
  "profile_banner_url": "https://pbs.twimg.com/profile_banners/18949452/1581526592",
520
519
  "profile_image_extensions": {
@@ -530,6 +529,7 @@ shared_examples_for "a matcher that supports elided diffs" do
530
529
  "blocked_by": false,
531
530
  "want_retweets": false,
532
531
  "advertiser_account_type": "none",
532
+ "advertiser_account_service_levels": [],
533
533
  "profile_interstitial_type": "",
534
534
  "business_profile_state": "none",
535
535
  "translator_type": "none",
@@ -550,7 +550,7 @@ shared_examples_for "a matcher that supports elided diffs" do
550
550
  make_plain_test_program(
551
551
  snippet,
552
552
  color_enabled: color_enabled,
553
- configuration: {
553
+ super_diff_configuration: {
554
554
  diff_elision_enabled: true,
555
555
  diff_elision_maximum: 10
556
556
  }
@@ -644,7 +644,7 @@ shared_examples_for "a matcher that supports elided diffs" do
644
644
  it "does not elide anything" do
645
645
  as_both_colored_and_uncolored do |color_enabled|
646
646
  snippet = <<~TEST.strip
647
- expected = [
647
+ actual = [
648
648
  {
649
649
  "user_id": "18949452",
650
650
  "user": {
@@ -652,6 +652,7 @@ shared_examples_for "a matcher that supports elided diffs" do
652
652
  "name": "Financial Times",
653
653
  "screen_name": "FT",
654
654
  "location": "London",
655
+ "url": "http://t.co/dnhLQpd9BY",
655
656
  "entities": {
656
657
  "url": {
657
658
  "urls": [
@@ -670,7 +671,7 @@ shared_examples_for "a matcher that supports elided diffs" do
670
671
  "urls": [
671
672
  {
672
673
  "url": "https://t.co/5BsmLs9y1Z",
673
- "expanded_url": "http://FT.com",
674
+ "display_url": "FT.com",
674
675
  "indices": [
675
676
  65,
676
677
  88
@@ -679,6 +680,7 @@ shared_examples_for "a matcher that supports elided diffs" do
679
680
  ]
680
681
  }
681
682
  },
683
+ "protected": false,
682
684
  "listed_count": 37009,
683
685
  "created_at": "Tue Jan 13 19:28:24 +0000 2009",
684
686
  "favourites_count": 38,
@@ -692,9 +694,7 @@ shared_examples_for "a matcher that supports elided diffs" do
692
694
  "is_translator": false,
693
695
  "is_translation_enabled": false,
694
696
  "profile_background_color": "FFF1E0",
695
- "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
696
- "profile_background_tile": false,
697
- "profile_image_url": "http://pbs.twimg.com/profile_images/931156393108885504/EqEMtLhM_normal.jpg",
697
+ "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
698
698
  "profile_image_url_https": "https://pbs.twimg.com/profile_images/931156393108885504/EqEMtLhM_normal.jpg",
699
699
  "profile_banner_url": "https://pbs.twimg.com/profile_banners/18949452/1581526592",
700
700
  "profile_image_extensions": {
@@ -710,7 +710,6 @@ shared_examples_for "a matcher that supports elided diffs" do
710
710
  "blocked_by": false,
711
711
  "want_retweets": false,
712
712
  "advertiser_account_type": "none",
713
- "advertiser_account_service_levels": [],
714
713
  "profile_interstitial_type": "",
715
714
  "business_profile_state": "none",
716
715
  "translator_type": "none",
@@ -725,7 +724,7 @@ shared_examples_for "a matcher that supports elided diffs" do
725
724
  "token": "117"
726
725
  }
727
726
  ]
728
- actual = [
727
+ expected = [
729
728
  {
730
729
  "user_id": "18949452",
731
730
  "user": {
@@ -733,7 +732,6 @@ shared_examples_for "a matcher that supports elided diffs" do
733
732
  "name": "Financial Times",
734
733
  "screen_name": "FT",
735
734
  "location": "London",
736
- "url": "http://t.co/dnhLQpd9BY",
737
735
  "entities": {
738
736
  "url": {
739
737
  "urls": [
@@ -752,7 +750,7 @@ shared_examples_for "a matcher that supports elided diffs" do
752
750
  "urls": [
753
751
  {
754
752
  "url": "https://t.co/5BsmLs9y1Z",
755
- "display_url": "FT.com",
753
+ "expanded_url": "http://FT.com",
756
754
  "indices": [
757
755
  65,
758
756
  88
@@ -761,7 +759,6 @@ shared_examples_for "a matcher that supports elided diffs" do
761
759
  ]
762
760
  }
763
761
  },
764
- "protected": false,
765
762
  "listed_count": 37009,
766
763
  "created_at": "Tue Jan 13 19:28:24 +0000 2009",
767
764
  "favourites_count": 38,
@@ -775,7 +772,9 @@ shared_examples_for "a matcher that supports elided diffs" do
775
772
  "is_translator": false,
776
773
  "is_translation_enabled": false,
777
774
  "profile_background_color": "FFF1E0",
778
- "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
775
+ "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
776
+ "profile_background_tile": false,
777
+ "profile_image_url": "http://pbs.twimg.com/profile_images/931156393108885504/EqEMtLhM_normal.jpg",
779
778
  "profile_image_url_https": "https://pbs.twimg.com/profile_images/931156393108885504/EqEMtLhM_normal.jpg",
780
779
  "profile_banner_url": "https://pbs.twimg.com/profile_banners/18949452/1581526592",
781
780
  "profile_image_extensions": {
@@ -791,6 +790,7 @@ shared_examples_for "a matcher that supports elided diffs" do
791
790
  "blocked_by": false,
792
791
  "want_retweets": false,
793
792
  "advertiser_account_type": "none",
793
+ "advertiser_account_service_levels": [],
794
794
  "profile_interstitial_type": "",
795
795
  "business_profile_state": "none",
796
796
  "translator_type": "none",
@@ -811,7 +811,7 @@ shared_examples_for "a matcher that supports elided diffs" do
811
811
  make_plain_test_program(
812
812
  snippet,
813
813
  color_enabled: color_enabled,
814
- configuration: {
814
+ super_diff_configuration: {
815
815
  diff_elision_enabled: false,
816
816
  diff_elision_maximum: 10
817
817
  }