diff-lcs 1.4.4 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/Contributing.md +3 -0
  3. data/History.md +219 -107
  4. data/License.md +6 -4
  5. data/Manifest.txt +15 -1
  6. data/Rakefile +81 -25
  7. data/bin/htmldiff +4 -4
  8. data/lib/diff/lcs/array.rb +1 -1
  9. data/lib/diff/lcs/backports.rb +2 -2
  10. data/lib/diff/lcs/block.rb +4 -4
  11. data/lib/diff/lcs/callbacks.rb +9 -7
  12. data/lib/diff/lcs/change.rb +19 -19
  13. data/lib/diff/lcs/htmldiff.rb +24 -16
  14. data/lib/diff/lcs/hunk.rb +35 -30
  15. data/lib/diff/lcs/internals.rb +24 -20
  16. data/lib/diff/lcs/ldiff.rb +37 -35
  17. data/lib/diff/lcs.rb +77 -75
  18. data/lib/diff-lcs.rb +1 -1
  19. data/spec/change_spec.rb +50 -50
  20. data/spec/diff_spec.rb +14 -14
  21. data/spec/fixtures/ldiff/output.diff.chef +4 -0
  22. data/spec/fixtures/ldiff/output.diff.chef-c +15 -0
  23. data/spec/fixtures/ldiff/output.diff.chef-e +3 -0
  24. data/spec/fixtures/ldiff/output.diff.chef-f +3 -0
  25. data/spec/fixtures/ldiff/output.diff.chef-u +9 -0
  26. data/spec/fixtures/ldiff/output.diff.chef2 +7 -0
  27. data/spec/fixtures/ldiff/output.diff.chef2-c +20 -0
  28. data/spec/fixtures/ldiff/output.diff.chef2-d +7 -0
  29. data/spec/fixtures/ldiff/output.diff.chef2-e +7 -0
  30. data/spec/fixtures/ldiff/output.diff.chef2-f +7 -0
  31. data/spec/fixtures/ldiff/output.diff.chef2-u +16 -0
  32. data/spec/fixtures/new-chef +4 -0
  33. data/spec/fixtures/new-chef2 +17 -0
  34. data/spec/fixtures/old-chef +4 -0
  35. data/spec/fixtures/old-chef2 +14 -0
  36. data/spec/hunk_spec.rb +19 -19
  37. data/spec/issues_spec.rb +48 -42
  38. data/spec/lcs_spec.rb +11 -11
  39. data/spec/ldiff_spec.rb +13 -11
  40. data/spec/patch_spec.rb +84 -84
  41. data/spec/sdiff_spec.rb +111 -109
  42. data/spec/spec_helper.rb +77 -76
  43. data/spec/traverse_balanced_spec.rb +191 -189
  44. data/spec/traverse_sequences_spec.rb +31 -33
  45. metadata +50 -23
  46. data/autotest/discover.rb +0 -3
data/lib/diff/lcs.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Diff; end unless defined? Diff # rubocop:disable Style/Documentation
3
+ module Diff; end unless defined? Diff
4
4
 
5
5
  # == How Diff Works (by Mark-Jason Dominus)
6
6
  #
@@ -49,13 +49,13 @@ module Diff; end unless defined? Diff # rubocop:disable Style/Documentation
49
49
  # a x b y c z p d q
50
50
  # a b c a x b y c z
51
51
  module Diff::LCS
52
- VERSION = '1.4.4'
52
+ VERSION = "1.5.1"
53
53
  end
54
54
 
55
- require 'diff/lcs/callbacks'
56
- require 'diff/lcs/internals'
55
+ require "diff/lcs/callbacks"
56
+ require "diff/lcs/internals"
57
57
 
58
- module Diff::LCS # rubocop:disable Style/Documentation
58
+ module Diff::LCS
59
59
  # Returns an Array containing the longest common subsequence(s) between
60
60
  # +self+ and +other+. See Diff::LCS#lcs.
61
61
  #
