package object import ( "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/cache" "github.com/go-git/go-git/v5/storage/filesystem" fixtures "github.com/go-git/go-git-fixtures/v4" . "gopkg.in/check.v1" ) type PatchSuite struct { BaseObjectsSuite } var _ = Suite(&PatchSuite{}) func (s *PatchSuite) TestStatsWithSubmodules(c *C) { storer := filesystem.NewStorage( fixtures.ByURL("https://github.com/git-fixtures/submodule.git").One().DotGit(), cache.NewObjectLRUDefault()) commit, err := GetCommit(storer, plumbing.NewHash("b685400c1f9316f350965a5993d350bc746b0bf4")) c.Assert(err, IsNil) tree, err := commit.Tree() c.Assert(err, IsNil) e, err := tree.entry("basic") c.Assert(err, IsNil) ch := &Change{ From: ChangeEntry{ Name: "basic", Tree: tree, TreeEntry: *e, }, To: ChangeEntry{ Name: "basic", Tree: tree, TreeEntry: *e, }, } p, err := getPatch("", ch) c.Assert(err, IsNil) c.Assert(p, NotNil) } func (s *PatchSuite) TestFileStatsString(c *C) { testCases := []struct { description string input FileStats expected string }{ { description: "no files changed", input: []FileStat{}, expected: "", }, { description: "one file touched - no changes", input: []FileStat{ { Name: "file1", }, }, expected: " file1 | 0 \n", }, { description: "one file changed", input: []FileStat{ { Name: "file1", Addition: 1, }, }, expected: " file1 | 1 +\n", }, { description: "one file changed with one addition and one deletion", input: []FileStat{ { Name: ".github/workflows/git.yml", Addition: 1, Deletion: 1, }, }, expected: " .github/workflows/git.yml | 2 +-\n", }, { description: "two files changed", input: []FileStat{ { Name: ".github/workflows/git.yml", Addition: 1, Deletion: 1, }, { Name: "cli/go-git/go.mod", Addition: 4, Deletion: 4, }, }, expected: " .github/workflows/git.yml | 2 +-\n cli/go-git/go.mod | 8 ++++----\n", }, { description: "three files changed", input: []FileStat{ { Name: ".github/workflows/git.yml", Addition: 3, Deletion: 3, }, { Name: "worktree.go", Addition: 107, }, { Name: "worktree_test.go", Addition: 75, }, }, expected: " .github/workflows/git.yml | 6 +++---\n" + " worktree.go | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++\n" + " worktree_test.go | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++\n", }, { description: "three files changed with deletions and additions", input: []FileStat{ { Name: ".github/workflows/git.yml", Addition: 3, Deletion: 3, }, { Name: "worktree.go", Addition: 107, Deletion: 217, }, { Name: "worktree_test.go", Addition: 75, Deletion: 275, }, }, expected: " .github/workflows/git.yml | 6 +++---\n" + " worktree.go | 324 ++++++++++++++++++-----------------------------------\n" + " worktree_test.go | 350 ++++++++++++-----------------------------------------\n", }, } for _, tc := range testCases { c.Log("Executing test cases:", tc.description) c.Assert(printStat(tc.input), Equals, tc.expected) } }