blob: ea9839b7172883699a183efd4fc587ccfaba809c [file] [log] [blame]
// Copyright (c) 2015 Jesse Meek <https://github.com/waigani>
// This program is Free Software see LICENSE file for details.
package diffparser_test
import (
"io/ioutil"
"testing"
jt "github.com/juju/testing"
jc "github.com/juju/testing/checkers"
"github.com/waigani/diffparser"
gc "gopkg.in/check.v1"
)
func Test(t *testing.T) {
gc.TestingT(t)
}
type suite struct {
jt.CleanupSuite
rawdiff string
diff *diffparser.Diff
}
var _ = gc.Suite(&suite{})
func (s *suite) SetUpSuite(c *gc.C) {
byt, err := ioutil.ReadFile("example.diff")
c.Assert(err, jc.ErrorIsNil)
s.rawdiff = string(byt)
}
// TODO(waigani) tests are missing more creative names (spaces, special
// chars), and diffed files that are not in the current directory.
func (s *suite) TestFileModeAndNaming(c *gc.C) {
diff, err := diffparser.Parse(s.rawdiff)
c.Assert(err, jc.ErrorIsNil)
c.Assert(diff.Files, gc.HasLen, 6)
for i, expected := range []struct {
mode diffparser.FileMode
origName string
newName string
}{
{
mode: diffparser.MODIFIED,
origName: "file1",
newName: "file1",
},
{
mode: diffparser.DELETED,
origName: "file2",
newName: "",
},
{
mode: diffparser.DELETED,
origName: "file3",
newName: "",
},
{
mode: diffparser.NEW,
origName: "",
newName: "file4",
},
{
mode: diffparser.NEW,
origName: "",
newName: "newname",
},
{
mode: diffparser.DELETED,
origName: "symlink",
newName: "",
},
} {
file := diff.Files[i]
c.Logf("testing file: %v", file)
c.Assert(file.Mode, gc.Equals, expected.mode)
c.Assert(file.OrigName, gc.Equals, expected.origName)
c.Assert(file.NewName, gc.Equals, expected.newName)
}
}
func (s *suite) TestHunk(c *gc.C) {
diff, err := diffparser.Parse(s.rawdiff)
c.Assert(err, jc.ErrorIsNil)
c.Assert(diff.Files, gc.HasLen, 6)
expectedOrigLines := []diffparser.DiffLine{
{
Mode: diffparser.UNCHANGED,
Number: 1,
Content: "some",
Position: 2,
}, {
Mode: diffparser.UNCHANGED,
Number: 2,
Content: "lines",
Position: 3,
}, {
Mode: diffparser.REMOVED,
Number: 3,
Content: "in",
Position: 4,
}, {
Mode: diffparser.UNCHANGED,
Number: 4,
Content: "file1",
Position: 5,
},
}
expectedNewLines := []diffparser.DiffLine{
{
Mode: diffparser.ADDED,
Number: 1,
Content: "add a line",
Position: 1,
}, {
Mode: diffparser.UNCHANGED,
Number: 2,
Content: "some",
Position: 2,
}, {
Mode: diffparser.UNCHANGED,
Number: 3,
Content: "lines",
Position: 3,
}, {
Mode: diffparser.UNCHANGED,
Number: 4,
Content: "file1",
Position: 5,
},
}
file := diff.Files[0]
origRange := file.Hunks[0].OrigRange
newRange := file.Hunks[0].NewRange
c.Assert(origRange.Start, gc.Equals, 1)
c.Assert(origRange.Length, gc.Equals, 4)
c.Assert(newRange.Start, gc.Equals, 1)
c.Assert(newRange.Length, gc.Equals, 4)
for i, line := range expectedOrigLines {
c.Assert(*origRange.Lines[i], gc.DeepEquals, line)
}
for i, line := range expectedNewLines {
c.Assert(*newRange.Lines[i], gc.DeepEquals, line)
}
}