diff options
author | Austin Ziegler <austin@halostatue.ca> | 2011-07-31 15:35:30 -0400 |
---|---|---|
committer | Austin Ziegler <austin@halostatue.ca> | 2011-07-31 15:35:30 -0400 |
commit | 095afd9c321d4de8457dee91eb030c08981ee39b (patch) | |
tree | 919202e2ddbbed2519685e9fc934bab520864c6d /spec | |
parent | 340073b761d16d7ec3a0a559e0c8d706b1d2dff9 (diff) | |
download | diff-lcs-095afd9c321d4de8457dee91eb030c08981ee39b.tar.gz |
Cleaning up the specs.
Diffstat (limited to 'spec')
-rw-r--r-- | spec/diff_lcs_sdiff_spec.rb | 180 | ||||
-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.rb | 204 | ||||
-rw-r--r-- | spec/spec_helper.rb | 2 | ||||
-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 |