50 lines
1.6 KiB
Go
50 lines
1.6 KiB
Go
package diff
|
|
|
|
import (
|
|
"reflect"
|
|
t "testing"
|
|
)
|
|
|
|
type TestCase struct {
|
|
l1 []string
|
|
l2 []string
|
|
exp []Op[string]
|
|
}
|
|
|
|
func TestDiff(t *t.T) {
|
|
A := "A"
|
|
B := "B"
|
|
C := "C"
|
|
testCases := []TestCase{
|
|
{[]string{}, []string{}, []Op[string]{}},
|
|
{[]string{}, []string{"foo"}, []Op[string]{{OpInsert, 0, 0, "foo"}}},
|
|
{[]string{"foo"}, []string{}, []Op[string]{{OpDelete, 0, -1, "foo"}}},
|
|
{[]string{"foo", "bar", "baz"}, []string{"foo", "bar", "baz"}, []Op[string]{}},
|
|
{[]string{"foo", "bar", "baz"}, []string{"foo", "baz"}, []Op[string]{{OpDelete, 1, -1, "bar"}}},
|
|
{[]string{"baz"}, []string{"foo", "baz"}, []Op[string]{{OpInsert, 0, 0, "foo"}}},
|
|
{[]string{"bar", "baz"}, []string{"foo", "baz"}, []Op[string]{{OpDelete, 0, -1, "bar"}, {OpInsert, 1, 0, "foo"}}},
|
|
{[]string{"foo", "bar", "baz"}, []string{"foo", "bar"}, []Op[string]{{OpDelete, 2, -1, "baz"}}},
|
|
{
|
|
[]string{A, B, C, A, B, B, A},
|
|
[]string{C, B, A, B, A, C},
|
|
[]Op[string]{{OpDelete, 0, -1, A}, {OpInsert, 1, 0, C}, {OpDelete, 2, -1, C}, {OpDelete, 5, -1, B}, {OpInsert, 7, 5, C}},
|
|
},
|
|
{
|
|
[]string{C, A, B, A, B, A, B, A, B, A, B, A, B, C},
|
|
[]string{B, A, B, A, B, A, B, A, B, A, B, A, B, A},
|
|
[]Op[string]{{OpDelete, 0, -1, C}, {OpInsert, 1, 0, B}, {OpDelete, 13, -1, C}, {OpInsert, 14, 13, A}},
|
|
},
|
|
{
|
|
[]string{B},
|
|
[]string{A, B, C, B, A},
|
|
[]Op[string]{{OpInsert, 0, 0, A}, {OpInsert, 0, 1, B}, {OpInsert, 0, 2, C}, {OpInsert, 1, 4, A}},
|
|
},
|
|
}
|
|
for _, c := range testCases {
|
|
act := myersDiffStr(c.l1, c.l2, true)
|
|
if !reflect.DeepEqual(c.exp, act) {
|
|
t.Errorf("Failed diff, expected %v actual %v\n", c.exp, act)
|
|
}
|
|
}
|
|
}
|