TextDiffTests.st
author Claus Gittinger <cg@exept.de>
Tue, 03 Sep 2013 14:35:08 +0200
changeset 13483 70d8b04341dc
parent 10013 09f8a872932e
child 12123 4bde08cebd48
child 13814 859a43bbea19
permissions -rw-r--r--
x

"{ Package: 'stx:libtool' }"

TestCase subclass:#TextDiffTests
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'Collections-Sequenceable-Diff'
!

TextDiffTests comment:'asdfasfsafsafsa
'
!

!TextDiffTests class methodsFor:'documentation'!

documentation
"


"
! !

!TextDiffTests methodsFor:'default'!

testForward
    |diff change first second|

    first := #( 'aaa' 'lll' ).
    second := #( 'aaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' ).
    diff := Diff new.
    diff a:first b:second.
    change := diff diff:false.
    self deny:(change = nil).
    self assert:(change deleted = 0).
    self assert:(change inserted = 2).
    self assert:(change line0 = 1).
    self assert:(change line1 = 1).
    change := change nextLink.
    self deny:(change = nil).
    self assert:(change deleted = 0).
    self assert:(change inserted = 7).
    self assert:(change line0 = 2).
    self assert:(change line1 = 4).
    self assert:(change nextLink = nil).

    "Modified: / 12-02-2010 / 14:23:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

testForward1
    "comment stating purpose of this message"
    
    |d a b result|

    a := ''.
    b := ''.
    d := Diff new.
    d a:a b:b.
    result := d diffUsingScript:(Diff::ForwardScript new).
    self assert:(result = nil).

    "Modified: / 12-02-2010 / 13:57:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

testForward10
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaaa' 'aaa' 'bbbb' 'bbb' 'aaa' 'aaa' 'aaa' 'aaa' 'ccccc' 'ccccc' ).
    b := #( 'aaa' 'aaaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
    d := Diff new.
    d a:a b:b.
    result := d diff:false.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 0).
    self assert:(result line0 = 0).
    self assert:(result line1 = 0).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 4).
    self assert:(result line0 = 2).
    self assert:(result line1 = 1).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 1).
    self assert:(result line0 = 4).
    self assert:(result line1 = 6).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 6).
    self assert:(result line1 = 9).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 2).
    self assert:(result inserted = 0).
    self assert:(result line0 = 8).
    self assert:(result line1 = 16).
    self assert:(result nextLink = nil).
!

testForward2
    "comment stating purpose of message"
    
    |d a b result|

    a := ''.
    b := #( 'aaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' ).
    d := Diff new.
    d a:a b:b.
    result := d diff:false.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 11).
    self assert:(result line0 = 0).
    self assert:(result line1 = 0).
    self assert:(result nextLink = nil).
!

testForward3
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaa' 'lll' ).
    b := ''.
    d := Diff new.
    d a:a b:b.
    result := d diff:false.
    self deny:(result = nil).
    self assert:(result deleted = 2).
    self assert:(result inserted = 0).
    self assert:(result line0 = 0).
    self assert:(result line1 = 0).
    self assert:(result nextLink = nil).
!

testForward4
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaa' 'aaa' 'aaa' 'aaa' 'aaa' ).
    b := #( 'aaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'aaa' 'aaa' 'aaa' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' ).
    d := Diff new.
    d a:a b:b.
    result := d diff:false.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 1).
    self assert:(result line1 = 1).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 6).
    self assert:(result line0 = 5).
    self assert:(result line1 = 10).
    self assert:(result nextLink = nil).
!

testForward5
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaa' 'aaa' 'aaa' 'aaa' 'aaa' 'aaa' ).
    b := #( 'aaa' 'aaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
    d := Diff new.
    d a:a b:b.
    result := d diff:false.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 2).
    self assert:(result line1 = 2).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 4).
    self assert:(result line1 = 9).
    self assert:(result nextLink = nil).
!

testForward6
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaa' 'aaa' 'bbb' 'bbb' 'aaa' 'aaa' 'aaa' 'aaa' ).
    b := #( 'aaa' 'aaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
    d := Diff new.
    d a:a b:b.
    result := d diff:false.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 3).
    self assert:(result line0 = 2).
    self assert:(result line1 = 2).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 1).
    self assert:(result line0 = 3).
    self assert:(result line1 = 6).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 6).
    self assert:(result line1 = 9).
    self assert:(result nextLink = nil).
!