@@ -67,7 +67,7 @@ module Diff::LCS # rubocop:disable Style/Documentation
67
67
  # identically for key purposes. That is:
68
68
  #
69
69
  # O.new('a').eql?(O.new('a')) == true
70
- def lcs(other, &block) #:yields self[i] if there are matched subsequences:
70
+ def lcs(other, &block) # :yields: self[i] if there are matched subsequences
71
71
  Diff::LCS.lcs(self, other, &block)
72
72
  end
73
73
 
@@ -85,14 +85,14 @@ module Diff::LCS # rubocop:disable Style/Documentation
85
85
  # Traverses the discovered longest common subsequences between +self+ and
86
86
  # +other+. See Diff::LCS#traverse_sequences.
87
87
  def traverse_sequences(other, callbacks = nil, &block)
88
- traverse_sequences(self, other, callbacks || Diff::LCS::SequenceCallbacks, &block)
88
+ Diff::LCS.traverse_sequences(self, other, callbacks || Diff::LCS::SequenceCallbacks, &block)
89
89
  end
90
90
 
91
91
  # Traverses the discovered longest common subsequences between +self+ and
92
92
  # +other+ using the alternate, balanced algorithm. See
93
93
  # Diff::LCS#traverse_balanced.
94
94
  def traverse_balanced(other, callbacks = nil, &block)
95
- traverse_balanced(self, other, callbacks || Diff::LCS::BalancedCallbacks, &block)
95
+ Diff::LCS.traverse_balanced(self, other, callbacks || Diff::LCS::BalancedCallbacks, &block)
96
96
  end
97
97
 
98
98
  # Attempts to patch +self+ with the provided +patchset+. A new sequence based
@@ -101,7 +101,7 @@ module Diff::LCS # rubocop:disable Style/Documentation
101
101
  def patch(patchset)
102
102
  Diff::LCS.patch(self, patchset)
103
103
  end
104
- alias unpatch patch
104
+ alias_method :unpatch, :patch
105
105
 
106
106
  # Attempts to patch +self+ with the provided +patchset+. A new sequence based
107
107
  # on +self+ and the +patchset+ will be created. See Diff::LCS#patch. Does no
@@ -141,11 +141,11 @@ module Diff::LCS # rubocop:disable Style/Documentation
141
141
  end
142
142
 
143
143
  class << Diff::LCS
144
- def lcs(seq1, seq2, &block) #:yields seq1[i] for each matched:
144
+ def lcs(seq1, seq2, &block) # :yields: seq1[i] for each matched
145
145
  matches = Diff::LCS::Internals.lcs(seq1, seq2)
146
146
  ret = []
147
- string = seq1.kind_of? String
148
- matches.each_with_index do |_e, i|
147
+ string = seq1.is_a? String
148
+ matches.each_index do |i|
149
149
  next if matches[i].nil?
150
150
 
151
151
  v = string ? seq1[i, 1] : seq1[i]
@@ -154,7 +154,7 @@ class << Diff::LCS
154
154
  end
155
155
  ret
156
156
  end
157
- alias LCS lcs
157
+ alias_method :LCS, :lcs
158
158
 
159
159
  # #diff computes the smallest set of additions and deletions necessary to
160
160
  # turn the first sequence into the second, and returns a description of these
@@ -165,7 +165,7 @@ class << Diff::LCS
165
165
  # Class argument is provided for +callbacks+, #diff will attempt to
166
166
  # initialise it. If the +callbacks+ object (possibly initialised) responds to
167
167
  # #finish, it will be called.
168
- def diff(seq1, seq2, callbacks = nil, &block) # :yields diff changes:
168
+ def diff(seq1, seq2, callbacks = nil, &block) # :yields: diff changes
169
169
  diff_traversal(:diff, seq1, seq2, callbacks || Diff::LCS::DiffCallbacks, &block)
170
170
  end
171
171
 
@@ -197,7 +197,7 @@ class << Diff::LCS
197
197
  # # insert
