mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-04-23 12:18:51 +02:00
add test for variety of potential git diff situations
This commit is contained in:
parent
bd91b9e1e9
commit
cd9eada0c6
126
pkg/commands/git_test.go
Normal file
126
pkg/commands/git_test.go
Normal file
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
pkg/test/test.go
Normal file
25
pkg/test/test.go
Normal file
@ -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
|
||||||
|
}
|
@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -63,3 +64,11 @@ func TrimTrailingNewline(str string) string {
|
|||||||
}
|
}
|
||||||
return str
|
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")
|
||||||
|
}
|
||||||
|
@ -3,30 +3,30 @@ set -ex; rm -rf repo; mkdir repo; cd repo
|
|||||||
|
|
||||||
git init
|
git init
|
||||||
|
|
||||||
echo "deleted1" > deleted1
|
echo "deleted" > deleted_staged
|
||||||
echo "deleted2" > deleted2
|
echo "deleted_unstaged" > deleted_unstaged
|
||||||
echo "modified1" > modified1
|
echo "modified_staged" > modified_staged
|
||||||
echo "modified2" > modified2
|
echo "modified_unstaged" > modified_unstaged
|
||||||
echo "renamed" > renamed1
|
echo "renamed" > renamed_before
|
||||||
|
|
||||||
git add .
|
git add .
|
||||||
git commit -m "files to delete"
|
git commit -m "files to delete"
|
||||||
rm deleted1
|
rm deleted_staged
|
||||||
rm deleted2
|
rm deleted_unstaged
|
||||||
|
|
||||||
rm renamed1
|
rm renamed_before
|
||||||
echo "renamed" > renamed2
|
echo "renamed" > renamed_after
|
||||||
echo "more" >> modified1
|
echo "more" >> modified_staged
|
||||||
echo "more" >> modified2
|
echo "more" >> modified_unstaged
|
||||||
echo "untracked1" > untracked1
|
echo "untracked_staged" > untracked_staged
|
||||||
echo "untracked2" > untracked2
|
echo "untracked_unstaged" > untracked_unstaged
|
||||||
echo "blah" > "file with space1"
|
echo "blah" > "file with space staged"
|
||||||
echo "blah" > "file with space2"
|
echo "blah" > "file with space unstaged"
|
||||||
echo "same name as branch" > master
|
echo "same name as branch" > master
|
||||||
|
|
||||||
git add deleted1
|
git add deleted_staged
|
||||||
git add modified1
|
git add modified_staged
|
||||||
git add untracked1
|
git add untracked_staged
|
||||||
git add "file with space2"
|
git add "file with space staged"
|
||||||
git add renamed1
|
git add renamed_before
|
||||||
git add renamed2
|
git add renamed_after
|
Loading…
x
Reference in New Issue
Block a user