testForward7
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaa' 'aaa' 'bbb' 'bbb' 'aaa' 'aaa' 'aaa' 'aaa' ).
    b := #( 'aaa' 'aaa' 'jjj' 'kkk' 'lll' 'bbb' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
    d := Diff new.
    d a:a b:b.
    result := d diff:false.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 3).
    self assert:(result line0 = 2).
    self assert:(result line1 = 2).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 1).
    self assert:(result line0 = 4).
    self assert:(result line1 = 7).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 6).
    self assert:(result line1 = 10).
    self assert:(result nextLink = nil).
!

testForward8
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaaa' 'aaa' 'bbb' 'bbb' 'aaa' 'aaa' 'aaa' 'aaa' ).
    b := #( 'aaa' 'aaaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
    d := Diff new.
    d a:a b:b.
    result := d diff:false.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 0).
    self assert:(result line0 = 0).
    self assert:(result line1 = 0).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 4).
    self assert:(result line0 = 2).
    self assert:(result line1 = 1).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 1).
    self assert:(result line0 = 4).
    self assert:(result line1 = 6).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 6).
    self assert:(result line1 = 9).
    self assert:(result nextLink = nil).
!

testForward9
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaaa' 'aaa' 'bbbb' 'bbb' 'aaa' 'aaa' 'aaa' 'aaa' ).
    b := #( 'aaa' 'aaaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
    d := Diff new.
    d a:a b:b.
    result := d diff:false.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 0).
    self assert:(result line0 = 0).
    self assert:(result line1 = 0).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 4).
    self assert:(result line0 = 2).
    self assert:(result line1 = 1).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 1).
    self assert:(result line0 = 4).
    self assert:(result line1 = 6).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 6).
    self assert:(result line1 = 9).
    self assert:(result nextLink = nil).
!

testForward9NoDiscards
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaaa' 'aaa' 'bbbb' 'bbb' 'aaa' 'aaa' 'aaa' 'aaa' ).
    b := #( 'aaa' 'aaaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
    d := Diff new.
    d nodiscards:true.
    d a:a b:b.
    result := d diff:false.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 0).
    self assert:(result line0 = 0).
    self assert:(result line1 = 0).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 4).
    self assert:(result line0 = 2).
    self assert:(result line1 = 1).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 1).
    self assert:(result line0 = 4).
    self assert:(result line1 = 6).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 6).
    self assert:(result line1 = 9).
    self assert:(result nextLink = nil).
!

testReverse
    |diff change first second|

    first := #( '1' '2' '3' '4' '5' '6' '7' '8' '9' '10' '11' '12' '13' ).
    second := #( '1' '2' '3' '5' '7' '8' '8' '9' '10' '11' '11' '12' '13' ).
    diff := Diff new.
    diff a:first b:second.
    change := diff diff:false.
    self assert:(change ~= nil).

    "Modified: / 12-02-2010 / 14:23:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

testReverse1
    "comment stating purpose of message"
    
    |d a b result|

    a := ''.
    b := ''.
    d := Diff new.
    d a:a b:b.
    result := d diff:false.
    self assert:(result = nil).
!

testReverse10
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaaa' 'aaa' 'bbbb' 'bbb' 'aaa' 'aaa' 'aaa' 'aaa' ',' 'ccccc' ',' 'ccccc' ).
    b := #( 'aaa' 'aaaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
    d := Diff new.
    d a:a b:b.
    result := d diffUsingScript:(Diff::ReverseScript new).
    self deny:(result = nil).
    self assert:(result deleted = 4).
    self assert:(result inserted = 0).
    self assert:(result line0 = 8).
    self assert:(result line1 = 16).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 6).
    self assert:(result line1 = 9).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 1).
    self assert:(result line0 = 4).
    self assert:(result line1 = 6).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 4).
    self assert:(result line0 = 2).
    self assert:(result line1 = 1).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 0).
    self assert:(result line0 = 0).
    self assert:(result line1 = 0).
    self assert:(result nextLink = nil).
!

testReverse2
    "comment stating purpose of message"
    
    |d a b result|

    a := ''.
    b := #( 'aaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' ).
    d := Diff new.
    d a:a b:b.
    result := d diffUsingScript:(Diff::ReverseScript new).
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 11).
    self assert:(result line0 = 0).
    self assert:(result line1 = 0).
    self assert:(result nextLink = nil).
!