198
198
  # end
199
199
  # end
200
- def sdiff(seq1, seq2, callbacks = nil, &block) #:yields diff changes:
200
+ def sdiff(seq1, seq2, callbacks = nil, &block) # :yields: diff changes
201
201
  diff_traversal(:sdiff, seq1, seq2, callbacks || Diff::LCS::SDiffCallbacks, &block)
202
202
  end
203
203
 
@@ -250,8 +250,9 @@ class << Diff::LCS
250
250
  # advance that arrow and will call <tt>callbacks#discard_a</tt> or
251
251
  # <tt>callbacks#discard_b</tt>, depending on which arrow it advanced. If both
252
252
  # arrows point to elements that are not part of the longest common
253
- # subsequence, then #traverse_sequences will advance one of them and call the
254
- # appropriate callback, but it is not specified which it will call.
253
+ # subsequence, then #traverse_sequences will advance arrow +a+ and call the
254
+ # appropriate callback, then it will advance arrow +b+ and call the appropriate
255
+ # callback.
255
256
  #
256
257
  # The methods for <tt>callbacks#match</tt>, <tt>callbacks#discard_a</tt>, and
257
258
  # <tt>callbacks#discard_b</tt> are invoked with an event comprising the
@@ -281,58 +282,57 @@ class << Diff::LCS
281
282
  # <tt>callbacks#discard_b</tt> will be called after the end of the sequence
282
283
  # is reached, if +a+ has not yet reached the end of +A+ or +b+ has not yet
283
284
  # reached the end of +B+.
284
- def traverse_sequences(seq1, seq2, callbacks = Diff::LCS::SequenceCallbacks) #:yields change events:
285
+ def traverse_sequences(seq1, seq2, callbacks = Diff::LCS::SequenceCallbacks) # :yields: change events
285
286
  callbacks ||= Diff::LCS::SequenceCallbacks
286
287
  matches = Diff::LCS::Internals.lcs(seq1, seq2)
287
288
 
288
289
  run_finished_a = run_finished_b = false
289
- string = seq1.kind_of?(String)
290
+ string = seq1.is_a?(String)
290
291
 
291
292
  a_size = seq1.size
292
293
  b_size = seq2.size
293
294
  ai = bj = 0
294
295
 
295
- (0..matches.size).each do |i|
296
- b_line = matches[i]
297
-
298
- ax = string ? seq1[i, 1] : seq1[i]
299
- bx = string ? seq2[bj, 1] : seq2[bj]
300
-
296
+ matches.each do |b_line|
301
297
  if b_line.nil?
302
- unless ax.nil? or (string and ax.empty?)
303
- event = Diff::LCS::ContextChange.new('-', i, ax, bj, bx)
298
+ unless seq1[ai].nil?
299
+ ax = string ? seq1[ai, 1] : seq1[ai]
300
+ bx = string ? seq2[bj, 1] : seq2[bj]
301
+
302
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
304
303
  event = yield event if block_given?
305
304
  callbacks.discard_a(event)
306
305
  end
307
306
  else
307
+ ax = string ? seq1[ai, 1] : seq1[ai]
308
+
308
309
  loop do
309
310
  break unless bj < b_line
310
311
 
311
312
  bx = string ? seq2[bj, 1] : seq2[bj]
312
- event = Diff::LCS::ContextChange.new('+', i, ax, bj, bx)
313
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
313
314
  event = yield event if block_given?
314
315
  callbacks.discard_b(event)
315
316
  bj += 1
316
317
  end
317
318
  bx = string ? seq2[bj, 1] : seq2[bj]
318
- event = Diff::LCS::ContextChange.new('=', i, ax, bj, bx)
319
+ event = Diff::LCS::ContextChange.new("=", ai, ax, bj, bx)
319
320
  event = yield event if block_given?
320
321
  callbacks.match(event)
321
322
  bj += 1
322
323
  end
323
- ai = i
324
+ ai += 1
324
325
  end
