package commands import ( "io/ioutil" "strings" "testing" "github.com/sirupsen/logrus" "github.com/jesseduffield/lazygit/pkg/test" ) func newDummyLog() *logrus.Logger { log := logrus.New() log.Out = ioutil.Discard return log } func newDummyGitCommand() *GitCommand { return &GitCommand{ Log: newDummyLog(), OSCommand: newDummyOSCommand(), } } func TestDiff(t *testing.T) { gitCommand := newDummyGitCommand() 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) } } }