testReverse3
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaa' 'lll' ).
    b := ''.
    d := Diff new.
    d a:a b:b.
    result := d diffUsingScript:(Diff::ReverseScript new).
    self deny:(result = nil).
    self assert:(result deleted = 2).
    self assert:(result inserted = 0).
    self assert:(result line0 = 0).
    self assert:(result line1 = 0).
    self assert:(result nextLink = nil).
!

testReverse4
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaa' 'aaa' 'aaa' 'aaa' 'aaa' ).
    b := #( 'aaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'aaa' 'aaa' 'aaa' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' ).
    d := Diff new.
    d a:a b:b.
    result := d diffUsingScript:(Diff::ReverseScript new).
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 6).
    self assert:(result line0 = 5).
    self assert:(result line1 = 10).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 1).
    self assert:(result line1 = 1).
    self assert:(result nextLink = nil).
!

testReverse5
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaa' 'aaa' 'aaa' 'aaa' 'aaa' 'aaa' ).
    b := #( 'aaa' 'aaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
    d := Diff new.
    d a:a b:b.
    result := d diffUsingScript:(Diff::ReverseScript new).
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 4).
    self assert:(result line1 = 9).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 2).
    self assert:(result line1 = 2).
    self assert:(result nextLink = nil).
!

testReverse6
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaa' 'aaa' 'bbb' 'bbb' 'aaa' 'aaa' 'aaa' 'aaa' ).
    b := #( 'aaa' 'aaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
    d := Diff new.
    d a:a b:b.
    result := d diffUsingScript:(Diff::ReverseScript new).
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 6).
    self assert:(result line1 = 9).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 1).
    self assert:(result line0 = 3).
    self assert:(result line1 = 6).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 3).
    self assert:(result line0 = 2).
    self assert:(result line1 = 2).
    self assert:(result nextLink = nil).
!

testReverse7
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaa' 'aaa' 'bbb' 'bbb' 'aaa' 'aaa' 'aaa' 'aaa' ).
    b := #( 'aaa' 'aaa' 'jjj' 'kkk' 'lll' 'bbb' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
    d := Diff new.
    d a:a b:b.
    result := d diffUsingScript:(Diff::ReverseScript new).
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 6).
    self assert:(result line1 = 10).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 1).
    self assert:(result line0 = 4).
    self assert:(result line1 = 7).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 3).
    self assert:(result line0 = 2).
    self assert:(result line1 = 2).
    self assert:(result nextLink = nil).
!

testReverse8
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaaa' 'aaa' 'bbb' 'bbb' 'aaa' 'aaa' 'aaa' 'aaa' ).
    b := #( 'aaa' 'aaaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
    d := Diff new.
    d a:a b:b.
    result := d diffUsingScript:(Diff::ReverseScript new).
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 6).
    self assert:(result line1 = 9).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 1).
    self assert:(result line0 = 4).
    self assert:(result line1 = 6).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 4).
    self assert:(result line0 = 2).
    self assert:(result line1 = 1).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 0).
    self assert:(result line0 = 0).
    self assert:(result line1 = 0).
    self assert:(result nextLink = nil).
!

testReverse9
    "comment stating purpose of message"
    
    |d a b result|

    a := #( 'aaaa' 'aaa' 'bbbb' 'bbb' 'aaa' 'aaa' 'aaa' 'aaa' ).
    b := #( 'aaa' 'aaaa' 'jjj' 'kkk' 'lll' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
    d := Diff new.
    d a:a b:b.
    result := d diffUsingScript:(Diff::ReverseScript new).
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 5).
    self assert:(result line0 = 6).
    self assert:(result line1 = 9).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 0).
    self assert:(result inserted = 1).
    self assert:(result line0 = 4).
    self assert:(result line1 = 6).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 4).
    self assert:(result line0 = 2).
    self assert:(result line1 = 1).
    result := result nextLink.
    self deny:(result = nil).
    self assert:(result deleted = 1).
    self assert:(result inserted = 0).
    self assert:(result line0 = 0).
    self assert:(result line1 = 0).
    self assert:(result nextLink = nil).
! !

!TextDiffTests class methodsFor:'documentation'!

version_CVS
    ^ '$Header: /cvs/stx/stx/libtool/TextDiffTests.st,v 1.1 2011-07-01 14:12:24 cg Exp $'
!

version_SVN
    ^ '§Id: TextDiffTests.st 7546 2010-02-25 21:31:39Z vranyj1 §'
! !