diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2018-08-19 14:48:39 +1000 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2018-08-19 14:48:39 +1000 |
commit | cd9eada0c6b3fdb68519467807bf2c8e6eb521bd (patch) | |
tree | f41c0db2dcc800059e8cb31d45f26b9e14a20318 /pkg | |
parent | bd91b9e1e9fdc8cd199d105118ce13f94e6b5fe5 (diff) |
add test for variety of potential git diff situations
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/commands/git_test.go | 126 | ||||
-rw-r--r-- | pkg/test/test.go | 25 | ||||
-rw-r--r-- | pkg/utils/utils.go | 9 |
3 files changed, 160 insertions, 0 deletions
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") +} |