325
- ai += 1
326
326
 
327
327
  # The last entry (if any) processed was a match. +ai+ and +bj+ point just
328
328
  # past the last matching lines in their sequences.
329
- while (ai < a_size) or (bj < b_size)
329
+ while (ai < a_size) || (bj < b_size)
330
330
  # last A?
331
- if ai == a_size and bj < b_size
332
- if callbacks.respond_to?(:finished_a) and !run_finished_a
331
+ if ai == a_size && bj < b_size
332
+ if callbacks.respond_to?(:finished_a) && !run_finished_a
333
333
  ax = string ? seq1[-1, 1] : seq1[-1]
334
334
  bx = string ? seq2[bj, 1] : seq2[bj]
335
- event = Diff::LCS::ContextChange.new('>', (a_size - 1), ax, bj, bx)
335
+ event = Diff::LCS::ContextChange.new(">", (a_size - 1), ax, bj, bx)
336
336
  event = yield event if block_given?
337
337
  callbacks.finished_a(event)
338
338
  run_finished_a = true
@@ -340,7 +340,7 @@ class << Diff::LCS
340
340
  ax = string ? seq1[ai, 1] : seq1[ai]
341
341
  loop do
342
342
  bx = string ? seq2[bj, 1] : seq2[bj]
343
- event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
343
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
344
344
  event = yield event if block_given?
345
345
  callbacks.discard_b(event)
346
346
  bj += 1
@@ -350,11 +350,11 @@ class << Diff::LCS
350
350
  end
351
351
 
352
352
  # last B?
353
- if bj == b_size and ai < a_size
354
- if callbacks.respond_to?(:finished_b) and !run_finished_b
353
+ if bj == b_size && ai < a_size
354
+ if callbacks.respond_to?(:finished_b) && !run_finished_b
355
355
  ax = string ? seq1[ai, 1] : seq1[ai]
356
356
  bx = string ? seq2[-1, 1] : seq2[-1]
357
- event = Diff::LCS::ContextChange.new('<', ai, ax, (b_size - 1), bx)
357
+ event = Diff::LCS::ContextChange.new("<", ai, ax, (b_size - 1), bx)
358
358
  event = yield event if block_given?
359
359
  callbacks.finished_b(event)
360
360
  run_finished_b = true
@@ -362,7 +362,7 @@ class << Diff::LCS
362
362
  bx = string ? seq2[bj, 1] : seq2[bj]
363
363
  loop do
364
364
  ax = string ? seq1[ai, 1] : seq1[ai]
365
- event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
365
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
366
366
  event = yield event if block_given?
367
367
  callbacks.discard_a(event)
368
368
  ai += 1
@@ -374,20 +374,20 @@ class << Diff::LCS
374
374
  if ai < a_size
375
375
  ax = string ? seq1[ai, 1] : seq1[ai]
376
376
  bx = string ? seq2[bj, 1] : seq2[bj]
377
- event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
377
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
378
378
  event = yield event if block_given?
379
379
  callbacks.discard_a(event)
380
380
  ai += 1
381
381
  end
382
382
 
383
- next unless bj < b_size
384
-
385
- ax = string ? seq1[ai, 1] : seq1[ai]
386
- bx = string ? seq2[bj, 1] : seq2[bj]
387
- event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
388
- event = yield event if block_given?
389
- callbacks.discard_b(event)
390
- bj += 1
383
+ if bj < b_size
384
+ ax = string ? seq1[ai, 1] : seq1[ai]
385
+ bx = string ? seq2[bj, 1] : seq2[bj]
386
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
387
+ event = yield event if block_given?
388
+ callbacks.discard_b(event)
389
+ bj += 1
390
+ end
391
391
  end
392
392
  end
393
393
 
@@ -478,14 +478,14 @@ class << Diff::LCS
478
478
  b_size = seq2.size
479
479
  ai = bj = mb = 0
480
480
  ma = -1
481
- string = seq1.kind_of?(String)
481
+ string = seq1.is_a?(String)
482
482
 
