7
7
module RSpec
8
8
module Support
9
9
describe Differ do
10
+
11
+ # In the updated version of diff-lcs several diff headers change format slightly
12
+ # compensate for this and change minimum version in RSpec 4
13
+ if Diff ::LCS ::VERSION . to_f < 1.4
14
+ one_line_header = "-1,2 +1,2"
15
+ removing_two_line_header = "-1,3 +1"
16
+ else
17
+ one_line_header = "-1 +1"
18
+ removing_two_line_header = "-1,3 +1,5"
19
+ end
20
+
10
21
describe '#diff' do
11
22
let ( :differ ) { RSpec ::Support ::Differ . new }
12
23
13
24
it "outputs unified diff of two strings" do
14
25
expected = "foo\n zap\n bar\n this\n is\n soo\n very\n very\n equal\n insert\n a\n another\n line\n "
15
26
actual = "foo\n bar\n zap\n this\n is\n soo\n very\n very\n equal\n insert\n a\n line\n "
16
27
17
- expected_diff = <<-'EOD'
28
+ if Diff ::LCS ::VERSION . to_f < 1.4
29
+ expected_diff = <<-'EOD'
18
30
19
31
20
32
@@ -1,6 +1,6 @@
@@ -32,6 +44,25 @@ module Support
32
44
-another
33
45
line
34
46
EOD
47
+ else
48
+ expected_diff = <<-'EOD'
49
+
50
+
51
+ @@ -1,4 +1,6 @@
52
+ foo
53
+ -zap
54
+ bar
55
+ +zap
56
+ this
57
+ @@ -9,6 +11,7 @@
58
+ equal
59
+ insert
60
+ a
61
+ -another
62
+ line
63
+ EOD
64
+ end
65
+
35
66
36
67
diff = differ . diff ( actual , expected )
37
68
expect ( diff ) . to be_diffed_as ( expected_diff )
@@ -41,25 +72,45 @@ module Support
41
72
expected = "foo\n zap\n bar\n this\n is\n soo\n very\n very\n equal\n insert\n a\n another\n line\n "
42
73
actual = "foo\n bar\n zap\n this\n is\n soo\n very\n very\n equal\n insert\n a\n line\n "
43
74
44
- expected_diff = dedent ( <<-'EOS' )
45
- |
46
- |
47
- |@@ -1,6 +1,6 @@
48
- | foo
49
- |-zap
50
- | bar
51
- |+zap
52
- | this
53
- | is
54
- | soo
55
- |@@ -9,6 +9,5 @@
56
- | equal
57
- | insert
58
- | a
59
- |-another
60
- | line
61
- |
62
- EOS
75
+ if Diff ::LCS ::VERSION . to_f < 1.4
76
+ expected_diff = dedent ( <<-'EOS' )
77
+ |
78
+ |
79
+ |@@ -1,6 +1,6 @@
80
+ | foo
81
+ |-zap
82
+ | bar
83
+ |+zap
84
+ | this
85
+ | is
86
+ | soo
87
+ |@@ -9,6 +9,5 @@
88
+ | equal
89
+ | insert
90
+ | a
91
+ |-another
92
+ | line
93
+ |
94
+ EOS
95
+ else
96
+ expected_diff = dedent ( <<-'EOS' )
97
+ |
98
+ |
99
+ |@@ -1,4 +1,6 @@
100
+ | foo
101
+ |-zap
102
+ | bar
103
+ |+zap
104
+ | this
105
+ |@@ -9,6 +11,7 @@
106
+ | equal
107
+ | insert
108
+ | a
109
+ |-another
110
+ | line
111
+ |
112
+ EOS
113
+ end
63
114
64
115
diff = differ . diff ( actual , expected )
65
116
expect ( diff ) . to be_diffed_as ( expected_diff )
@@ -94,7 +145,7 @@ def differ_ivars
94
145
actual = "Tu avec carté {count} itém has\n " . encode ( 'UTF-16LE' )
95
146
expected_diff = <<-EOD . encode ( 'UTF-16LE' )
96
147
97
- @@ -1,2 +1,2 @@
148
+ @@ #{ one_line_header } @@
98
149
-Tu avec carte {count} item has
99
150
+Tu avec carté {count} itém has
100
151
EOD
@@ -106,15 +157,15 @@ def differ_ivars
106
157
it 'handles differently encoded strings that are compatible' do
107
158
expected = "abc\n " . encode ( 'us-ascii' )
108
159
actual = "강인철\n " . encode ( 'UTF-8' )
109
- expected_diff = "\n @@ -1,2 +1,2 @@\n -abc\n +강인철\n "
160
+ expected_diff = "\n @@ #{ one_line_header } @@\n -abc\n +강인철\n "
110
161
diff = differ . diff ( actual , expected )
111
162
expect ( diff ) . to be_diffed_as ( expected_diff )
112
163
end
113
164
114
165
it 'uses the default external encoding when the two strings have incompatible encodings' , :failing_on_appveyor do
115
166
expected = "Tu avec carte {count} item has\n "
116
167
actual = "Tu avec carté {count} itém has\n " . encode ( 'UTF-16LE' )
117
- expected_diff = "\n @@ -1,2 +1,2 @@\n -Tu avec carte {count} item has\n +Tu avec carté {count} itém has\n "
168
+ expected_diff = "\n @@ #{ one_line_header } @@\n -Tu avec carte {count} item has\n +Tu avec carté {count} itém has\n "
118
169
119
170
diff = differ . diff ( actual , expected )
120
171
expect ( diff ) . to be_diffed_as ( expected_diff )
@@ -202,7 +253,7 @@ def inspect; "<BrokenObject>"; end
202
253
203
254
expected_diff = <<-EOD
204
255
205
- @@ -1,2 +1,2 @@
256
+ @@ #{ one_line_header } @@
206
257
-[]
207
258
+[<BrokenObject>]
208
259
EOD
@@ -213,7 +264,7 @@ def inspect; "<BrokenObject>"; end
213
264
diff = differ . diff ( [ "a\r \n b" ] , [ "a\r \n c" ] )
214
265
expected_diff = <<-EOD
215
266
216
- @@ -1,2 +1,2 @@
267
+ @@ #{ one_line_header } @@
217
268
-a\\ r\\ nc
218
269
+a\\ r\\ nb
219
270
EOD
@@ -262,7 +313,7 @@ def inspect; "<BrokenObject>"; end
262
313
263
314
it 'outputs unified diff message of two hashes with differing encoding' , :failing_on_appveyor do
264
315
expected_diff = %Q{
265
- @@ -1,2 +1,2 @@
316
+ @@ #{ one_line_header } @@
266
317
-"a" => "a",
267
318
#{ ( RUBY_VERSION . to_f > 1.8 ) ? %Q{+"ö" => "ö"} : '+"\303\266" => "\303\266"' } ,
268
319
}
@@ -273,7 +324,7 @@ def inspect; "<BrokenObject>"; end
273
324
274
325
it 'outputs unified diff message of two hashes with encoding different to key encoding' , :failing_on_appveyor do
275
326
expected_diff = %Q{
276
- @@ -1,2 +1,2 @@
327
+ @@ #{ one_line_header } @@
277
328
-:a => "a",
278
329
#{ ( RUBY_VERSION . to_f > 1.8 ) ? %Q{+\" 한글\" => \" 한글2\" } : '+"\355\225\234\352\270\200" => "\355\225\234\352\270\2002"' } ,
279
330
}
@@ -284,7 +335,7 @@ def inspect; "<BrokenObject>"; end
284
335
285
336
it "outputs unified diff message of two hashes with object keys" do
286
337
expected_diff = %Q{
287
- @@ -1,2 +1,2 @@
338
+ @@ #{ one_line_header } @@
288
339
-["a", "c"] => "b",
289
340
+["d", "c"] => "b",
290
341
}
@@ -299,7 +350,7 @@ def inspect; "<BrokenObject>"; end
299
350
300
351
it "outputs unified diff message of two hashes with Time object keys" do
301
352
expected_diff = %Q{
302
- @@ -1,2 +1,2 @@
353
+ @@ #{ one_line_header } @@
303
354
-#{ formatted_time } => "b",
304
355
+#{ formatted_time } => "c",
305
356
}
@@ -310,7 +361,7 @@ def inspect; "<BrokenObject>"; end
310
361
311
362
it "outputs unified diff message of two hashes with hashes inside them" do
312
363
expected_diff = %Q{
313
- @@ -1,2 +1,2 @@
364
+ @@ #{ one_line_header } @@
314
365
-"b" => {"key_1"=>#{ formatted_time } },
315
366
+"c" => {"key_1"=>#{ formatted_time } },
316
367
}
@@ -328,7 +379,7 @@ def inspect; "<BrokenObject>"; end
328
379
329
380
it "outputs unified diff message of two arrays with Time object keys" do
330
381
expected_diff = %Q{
331
- @@ -1,2 +1,2 @@
382
+ @@ #{ one_line_header } @@
332
383
-[#{ formatted_time } , "b"]
333
384
+[#{ formatted_time } , "c"]
334
385
}
@@ -339,7 +390,7 @@ def inspect; "<BrokenObject>"; end
339
390
340
391
it "outputs unified diff message of two arrays with hashes inside them" do
341
392
expected_diff = %Q{
342
- @@ -1,2 +1,2 @@
393
+ @@ #{ one_line_header } @@
343
394
-[{"b"=>#{ formatted_time } }, "c"]
344
395
+[{"a"=>#{ formatted_time } }, "c"]
345
396
}
@@ -368,23 +419,23 @@ def inspect; "<BrokenObject>"; end
368
419
end
369
420
370
421
it "splits items with newlines" do
371
- expected_diff = <<' EOD'
422
+ expected_diff = <<" EOD"
372
423
373
- @@ -1,3 +1 @@
374
- -a\nb
375
- -c\nd
424
+ @@ #{ removing_two_line_header } @@
425
+ -a\\ nb
426
+ -c\\ nd
376
427
EOD
377
428
378
429
diff = differ . diff [ ] , [ "a\n b" , "c\n d" ]
379
430
expect ( diff ) . to be_diffed_as ( expected_diff )
380
431
end
381
432
382
433
it "shows inner arrays on a single line" do
383
- expected_diff = <<' EOD'
434
+ expected_diff = <<" EOD"
384
435
385
- @@ -1,3 +1 @@
386
- -a\nb
387
- -["c\nd"]
436
+ @@ #{ removing_two_line_header } @@
437
+ -a\\ nb
438
+ -["c\\ nd"]
388
439
EOD
389
440
390
441
diff = differ . diff [ ] , [ "a\n b" , [ "c\n d" ] ]
@@ -434,7 +485,7 @@ def inspect; "<BrokenObject>"; end
434
485
435
486
expected_diff = dedent ( <<-EOS )
436
487
|
437
- |@@ -1,2 +1,2 @@
488
+ |@@ #{ one_line_header } @@
438
489
|-[#<SimpleDelegator(#{ object . inspect } )>]
439
490
|+[#{ object . inspect } ]
440
491
|
@@ -456,7 +507,7 @@ def inspect; "<BrokenObject>"; end
456
507
457
508
expected_diff = dedent ( <<-EOS )
458
509
|
459
- |@@ -1,2 +1,2 @@
510
+ |@@ #{ one_line_header } @@
460
511
|-"oop"
461
512
|+"oof"
462
513
|
@@ -473,7 +524,7 @@ def inspect; "<BrokenObject>"; end
473
524
it "outputs colored diffs" do
474
525
expected = "foo bar baz\n "
475
526
actual = "foo bang baz\n "
476
- expected_diff = "\e [0m\n \e [0m\e [34m@@ -1,2 +1,2 @@\n \e [0m\e [31m-foo bang baz\n \e [0m\e [32m+foo bar baz\n \e [0m"
527
+ expected_diff = "\e [0m\n \e [0m\e [34m@@ #{ one_line_header } @@\n \e [0m\e [31m-foo bang baz\n \e [0m\e [32m+foo bar baz\n \e [0m"
477
528
478
529
diff = differ . diff ( expected , actual )
479
530
expect ( diff ) . to be_diffed_as ( expected_diff )
0 commit comments