| package diff_test |
| |
| import ( |
| "testing" |
| |
| "gopkg.in/src-d/go-git.v4/utils/diff" |
| |
| "github.com/sergi/go-diff/diffmatchpatch" |
| . "gopkg.in/check.v1" |
| ) |
| |
| func Test(t *testing.T) { TestingT(t) } |
| |
| type suiteCommon struct{} |
| |
| var _ = Suite(&suiteCommon{}) |
| |
| var diffTests = [...]struct { |
| src string // the src string to diff |
| dst string // the dst string to diff |
| }{ |
| // equal inputs |
| {"", ""}, |
| {"a", "a"}, |
| {"a\n", "a\n"}, |
| {"a\nb", "a\nb"}, |
| {"a\nb\n", "a\nb\n"}, |
| {"a\nb\nc", "a\nb\nc"}, |
| {"a\nb\nc\n", "a\nb\nc\n"}, |
| // missing '\n' |
| {"", "\n"}, |
| {"\n", ""}, |
| {"a", "a\n"}, |
| {"a\n", "a"}, |
| {"a\nb", "a\nb"}, |
| {"a\nb\n", "a\nb\n"}, |
| {"a\nb\nc", "a\nb\nc"}, |
| {"a\nb\nc\n", "a\nb\nc\n"}, |
| // generic |
| {"a\nbbbbb\n\tccc\ndd\n\tfffffffff\n", "bbbbb\n\tccc\n\tDD\n\tffff\n"}, |
| } |
| |
| func (s *suiteCommon) TestAll(c *C) { |
| for i, t := range diffTests { |
| diffs := diff.Do(t.src, t.dst) |
| src := diff.Src(diffs) |
| dst := diff.Dst(diffs) |
| c.Assert(src, Equals, t.src, Commentf("subtest %d, src=%q, dst=%q, bad calculated src", i, t.src, t.dst)) |
| c.Assert(dst, Equals, t.dst, Commentf("subtest %d, src=%q, dst=%q, bad calculated dst", i, t.src, t.dst)) |
| } |
| } |
| |
| var doTests = [...]struct { |
| src, dst string |
| exp []diffmatchpatch.Diff |
| }{ |
| { |
| src: "", |
| dst: "", |
| exp: []diffmatchpatch.Diff{}, |
| }, |
| { |
| src: "a", |
| dst: "a", |
| exp: []diffmatchpatch.Diff{ |
| { |
| Type: 0, |
| Text: "a", |
| }, |
| }, |
| }, |
| { |
| src: "", |
| dst: "abc\ncba", |
| exp: []diffmatchpatch.Diff{ |
| { |
| Type: 1, |
| Text: "abc\ncba", |
| }, |
| }, |
| }, |
| { |
| src: "abc\ncba", |
| dst: "", |
| exp: []diffmatchpatch.Diff{ |
| { |
| Type: -1, |
| Text: "abc\ncba", |
| }, |
| }, |
| }, |
| { |
| src: "abc\nbcd\ncde", |
| dst: "000\nabc\n111\nBCD\n", |
| exp: []diffmatchpatch.Diff{ |
| {Type: 1, Text: "000\n"}, |
| {Type: 0, Text: "abc\n"}, |
| {Type: -1, Text: "bcd\ncde"}, |
| {Type: 1, Text: "111\nBCD\n"}, |
| }, |
| }, |
| { |
| src: "A\nB\nC\nD\nE\nF\nG\nH\nI\nJ\nK\nL\nM\nN\nÑ\nO\nP\nQ\nR\nS\nT\nU\nV\nW\nX\nY\nZ", |
| dst: "B\nC\nD\nE\nF\nG\nI\nJ\nK\nL\nM\nN\nO\nP\nQ\nR\nS\nT\nV\nW\nX\nY\nZ", |
| exp: []diffmatchpatch.Diff{ |
| {Type: -1, Text: "A\n"}, |
| {Type: 0, Text: "B\nC\nD\nE\nF\nG\n"}, |
| {Type: -1, Text: "H\n"}, |
| {Type: 0, Text: "I\nJ\nK\nL\nM\nN\n"}, |
| {Type: -1, Text: "Ñ\n"}, |
| {Type: 0, Text: "O\nP\nQ\nR\nS\nT\n"}, |
| {Type: -1, Text: "U\n"}, |
| {Type: 0, Text: "V\nW\nX\nY\nZ"}, |
| }, |
| }, |
| { |
| src: "B\nC\nD\nE\nF\nG\nI\nJ\nK\nL\nM\nN\nO\nP\nQ\nR\nS\nT\nV\nW\nX\nY\nZ", |
| dst: "B\nC\nD\nE\nF\nG\nI\nJ\nK\nL\nM\nN\nO\nP\nQ\nR\nS\nT\nV\nW\nX\nY\n", |
| exp: []diffmatchpatch.Diff{ |
| {Type: 0, Text: "B\nC\nD\nE\nF\nG\nI\nJ\nK\nL\nM\nN\nO\nP\nQ\nR\nS\nT\nV\nW\nX\nY\n"}, |
| {Type: -1, Text: "Z"}, |
| }, |
| }, |
| { |
| src: "B\nC\nD\nE\nF\nG\nI\nJ\nK\nL\nM\nN\nO\nP\nQ\nR\nS\nT\nV\nW\nX\nY\nZ", |
| dst: "B\nC\nD\nE\nF\nG\nI\nJ\nK\nL\nM\nN\nO\nP\nQ\nR\nS\nT\nV\nW\nX\nY", |
| exp: []diffmatchpatch.Diff{ |
| {Type: 0, Text: "B\nC\nD\nE\nF\nG\nI\nJ\nK\nL\nM\nN\nO\nP\nQ\nR\nS\nT\nV\nW\nX\n"}, |
| {Type: -1, Text: "Y\nZ"}, |
| {Type: 1, Text: "Y"}, |
| }, |
| }, |
| } |
| |
| func (s *suiteCommon) TestDo(c *C) { |
| for i, t := range doTests { |
| diffs := diff.Do(t.src, t.dst) |
| c.Assert(diffs, DeepEquals, t.exp, Commentf("subtest %d", i)) |
| } |
| } |