483
483
  # Process all the lines in the match vector.
484
484
  loop do
485
485
  # Find next match indices +ma+ and +mb+
486
486
  loop do
487
487
  ma += 1
488
- break unless ma < matches.size and matches[ma].nil?
488
+ break unless ma < matches.size && matches[ma].nil?
489
489
  end
490
490
 
491
491
  break if ma >= matches.size # end of matches?
@@ -493,36 +493,36 @@ class << Diff::LCS
493
493
  mb = matches[ma]
494
494
 
495
495
  # Change(seq2)
496
- while (ai < ma) or (bj < mb)
496
+ while (ai < ma) || (bj < mb)
497
497
  ax = string ? seq1[ai, 1] : seq1[ai]
498
498
  bx = string ? seq2[bj, 1] : seq2[bj]
499
499
 
500
500
  case [(ai < ma), (bj < mb)]
501
501
  when [true, true]
502
502
  if callbacks.respond_to?(:change)
503
- event = Diff::LCS::ContextChange.new('!', ai, ax, bj, bx)
503
+ event = Diff::LCS::ContextChange.new("!", ai, ax, bj, bx)
504
504
  event = yield event if block_given?
505
505
  callbacks.change(event)
506
506
  ai += 1
507
507
  else
508
- event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
508
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
509
509
  event = yield event if block_given?
510
510
  callbacks.discard_a(event)
511
511
  ai += 1
512
512
  ax = string ? seq1[ai, 1] : seq1[ai]
513
- event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
513
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
514
514
  event = yield event if block_given?
515
515
  callbacks.discard_b(event)
516
516
  end
517
517
 
518
518
  bj += 1
519
519
  when [true, false]
520
- event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
520
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
521
521
  event = yield event if block_given?
522
522
  callbacks.discard_a(event)
523
523
  ai += 1
524
524
  when [false, true]
525
- event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
525
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
526
526
  event = yield event if block_given?
527
527
  callbacks.discard_b(event)
528
528
  bj += 1
@@ -532,43 +532,43 @@ class << Diff::LCS
532
532
  # Match
533
533
  ax = string ? seq1[ai, 1] : seq1[ai]
534
534
  bx = string ? seq2[bj, 1] : seq2[bj]
535
- event = Diff::LCS::ContextChange.new('=', ai, ax, bj, bx)
535
+ event = Diff::LCS::ContextChange.new("=", ai, ax, bj, bx)
536
536
  event = yield event if block_given?
537
537
  callbacks.match(event)
538
538
  ai += 1
539
539
  bj += 1
540
540
  end
541
541
 
542
- while (ai < a_size) or (bj < b_size)
542
+ while (ai < a_size) || (bj < b_size)
543
543
  ax = string ? seq1[ai, 1] : seq1[ai]
544
544
  bx = string ? seq2[bj, 1] : seq2[bj]
545
545
 
546
546
  case [(ai < a_size), (bj < b_size)]
547
547
  when [true, true]
548
548
  if callbacks.respond_to?(:change)
549
- event = Diff::LCS::ContextChange.new('!', ai, ax, bj, bx)
549
+ event = Diff::LCS::ContextChange.new("!", ai, ax, bj, bx)
550
550
  event = yield event if block_given?
551
551
  callbacks.change(event)
552
552
  ai += 1
553
553
  else
554
- event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
554
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
555
555
  event = yield event if block_given?
556
556
  callbacks.discard_a(event)
557
557
  ai += 1
558
558
  ax = string ? seq1[ai, 1] : seq1[ai]
559
- event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
559
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
560
560
  event = yield event if block_given?
561
561
  callbacks.discard_b(event)
562
562
  end
563
563
 
564
564
  bj += 1
565
565
  when [true, false]
566
- event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
566
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
567
567
  event = yield event if block_given?
568
568
  callbacks.discard_a(event)
569
569
  ai += 1
570
570
  when [false, true]
