summaryrefslogtreecommitdiffstats
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
parentbd91b9e1e9fdc8cd199d105118ce13f94e6b5fe5 (diff)
add test for variety of potential git diff situations
-rw-r--r--pkg/commands/git_test.go126
-rw-r--r--pkg/test/test.go25
-rw-r--r--pkg/utils/utils.go9
-rwxr-xr-xtest/repos/lots_of_diffs.sh42
4 files changed, 181 insertions, 21 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")
+}
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