summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorAnthony HAMON <hamon.anth@gmail.com>2018-09-18 21:09:51 +0200
committerAnthony HAMON <hamon.anth@gmail.com>2018-09-20 09:11:47 +0200
commit360b7c1def1f5945f30d89e393bdd4233f0c3179 (patch)
tree2c9032a172bb9ec5087fe33f86e3a27e28d3039d /pkg
parentbdeb78c9a04963847ffd90c2277b3a274e3ba309 (diff)
commands/git : refactor test to Diff, refactor function
Diffstat (limited to 'pkg')
-rw-r--r--pkg/commands/git.go4
-rw-r--r--pkg/commands/git_test.go130
2 files changed, 50 insertions, 84 deletions
diff --git a/pkg/commands/git.go b/pkg/commands/git.go
index 24dcc6894..d9effbef5 100644
--- a/pkg/commands/git.go
+++ b/pkg/commands/git.go
@@ -506,15 +506,15 @@ func (c *GitCommand) Show(sha string) (string, error) {
// Diff returns the diff of a file
func (c *GitCommand) Diff(file *File) string {
cachedArg := ""
+ trackedArg := "--"
fileName := c.OSCommand.Quote(file.Name)
if file.HasStagedChanges && !file.HasUnstagedChanges {
cachedArg = "--cached"
}
- trackedArg := "--"
if !file.Tracked && !file.HasStagedChanges {
trackedArg = "--no-index /dev/null"
}
- command := fmt.Sprintf("%s %s %s %s", "git diff --color ", cachedArg, trackedArg, fileName)
+ command := fmt.Sprintf("git diff --color %s %s %s", cachedArg, trackedArg, fileName)
// for now we assume an error means the file was deleted
s, _ := c.OSCommand.RunCommandWithOutput(command)
diff --git a/pkg/commands/git_test.go b/pkg/commands/git_test.go
index eb17103fc..e5fd539b9 100644
--- a/pkg/commands/git_test.go
+++ b/pkg/commands/git_test.go
@@ -9,7 +9,6 @@ import (
"time"
"github.com/jesseduffield/lazygit/pkg/i18n"
- "github.com/jesseduffield/lazygit/pkg/test"
"github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert"
gogit "gopkg.in/src-d/go-git.v4"
@@ -1609,96 +1608,63 @@ func TestGitCommandGetLog(t *testing.T) {
}
func TestGitCommandDiff(t *testing.T) {
- gitCommand := newDummyGitCommand()
- assert.NoError(t, test.GenerateRepo("lots_of_diffs.sh"))
+ type scenario struct {
+ testName string
+ command func(string, ...string) *exec.Cmd
+ file *File
+ }
- 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",
- },
+ scenarios := []scenario{
{
- Name: "untracked_unstaged",
- HasStagedChanges: false,
- HasUnstagedChanges: true,
- Tracked: false,
- Deleted: false,
- HasMergeConflicts: false,
- DisplayString: "?? untracked_unstaged",
+ "Default case",
+ func(cmd string, args ...string) *exec.Cmd {
+ assert.EqualValues(t, "git", cmd)
+ assert.EqualValues(t, []string{"diff", "--color", "--", "test.txt"}, args)
+
+ return exec.Command("echo")
+ },
+ &File{
+ Name: "test.txt",
+ HasStagedChanges: false,
+ Tracked: true,
+ },
},
{
- Name: "untracked_staged",
- HasStagedChanges: true,
- HasUnstagedChanges: false,
- Tracked: false,
- Deleted: false,
- HasMergeConflicts: false,
- DisplayString: "A untracked_staged",
+ "All changes staged",
+ func(cmd string, args ...string) *exec.Cmd {
+ assert.EqualValues(t, "git", cmd)
+ assert.EqualValues(t, []string{"diff", "--color", "--cached", "--", "test.txt"}, args)
+
+ return exec.Command("echo")
+ },
+ &File{
+ Name: "test.txt",
+ HasStagedChanges: true,
+ HasUnstagedChanges: false,
+ Tracked: true,
+ },
},
{
- Name: "master",
- HasStagedChanges: false,
- HasUnstagedChanges: true,
- Tracked: false,
- Deleted: false,
- HasMergeConflicts: false,
- DisplayString: "?? master",
+ "File not tracked and file has no staged changes",
+ func(cmd string, args ...string) *exec.Cmd {
+ assert.EqualValues(t, "git", cmd)
+ assert.EqualValues(t, []string{"diff", "--color", "--no-index", "/dev/null", "test.txt"}, args)
+
+ return exec.Command("echo")
+ },
+ &File{
+ Name: "test.txt",
+ HasStagedChanges: false,
+ Tracked: false,
+ },
},
}
- for _, file := range files {
- t.Run(file.Name, func(t *testing.T) {
- assert.NotContains(t, gitCommand.Diff(file), "error")
+ for _, s := range scenarios {
+ t.Run(s.testName, func(t *testing.T) {
+ gitCmd := newDummyGitCommand()
+ gitCmd.OSCommand.command = s.command
+ gitCmd.Diff(s.file)
})
}
}