571
- event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
571
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
572
572
  event = yield event if block_given?
573
573
  callbacks.discard_b(event)
574
574
  bj += 1
@@ -576,10 +576,12 @@ class << Diff::LCS
576
576
  end
577
577
  end
578
578
 
579
- PATCH_MAP = { #:nodoc:
580
- :patch => { '+' => '+', '-' => '-', '!' => '!', '=' => '=' }.freeze,
581
- :unpatch => { '+' => '-', '-' => '+', '!' => '!', '=' => '=' }.freeze
579
+ # standard:disable Style/HashSyntax
580
+ PATCH_MAP = { # :nodoc:
581
+ :patch => {"+" => "+", "-" => "-", "!" => "!", "=" => "="}.freeze,
582
+ :unpatch => {"+" => "-", "-" => "+", "!" => "!", "=" => "="}.freeze
582
583
  }.freeze
584
+ # standard:enable Style/HashSyntax
583
585
 
584
586
  # Applies a +patchset+ to the sequence +src+ according to the +direction+
585
587
  # (<tt>:patch</tt> or <tt>:unpatch</tt>), producing a new sequence.
@@ -627,7 +629,7 @@ class << Diff::LCS
627
629
 
628
630
  return src.respond_to?(:dup) ? src.dup : src unless has_changes
629
631
 
630
- string = src.kind_of?(String)
632
+ string = src.is_a?(String)
631
633
  # Start with a new empty type of the source's class
632
634
  res = src.class.new
633
635
 
@@ -655,14 +657,14 @@ class << Diff::LCS
655
657
  end
656
658
 
657
659
  case action
658
- when '-' # Remove details from the old string
660
+ when "-" # Remove details from the old string
659
661
  while ai < op
660
662
  res << (string ? src[ai, 1] : src[ai])
661
663
  ai += 1
662
664
  bj += 1
663
665
  end
664
666
  ai += 1
665
- when '+'
667
+ when "+"
666
668
  while bj < np
667
669
  res << (string ? src[ai, 1] : src[ai])
668
670
  ai += 1
@@ -671,7 +673,7 @@ class << Diff::LCS
671
673
 
672
674
  res << el
673
675
  bj += 1
674
- when '='
676
+ when "="
675
677
  # This only appears in sdiff output with the SDiff callback.
676
678
  # Therefore, we only need to worry about dealing with a single
677
679
  # element.
@@ -679,7 +681,7 @@ class << Diff::LCS
679
681
 
680
682
  ai += 1
681
683
  bj += 1
682
- when '!'
684
+ when "!"
683
685
  while ai < op
684
686
  res << (string ? src[ai, 1] : src[ai])
685
687
  ai += 1
@@ -693,14 +695,14 @@ class << Diff::LCS
693
695
  end
694
696
  when Diff::LCS::Change
695
697
  case action
696
- when '-'
698
+ when "-"
697
699
  while ai < change.position
698
700
  res << (string ? src[ai, 1] : src[ai])
699
701
  ai += 1
700
702
  bj += 1
701
703
  end
702
704
  ai += 1
703
- when '+'
705
+ when "+"
704
706
  while bj < change.position
705
707
  res << (string ? src[ai, 1] : src[ai])
706
708
  ai += 1
@@ -736,4 +738,4 @@ class << Diff::LCS
736
738
  end
737
739
  end
738
740
 
739
- require 'diff/lcs/backports'
741
+ require "diff/lcs/backports"
data/lib/diff-lcs.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'diff/lcs'
3
+ require "diff/lcs"
data/spec/change_spec.rb CHANGED
@@ -1,89 +1,89 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require "spec_helper"
4
4
 
5
5
  describe Diff::LCS::Change do
6
- describe 'an add' do
7
- subject { described_class.new('+', 0, 'element') }
8
- it { should_not be_deleting }
9
- it { should be_adding }
10
- it { should_not be_unchanged }
11
- it { should_not be_changed }
6
+ describe "an add" do
7
+ subject { described_class.new("+", 0, "element") }
8
+ it { should_not be_deleting }
9
+ it { should be_adding }
10
+ it { should_not be_unchanged }
11
+ it { should_not be_changed }
12
12
  it { should_not be_finished_a }
13
13
  it { should_not be_finished_b }
14
14
  end
15
15
 
16
- describe 'a delete' do
17
- subject { described_class.new('-', 0, 'element') }
18
- it { should be_deleting }
19
- it { should_not be_adding }
20
- it { should_not be_unchanged }
21
- it { should_not be_changed }
16
+ describe "a delete" do
17
+ subject { described_class.new("-", 0, "element") }
18
+ it { should be_deleting }
19
+ it { should_not be_adding }
20
+ it { should_not be_unchanged }
21
+ it { should_not be_changed }
22
22
  it { should_not be_finished_a }
23
23
  it { should_not be_finished_b }
24
24
  end
25
25
 
26
- describe 'an unchanged' do
27
- subject { described_class.new('=', 0, 'element') }
28
- it { should_not be_deleting }
29
- it { should_not be_adding }
30
- it { should be_unchanged }
31
- it { should_not be_changed }
26
+ describe "an unchanged" do
27
+ subject { described_class.new("=", 0, "element") }
28
+ it { should_not be_deleting }
29
+ it { should_not be_adding }
30
+ it { should be_unchanged }
31
+ it { should_not be_changed }
32
32
  it { should_not be_finished_a }
33
33
  it { should_not be_finished_b }
34
34
  end
35
35
 
36
- describe 'a changed' do
37
- subject { described_class.new('!', 0, 'element') }
38
- it { should_not be_deleting }
39
- it { should_not be_adding }
40
- it { should_not be_unchanged }
41
- it { should be_changed }
36
+ describe "a changed" do
37
+ subject { described_class.new("!", 0, "element") }
38
+ it { should_not be_deleting }
39
+ it { should_not be_adding }
40
+ it { should_not be_unchanged }
41
+ it { should be_changed }
42
42
  it { should_not be_finished_a }
43
43
  it { should_not be_finished_b }
44
44
  end
45
45
 
46
- describe 'a finished_a' do
47
- subject { described_class.new('>', 0, 'element') }
48
- it { should_not be_deleting }
49
- it { should_not be_adding }
50
- it { should_not be_unchanged }
51
- it { should_not be_changed }
52
- it { should be_finished_a }
46
+ describe "a finished_a" do
47
+ subject { described_class.new(">", 0, "element") }
48
+ it { should_not be_deleting }
49
+ it { should_not be_adding }
50
+ it { should_not be_unchanged }
51
+ it { should_not be_changed }
52
+ it { should be_finished_a }
53
53
  it { should_not be_finished_b }
54
54
  end
55
55
 
56
- describe 'a finished_b' do
57
- subject { described_class.new('<', 0, 'element') }
58
- it { should_not be_deleting }
59
- it { should_not be_adding }
60
- it { should_not be_unchanged }
61
- it { should_not be_changed }
56
+ describe "a finished_b" do
57
+ subject { described_class.new("<", 0, "element") }
58
+ it { should_not be_deleting }
59
+ it { should_not be_adding }
60
+ it { should_not be_unchanged }
61
+ it { should_not be_changed }
62
62
  it { should_not be_finished_a }
63
- it { should be_finished_b }
63
+ it { should be_finished_b }
64
64
  end
65
65
 
66
- describe 'as array' do
67
- it 'should be converted' do
68
- action, position, element = described_class.new('!', 0, 'element')
69
- expect(action).to eq '!'
66
+ describe "as array" do
67
+ it "should be converted" do
68
+ action, position, element = described_class.new("!", 0, "element")
69
+ expect(action).to eq "!"
70
70
  expect(position).to eq 0
71
- expect(element).to eq 'element'
71
+ expect(element).to eq "element"
72
72
  end
73
73
  end
74
74
  end
75
75
 
76
76
  describe Diff::LCS::ContextChange do
77
- describe 'as array' do
78
- it 'should be converted' do
77
+ describe "as array" do
78
+ it "should be converted" do
79
79
  action, (old_position, old_element), (new_position, new_element) =
80
- described_class.new('!', 1, 'old_element', 2, 'new_element')
80
+ described_class.new("!", 1, "old_element", 2, "new_element")
81
81
 
82
- expect(action).to eq '!'
82
+ expect(action).to eq "!"
83
83
  expect(old_position).to eq 1
84
- expect(old_element).to eq 'old_element'
84
+ expect(old_element).to eq "old_element"
85
85
  expect(new_position).to eq 2
86
- expect(new_element).to eq 'new_element'
86
+ expect(new_element).to eq "new_element"
87
87
  end
88
88
  end
89
89
  end
data/spec/diff_spec.rb CHANGED
@@ -1,28 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require "spec_helper"
4
4
 
5
- describe Diff::LCS, '.diff' do
5
+ describe Diff::LCS, ".diff" do
6
6
  include Diff::LCS::SpecHelper::Matchers
7
7
 
8
- it 'correctly diffs seq1 to seq2' do
8
+ it "correctly diffs seq1 to seq2" do
9
9
  diff_s1_s2 = Diff::LCS.diff(seq1, seq2)
10
10
  expect(change_diff(correct_forward_diff)).to eq(diff_s1_s2)
11
11
  end
12
12
 
13
- it 'correctly diffs seq2 to seq1' do
13
+ it "correctly diffs seq2 to seq1" do
14
14
  diff_s2_s1 = Diff::LCS.diff(seq2, seq1)
15
15
  expect(change_diff(correct_backward_diff)).to eq(diff_s2_s1)
16
16
  end
17
17
 
18
- it 'correctly diffs against an empty sequence' do
18
+ it "correctly diffs against an empty sequence" do
19
19
  diff = Diff::LCS.diff(word_sequence, [])
20
20
  correct_diff = [
21
21
  [
22
- ['-', 0, 'abcd'],
23
- ['-', 1, 'efgh'],
24
- ['-', 2, 'ijkl'],
25
- ['-', 3, 'mnopqrstuvwxyz']
22
+ ["-", 0, "abcd"],
23
+ ["-", 1, "efgh"],
24
+ ["-", 2, "ijkl"],
25
+ ["-", 3, "mnopqrstuvwxyz"]
26
26
  ]
27
27
  ]
28
28
 
@@ -30,22 +30,22 @@ describe Diff::LCS, '.diff' do
30
30
 
31
31
  diff = Diff::LCS.diff([], word_sequence)
32
32
  correct_diff.each do |hunk|
33
- hunk.each do |change| change[0] = '+' end
33
+ hunk.each { |change| change[0] = "+" }
34
34
  end
35
35
  expect(change_diff(correct_diff)).to eq(diff)
36
36
  end
37
37
 
38
38
  it "correctly diffs 'xx' and 'xaxb'" do
39
- left = 'xx'
40
- right = 'xaxb'
39
+ left = "xx"
40
+ right = "xaxb"
41
41
  expect(Diff::LCS.patch(left, Diff::LCS.diff(left, right))).to eq(right)
42
42
  end
43
43
 
44
- it 'returns an empty diff with (hello, hello)' do
44
+ it "returns an empty diff with (hello, hello)" do
45
45
  expect(Diff::LCS.diff(hello, hello)).to be_empty
46
46
  end
47
47
 
48
- it 'returns an empty diff with (hello_ary, hello_ary)' do
48
+ it "returns an empty diff with (hello_ary, hello_ary)" do
49
49
  expect(Diff::LCS.diff(hello_ary, hello_ary)).to be_empty
50
50
  end
51
51
  end
@@ -0,0 +1,4 @@
1
+ 3c3
2
+ < "description": "hi"
3
+ ---
4
+ > "description": "lo"