summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2018-08-19 14:48:39 +1000
committerJesse Duffield <jessedduffield@gmail.com>2018-08-19 14:48:39 +1000
commitcd9eada0c6b3fdb68519467807bf2c8e6eb521bd (patch)
treef41c0db2dcc800059e8cb31d45f26b9e14a20318 /pkg
parentbd91b9e1e9fdc8cd199d105118ce13f94e6b5fe5 (diff)
add test for variety of potential git diff situations
Diffstat (limited to 'pkg')
-rw-r--r--pkg/commands/git_test.go126
-rw-r--r--pkg/test/test.go25
-rw-r--r--pkg/utils/utils.go9
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")
+}