mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-02-03 13:21:56 +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"
|
||||
"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")
|
||||
}
|
||||
|
@ -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
|
||||
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
|
Loading…
x
Reference in New Issue
Block a user