summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorAustin Ziegler <austin@halostatue.ca>2011-07-31 15:35:30 -0400
committerAustin Ziegler <austin@halostatue.ca>2011-07-31 15:35:30 -0400
commit095afd9c321d4de8457dee91eb030c08981ee39b (patch)
tree919202e2ddbbed2519685e9fc934bab520864c6d /spec
parent340073b761d16d7ec3a0a559e0c8d706b1d2dff9 (diff)
downloaddiff-lcs-095afd9c321d4de8457dee91eb030c08981ee39b.tar.gz
Cleaning up the specs.
Diffstat (limited to 'spec')
-rw-r--r--spec/diff_lcs_sdiff_spec.rb180
-rw-r--r--spec/diff_spec.rb (renamed from spec/diff_lcs_diff_spec.rb)8
-rw-r--r--spec/lcs_spec.rb (renamed from spec/diff_lcs_lcs_spec.rb)0
-rw-r--r--spec/patch_spec.rb (renamed from spec/diff_lcs_patch_spec.rb)282
-rw-r--r--spec/sdiff_spec.rb204
-rw-r--r--spec/spec_helper.rb2
-rw-r--r--spec/traverse_balanced_spec.rb (renamed from spec/diff_lcs_balanced_spec.rb)0
-rw-r--r--spec/traverse_sequences_spec.rb (renamed from spec/diff_lcs_sequences_spec.rb)0
8 files changed, 331 insertions, 345 deletions
diff --git a/spec/diff_lcs_sdiff_spec.rb b/spec/diff_lcs_sdiff_spec.rb
deleted file mode 100644
index b6a3f10..0000000
--- a/spec/diff_lcs_sdiff_spec.rb
+++ /dev/null
@@ -1,180 +0,0 @@
-# -*- ruby encoding: utf-8 -*-
-
-require 'spec_helper'
-
-describe "Diff::LCS.sdiff should compare sequences correctly" do
- include Diff::LCS::SpecHelper::Matchers
-
- def do_sdiff_comparison(s1, s2, forward_sdiff)
- sdiff_s1_s2 = Diff::LCS.sdiff(s1, s2)
- sdiff_s2_s1 = Diff::LCS.sdiff(s2, s1)
-
- sdiff_s1_s2.should == context_diff(forward_sdiff)
- sdiff_s2_s1.should == context_diff(reverse_sdiff(forward_sdiff))
- end
-
- it "sequence-a" do
- do_sdiff_comparison(seq1, seq2, correct_forward_sdiff)
- end
-
- it "sequence-b" do
- s1 = %w(abc def yyy xxx ghi jkl)
- s2 = %w(abc dxf xxx ghi jkl)
- forward_sdiff = [
- [ '=', [ 0, 'abc' ], [ 0, 'abc' ] ],
- [ '!', [ 1, 'def' ], [ 1, 'dxf' ] ],
- [ '-', [ 2, 'yyy' ], [ 2, nil ] ],
- [ '=', [ 3, 'xxx' ], [ 2, 'xxx' ] ],
- [ '=', [ 4, 'ghi' ], [ 3, 'ghi' ] ],
- [ '=', [ 5, 'jkl' ], [ 4, 'jkl' ] ]
- ]
-
- do_sdiff_comparison(s1, s2, forward_sdiff)
- end
-
- it "sequence-c" do
- s1 = %w(a b c d e)
- s2 = %w(a e)
- forward_sdiff = [
- [ '=', [ 0, 'a' ], [ 0, 'a' ] ],
- [ '-', [ 1, 'b' ], [ 1, nil ] ],
- [ '-', [ 2, 'c' ], [ 1, nil ] ],
- [ '-', [ 3, 'd' ], [ 1, nil ] ],
- [ '=', [ 4, 'e' ], [ 1, 'e' ] ] ]
- do_sdiff_comparison(s1, s2, forward_sdiff)
- end
-
- it "sequence-d" do
- s1 = %w(a e)
- s2 = %w(a b c d e)
- forward_sdiff = [
- [ '=', [ 0, 'a' ], [ 0, 'a' ] ],
- [ '+', [ 1, nil ], [ 1, 'b' ] ],
- [ '+', [ 1, nil ], [ 2, 'c' ] ],
- [ '+', [ 1, nil ], [ 3, 'd' ] ],
- [ '=', [ 1, 'e' ], [ 4, 'e' ] ] ]
- do_sdiff_comparison(s1, s2, forward_sdiff)
- end
-
- it "sequence-e" do
- s1 = %w(v x a e)
- s2 = %w(w y a b c d e)
- forward_sdiff = [
- [ '!', [ 0, 'v' ], [ 0, 'w' ] ],
- [ '!', [ 1, 'x' ], [ 1, 'y' ] ],
- [ '=', [ 2, 'a' ], [ 2, 'a' ] ],
- [ '+', [ 3, nil ], [ 3, 'b' ] ],
- [ '+', [ 3, nil ], [ 4, 'c' ] ],
- [ '+', [ 3, nil ], [ 5, 'd' ] ],
- [ '=', [ 3, 'e' ], [ 6, 'e' ] ] ]
- do_sdiff_comparison(s1, s2, forward_sdiff)
- end
-
- it "sequence-f" do
- s1 = %w(x a e)
- s2 = %w(a b c d e)
- forward_sdiff = [
- [ '-', [ 0, 'x' ], [ 0, nil ] ],
- [ '=', [ 1, 'a' ], [ 0, 'a' ] ],
- [ '+', [ 2, nil ], [ 1, 'b' ] ],
- [ '+', [ 2, nil ], [ 2, 'c' ] ],
- [ '+', [ 2, nil ], [ 3, 'd' ] ],
- [ '=', [ 2, 'e' ], [ 4, 'e' ] ] ]
- do_sdiff_comparison(s1, s2, forward_sdiff)
- end
-
- it "sequence-g" do
- s1 = %w(a e)
- s2 = %w(x a b c d e)
- forward_sdiff = [
- [ '+', [ 0, nil ], [ 0, 'x' ] ],
- [ '=', [ 0, 'a' ], [ 1, 'a' ] ],
- [ '+', [ 1, nil ], [ 2, 'b' ] ],
- [ '+', [ 1, nil ], [ 3, 'c' ] ],
- [ '+', [ 1, nil ], [ 4, 'd' ] ],
- [ '=', [ 1, 'e' ], [ 5, 'e' ] ] ]
- do_sdiff_comparison(s1, s2, forward_sdiff)
- end
-
- it "sequence-h" do
- s1 = %w(a e v)
- s2 = %w(x a b c d e w x)
- forward_sdiff = [
- [ '+', [ 0, nil ], [ 0, 'x' ] ],
- [ '=', [ 0, 'a' ], [ 1, 'a' ] ],
- [ '+', [ 1, nil ], [ 2, 'b' ] ],
- [ '+', [ 1, nil ], [ 3, 'c' ] ],
- [ '+', [ 1, nil ], [ 4, 'd' ] ],
- [ '=', [ 1, 'e' ], [ 5, 'e' ] ],
- [ '!', [ 2, 'v' ], [ 6, 'w' ] ],
- [ '+', [ 3, nil ], [ 7, 'x' ] ] ]
- do_sdiff_comparison(s1, s2, forward_sdiff)
- end
-
- it "sequence-i" do
- s1 = %w()
- s2 = %w(a b c)
- forward_sdiff = [
- [ '+', [ 0, nil ], [ 0, 'a' ] ],
- [ '+', [ 0, nil ], [ 1, 'b' ] ],
- [ '+', [ 0, nil ], [ 2, 'c' ] ] ]
- do_sdiff_comparison(s1, s2, forward_sdiff)
- end
-
- it "sequence-j" do
- s1 = %w(a b c)
- s2 = %w()
- forward_sdiff = [
- [ '-', [ 0, 'a' ], [ 0, nil ] ],
- [ '-', [ 1, 'b' ], [ 0, nil ] ],
- [ '-', [ 2, 'c' ], [ 0, nil ] ] ]
- do_sdiff_comparison(s1, s2, forward_sdiff)
- end
-
- it "sequence-k" do
- s1 = %w(a b c)
- s2 = %w(1)
- forward_sdiff = [
- [ '!', [ 0, 'a' ], [ 0, '1' ] ],
- [ '-', [ 1, 'b' ], [ 1, nil ] ],
- [ '-', [ 2, 'c' ], [ 1, nil ] ] ]
- do_sdiff_comparison(s1, s2, forward_sdiff)
- end
-
- it "sequence-l" do
- s1 = %w(a b c)
- s2 = %w(c)
- forward_sdiff = [
- [ '-', [ 0, 'a' ], [ 0, nil ] ],
- [ '-', [ 1, 'b' ], [ 0, nil ] ],
- [ '=', [ 2, 'c' ], [ 0, 'c' ] ]
- ]
- do_sdiff_comparison(s1, s2, forward_sdiff)
- end
-
- it "sequence-m" do
- s1 = %w(abcd efgh ijkl mnop)
- s2 = []
- forward_sdiff = [
- [ '-', [ 0, 'abcd' ], [ 0, nil ] ],
- [ '-', [ 1, 'efgh' ], [ 0, nil ] ],
- [ '-', [ 2, 'ijkl' ], [ 0, nil ] ],
- [ '-', [ 3, 'mnop' ], [ 0, nil ] ]
- ]
- do_sdiff_comparison(s1, s2, forward_sdiff)
- end
-
- it "sequence-n" do
- s1 = []
- s2 = %w(abcd efgh ijkl mnop)
- forward_sdiff = [
- [ '+', [ 0, nil ], [ 0, 'abcd' ] ],
- [ '+', [ 0, nil ], [ 1, 'efgh' ] ],
- [ '+', [ 0, nil ], [ 2, 'ijkl' ] ],
- [ '+', [ 0, nil ], [ 3, 'mnop' ] ]
- ]
- do_sdiff_comparison(s1, s2, forward_sdiff)
- end
-end
-
-# vim: ft=ruby
diff --git a/spec/diff_lcs_diff_spec.rb b/spec/diff_spec.rb
index 43ea5c7..d2c78a2 100644
--- a/spec/diff_lcs_diff_spec.rb
+++ b/spec/diff_spec.rb
@@ -5,11 +5,13 @@ require 'spec_helper'
describe "Diff::LCS.diff" do
include Diff::LCS::SpecHelper::Matchers
- it "should correctly diff the sequences" do
+ it "should correctly diff seq1 to seq2" do
diff_s1_s2 = Diff::LCS.diff(seq1, seq2)
- diff_s2_s1 = Diff::LCS.diff(seq2, seq1)
-
change_diff(correct_forward_diff).should == diff_s1_s2
+ end
+
+ it "should correctly diff seq2 to seq1" do
+ diff_s2_s1 = Diff::LCS.diff(seq2, seq1)
change_diff(correct_backward_diff).should == diff_s2_s1
end
diff --git a/spec/diff_lcs_lcs_spec.rb b/spec/lcs_spec.rb
index c95ba61..c95ba61 100644
--- a/spec/diff_lcs_lcs_spec.rb
+++ b/spec/lcs_spec.rb
diff --git a/spec/diff_lcs_patch_spec.rb b/spec/patch_spec.rb
index 7e480e0..4be8b05 100644
--- a/spec/diff_lcs_patch_spec.rb
+++ b/spec/patch_spec.rb
@@ -5,196 +5,158 @@ require 'spec_helper'
describe "Diff::LCS.patch" do
include Diff::LCS::SpecHelper::Matchers
- describe "using a Diff::LCS.diff patchset" do
- describe "with default diff callbacks (DiffCallbacks)" do
- before(:each) do
- @patch_set_s1_s2 = Diff::LCS.diff(seq1, seq2)
- @patch_set_s2_s1 = Diff::LCS.diff(seq2, seq1)
- end
-
- it "should correctly patch left-to-right (patch autodiscovery)" do
- Diff::LCS.patch(seq1, @patch_set_s1_s2).should == seq2
- Diff::LCS.patch(seq2, @patch_set_s2_s1).should == seq1
- end
-
- it "should correctly patch left-to-right (explicit patch)" do
- Diff::LCS.patch(seq1, @patch_set_s1_s2, :patch).should == seq2
- Diff::LCS.patch(seq2, @patch_set_s2_s1, :patch).should == seq1
- Diff::LCS.patch!(seq1, @patch_set_s1_s2).should == seq2
- Diff::LCS.patch!(seq2, @patch_set_s2_s1).should == seq1
- end
-
- it "should correctly patch right-to-left (unpatch autodiscovery)" do
- Diff::LCS.patch(seq2, @patch_set_s1_s2).should == seq1
- Diff::LCS.patch(seq1, @patch_set_s2_s1).should == seq2
- end
+ shared_examples "patch sequences correctly" do
+ it "should correctly patch left-to-right (patch autodiscovery)" do
+ Diff::LCS.patch(s1, patch_set).should == s2
+ end
- it "should correctly patch right-to-left (explicit unpatch)" do
- Diff::LCS.patch(seq2, @patch_set_s1_s2, :unpatch).should == seq1
- Diff::LCS.patch(seq1, @patch_set_s2_s1, :unpatch).should == seq2
- Diff::LCS.unpatch!(seq2, @patch_set_s1_s2).should == seq1
- Diff::LCS.unpatch!(seq1, @patch_set_s2_s1).should == seq2
- end
+ it "should correctly patch left-to-right (explicit patch)" do
+ Diff::LCS.patch(s1, patch_set, :patch).should == s2
+ Diff::LCS.patch!(s1, patch_set).should == s2
end
- describe "with context diff callbacks (ContextDiffCallbacks)" do
- before(:each) do
- @patch_set_s1_s2 = Diff::LCS.diff(seq1, seq2, Diff::LCS::ContextDiffCallbacks)
- @patch_set_s2_s1 = Diff::LCS.diff(seq2, seq1, Diff::LCS::ContextDiffCallbacks)
- end
+ it "should correctly patch right-to-left (unpatch autodiscovery)" do
+ Diff::LCS.patch(s2, patch_set).should == s1
+ end
- it "should correctly patch left-to-right (patch autodiscovery)" do
- Diff::LCS.patch(seq1, @patch_set_s1_s2).should == seq2
- Diff::LCS.patch(seq2, @patch_set_s2_s1).should == seq1
- end
+ it "should correctly patch right-to-left (explicit unpatch)" do
+ Diff::LCS.patch(s2, patch_set, :unpatch).should == s1
+ Diff::LCS.unpatch!(s2, patch_set).should == s1
+ end
+ end
- it "should correctly patch left-to-right (explicit patch)" do
- Diff::LCS.patch(seq1, @patch_set_s1_s2, :patch).should == seq2
- Diff::LCS.patch(seq2, @patch_set_s2_s1, :patch).should == seq1
- Diff::LCS.patch!(seq1, @patch_set_s1_s2).should == seq2
- Diff::LCS.patch!(seq2, @patch_set_s2_s1).should == seq1
+ describe "using a Diff::LCS.diff patchset" do
+ describe "with default diff callbacks (DiffCallbacks)" do
+ describe "forward (s1 -> s2)" do
+ it_should_behave_like "patch sequences correctly" do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:patch_set) { Diff::LCS.diff(seq1, seq2) }
+ end
end
- it "should correctly patch right-to-left (unpatch autodiscovery)" do
- Diff::LCS.patch(seq2, @patch_set_s1_s2).should == seq1
- Diff::LCS.patch(seq1, @patch_set_s2_s1).should == seq2
+ describe "reverse (s2 -> s1)" do
+ it_should_behave_like "patch sequences correctly" do
+ let(:s1) { seq2 }
+ let(:s2) { seq1 }
+ let(:patch_set) { Diff::LCS.diff(seq2, seq1) }
+ end
end
+ end
- it "should correctly patch right-to-left (explicit unpatch)" do
- Diff::LCS.patch(seq2, @patch_set_s1_s2, :unpatch).should == seq1
- Diff::LCS.patch(seq1, @patch_set_s2_s1, :unpatch).should == seq2
- Diff::LCS.unpatch!(seq2, @patch_set_s1_s2).should == seq1
- Diff::LCS.unpatch!(seq1, @patch_set_s2_s1).should == seq2
+ describe "with context diff callbacks (ContextDiffCallbacks)" do
+ describe "forward (s1 -> s2)" do
+ it_should_behave_like "patch sequences correctly" do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:patch_set) {
+ Diff::LCS.diff(seq1, seq2, Diff::LCS::ContextDiffCallbacks)
+ }
+ end
+ end
+
+ describe "reverse (s2 -> s1)" do
+ it_should_behave_like "patch sequences correctly" do
+ let(:s1) { seq2 }
+ let(:s2) { seq1 }
+ let(:patch_set) {
+ Diff::LCS.diff(seq2, seq1, Diff::LCS::ContextDiffCallbacks)
+ }
+ end
end
end
describe "with sdiff callbacks (SDiffCallbacks)" do
- before(:each) do
- @patch_set_s1_s2 = Diff::LCS.diff(seq1, seq2, Diff::LCS::SDiffCallbacks)
- @patch_set_s2_s1 = Diff::LCS.diff(seq2, seq1, Diff::LCS::SDiffCallbacks)
- end
-
- it "should correctly patch left-to-right (patch autodiscovery)" do
- Diff::LCS.patch(seq1, @patch_set_s1_s2).should == seq2
- Diff::LCS.patch(seq2, @patch_set_s2_s1).should == seq1
- end
-
- it "should correctly patch left-to-right (explicit patch)" do
- Diff::LCS.patch(seq1, @patch_set_s1_s2, :patch).should == seq2
- Diff::LCS.patch(seq2, @patch_set_s2_s1, :patch).should == seq1
- Diff::LCS.patch!(seq1, @patch_set_s1_s2).should == seq2
- Diff::LCS.patch!(seq2, @patch_set_s2_s1).should == seq1
- end
-
- it "should correctly patch right-to-left (unpatch autodiscovery)" do
- Diff::LCS.patch(seq2, @patch_set_s1_s2).should == seq1
- Diff::LCS.patch(seq1, @patch_set_s2_s1).should == seq2
- end
-
- it "should correctly patch right-to-left (explicit unpatch)" do
- Diff::LCS.patch(seq2, @patch_set_s1_s2, :unpatch).should == seq1
- Diff::LCS.patch(seq1, @patch_set_s2_s1, :unpatch).should == seq2
- Diff::LCS.unpatch!(seq2, @patch_set_s1_s2).should == seq1
- Diff::LCS.unpatch!(seq1, @patch_set_s2_s1).should == seq2
+ describe "forward (s1 -> s2)" do
+ it_should_behave_like "patch sequences correctly" do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:patch_set) {
+ Diff::LCS.diff(seq1, seq2, Diff::LCS::SDiffCallbacks)
+ }
+ end
+ end
+
+ describe "reverse (s2 -> s1)" do
+ it_should_behave_like "patch sequences correctly" do
+ let(:s1) { seq2 }
+ let(:s2) { seq1 }
+ let(:patch_set) {
+ Diff::LCS.diff(seq2, seq1, Diff::LCS::SDiffCallbacks)
+ }
+ end
end
end
end
describe "using a Diff::LCS.sdiff patchset" do
describe "with default diff callbacks (DiffCallbacks)" do
- before(:each) do
- @patch_set_s1_s2 = Diff::LCS.sdiff(seq1, seq2, Diff::LCS::DiffCallbacks)
- @patch_set_s2_s1 = Diff::LCS.sdiff(seq2, seq1, Diff::LCS::DiffCallbacks)
- end
-
- it "should correctly patch left-to-right (patch autodiscovery)" do
- Diff::LCS.patch(seq1, @patch_set_s1_s2).should == seq2
- Diff::LCS.patch(seq2, @patch_set_s2_s1).should == seq1
- end
-
- it "should correctly patch left-to-right (explicit patch)" do
- Diff::LCS.patch(seq1, @patch_set_s1_s2, :patch).should == seq2
- Diff::LCS.patch(seq2, @patch_set_s2_s1, :patch).should == seq1
- Diff::LCS.patch!(seq1, @patch_set_s1_s2).should == seq2
- Diff::LCS.patch!(seq2, @patch_set_s2_s1).should == seq1
- end
-
- it "should correctly patch right-to-left (unpatch autodiscovery)" do
- Diff::LCS.patch(seq2, @patch_set_s1_s2).should == seq1
- Diff::LCS.patch(seq1, @patch_set_s2_s1).should == seq2
- end
-
- it "should correctly patch right-to-left (explicit unpatch)" do
- Diff::LCS.patch(seq2, @patch_set_s1_s2, :unpatch).should == seq1
- Diff::LCS.patch(seq1, @patch_set_s2_s1, :unpatch).should == seq2
- Diff::LCS.unpatch!(seq2, @patch_set_s1_s2).should == seq1
- Diff::LCS.unpatch!(seq1, @patch_set_s2_s1).should == seq2
+ describe "forward (s1 -> s2)" do
+ it_should_behave_like "patch sequences correctly" do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:patch_set) {
+ Diff::LCS.sdiff(seq1, seq2, Diff::LCS::DiffCallbacks)
+ }
+ end
+ end
+
+ describe "reverse (s2 -> s1)" do
+ it_should_behave_like "patch sequences correctly" do
+ let(:s1) { seq2 }
+ let(:s2) { seq1 }
+ let(:patch_set) {
+ Diff::LCS.sdiff(seq2, seq1, Diff::LCS::DiffCallbacks)
+ }
+ end
end
end
- describe "with context diff callbacks (ContextDiffCallbacks)" do
- before(:each) do
- @patch_set_s1_s2 = Diff::LCS.sdiff(seq1, seq2, Diff::LCS::ContextDiffCallbacks)
- @patch_set_s2_s1 = Diff::LCS.sdiff(seq2, seq1, Diff::LCS::ContextDiffCallbacks)
- end
-
- it "should correctly patch left-to-right (patch autodiscovery)" do
- Diff::LCS.patch(seq1, @patch_set_s1_s2).should == seq2
- Diff::LCS.patch(seq2, @patch_set_s2_s1).should == seq1
- end
-
- it "should correctly patch left-to-right (explicit patch)" do
- Diff::LCS.patch(seq1, @patch_set_s1_s2, :patch).should == seq2
- Diff::LCS.patch(seq2, @patch_set_s2_s1, :patch).should == seq1
- Diff::LCS.patch!(seq1, @patch_set_s1_s2).should == seq2
- Diff::LCS.patch!(seq2, @patch_set_s2_s1).should == seq1
- end
-
- it "should correctly patch right-to-left (unpatch autodiscovery)" do
- Diff::LCS.patch(seq2, @patch_set_s1_s2).should == seq1
- Diff::LCS.patch(seq1, @patch_set_s2_s1).should == seq2
- end
-
- it "should correctly patch right-to-left (explicit unpatch)" do
- Diff::LCS.patch(seq2, @patch_set_s1_s2, :unpatch).should == seq1
- Diff::LCS.patch(seq1, @patch_set_s2_s1, :unpatch).should == seq2
- Diff::LCS.unpatch!(seq2, @patch_set_s1_s2).should == seq1
- Diff::LCS.unpatch!(seq1, @patch_set_s2_s1).should == seq2
+ describe "with context diff callbacks (DiffCallbacks)" do
+ describe "forward (s1 -> s2)" do
+ it_should_behave_like "patch sequences correctly" do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:patch_set) {
+ Diff::LCS.sdiff(seq1, seq2, Diff::LCS::ContextDiffCallbacks)
+ }
+ end
+ end
+
+ describe "reverse (s2 -> s1)" do
+ it_should_behave_like "patch sequences correctly" do
+ let(:s1) { seq2 }
+ let(:s2) { seq1 }
+ let(:patch_set) {
+ Diff::LCS.sdiff(seq2, seq1, Diff::LCS::ContextDiffCallbacks)
+ }
+ end
end
end
- describe "with sdiff callbacks" do
- before(:each) do
- @patch_set_s1_s2 = Diff::LCS.sdiff(seq1, seq2)
- @patch_set_s2_s1 = Diff::LCS.sdiff(seq2, seq1)
- end
-
- it "should correctly patch left-to-right (patch autodiscovery)" do
- Diff::LCS.patch(seq1, @patch_set_s1_s2).should == seq2
- Diff::LCS.patch(seq2, @patch_set_s2_s1).should == seq1
- end
-
- it "should correctly patch left-to-right (explicit patch)" do
- Diff::LCS.patch(seq1, @patch_set_s1_s2, :patch).should == seq2
- Diff::LCS.patch(seq2, @patch_set_s2_s1, :patch).should == seq1
- Diff::LCS.patch!(seq1, @patch_set_s1_s2).should == seq2
- Diff::LCS.patch!(seq2, @patch_set_s2_s1).should == seq1
- end
-
- it "should correctly patch right-to-left (unpatch autodiscovery)" do
- Diff::LCS.patch(seq2, @patch_set_s1_s2).should == seq1
- Diff::LCS.patch(seq1, @patch_set_s2_s1).should == seq2
+ describe "with sdiff callbacks (SDiffCallbacks)" do
+ describe "forward (s1 -> s2)" do
+ it_should_behave_like "patch sequences correctly" do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:patch_set) { Diff::LCS.sdiff(seq1, seq2) }
+ end
end
- it "should correctly patch right-to-left (explicit unpatch)" do
- Diff::LCS.patch(seq2, @patch_set_s1_s2, :unpatch).should == seq1
- Diff::LCS.patch(seq1, @patch_set_s2_s1, :unpatch).should == seq2
- Diff::LCS.unpatch!(seq2, @patch_set_s1_s2).should == seq1
- Diff::LCS.unpatch!(seq1, @patch_set_s2_s1).should == seq2
+ describe "reverse (s2 -> s1)" do
+ it_should_behave_like "patch sequences correctly" do
+ let(:s1) { seq2 }
+ let(:s2) { seq1 }
+ let(:patch_set) { Diff::LCS.sdiff(seq2, seq1) }
+ end
end
end
end
+ # Note: because of the error in autodiscovery ("does not autodiscover s1
+ # to s2 patches"), this cannot use the "patch sequences correctly" shared
+ # set. Once the bug in autodiscovery is fixed, this can be converted as
+ # above.
describe "fix bug 891: patchsets do not contain the last equal part" do
before(:each) do
@s1 = %w(a b c d e f g h i j k)
@@ -386,7 +348,7 @@ describe "Diff::LCS.patch" do
end
end
- describe "using Diff::LCS.xdiff with default diff callbacks" do
+ describe "using Diff::LCS.sdiff with default diff callbacks" do
before(:each) do
@patch_set_s1_s2 = Diff::LCS.sdiff(@s1, @s2, Diff::LCS::DiffCallbacks)
@patch_set_s2_s1 = Diff::LCS.sdiff(@s2, @s1, Diff::LCS::DiffCallbacks)
diff --git a/spec/sdiff_spec.rb b/spec/sdiff_spec.rb
new file mode 100644
index 0000000..f174c35
--- /dev/null
+++ b/spec/sdiff_spec.rb
@@ -0,0 +1,204 @@
+# -*- ruby encoding: utf-8 -*-
+
+require 'spec_helper'
+
+describe "Diff::LCS.sdiff" do
+ include Diff::LCS::SpecHelper::Matchers
+
+ shared_examples "compare sequences correctly" do
+ it "should compare s1 -> s2 correctly" do
+ Diff::LCS.sdiff(s1, s2).should == context_diff(result)
+ end
+
+ it "should compare s2 -> s1 correctly" do
+ Diff::LCS.sdiff(s2, s1).should == context_diff(reverse_sdiff(result))
+ end
+ end
+
+ describe "using seq1 & seq2" do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:result) { correct_forward_sdiff }
+
+ it_should_behave_like "compare sequences correctly"
+ end
+
+ describe "using %w(abc def yyy xxx ghi jkl) & %w(abc dxf xxx ghi jkl)" do
+ let(:s1) { %w(abc def yyy xxx ghi jkl) }
+ let(:s2) { %w(abc dxf xxx ghi jkl) }
+ let(:result) {
+ [
+ [ '=', [ 0, 'abc' ], [ 0, 'abc' ] ],
+ [ '!', [ 1, 'def' ], [ 1, 'dxf' ] ],
+ [ '-', [ 2, 'yyy' ], [ 2, nil ] ],
+ [ '=', [ 3, 'xxx' ], [ 2, 'xxx' ] ],
+ [ '=', [ 4, 'ghi' ], [ 3, 'ghi' ] ],
+ [ '=', [ 5, 'jkl' ], [ 4, 'jkl' ] ]
+ ]
+ }
+
+ it_should_behave_like "compare sequences correctly"
+ end
+
+ describe "using %w(a b c d e) & %w(a e)" do
+ let(:s1) { %w(a b c d e) }
+ let(:s2) { %w(a e) }
+ let(:result) {
+ [
+ [ '=', [ 0, 'a' ], [ 0, 'a' ] ],
+ [ '-', [ 1, 'b' ], [ 1, nil ] ],
+ [ '-', [ 2, 'c' ], [ 1, nil ] ],
+ [ '-', [ 3, 'd' ], [ 1, nil ] ],
+ [ '=', [ 4, 'e' ], [ 1, 'e' ] ]
+ ]
+ }
+
+ it_should_behave_like "compare sequences correctly"
+ end
+
+ describe "using %w(a e) & %w(a b c d e)" do
+ let(:s1) { %w(a e) }
+ let(:s2) { %w(a b c d e) }
+ let(:result) {
+ [
+ [ '=', [ 0, 'a' ], [ 0, 'a' ] ],
+ [ '+', [ 1, nil ], [ 1, 'b' ] ],
+ [ '+', [ 1, nil ], [ 2, 'c' ] ],
+ [ '+', [ 1, nil ], [ 3, 'd' ] ],
+ [ '=', [ 1, 'e' ], [ 4, 'e' ] ]
+ ]
+ }
+
+ it_should_behave_like "compare sequences correctly"
+ end
+
+ describe "using %w(v x a e) & %w(w y a b c d e)" do
+ let(:s1) { %w(v x a e) }
+ let(:s2) { %w(w y a b c d e) }
+ let(:result) {
+ [
+ [ '!', [ 0, 'v' ], [ 0, 'w' ] ],
+ [ '!', [ 1, 'x' ], [ 1, 'y' ] ],
+ [ '=', [ 2, 'a' ], [ 2, 'a' ] ],
+ [ '+', [ 3, nil ], [ 3, 'b' ] ],
+ [ '+', [ 3, nil ], [ 4, 'c' ] ],
+ [ '+', [ 3, nil ], [ 5, 'd' ] ],
+ [ '=', [ 3, 'e' ], [ 6, 'e' ] ]
+ ]
+ }
+
+ it_should_behave_like "compare sequences correctly"
+ end
+
+ describe "using %w(x a e) & %w(a b c d e)" do
+ let(:s1) { %w(x a e) }
+ let(:s2) { %w(a b c d e) }
+ let(:result) {
+ [
+ [ '-', [ 0, 'x' ], [ 0, nil ] ],
+ [ '=', [ 1, 'a' ], [ 0, 'a' ] ],
+ [ '+', [ 2, nil ], [ 1, 'b' ] ],
+ [ '+', [ 2, nil ], [ 2, 'c' ] ],
+ [ '+', [ 2, nil ], [ 3, 'd' ] ],
+ [ '=', [ 2, 'e' ], [ 4, 'e' ] ]
+ ]
+ }
+
+ it_should_behave_like "compare sequences correctly"
+ end
+
+ describe "using %w(a e) & %w(x a b c d e)" do
+ let(:s1) { %w(a e) }
+ let(:s2) { %w(x a b c d e) }
+ let(:result) {
+ [
+ [ '+', [ 0, nil ], [ 0, 'x' ] ],
+ [ '=', [ 0, 'a' ], [ 1, 'a' ] ],
+ [ '+', [ 1, nil ], [ 2, 'b' ] ],
+ [ '+', [ 1, nil ], [ 3, 'c' ] ],
+ [ '+', [ 1, nil ], [ 4, 'd' ] ],
+ [ '=', [ 1, 'e' ], [ 5, 'e' ] ]
+ ]
+ }
+
+ it_should_behave_like "compare sequences correctly"
+ end
+
+ describe "using %w(a e v) & %w(x a b c d e w x)" do
+ let(:s1) { %w(a e v) }
+ let(:s2) { %w(x a b c d e w x) }
+ let(:result) {
+ [
+ [ '+', [ 0, nil ], [ 0, 'x' ] ],
+ [ '=', [ 0, 'a' ], [ 1, 'a' ] ],
+ [ '+', [ 1, nil ], [ 2, 'b' ] ],
+ [ '+', [ 1, nil ], [ 3, 'c' ] ],
+ [ '+', [ 1, nil ], [ 4, 'd' ] ],
+ [ '=', [ 1, 'e' ], [ 5, 'e' ] ],
+ [ '!', [ 2, 'v' ], [ 6, 'w' ] ],
+ [ '+', [ 3, nil ], [ 7, 'x' ] ]
+ ]
+ }
+
+ it_should_behave_like "compare sequences correctly"
+ end
+
+ describe "using %w() & %w(a b c)" do
+ let(:s1) { %w() }
+ let(:s2) { %w(a b c) }
+ let(:result) {
+ [
+ [ '+', [ 0, nil ], [ 0, 'a' ] ],
+ [ '+', [ 0, nil ], [ 1, 'b' ] ],
+ [ '+', [ 0, nil ], [ 2, 'c' ] ]
+ ]
+ }
+
+ it_should_behave_like "compare sequences correctly"
+ end
+
+ describe "using %w(a b c) & %w(1)" do
+ let(:s1) { %w(a b c) }
+ let(:s2) { %w(1) }
+ let(:result) {
+ [
+ [ '!', [ 0, 'a' ], [ 0, '1' ] ],
+ [ '-', [ 1, 'b' ], [ 1, nil ] ],
+ [ '-', [ 2, 'c' ], [ 1, nil ] ]
+ ]
+ }
+
+ it_should_behave_like "compare sequences correctly"
+ end
+
+ describe "using %w(a b c) & %w(c)" do
+ let(:s1) { %w(a b c) }
+ let(:s2) { %w(c) }
+ let(:result) {
+ [
+ [ '-', [ 0, 'a' ], [ 0, nil ] ],
+ [ '-', [ 1, 'b' ], [ 0, nil ] ],
+ [ '=', [ 2, 'c' ], [ 0, 'c' ] ]
+ ]
+ }
+
+ it_should_behave_like "compare sequences correctly"
+ end
+
+ describe "using %w(abcd efgh ijkl mnop) & []" do
+ let(:s1) { %w(abcd efgh ijkl mnop) }
+ let(:s2) { [] }
+ let(:result) {
+ [
+ [ '-', [ 0, 'abcd' ], [ 0, nil ] ],
+ [ '-', [ 1, 'efgh' ], [ 0, nil ] ],
+ [ '-', [ 2, 'ijkl' ], [ 0, nil ] ],
+ [ '-', [ 3, 'mnop' ], [ 0, nil ] ]
+ ]
+ }
+
+ it_should_behave_like "compare sequences correctly"
+ end
+end
+
+# vim: ft=ruby
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 5150b10..60ee9e9 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,8 +1,6 @@
# -*- ruby encoding: utf-8 -*-
require 'rubygems'
-require 'bundler'
-
require 'pathname'
file = Pathname.new(__FILE__).expand_path
diff --git a/spec/diff_lcs_balanced_spec.rb b/spec/traverse_balanced_spec.rb
index 1e03c5d..1e03c5d 100644
--- a/spec/diff_lcs_balanced_spec.rb
+++ b/spec/traverse_balanced_spec.rb
diff --git a/spec/diff_lcs_sequences_spec.rb b/spec/traverse_sequences_spec.rb
index c7a5558..c7a5558 100644
--- a/spec/diff_lcs_sequences_spec.rb
+++ b/spec/traverse_sequences_spec.rb