diff-lcs 1.1.3 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +3 -0
- data/.rspec +2 -0
- data/.travis.yml +21 -0
- data/Contributing.rdoc +63 -0
- data/Gemfile +20 -0
- data/History.rdoc +37 -1
- data/Manifest.txt +10 -1
- data/README.rdoc +48 -23
- data/Rakefile +17 -3
- data/autotest/discover.rb +1 -0
- data/diff-lcs.gemspec +41 -29
- data/docs/COPYING.txt +21 -22
- data/docs/artistic.txt +127 -0
- data/lib/diff-lcs.rb +0 -2
- data/lib/diff/lcs.rb +654 -954
- data/lib/diff/lcs/array.rb +1 -15
- data/lib/diff/lcs/block.rb +4 -18
- data/lib/diff/lcs/callbacks.rb +222 -222
- data/lib/diff/lcs/change.rb +110 -102
- data/lib/diff/lcs/htmldiff.rb +0 -2
- data/lib/diff/lcs/hunk.rb +65 -56
- data/lib/diff/lcs/internals.rb +300 -0
- data/lib/diff/lcs/ldiff.rb +154 -169
- data/lib/diff/lcs/string.rb +1 -15
- data/spec/change_spec.rb +65 -0
- data/spec/diff_spec.rb +8 -2
- data/spec/issues_spec.rb +24 -0
- data/spec/lcs_spec.rb +23 -5
- data/spec/patch_spec.rb +51 -27
- data/spec/sdiff_spec.rb +0 -2
- data/spec/spec_helper.rb +9 -3
- data/spec/traverse_balanced_spec.rb +26 -2
- data/spec/traverse_sequences_spec.rb +84 -28
- metadata +219 -83
- data/docs/artistic.html +0 -289
data/lib/diff/lcs/string.rb
CHANGED
@@ -1,18 +1,4 @@
|
|
1
|
-
|
2
|
-
#--
|
3
|
-
# Copyright 2004 Austin Ziegler <diff-lcs@halostatue.ca>
|
4
|
-
# adapted from:
|
5
|
-
# Algorithm::Diff (Perl) by Ned Konz <perl@bike-nomad.com>
|
6
|
-
# Smalltalk by Mario I. Wolczko <mario@wolczko.com>
|
7
|
-
# implements McIlroy-Hunt diff algorithm
|
8
|
-
#
|
9
|
-
# This program is free software. It may be redistributed and/or modified under
|
10
|
-
# the terms of the GPL version 2 (or later), the Perl Artistic licence, or the
|
11
|
-
# Ruby licence.
|
12
|
-
#
|
13
|
-
# $Id$
|
14
|
-
#++
|
15
|
-
# Includes Diff::LCS into String.
|
1
|
+
# -*- ruby encoding: utf-8 -*-
|
16
2
|
|
17
3
|
class String
|
18
4
|
include Diff::LCS
|
data/spec/change_spec.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# -*- ruby encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
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 }
|
12
|
+
it { should_not be_finished_a }
|
13
|
+
it { should_not be_finished_b }
|
14
|
+
end
|
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 }
|
22
|
+
it { should_not be_finished_a }
|
23
|
+
it { should_not be_finished_b }
|
24
|
+
end
|
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 }
|
32
|
+
it { should_not be_finished_a }
|
33
|
+
it { should_not be_finished_b }
|
34
|
+
end
|
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 }
|
42
|
+
it { should_not be_finished_a }
|
43
|
+
it { should_not be_finished_b }
|
44
|
+
end
|
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 }
|
53
|
+
it { should_not be_finished_b }
|
54
|
+
end
|
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 }
|
62
|
+
it { should_not be_finished_a }
|
63
|
+
it { should be_finished_b }
|
64
|
+
end
|
65
|
+
end
|
data/spec/diff_spec.rb
CHANGED
@@ -30,6 +30,12 @@ describe "Diff::LCS.diff" do
|
|
30
30
|
correct_diff.each { |hunk| hunk.each { |change| change[0] = '+' } }
|
31
31
|
change_diff(correct_diff).should == diff
|
32
32
|
end
|
33
|
-
end
|
34
33
|
|
35
|
-
|
34
|
+
it "should return an empty diff with (hello, hello)" do
|
35
|
+
Diff::LCS.diff(hello, hello).should == []
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should return an empty diff with (hello_ary, hello_ary)" do
|
39
|
+
Diff::LCS.diff(hello_ary, hello_ary).should == []
|
40
|
+
end
|
41
|
+
end
|
data/spec/issues_spec.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- ruby encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe "Diff::LCS Issues" do
|
6
|
+
include Diff::LCS::SpecHelper::Matchers
|
7
|
+
|
8
|
+
it "should not fail to provide a simple patchset (issue 1)" do
|
9
|
+
s1, s2 = *%W(aX bXaX)
|
10
|
+
correct_forward_diff = [
|
11
|
+
[ [ '+', 0, 'b' ],
|
12
|
+
[ '+', 1, 'X' ] ],
|
13
|
+
]
|
14
|
+
|
15
|
+
diff_s1_s2 = Diff::LCS.diff(s1, s2)
|
16
|
+
change_diff(correct_forward_diff).should == diff_s1_s2
|
17
|
+
expect do
|
18
|
+
Diff::LCS.patch(s1, diff_s1_s2).should == s2
|
19
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
20
|
+
expect do
|
21
|
+
Diff::LCS.patch(s2, diff_s1_s2).should == s1
|
22
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
23
|
+
end
|
24
|
+
end
|
data/spec/lcs_spec.rb
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe "Diff::LCS
|
5
|
+
describe "Diff::LCS::Internals.lcs" do
|
6
6
|
include Diff::LCS::SpecHelper::Matchers
|
7
7
|
|
8
|
-
it "should return
|
9
|
-
res = Diff::LCS.
|
8
|
+
it "should return a meaningful LCS array with (seq1, seq2)" do
|
9
|
+
res = Diff::LCS::Internals.lcs(seq1, seq2)
|
10
10
|
# The result of the LCS (less the +nil+ values) must be as long as the
|
11
11
|
# correct result.
|
12
12
|
res.compact.size.should == correct_lcs.size
|
@@ -20,6 +20,18 @@ describe "Diff::LCS.LCS and Diff::LCS.__lcs" do
|
|
20
20
|
x_seq2.should == correct_lcs
|
21
21
|
end
|
22
22
|
|
23
|
+
it "should return all indexes with (hello, hello)" do
|
24
|
+
Diff::LCS::Internals.lcs(hello, hello).should == (0...hello.size).to_a
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return all indexes with (hello_ary, hello_ary)" do
|
28
|
+
Diff::LCS::Internals.lcs(hello_ary, hello_ary).should == (0...hello_ary.size).to_a
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "Diff::LCS.LCS" do
|
33
|
+
include Diff::LCS::SpecHelper::Matchers
|
34
|
+
|
23
35
|
it "should return the correct compacted values from Diff::LCS.LCS" do
|
24
36
|
res = Diff::LCS.LCS(seq1, seq2)
|
25
37
|
res.should == correct_lcs
|
@@ -31,6 +43,12 @@ describe "Diff::LCS.LCS and Diff::LCS.__lcs" do
|
|
31
43
|
res.should == correct_lcs
|
32
44
|
res.compact.should == res
|
33
45
|
end
|
34
|
-
end
|
35
46
|
|
36
|
-
|
47
|
+
it "should return %W(h e l l o) with (hello, hello)" do
|
48
|
+
Diff::LCS.LCS(hello, hello).should == hello.split(//)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should return hello_ary with (hello_ary, hello_ary)" do
|
52
|
+
Diff::LCS.LCS(hello_ary, hello_ary).should == hello_ary
|
53
|
+
end
|
54
|
+
end
|
data/spec/patch_spec.rb
CHANGED
@@ -26,6 +26,16 @@ describe "Diff::LCS.patch" do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
describe "using a Diff::LCS.diff patchset" do
|
29
|
+
describe "an empty patchset returns the source" do
|
30
|
+
it "works on a string (hello)" do
|
31
|
+
Diff::LCS::patch(hello, Diff::LCS.diff(hello, hello)).should == hello
|
32
|
+
end
|
33
|
+
|
34
|
+
it "works on an array %W(h e l l o)" do
|
35
|
+
Diff::LCS::patch(hello_ary, Diff::LCS.diff(hello_ary, hello_ary)).should == hello_ary
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
29
39
|
describe "with default diff callbacks (DiffCallbacks)" do
|
30
40
|
describe "forward (s1 -> s2)" do
|
31
41
|
it_has_behavior "patch sequences correctly" do
|
@@ -90,6 +100,16 @@ describe "Diff::LCS.patch" do
|
|
90
100
|
end
|
91
101
|
|
92
102
|
describe "using a Diff::LCS.sdiff patchset" do
|
103
|
+
describe "an empty patchset returns the source" do
|
104
|
+
it "works on a string (hello)" do
|
105
|
+
Diff::LCS::patch(hello, Diff::LCS.sdiff(hello, hello)).should == hello
|
106
|
+
end
|
107
|
+
|
108
|
+
it "works on an array %W(h e l l o)" do
|
109
|
+
Diff::LCS::patch(hello_ary, Diff::LCS.sdiff(hello_ary, hello_ary)).should == hello_ary
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
93
113
|
describe "with default diff callbacks (DiffCallbacks)" do
|
94
114
|
describe "forward (s1 -> s2)" do
|
95
115
|
it_has_behavior "patch sequences correctly" do
|
@@ -169,15 +189,16 @@ describe "Diff::LCS.patch" do
|
|
169
189
|
@patch_set_s2_s1 = Diff::LCS.diff(@s2, @s1)
|
170
190
|
end
|
171
191
|
|
172
|
-
it "
|
173
|
-
# It should, but it doesn't.
|
192
|
+
it "should autodiscover s1 to s2 patches" do
|
174
193
|
expect do
|
175
194
|
Diff::LCS.patch(@s1, @patch_set_s1_s2).should == @s2
|
176
|
-
end.
|
195
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
196
|
+
end
|
177
197
|
|
198
|
+
it "should autodiscover s2 to s1 patches" do
|
178
199
|
expect do
|
179
200
|
Diff::LCS.patch(@s1, @patch_set_s2_s1).should == @s2
|
180
|
-
end.
|
201
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
181
202
|
end
|
182
203
|
|
183
204
|
it "should autodiscover s2 to s1 the left-to-right patches" do
|
@@ -206,15 +227,16 @@ describe "Diff::LCS.patch" do
|
|
206
227
|
@patch_set_s2_s1 = Diff::LCS.diff(@s2, @s1, Diff::LCS::ContextDiffCallbacks)
|
207
228
|
end
|
208
229
|
|
209
|
-
it "
|
210
|
-
# It should, but it doesn't.
|
230
|
+
it "should autodiscover s1 to s2 patches" do
|
211
231
|
expect do
|
212
232
|
Diff::LCS.patch(@s1, @patch_set_s1_s2).should == @s2
|
213
|
-
end.
|
233
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
234
|
+
end
|
214
235
|
|
236
|
+
it "should autodiscover s2 to s1 patches" do
|
215
237
|
expect do
|
216
238
|
Diff::LCS.patch(@s1, @patch_set_s2_s1).should == @s2
|
217
|
-
end.
|
239
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
218
240
|
end
|
219
241
|
|
220
242
|
it "should autodiscover s2 to s1 the left-to-right patches" do
|
@@ -243,15 +265,16 @@ describe "Diff::LCS.patch" do
|
|
243
265
|
@patch_set_s2_s1 = Diff::LCS.diff(@s2, @s1, Diff::LCS::SDiffCallbacks)
|
244
266
|
end
|
245
267
|
|
246
|
-
it "
|
247
|
-
# It should, but it doesn't.
|
268
|
+
it "should autodiscover s1 to s2 patches" do
|
248
269
|
expect do
|
249
270
|
Diff::LCS.patch(@s1, @patch_set_s1_s2).should == @s2
|
250
|
-
end.
|
271
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
272
|
+
end
|
251
273
|
|
274
|
+
it "should autodiscover s2 to s1 patches" do
|
252
275
|
expect do
|
253
276
|
Diff::LCS.patch(@s1, @patch_set_s2_s1).should == @s2
|
254
|
-
end.
|
277
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
255
278
|
end
|
256
279
|
|
257
280
|
it "should autodiscover s2 to s1 the left-to-right patches" do
|
@@ -280,15 +303,16 @@ describe "Diff::LCS.patch" do
|
|
280
303
|
@patch_set_s2_s1 = Diff::LCS.sdiff(@s2, @s1)
|
281
304
|
end
|
282
305
|
|
283
|
-
it "
|
284
|
-
# It should, but it doesn't.
|
306
|
+
it "should autodiscover s1 to s2 patches" do
|
285
307
|
expect do
|
286
308
|
Diff::LCS.patch(@s1, @patch_set_s1_s2).should == @s2
|
287
|
-
end.
|
309
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
310
|
+
end
|
288
311
|
|
312
|
+
it "should autodiscover s2 to s1 patches" do
|
289
313
|
expect do
|
290
314
|
Diff::LCS.patch(@s1, @patch_set_s2_s1).should == @s2
|
291
|
-
end.
|
315
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
292
316
|
end
|
293
317
|
|
294
318
|
it "should autodiscover s2 to s1 the left-to-right patches" do
|
@@ -296,7 +320,7 @@ describe "Diff::LCS.patch" do
|
|
296
320
|
Diff::LCS.patch(@s2, @patch_set_s1_s2).should == @s1
|
297
321
|
end
|
298
322
|
|
299
|
-
it "should correctly patch left-to-right (explicit patch)" do
|
323
|
+
it "should correctly patch left-to-right (explicit patch)", :only => true do
|
300
324
|
Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch).should == @s2
|
301
325
|
Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch).should == @s1
|
302
326
|
Diff::LCS.patch!(@s1, @patch_set_s1_s2).should == @s2
|
@@ -317,15 +341,16 @@ describe "Diff::LCS.patch" do
|
|
317
341
|
@patch_set_s2_s1 = Diff::LCS.sdiff(@s2, @s1, Diff::LCS::ContextDiffCallbacks)
|
318
342
|
end
|
319
343
|
|
320
|
-
it "
|
321
|
-
# It should, but it doesn't.
|
344
|
+
it "should autodiscover s1 to s2 patches" do
|
322
345
|
expect do
|
323
346
|
Diff::LCS.patch(@s1, @patch_set_s1_s2).should == @s2
|
324
|
-
end.
|
347
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
348
|
+
end
|
325
349
|
|
350
|
+
it "should autodiscover s2 to s1 patches" do
|
326
351
|
expect do
|
327
352
|
Diff::LCS.patch(@s1, @patch_set_s2_s1).should == @s2
|
328
|
-
end.
|
353
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
329
354
|
end
|
330
355
|
|
331
356
|
it "should autodiscover s2 to s1 the left-to-right patches" do
|
@@ -354,15 +379,16 @@ describe "Diff::LCS.patch" do
|
|
354
379
|
@patch_set_s2_s1 = Diff::LCS.sdiff(@s2, @s1, Diff::LCS::DiffCallbacks)
|
355
380
|
end
|
356
381
|
|
357
|
-
it "
|
358
|
-
# It should, but it doesn't.
|
382
|
+
it "should autodiscover s1 to s2 patches" do
|
359
383
|
expect do
|
360
384
|
Diff::LCS.patch(@s1, @patch_set_s1_s2).should == @s2
|
361
|
-
end.
|
385
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
386
|
+
end
|
362
387
|
|
388
|
+
it "should autodiscover s2 to s1 patches" do
|
363
389
|
expect do
|
364
390
|
Diff::LCS.patch(@s1, @patch_set_s2_s1).should == @s2
|
365
|
-
end.
|
391
|
+
end.to_not raise_error(RuntimeError, /provided patchset/)
|
366
392
|
end
|
367
393
|
|
368
394
|
it "should autodiscover s2 to s1 the left-to-right patches" do
|
@@ -386,5 +412,3 @@ describe "Diff::LCS.patch" do
|
|
386
412
|
end
|
387
413
|
end
|
388
414
|
end
|
389
|
-
|
390
|
-
# vim: ft=ruby
|
data/spec/sdiff_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -12,6 +12,14 @@ $:.unshift parent.join('lib')
|
|
12
12
|
require 'diff-lcs'
|
13
13
|
|
14
14
|
module Diff::LCS::SpecHelper
|
15
|
+
def hello
|
16
|
+
"hello"
|
17
|
+
end
|
18
|
+
|
19
|
+
def hello_ary
|
20
|
+
%W(h e l l o)
|
21
|
+
end
|
22
|
+
|
15
23
|
def seq1
|
16
24
|
%w(a b c e h j l m n p)
|
17
25
|
end
|
@@ -159,7 +167,6 @@ module Diff::LCS::SpecHelper
|
|
159
167
|
new_result
|
160
168
|
end
|
161
169
|
|
162
|
-
|
163
170
|
def simple_callback
|
164
171
|
callbacks = Object.new
|
165
172
|
class << callbacks
|
@@ -279,6 +286,5 @@ end
|
|
279
286
|
RSpec.configure do |conf|
|
280
287
|
conf.include Diff::LCS::SpecHelper
|
281
288
|
conf.alias_it_should_behave_like_to :it_has_behavior, 'has behavior:'
|
289
|
+
conf.filter_run_excluding :broken => true
|
282
290
|
end
|
283
|
-
|
284
|
-
# vim: ft=ruby
|
@@ -29,6 +29,32 @@ describe "Diff::LCS.traverse_balanced" do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
describe "identical string sequences ('abc')" do
|
33
|
+
s1 = s2 = "abc"
|
34
|
+
|
35
|
+
result = [
|
36
|
+
[ '=', 0, 0 ],
|
37
|
+
[ '=', 1, 1 ],
|
38
|
+
[ '=', 2, 2 ]
|
39
|
+
]
|
40
|
+
|
41
|
+
it_has_behavior "with a #change callback", s1, s2, result
|
42
|
+
it_has_behavior "without a #change callback", s1, s2, result
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "identical array sequences %w(a b c)" do
|
46
|
+
s1 = s2 = %w(a b c)
|
47
|
+
|
48
|
+
result = [
|
49
|
+
[ '=', 0, 0 ],
|
50
|
+
[ '=', 1, 1 ],
|
51
|
+
[ '=', 2, 2 ]
|
52
|
+
]
|
53
|
+
|
54
|
+
it_has_behavior "with a #change callback", s1, s2, result
|
55
|
+
it_has_behavior "without a #change callback", s1, s2, result
|
56
|
+
end
|
57
|
+
|
32
58
|
describe "sequences %w(a b c) & %w(a x c)" do
|
33
59
|
s1 = %w(a b c)
|
34
60
|
s2 = %w(a x c)
|
@@ -282,5 +308,3 @@ describe "Diff::LCS.traverse_balanced" do
|
|
282
308
|
it_has_behavior "without a #change callback", s1, s2, result
|
283
309
|
end
|
284
310
|
end
|
285
|
-
|
286
|
-
# vim: ft=ruby
|
@@ -4,39 +4,97 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe "Diff::LCS.traverse_sequences" do
|
6
6
|
describe "callback with no finishers" do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
describe "over (seq1, seq2)" do
|
8
|
+
before(:each) do
|
9
|
+
@callback_s1_s2 = simple_callback_no_finishers
|
10
|
+
Diff::LCS.traverse_sequences(seq1, seq2, @callback_s1_s2)
|
11
|
+
|
12
|
+
@callback_s2_s1 = simple_callback_no_finishers
|
13
|
+
Diff::LCS.traverse_sequences(seq2, seq1, @callback_s2_s1)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should have the correct LCS result on left-matches" do
|
17
|
+
@callback_s1_s2.matched_a.should == correct_lcs
|
18
|
+
@callback_s2_s1.matched_a.should == correct_lcs
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have the correct LCS result on right-matches" do
|
22
|
+
@callback_s1_s2.matched_b.should == correct_lcs
|
23
|
+
@callback_s2_s1.matched_b.should == correct_lcs
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should have the correct skipped sequences with the left sequence" do
|
27
|
+
@callback_s1_s2.discards_a.should == skipped_seq1
|
28
|
+
@callback_s2_s1.discards_a.should == skipped_seq2
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should have the correct skipped sequences with the right sequence" do
|
32
|
+
@callback_s1_s2.discards_b.should == skipped_seq2
|
33
|
+
@callback_s2_s1.discards_b.should == skipped_seq1
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should not have anything done markers from the left or right sequences" do
|
37
|
+
@callback_s1_s2.done_a.should be_empty
|
38
|
+
@callback_s1_s2.done_b.should be_empty
|
39
|
+
@callback_s2_s1.done_a.should be_empty
|
40
|
+
@callback_s2_s1.done_b.should be_empty
|
41
|
+
end
|
13
42
|
end
|
14
43
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
44
|
+
describe "over (hello, hello)" do
|
45
|
+
before(:each) do
|
46
|
+
@callback = simple_callback_no_finishers
|
47
|
+
Diff::LCS.traverse_sequences(hello, hello, @callback)
|
48
|
+
end
|
19
49
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
50
|
+
it "should have the correct LCS result on left-matches" do
|
51
|
+
@callback.matched_a.should == hello.split(//)
|
52
|
+
end
|
24
53
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
54
|
+
it "should have the correct LCS result on right-matches" do
|
55
|
+
@callback.matched_b.should == hello.split(//)
|
56
|
+
end
|
29
57
|
|
30
|
-
|
31
|
-
|
32
|
-
|
58
|
+
it "should have the correct skipped sequences with the left sequence", :only => true do
|
59
|
+
@callback.discards_a.should be_empty
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should have the correct skipped sequences with the right sequence" do
|
63
|
+
@callback.discards_b.should be_empty
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should not have anything done markers from the left or right sequences" do
|
67
|
+
@callback.done_a.should be_empty
|
68
|
+
@callback.done_b.should be_empty
|
69
|
+
end
|
33
70
|
end
|
34
71
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
72
|
+
describe "over (hello_ary, hello_ary)" do
|
73
|
+
before(:each) do
|
74
|
+
@callback = simple_callback_no_finishers
|
75
|
+
Diff::LCS.traverse_sequences(hello_ary, hello_ary, @callback)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should have the correct LCS result on left-matches" do
|
79
|
+
@callback.matched_a.should == hello_ary
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should have the correct LCS result on right-matches" do
|
83
|
+
@callback.matched_b.should == hello_ary
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should have the correct skipped sequences with the left sequence" do
|
87
|
+
@callback.discards_a.should be_empty
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should have the correct skipped sequences with the right sequence" do
|
91
|
+
@callback.discards_b.should be_empty
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should not have anything done markers from the left or right sequences" do
|
95
|
+
@callback.done_a.should be_empty
|
96
|
+
@callback.done_b.should be_empty
|
97
|
+
end
|
40
98
|
end
|
41
99
|
end
|
42
100
|
|
@@ -79,5 +137,3 @@ describe "Diff::LCS.traverse_sequences" do
|
|
79
137
|
end
|
80
138
|
end
|
81
139
|
end
|
82
|
-
|
83
|
-
# vim: ft=ruby
|