From cd9eada0c6b3fdb68519467807bf2c8e6eb521bd Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sun, 19 Aug 2018 14:48:39 +1000 Subject: [PATCH] add test for variety of potential git diff situations --- pkg/commands/git_test.go | 126 ++++++++++++++++++++++++++++++++++++ pkg/test/test.go | 25 +++++++ pkg/utils/utils.go | 9 +++ test/repos/lots_of_diffs.sh | 42 ++++++------ 4 files changed, 181 insertions(+), 21 deletions(-) create mode 100644 pkg/commands/git_test.go create mode 100644 pkg/test/test.go diff --git a/pkg/commands/git_test.go b/pkg/commands/git_test.go new file mode 100644 index 000000000..1cd9901b3 --- /dev/null +++ b/pkg/commands/git_test.go @@ -0,0 +1,126 @@ +package commands + +import ( + "io/ioutil" + "strings" + "testing" + + "github.com/Sirupsen/logrus" + "github.com/jesseduffield/lazygit/pkg/test" +) + +func getDummyLog() *logrus.Logger { + log := logrus.New() + log.Out = ioutil.Discard + return log +} + +func getDummyOSCommand() *OSCommand { + return &OSCommand{ + Log: getDummyLog(), + Platform: getPlatform(), + } +} + +func getDummyGitCommand() *GitCommand { + return &GitCommand{ + Log: getDummyLog(), + OSCommand: getDummyOSCommand(), + } +} + +func TestDiff(t *testing.T) { + gitCommand := getDummyGitCommand() + if err := test.GenerateRepo("lots_of_diffs.sh"); err != nil { + t.Error(err.Error()) + } + files := []File{ + { + Name: "deleted_staged", + HasStagedChanges: false, + HasUnstagedChanges: true, + Tracked: true, + Deleted: true, + HasMergeConflicts: false, + DisplayString: " D deleted_staged", + }, + { + Name: "\"file with space staged\"", + HasStagedChanges: true, + HasUnstagedChanges: false, + Tracked: false, + Deleted: false, + HasMergeConflicts: false, + DisplayString: "A \"file with space staged\"", + }, + { + Name: "file with space unstaged", + HasStagedChanges: false, + HasUnstagedChanges: true, + Tracked: false, + Deleted: false, + HasMergeConflicts: false, + DisplayString: "?? file with space unstaged", + }, + { + Name: "modified_unstaged", + HasStagedChanges: true, + HasUnstagedChanges: false, + Tracked: true, + Deleted: false, + HasMergeConflicts: false, + DisplayString: "M modified_unstaged", + }, + { + Name: "modified_staged", + HasStagedChanges: false, + HasUnstagedChanges: true, + Tracked: true, + Deleted: false, + HasMergeConflicts: false, + DisplayString: " M modified_staged", + }, + { + Name: "renamed_before -> renamed_after", + HasStagedChanges: true, + HasUnstagedChanges: false, + Tracked: true, + Deleted: false, + HasMergeConflicts: false, + DisplayString: "R renamed_before -> renamed_after", + }, + { + Name: "untracked_unstaged", + HasStagedChanges: false, + HasUnstagedChanges: true, + Tracked: false, + Deleted: false, + HasMergeConflicts: false, + DisplayString: "?? untracked_unstaged", + }, + { + Name: "untracked_staged", + HasStagedChanges: true, + HasUnstagedChanges: false, + Tracked: false, + Deleted: false, + HasMergeConflicts: false, + DisplayString: "A untracked_staged", + }, + { + Name: "master", + HasStagedChanges: false, + HasUnstagedChanges: true, + Tracked: false, + Deleted: false, + HasMergeConflicts: false, + DisplayString: "?? master", + }, + } + for _, file := range files { + content := gitCommand.Diff(file) + if strings.Contains(content, "error") { + t.Error("Error: diff test failed. File: " + file.Name + ", " + content) + } + } +} diff --git a/pkg/test/test.go b/pkg/test/test.go new file mode 100644 index 000000000..7bdbd4c10 --- /dev/null +++ b/pkg/test/test.go @@ -0,0 +1,25 @@ +package test + +import ( + "errors" + "os" + "os/exec" + + "github.com/jesseduffield/lazygit/pkg/utils" +) + +// GenerateRepo generates a repo from test/repos and changes the directory to be +// inside the newly made repo +func GenerateRepo(filename string) error { + testPath := utils.GetProjectRoot() + "/test/repos/" + if err := os.Chdir(testPath); err != nil { + return err + } + if output, err := exec.Command("bash", filename).CombinedOutput(); err != nil { + return errors.New(string(output)) + } + if err := os.Chdir(testPath + "repo"); err != nil { + return err + } + return nil +} diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 68438246a..6172bcb54 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "os" + "path" "path/filepath" "strings" @@ -63,3 +64,11 @@ func TrimTrailingNewline(str string) string { } return str } + +// GetProjectRoot returns the path to the root of the project. Only to be used +// in testing contexts, as with binaries it's unlikely this path will exist on +// the machine +func GetProjectRoot() string { + gp := os.Getenv("GOPATH") + return path.Join(gp, "src/github.com/jesseduffield/lazygit") +} diff --git a/test/repos/lots_of_diffs.sh b/test/repos/lots_of_diffs.sh index 0cdec0cdc..d91734a3a 100755 --- a/test/repos/lots_of_diffs.sh +++ b/test/repos/lots_of_diffs.sh @@ -3,30 +3,30 @@ set -ex; rm -rf repo; mkdir repo; cd repo git init -echo "deleted1" > deleted1 -echo "deleted2" > deleted2 -echo "modified1" > modified1 -echo "modified2" > modified2 -echo "renamed" > renamed1 +echo "deleted" > deleted_staged +echo "deleted_unstaged" > deleted_unstaged +echo "modified_staged" > modified_staged +echo "modified_unstaged" > modified_unstaged +echo "renamed" > renamed_before git add . git commit -m "files to delete" -rm deleted1 -rm deleted2 +rm deleted_staged +rm deleted_unstaged -rm renamed1 -echo "renamed" > renamed2 -echo "more" >> modified1 -echo "more" >> modified2 -echo "untracked1" > untracked1 -echo "untracked2" > untracked2 -echo "blah" > "file with space1" -echo "blah" > "file with space2" +rm renamed_before +echo "renamed" > renamed_after +echo "more" >> modified_staged +echo "more" >> modified_unstaged +echo "untracked_staged" > untracked_staged +echo "untracked_unstaged" > untracked_unstaged +echo "blah" > "file with space staged" +echo "blah" > "file with space unstaged" echo "same name as branch" > master -git add deleted1 -git add modified1 -git add untracked1 -git add "file with space2" -git add renamed1 -git add renamed2 \ No newline at end of file +git add deleted_staged +git add modified_staged +git add untracked_staged +git add "file with space staged" +git add renamed_before +git add renamed_after \ No newline at end of file