mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-07-05 00:59:19 +02:00
Add a root item ("/") if files at top level have changed
This commit is contained in:
@ -509,7 +509,7 @@ func (self *CommitFilesController) enterCommitFile(node *filetree.CommitFileNode
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *CommitFilesController) handleToggleCommitFileDirCollapsed(node *filetree.CommitFileNode) error {
|
func (self *CommitFilesController) handleToggleCommitFileDirCollapsed(node *filetree.CommitFileNode) error {
|
||||||
self.context().CommitFileTreeViewModel.ToggleCollapsed(node.GetPath())
|
self.context().CommitFileTreeViewModel.ToggleCollapsed(node.GetInternalPath())
|
||||||
|
|
||||||
self.c.PostRefreshUpdate(self.context())
|
self.c.PostRefreshUpdate(self.context())
|
||||||
|
|
||||||
|
@ -1078,7 +1078,7 @@ func (self *FilesController) handleToggleDirCollapsed() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
self.context().FileTreeViewModel.ToggleCollapsed(node.GetPath())
|
self.context().FileTreeViewModel.ToggleCollapsed(node.GetInternalPath())
|
||||||
|
|
||||||
self.c.PostRefreshUpdate(self.c.Contexts().Files)
|
self.c.PostRefreshUpdate(self.c.Contexts().Files)
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ func BuildTreeFromFiles(files []*models.File) *Node[models.File] {
|
|||||||
|
|
||||||
var curr *Node[models.File]
|
var curr *Node[models.File]
|
||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
splitPath := split(file.Path)
|
splitPath := split("./" + file.Path)
|
||||||
curr = root
|
curr = root
|
||||||
outer:
|
outer:
|
||||||
for i := range splitPath {
|
for i := range splitPath {
|
||||||
@ -40,6 +40,11 @@ func BuildTreeFromFiles(files []*models.File) *Node[models.File] {
|
|||||||
continue outer
|
continue outer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if i == 0 && len(files) == 1 && len(splitPath) == 2 {
|
||||||
|
// skip the root item when there's only one file at top level; we don't need it in that case
|
||||||
|
continue outer
|
||||||
|
}
|
||||||
|
|
||||||
newChild := &Node[models.File]{
|
newChild := &Node[models.File]{
|
||||||
path: path,
|
path: path,
|
||||||
File: setFile,
|
File: setFile,
|
||||||
@ -70,7 +75,7 @@ func BuildTreeFromCommitFiles(files []*models.CommitFile) *Node[models.CommitFil
|
|||||||
|
|
||||||
var curr *Node[models.CommitFile]
|
var curr *Node[models.CommitFile]
|
||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
splitPath := split(file.Path)
|
splitPath := split("./" + file.Path)
|
||||||
curr = root
|
curr = root
|
||||||
outer:
|
outer:
|
||||||
for i := range splitPath {
|
for i := range splitPath {
|
||||||
@ -89,6 +94,11 @@ func BuildTreeFromCommitFiles(files []*models.CommitFile) *Node[models.CommitFil
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if i == 0 && len(files) == 1 && len(splitPath) == 2 {
|
||||||
|
// skip the root item when there's only one file at top level; we don't need it in that case
|
||||||
|
continue outer
|
||||||
|
}
|
||||||
|
|
||||||
newChild := &Node[models.CommitFile]{
|
newChild := &Node[models.CommitFile]{
|
||||||
path: path,
|
path: path,
|
||||||
File: setFile,
|
File: setFile,
|
||||||
|
@ -35,15 +35,16 @@ func TestBuildTreeFromFiles(t *testing.T) {
|
|||||||
path: "",
|
path: "",
|
||||||
Children: []*Node[models.File]{
|
Children: []*Node[models.File]{
|
||||||
{
|
{
|
||||||
path: "dir1",
|
path: "./dir1",
|
||||||
|
CompressionLevel: 1,
|
||||||
Children: []*Node[models.File]{
|
Children: []*Node[models.File]{
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "dir1/a"},
|
File: &models.File{Path: "dir1/a"},
|
||||||
path: "dir1/a",
|
path: "./dir1/a",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "dir1/b"},
|
File: &models.File{Path: "dir1/b"},
|
||||||
path: "dir1/b",
|
path: "./dir1/b",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -64,21 +65,24 @@ func TestBuildTreeFromFiles(t *testing.T) {
|
|||||||
path: "",
|
path: "",
|
||||||
Children: []*Node[models.File]{
|
Children: []*Node[models.File]{
|
||||||
{
|
{
|
||||||
path: "dir1/dir3",
|
path: ".",
|
||||||
|
Children: []*Node[models.File]{
|
||||||
|
{
|
||||||
|
path: "./dir1/dir3",
|
||||||
Children: []*Node[models.File]{
|
Children: []*Node[models.File]{
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "dir1/dir3/a"},
|
File: &models.File{Path: "dir1/dir3/a"},
|
||||||
path: "dir1/dir3/a",
|
path: "./dir1/dir3/a",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
CompressionLevel: 1,
|
CompressionLevel: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "dir2/dir4",
|
path: "./dir2/dir4",
|
||||||
Children: []*Node[models.File]{
|
Children: []*Node[models.File]{
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "dir2/dir4/b"},
|
File: &models.File{Path: "dir2/dir4/b"},
|
||||||
path: "dir2/dir4/b",
|
path: "./dir2/dir4/b",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
CompressionLevel: 1,
|
CompressionLevel: 1,
|
||||||
@ -86,6 +90,8 @@ func TestBuildTreeFromFiles(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "paths that can be sorted",
|
name: "paths that can be sorted",
|
||||||
files: []*models.File{
|
files: []*models.File{
|
||||||
@ -98,14 +104,19 @@ func TestBuildTreeFromFiles(t *testing.T) {
|
|||||||
},
|
},
|
||||||
expected: &Node[models.File]{
|
expected: &Node[models.File]{
|
||||||
path: "",
|
path: "",
|
||||||
|
Children: []*Node[models.File]{
|
||||||
|
{
|
||||||
|
path: ".",
|
||||||
Children: []*Node[models.File]{
|
Children: []*Node[models.File]{
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "a"},
|
File: &models.File{Path: "a"},
|
||||||
path: "a",
|
path: "./a",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "b"},
|
File: &models.File{Path: "b"},
|
||||||
path: "b",
|
path: "./b",
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -126,20 +137,25 @@ func TestBuildTreeFromFiles(t *testing.T) {
|
|||||||
},
|
},
|
||||||
expected: &Node[models.File]{
|
expected: &Node[models.File]{
|
||||||
path: "",
|
path: "",
|
||||||
|
Children: []*Node[models.File]{
|
||||||
|
{
|
||||||
|
path: ".",
|
||||||
// it is a little strange that we're not bubbling up our merge conflict
|
// it is a little strange that we're not bubbling up our merge conflict
|
||||||
// here but we are technically still in tree mode and that's the rule
|
// here but we are technically still in tree mode and that's the rule
|
||||||
Children: []*Node[models.File]{
|
Children: []*Node[models.File]{
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "a"},
|
File: &models.File{Path: "a"},
|
||||||
path: "a",
|
path: "./a",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "b"},
|
File: &models.File{Path: "b"},
|
||||||
path: "b",
|
path: "./b",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "z", HasMergeConflicts: true},
|
File: &models.File{Path: "z", HasMergeConflicts: true},
|
||||||
path: "z",
|
path: "./z",
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -183,12 +199,12 @@ func TestBuildFlatTreeFromFiles(t *testing.T) {
|
|||||||
Children: []*Node[models.File]{
|
Children: []*Node[models.File]{
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "dir1/a"},
|
File: &models.File{Path: "dir1/a"},
|
||||||
path: "dir1/a",
|
path: "./dir1/a",
|
||||||
CompressionLevel: 0,
|
CompressionLevel: 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "dir1/b"},
|
File: &models.File{Path: "dir1/b"},
|
||||||
path: "dir1/b",
|
path: "./dir1/b",
|
||||||
CompressionLevel: 0,
|
CompressionLevel: 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -209,12 +225,12 @@ func TestBuildFlatTreeFromFiles(t *testing.T) {
|
|||||||
Children: []*Node[models.File]{
|
Children: []*Node[models.File]{
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "dir1/a"},
|
File: &models.File{Path: "dir1/a"},
|
||||||
path: "dir1/a",
|
path: "./dir1/a",
|
||||||
CompressionLevel: 0,
|
CompressionLevel: 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "dir2/b"},
|
File: &models.File{Path: "dir2/b"},
|
||||||
path: "dir2/b",
|
path: "./dir2/b",
|
||||||
CompressionLevel: 0,
|
CompressionLevel: 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -235,11 +251,11 @@ func TestBuildFlatTreeFromFiles(t *testing.T) {
|
|||||||
Children: []*Node[models.File]{
|
Children: []*Node[models.File]{
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "a"},
|
File: &models.File{Path: "a"},
|
||||||
path: "a",
|
path: "./a",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "b"},
|
File: &models.File{Path: "b"},
|
||||||
path: "b",
|
path: "./b",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -277,27 +293,27 @@ func TestBuildFlatTreeFromFiles(t *testing.T) {
|
|||||||
Children: []*Node[models.File]{
|
Children: []*Node[models.File]{
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "c1", HasMergeConflicts: true},
|
File: &models.File{Path: "c1", HasMergeConflicts: true},
|
||||||
path: "c1",
|
path: "./c1",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "c2", HasMergeConflicts: true},
|
File: &models.File{Path: "c2", HasMergeConflicts: true},
|
||||||
path: "c2",
|
path: "./c2",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "b1", Tracked: true},
|
File: &models.File{Path: "b1", Tracked: true},
|
||||||
path: "b1",
|
path: "./b1",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "b2", Tracked: true},
|
File: &models.File{Path: "b2", Tracked: true},
|
||||||
path: "b2",
|
path: "./b2",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "a1", Tracked: false},
|
File: &models.File{Path: "a1", Tracked: false},
|
||||||
path: "a1",
|
path: "./a1",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.File{Path: "a2", Tracked: false},
|
File: &models.File{Path: "a2", Tracked: false},
|
||||||
path: "a2",
|
path: "./a2",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -340,15 +356,16 @@ func TestBuildTreeFromCommitFiles(t *testing.T) {
|
|||||||
path: "",
|
path: "",
|
||||||
Children: []*Node[models.CommitFile]{
|
Children: []*Node[models.CommitFile]{
|
||||||
{
|
{
|
||||||
path: "dir1",
|
path: "./dir1",
|
||||||
|
CompressionLevel: 1,
|
||||||
Children: []*Node[models.CommitFile]{
|
Children: []*Node[models.CommitFile]{
|
||||||
{
|
{
|
||||||
File: &models.CommitFile{Path: "dir1/a"},
|
File: &models.CommitFile{Path: "dir1/a"},
|
||||||
path: "dir1/a",
|
path: "./dir1/a",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.CommitFile{Path: "dir1/b"},
|
File: &models.CommitFile{Path: "dir1/b"},
|
||||||
path: "dir1/b",
|
path: "./dir1/b",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -369,21 +386,24 @@ func TestBuildTreeFromCommitFiles(t *testing.T) {
|
|||||||
path: "",
|
path: "",
|
||||||
Children: []*Node[models.CommitFile]{
|
Children: []*Node[models.CommitFile]{
|
||||||
{
|
{
|
||||||
path: "dir1/dir3",
|
path: ".",
|
||||||
|
Children: []*Node[models.CommitFile]{
|
||||||
|
{
|
||||||
|
path: "./dir1/dir3",
|
||||||
Children: []*Node[models.CommitFile]{
|
Children: []*Node[models.CommitFile]{
|
||||||
{
|
{
|
||||||
File: &models.CommitFile{Path: "dir1/dir3/a"},
|
File: &models.CommitFile{Path: "dir1/dir3/a"},
|
||||||
path: "dir1/dir3/a",
|
path: "./dir1/dir3/a",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
CompressionLevel: 1,
|
CompressionLevel: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "dir2/dir4",
|
path: "./dir2/dir4",
|
||||||
Children: []*Node[models.CommitFile]{
|
Children: []*Node[models.CommitFile]{
|
||||||
{
|
{
|
||||||
File: &models.CommitFile{Path: "dir2/dir4/b"},
|
File: &models.CommitFile{Path: "dir2/dir4/b"},
|
||||||
path: "dir2/dir4/b",
|
path: "./dir2/dir4/b",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
CompressionLevel: 1,
|
CompressionLevel: 1,
|
||||||
@ -391,6 +411,8 @@ func TestBuildTreeFromCommitFiles(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "paths that can be sorted",
|
name: "paths that can be sorted",
|
||||||
files: []*models.CommitFile{
|
files: []*models.CommitFile{
|
||||||
@ -403,14 +425,19 @@ func TestBuildTreeFromCommitFiles(t *testing.T) {
|
|||||||
},
|
},
|
||||||
expected: &Node[models.CommitFile]{
|
expected: &Node[models.CommitFile]{
|
||||||
path: "",
|
path: "",
|
||||||
|
Children: []*Node[models.CommitFile]{
|
||||||
|
{
|
||||||
|
path: ".",
|
||||||
Children: []*Node[models.CommitFile]{
|
Children: []*Node[models.CommitFile]{
|
||||||
{
|
{
|
||||||
File: &models.CommitFile{Path: "a"},
|
File: &models.CommitFile{Path: "a"},
|
||||||
path: "a",
|
path: "./a",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.CommitFile{Path: "b"},
|
File: &models.CommitFile{Path: "b"},
|
||||||
path: "b",
|
path: "./b",
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -454,12 +481,12 @@ func TestBuildFlatTreeFromCommitFiles(t *testing.T) {
|
|||||||
Children: []*Node[models.CommitFile]{
|
Children: []*Node[models.CommitFile]{
|
||||||
{
|
{
|
||||||
File: &models.CommitFile{Path: "dir1/a"},
|
File: &models.CommitFile{Path: "dir1/a"},
|
||||||
path: "dir1/a",
|
path: "./dir1/a",
|
||||||
CompressionLevel: 0,
|
CompressionLevel: 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.CommitFile{Path: "dir1/b"},
|
File: &models.CommitFile{Path: "dir1/b"},
|
||||||
path: "dir1/b",
|
path: "./dir1/b",
|
||||||
CompressionLevel: 0,
|
CompressionLevel: 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -480,12 +507,12 @@ func TestBuildFlatTreeFromCommitFiles(t *testing.T) {
|
|||||||
Children: []*Node[models.CommitFile]{
|
Children: []*Node[models.CommitFile]{
|
||||||
{
|
{
|
||||||
File: &models.CommitFile{Path: "dir1/a"},
|
File: &models.CommitFile{Path: "dir1/a"},
|
||||||
path: "dir1/a",
|
path: "./dir1/a",
|
||||||
CompressionLevel: 0,
|
CompressionLevel: 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.CommitFile{Path: "dir2/b"},
|
File: &models.CommitFile{Path: "dir2/b"},
|
||||||
path: "dir2/b",
|
path: "./dir2/b",
|
||||||
CompressionLevel: 0,
|
CompressionLevel: 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -506,11 +533,11 @@ func TestBuildFlatTreeFromCommitFiles(t *testing.T) {
|
|||||||
Children: []*Node[models.CommitFile]{
|
Children: []*Node[models.CommitFile]{
|
||||||
{
|
{
|
||||||
File: &models.CommitFile{Path: "a"},
|
File: &models.CommitFile{Path: "a"},
|
||||||
path: "a",
|
path: "./a",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
File: &models.CommitFile{Path: "b"},
|
File: &models.CommitFile{Path: "b"},
|
||||||
path: "b",
|
path: "./b",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -20,7 +20,7 @@ type Node[T any] struct {
|
|||||||
Children []*Node[T]
|
Children []*Node[T]
|
||||||
|
|
||||||
// path of the file/directory
|
// path of the file/directory
|
||||||
// private; use GetPath() to access
|
// private; use either GetPath() or GetInternalPath() to access
|
||||||
path string
|
path string
|
||||||
|
|
||||||
// rather than render a tree as:
|
// rather than render a tree as:
|
||||||
@ -47,7 +47,19 @@ func (self *Node[T]) GetFile() *T {
|
|||||||
return self.File
|
return self.File
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This returns the logical path from the user's point of view. It is the
|
||||||
|
// relative path from the root of the repository.
|
||||||
|
// Use this for display, or when you want to perform some action on the path
|
||||||
|
// (e.g. a git command).
|
||||||
func (self *Node[T]) GetPath() string {
|
func (self *Node[T]) GetPath() string {
|
||||||
|
return strings.TrimPrefix(self.path, "./")
|
||||||
|
}
|
||||||
|
|
||||||
|
// This returns the internal path from the tree's point of view. It's the same
|
||||||
|
// as GetPath(), but prefixed with "./" for the root item.
|
||||||
|
// Use this when interacting with the tree itself, e.g. when calling
|
||||||
|
// ToggleCollapsed.
|
||||||
|
func (self *Node[T]) GetInternalPath() string {
|
||||||
return self.path
|
return self.path
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,11 +91,11 @@ func renderAux[T any](
|
|||||||
|
|
||||||
arr := []string{}
|
arr := []string{}
|
||||||
if !isRoot {
|
if !isRoot {
|
||||||
isCollapsed := collapsedPaths.IsCollapsed(node.GetPath())
|
isCollapsed := collapsedPaths.IsCollapsed(node.GetInternalPath())
|
||||||
arr = append(arr, renderLine(node, treeDepth, visualDepth, isCollapsed))
|
arr = append(arr, renderLine(node, treeDepth, visualDepth, isCollapsed))
|
||||||
}
|
}
|
||||||
|
|
||||||
if collapsedPaths.IsCollapsed(node.GetPath()) {
|
if collapsedPaths.IsCollapsed(node.GetInternalPath()) {
|
||||||
return arr
|
return arr
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,7 +293,13 @@ func getColorForChangeStatus(changeStatus string) style.TextStyle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func fileNameAtDepth(node *filetree.Node[models.File], depth int) string {
|
func fileNameAtDepth(node *filetree.Node[models.File], depth int) string {
|
||||||
splitName := split(node.GetPath())
|
splitName := split(node.GetInternalPath())
|
||||||
|
if depth == 0 && splitName[0] == "." {
|
||||||
|
if len(splitName) == 1 {
|
||||||
|
return "/"
|
||||||
|
}
|
||||||
|
depth = 1
|
||||||
|
}
|
||||||
name := join(splitName[depth:])
|
name := join(splitName[depth:])
|
||||||
|
|
||||||
if node.File != nil && node.File.IsRename() {
|
if node.File != nil && node.File.IsRename() {
|
||||||
@ -314,7 +320,13 @@ func fileNameAtDepth(node *filetree.Node[models.File], depth int) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func commitFileNameAtDepth(node *filetree.Node[models.CommitFile], depth int) string {
|
func commitFileNameAtDepth(node *filetree.Node[models.CommitFile], depth int) string {
|
||||||
splitName := split(node.GetPath())
|
splitName := split(node.GetInternalPath())
|
||||||
|
if depth == 0 && splitName[0] == "." {
|
||||||
|
if len(splitName) == 1 {
|
||||||
|
return "/"
|
||||||
|
}
|
||||||
|
depth = 1
|
||||||
|
}
|
||||||
name := join(splitName[depth:])
|
name := join(splitName[depth:])
|
||||||
|
|
||||||
return name
|
return name
|
||||||
|
@ -48,6 +48,7 @@ func TestRenderFileTree(t *testing.T) {
|
|||||||
},
|
},
|
||||||
showLineChanges: true,
|
showLineChanges: true,
|
||||||
expected: []string{
|
expected: []string{
|
||||||
|
"▼ /",
|
||||||
" M test +1 -1",
|
" M test +1 -1",
|
||||||
" M test2 +1",
|
" M test2 +1",
|
||||||
" M test3 -1",
|
" M test3 -1",
|
||||||
@ -66,6 +67,7 @@ func TestRenderFileTree(t *testing.T) {
|
|||||||
},
|
},
|
||||||
expected: toStringSlice(
|
expected: toStringSlice(
|
||||||
`
|
`
|
||||||
|
▼ /
|
||||||
▶ dir1
|
▶ dir1
|
||||||
▼ dir2
|
▼ dir2
|
||||||
▼ dir2
|
▼ dir2
|
||||||
@ -75,7 +77,7 @@ func TestRenderFileTree(t *testing.T) {
|
|||||||
M file1
|
M file1
|
||||||
`,
|
`,
|
||||||
),
|
),
|
||||||
collapsedPaths: []string{"dir1"},
|
collapsedPaths: []string{"./dir1"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,6 +129,7 @@ func TestRenderCommitFileTree(t *testing.T) {
|
|||||||
},
|
},
|
||||||
expected: toStringSlice(
|
expected: toStringSlice(
|
||||||
`
|
`
|
||||||
|
▼ /
|
||||||
▶ dir1
|
▶ dir1
|
||||||
▼ dir2
|
▼ dir2
|
||||||
▼ dir2
|
▼ dir2
|
||||||
@ -136,7 +139,7 @@ func TestRenderCommitFileTree(t *testing.T) {
|
|||||||
M file1
|
M file1
|
||||||
`,
|
`,
|
||||||
),
|
),
|
||||||
collapsedPaths: []string{"dir1"},
|
collapsedPaths: []string{"./dir1"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,6 +72,7 @@ var ResetToUpstream = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
Contains("hard commit"),
|
Contains("hard commit"),
|
||||||
)
|
)
|
||||||
t.Views().Files().Lines(
|
t.Views().Files().Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" A file-1"),
|
Equals(" A file-1"),
|
||||||
Equals(" A file-2"),
|
Equals(" A file-2"),
|
||||||
)
|
)
|
||||||
|
@ -21,17 +21,21 @@ var Commit = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("?? myfile").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ?? myfile"),
|
||||||
Equals(" ?? myfile2"),
|
Equals(" ?? myfile2"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressPrimaryAction(). // stage file
|
PressPrimaryAction(). // stage file
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" A myfile").IsSelected(),
|
Equals(" A myfile").IsSelected(),
|
||||||
Equals(" ?? myfile2"),
|
Equals(" ?? myfile2"),
|
||||||
).
|
).
|
||||||
SelectNextItem().
|
SelectNextItem().
|
||||||
PressPrimaryAction(). // stage other file
|
PressPrimaryAction(). // stage other file
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" A myfile"),
|
Equals(" A myfile"),
|
||||||
Equals(" A myfile2").IsSelected(),
|
Equals(" A myfile2").IsSelected(),
|
||||||
).
|
).
|
||||||
@ -54,6 +58,7 @@ var Commit = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" A myfile"),
|
Equals(" A myfile"),
|
||||||
Equals(" A myfile2"),
|
Equals(" A myfile2"),
|
||||||
)
|
)
|
||||||
|
@ -25,6 +25,12 @@ var CommitSwitchToEditor = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
|
Lines(
|
||||||
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ?? file1"),
|
||||||
|
Equals(" ?? file2"),
|
||||||
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressPrimaryAction(). // stage one of the files
|
PressPrimaryAction(). // stage one of the files
|
||||||
Press(keys.Files.CommitChanges)
|
Press(keys.Files.CommitChanges)
|
||||||
|
|
||||||
@ -45,6 +51,9 @@ var CommitSwitchToEditor = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
// Now check that the preserved commit message was cleared:
|
// Now check that the preserved commit message was cleared:
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Focus().
|
Focus().
|
||||||
|
Lines(
|
||||||
|
Equals("?? file2"),
|
||||||
|
).
|
||||||
PressPrimaryAction(). // stage the other file
|
PressPrimaryAction(). // stage the other file
|
||||||
Press(keys.Files.CommitChanges)
|
Press(keys.Files.CommitChanges)
|
||||||
|
|
||||||
|
@ -43,7 +43,8 @@ var DiscardOldFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▼ dir1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ▼ subd1"),
|
Equals(" ▼ subd1"),
|
||||||
Equals(" A subfile0"),
|
Equals(" A subfile0"),
|
||||||
Equals(" A d1_file0"),
|
Equals(" A d1_file0"),
|
||||||
@ -62,6 +63,7 @@ var DiscardOldFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1/subd1"),
|
Equals(" ▼ dir1/subd1"),
|
||||||
Equals(" A subfile0"),
|
Equals(" A subfile0"),
|
||||||
Equals(" ▼ dir2"),
|
Equals(" ▼ dir2"),
|
||||||
|
@ -20,6 +20,12 @@ var Reword = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
|
Lines(
|
||||||
|
Equals("▼ /").IsSelected(),
|
||||||
|
Contains("myfile"),
|
||||||
|
Contains("myfile2"),
|
||||||
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Press(keys.Files.CommitChanges)
|
Press(keys.Files.CommitChanges)
|
||||||
|
|
||||||
|
@ -21,7 +21,12 @@ var Staged = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
SelectedLine(Contains("myfile")).
|
Lines(
|
||||||
|
Equals("▼ /").IsSelected(),
|
||||||
|
Contains("myfile"),
|
||||||
|
Contains("myfile2"),
|
||||||
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressPrimaryAction(). // stage the file
|
PressPrimaryAction(). // stage the file
|
||||||
PressEnter()
|
PressEnter()
|
||||||
|
|
||||||
|
@ -22,7 +22,12 @@ var StagedWithoutHooks = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
// stage the file
|
// stage the file
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
SelectedLine(Contains("myfile")).
|
Lines(
|
||||||
|
Equals("▼ /").IsSelected(),
|
||||||
|
Contains("myfile"),
|
||||||
|
Contains("myfile2"),
|
||||||
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
PressEnter()
|
PressEnter()
|
||||||
|
|
||||||
|
@ -21,7 +21,12 @@ var Unstaged = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
SelectedLine(Contains("myfile")).
|
Lines(
|
||||||
|
Equals("▼ /").IsSelected(),
|
||||||
|
Contains("myfile"),
|
||||||
|
Contains("myfile2"),
|
||||||
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressEnter()
|
PressEnter()
|
||||||
|
|
||||||
t.Views().Staging().
|
t.Views().Staging().
|
||||||
|
@ -18,7 +18,8 @@ var Filter = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("UU file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" UU file1"),
|
||||||
Equals(" UU file2"),
|
Equals(" UU file2"),
|
||||||
).
|
).
|
||||||
Press(keys.Files.OpenStatusFilter).
|
Press(keys.Files.OpenStatusFilter).
|
||||||
@ -29,7 +30,8 @@ var Filter = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
Confirm()
|
Confirm()
|
||||||
}).
|
}).
|
||||||
Lines(
|
Lines(
|
||||||
Equals("UU file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" UU file1"),
|
||||||
Equals(" UU file2"),
|
Equals(" UU file2"),
|
||||||
// now we see the non-merge conflict file
|
// now we see the non-merge conflict file
|
||||||
Equals(" A file3"),
|
Equals(" A file3"),
|
||||||
|
@ -18,9 +18,11 @@ var ResolveMultipleFiles = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("UU file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" UU file1"),
|
||||||
Equals(" UU file2"),
|
Equals(" UU file2"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressEnter()
|
PressEnter()
|
||||||
|
|
||||||
t.Views().MergeConflicts().
|
t.Views().MergeConflicts().
|
||||||
|
@ -20,9 +20,11 @@ var ResolveNoAutoStage = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("UU file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" UU file1"),
|
||||||
Equals(" UU file2"),
|
Equals(" UU file2"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressEnter()
|
PressEnter()
|
||||||
|
|
||||||
t.Views().MergeConflicts().
|
t.Views().MergeConflicts().
|
||||||
@ -38,6 +40,7 @@ var ResolveNoAutoStage = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
IsFocused().
|
IsFocused().
|
||||||
// Resolving the conflict didn't auto-stage it
|
// Resolving the conflict didn't auto-stage it
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" UU file1").IsSelected(),
|
Equals(" UU file1").IsSelected(),
|
||||||
Equals(" UU file2"),
|
Equals(" UU file2"),
|
||||||
).
|
).
|
||||||
|
@ -68,6 +68,7 @@ var CustomCommandsSubmenu = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Contains("myfile-commits"),
|
Contains("myfile-commits"),
|
||||||
Contains("myfile-files"),
|
Contains("myfile-files"),
|
||||||
)
|
)
|
||||||
|
@ -21,7 +21,8 @@ var CollapseExpand = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▼ dir").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ▼ dir"),
|
||||||
Equals(" ?? file-one"),
|
Equals(" ?? file-one"),
|
||||||
Equals(" ▼ dir2"),
|
Equals(" ▼ dir2"),
|
||||||
Equals(" ?? file-two"),
|
Equals(" ?? file-two"),
|
||||||
@ -30,14 +31,14 @@ var CollapseExpand = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Press(keys.Files.CollapseAll).
|
Press(keys.Files.CollapseAll).
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▶ dir"),
|
Equals("▶ /"),
|
||||||
Equals("▶ dir2"),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Press(keys.Files.ExpandAll).
|
Press(keys.Files.ExpandAll).
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▼ dir").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ▼ dir"),
|
||||||
Equals(" ?? file-one"),
|
Equals(" ?? file-one"),
|
||||||
Equals(" ▼ dir2"),
|
Equals(" ▼ dir2"),
|
||||||
Equals(" ?? file-two"),
|
Equals(" ?? file-two"),
|
||||||
|
@ -29,7 +29,8 @@ var DiscardRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▼ dir1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-1a"),
|
Equals(" ?? file-1a"),
|
||||||
Equals(" ?? file-1b"),
|
Equals(" ?? file-1b"),
|
||||||
Equals(" ▼ dir2"),
|
Equals(" ▼ dir2"),
|
||||||
@ -45,6 +46,7 @@ var DiscardRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
Press(keys.Universal.ToggleRangeSelect).
|
Press(keys.Universal.ToggleRangeSelect).
|
||||||
NavigateToLine(Contains("file-2a")).
|
NavigateToLine(Contains("file-2a")).
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1"),
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-1a"),
|
Equals(" ?? file-1a"),
|
||||||
Equals(" ?? file-1b").IsSelected(),
|
Equals(" ?? file-1b").IsSelected(),
|
||||||
@ -66,6 +68,7 @@ var DiscardRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
Confirm()
|
Confirm()
|
||||||
}).
|
}).
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1"),
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-1a"),
|
Equals(" ?? file-1a"),
|
||||||
Equals(" ▼ dir3").IsSelected(),
|
Equals(" ▼ dir3").IsSelected(),
|
||||||
@ -79,6 +82,7 @@ var DiscardRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
Press(keys.Universal.ToggleRangeSelect).
|
Press(keys.Universal.ToggleRangeSelect).
|
||||||
NavigateToLine(Contains("file-a")).
|
NavigateToLine(Contains("file-a")).
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1"),
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-1a"),
|
Equals(" ?? file-1a"),
|
||||||
Equals(" ▶ dir3").IsSelected(),
|
Equals(" ▶ dir3").IsSelected(),
|
||||||
@ -93,6 +97,7 @@ var DiscardRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
Confirm()
|
Confirm()
|
||||||
}).
|
}).
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1"),
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-1a"),
|
Equals(" ?? file-1a"),
|
||||||
Equals(" ?? file-b").IsSelected(),
|
Equals(" ?? file-b").IsSelected(),
|
||||||
|
@ -24,13 +24,15 @@ var DiscardStagedChanges = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals(" M file2").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" M file2"),
|
||||||
Equals(" ?? file3"),
|
Equals(" ?? file3"),
|
||||||
Equals(" M fileToRemove"),
|
Equals(" M fileToRemove"),
|
||||||
).
|
).
|
||||||
NavigateToLine(Contains(`fileToRemove`)).
|
NavigateToLine(Contains(`fileToRemove`)).
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" M file2"),
|
Equals(" M file2"),
|
||||||
Equals(" ?? file3"),
|
Equals(" ?? file3"),
|
||||||
Equals(" M fileToRemove").IsSelected(),
|
Equals(" M fileToRemove").IsSelected(),
|
||||||
@ -42,6 +44,7 @@ var DiscardStagedChanges = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
// staged file has been removed
|
// staged file has been removed
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" M file2"),
|
Equals(" M file2"),
|
||||||
Equals(" ?? file3").IsSelected(),
|
Equals(" ?? file3").IsSelected(),
|
||||||
)
|
)
|
||||||
|
@ -30,13 +30,15 @@ var DiscardUnstagedDirChanges = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▼ dir").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ▼ dir"),
|
||||||
Equals(" ▼ subdir"),
|
Equals(" ▼ subdir"),
|
||||||
Equals(" ?? unstaged-file-one"),
|
Equals(" ?? unstaged-file-one"),
|
||||||
Equals(" MM file-one"),
|
Equals(" MM file-one"),
|
||||||
Equals(" ?? unstaged-file-two"),
|
Equals(" ?? unstaged-file-two"),
|
||||||
Equals(" ?? unstaged-file-three"),
|
Equals(" ?? unstaged-file-three"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
Press(keys.Universal.Remove).
|
Press(keys.Universal.Remove).
|
||||||
Tap(func() {
|
Tap(func() {
|
||||||
t.ExpectPopup().Menu().
|
t.ExpectPopup().Menu().
|
||||||
@ -45,6 +47,7 @@ var DiscardUnstagedDirChanges = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
Confirm()
|
Confirm()
|
||||||
}).
|
}).
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir").IsSelected(),
|
Equals(" ▼ dir").IsSelected(),
|
||||||
Equals(" M file-one"),
|
Equals(" M file-one"),
|
||||||
// this guy remains untouched because it wasn't inside the 'dir' directory
|
// this guy remains untouched because it wasn't inside the 'dir' directory
|
||||||
|
@ -26,9 +26,11 @@ var DiscardUnstagedFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("MM file-one").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" MM file-one"),
|
||||||
Equals(" AM file-two"),
|
Equals(" AM file-two"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
Press(keys.Universal.Remove).
|
Press(keys.Universal.Remove).
|
||||||
Tap(func() {
|
Tap(func() {
|
||||||
t.ExpectPopup().Menu().
|
t.ExpectPopup().Menu().
|
||||||
@ -37,11 +39,13 @@ var DiscardUnstagedFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
Confirm()
|
Confirm()
|
||||||
}).
|
}).
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" M file-one").IsSelected(),
|
Equals(" M file-one").IsSelected(),
|
||||||
Equals(" AM file-two"),
|
Equals(" AM file-two"),
|
||||||
).
|
).
|
||||||
SelectNextItem().
|
SelectNextItem().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" M file-one"),
|
Equals(" M file-one"),
|
||||||
Equals(" AM file-two").IsSelected(),
|
Equals(" AM file-two").IsSelected(),
|
||||||
).
|
).
|
||||||
@ -53,6 +57,7 @@ var DiscardUnstagedFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
Confirm()
|
Confirm()
|
||||||
}).
|
}).
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" M file-one"),
|
Equals(" M file-one"),
|
||||||
Equals(" A file-two").IsSelected(),
|
Equals(" A file-two").IsSelected(),
|
||||||
)
|
)
|
||||||
|
@ -26,7 +26,8 @@ var DiscardUnstagedRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▼ dir1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-a"),
|
Equals(" ?? file-a"),
|
||||||
Equals(" ?? file-b"),
|
Equals(" ?? file-b"),
|
||||||
Equals(" ▼ dir2"),
|
Equals(" ▼ dir2"),
|
||||||
@ -39,6 +40,7 @@ var DiscardUnstagedRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
Press(keys.Universal.ToggleRangeSelect).
|
Press(keys.Universal.ToggleRangeSelect).
|
||||||
NavigateToLine(Contains("file-c")).
|
NavigateToLine(Contains("file-c")).
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1"),
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-a"),
|
Equals(" ?? file-a"),
|
||||||
Equals(" ?? file-b").IsSelected(),
|
Equals(" ?? file-b").IsSelected(),
|
||||||
@ -60,6 +62,7 @@ var DiscardUnstagedRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
// file-c is still there because it contained no unstaged changes
|
// file-c is still there because it contained no unstaged changes
|
||||||
// file-d is gone because it was selected via dir2 and contained only unstaged changes
|
// file-d is gone because it was selected via dir2 and contained only unstaged changes
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1"),
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-a"),
|
Equals(" ?? file-a"),
|
||||||
Equals(" ▼ dir2"),
|
Equals(" ▼ dir2"),
|
||||||
|
@ -21,11 +21,17 @@ var DiscardVariousChanges = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
label string
|
label string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t.Views().Files().
|
||||||
|
IsFocused().
|
||||||
|
TopLines(
|
||||||
|
Equals("▼ /").IsSelected(),
|
||||||
|
)
|
||||||
|
|
||||||
discardOneByOne := func(files []statusFile) {
|
discardOneByOne := func(files []statusFile) {
|
||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
SelectedLine(Contains(file.status + " " + file.label)).
|
NavigateToLine(Contains(file.status + " " + file.label)).
|
||||||
Press(keys.Universal.Remove)
|
Press(keys.Universal.Remove)
|
||||||
|
|
||||||
t.ExpectPopup().Menu().
|
t.ExpectPopup().Menu().
|
||||||
|
@ -19,7 +19,8 @@ var DiscardVariousChangesRangeSelect = NewIntegrationTest(NewIntegrationTestArgs
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("UA added-them-changed-us.txt").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" UA added-them-changed-us.txt"),
|
||||||
Equals(" AA both-added.txt"),
|
Equals(" AA both-added.txt"),
|
||||||
Equals(" DD both-deleted.txt"),
|
Equals(" DD both-deleted.txt"),
|
||||||
Equals(" UU both-modded.txt"),
|
Equals(" UU both-modded.txt"),
|
||||||
@ -27,6 +28,7 @@ var DiscardVariousChangesRangeSelect = NewIntegrationTest(NewIntegrationTestArgs
|
|||||||
Equals(" UD deleted-them.txt"),
|
Equals(" UD deleted-them.txt"),
|
||||||
Equals(" DU deleted-us.txt"),
|
Equals(" DU deleted-us.txt"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
Press(keys.Universal.ToggleRangeSelect).
|
Press(keys.Universal.ToggleRangeSelect).
|
||||||
NavigateToLine(Contains("deleted-us.txt")).
|
NavigateToLine(Contains("deleted-us.txt")).
|
||||||
Press(keys.Universal.Remove).
|
Press(keys.Universal.Remove).
|
||||||
@ -42,7 +44,8 @@ var DiscardVariousChangesRangeSelect = NewIntegrationTest(NewIntegrationTestArgs
|
|||||||
Cancel()
|
Cancel()
|
||||||
}).
|
}).
|
||||||
Lines(
|
Lines(
|
||||||
Equals("AM added-changed.txt").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" AM added-changed.txt"),
|
||||||
Equals(" MD change-delete.txt"),
|
Equals(" MD change-delete.txt"),
|
||||||
Equals(" D delete-change.txt"),
|
Equals(" D delete-change.txt"),
|
||||||
Equals(" D deleted-staged.txt"),
|
Equals(" D deleted-staged.txt"),
|
||||||
|
@ -20,10 +20,12 @@ var Gitignore = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("?? .gitignore").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ?? .gitignore"),
|
||||||
Equals(" ?? toExclude"),
|
Equals(" ?? toExclude"),
|
||||||
Equals(" ?? toIgnore"),
|
Equals(" ?? toIgnore"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
Press(keys.Files.IgnoreFile).
|
Press(keys.Files.IgnoreFile).
|
||||||
// ensure we can't exclude the .gitignore file
|
// ensure we can't exclude the .gitignore file
|
||||||
Tap(func() {
|
Tap(func() {
|
||||||
|
@ -31,6 +31,7 @@ var RememberCommitMessageAfterFail = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Contains("bad"),
|
Contains("bad"),
|
||||||
Contains("one"),
|
Contains("one"),
|
||||||
).
|
).
|
||||||
@ -40,6 +41,7 @@ var RememberCommitMessageAfterFail = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.ExpectPopup().Alert().Title(Equals("Error")).Content(Contains("Git command failed")).Confirm()
|
t.ExpectPopup().Alert().Title(Equals("Error")).Content(Contains("Git command failed")).Confirm()
|
||||||
}).
|
}).
|
||||||
|
NavigateToLine(Contains("bad")).
|
||||||
Press(keys.Universal.Remove). // remove file that triggers pre-commit hook to fail
|
Press(keys.Universal.Remove). // remove file that triggers pre-commit hook to fail
|
||||||
Tap(func() {
|
Tap(func() {
|
||||||
t.ExpectPopup().Menu().
|
t.ExpectPopup().Menu().
|
||||||
|
@ -21,6 +21,7 @@ var RenameSimilarityThresholdChange = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" D original"),
|
Equals(" D original"),
|
||||||
Equals(" A renamed"),
|
Equals(" A renamed"),
|
||||||
).
|
).
|
||||||
|
@ -21,7 +21,8 @@ var StageChildrenRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▼ baz").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ▼ baz"),
|
||||||
Equals(" ?? file"),
|
Equals(" ?? file"),
|
||||||
Equals(" ▼ bazbam"),
|
Equals(" ▼ bazbam"),
|
||||||
Equals(" ?? file"),
|
Equals(" ?? file"),
|
||||||
@ -34,6 +35,7 @@ var StageChildrenRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
// Stage
|
// Stage
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /").IsSelected(),
|
||||||
Equals(" ▼ baz").IsSelected(),
|
Equals(" ▼ baz").IsSelected(),
|
||||||
Equals(" A file").IsSelected(),
|
Equals(" A file").IsSelected(),
|
||||||
Equals(" ▼ bazbam").IsSelected(),
|
Equals(" ▼ bazbam").IsSelected(),
|
||||||
|
@ -23,12 +23,15 @@ var StageDeletedRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals(" D file-a").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" D file-a"),
|
||||||
Equals(" D file-b"),
|
Equals(" D file-b"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
// Stage a single deleted file
|
// Stage a single deleted file
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" D file-a").IsSelected(),
|
Equals(" D file-a").IsSelected(),
|
||||||
Equals(" D file-b"),
|
Equals(" D file-b"),
|
||||||
).
|
).
|
||||||
@ -37,12 +40,14 @@ var StageDeletedRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
// Stage both files while a deleted file is already staged
|
// Stage both files while a deleted file is already staged
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" D file-a").IsSelected(),
|
Equals(" D file-a").IsSelected(),
|
||||||
Equals(" D file-b").IsSelected(),
|
Equals(" D file-b").IsSelected(),
|
||||||
).
|
).
|
||||||
// Unstage; back to everything being unstaged
|
// Unstage; back to everything being unstaged
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" D file-a").IsSelected(),
|
Equals(" D file-a").IsSelected(),
|
||||||
Equals(" D file-b").IsSelected(),
|
Equals(" D file-b").IsSelected(),
|
||||||
)
|
)
|
||||||
|
@ -26,7 +26,8 @@ var StageRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▼ dir1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-a"),
|
Equals(" ?? file-a"),
|
||||||
Equals(" ?? file-b"),
|
Equals(" ?? file-b"),
|
||||||
Equals(" ▼ dir2"),
|
Equals(" ▼ dir2"),
|
||||||
@ -41,6 +42,7 @@ var StageRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
// Stage
|
// Stage
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1"),
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-a"),
|
Equals(" ?? file-a"),
|
||||||
Equals(" A file-b").IsSelected(),
|
Equals(" A file-b").IsSelected(),
|
||||||
@ -54,6 +56,7 @@ var StageRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
// Unstage; back to everything being unstaged
|
// Unstage; back to everything being unstaged
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1"),
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-a"),
|
Equals(" ?? file-a"),
|
||||||
Equals(" ?? file-b").IsSelected(),
|
Equals(" ?? file-b").IsSelected(),
|
||||||
@ -69,6 +72,7 @@ var StageRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
// Collapse the directory
|
// Collapse the directory
|
||||||
PressEnter().
|
PressEnter().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1"),
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-a"),
|
Equals(" ?? file-a"),
|
||||||
Equals(" ?? file-b"),
|
Equals(" ?? file-b"),
|
||||||
@ -81,6 +85,7 @@ var StageRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
// Stage
|
// Stage
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1"),
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-a"),
|
Equals(" ?? file-a"),
|
||||||
Equals(" ?? file-b"),
|
Equals(" ?? file-b"),
|
||||||
@ -93,6 +98,7 @@ var StageRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
// Expand the directory again to verify it's been staged
|
// Expand the directory again to verify it's been staged
|
||||||
PressEnter().
|
PressEnter().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1"),
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ?? file-a"),
|
Equals(" ?? file-a"),
|
||||||
Equals(" ?? file-b"),
|
Equals(" ?? file-b"),
|
||||||
|
@ -29,7 +29,8 @@ var FilterByFileStatus = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Focus().
|
Focus().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("A file-staged-but-untracked").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" A file-staged-but-untracked"),
|
||||||
Equals(" M file-tracked"),
|
Equals(" M file-tracked"),
|
||||||
).
|
).
|
||||||
Press(keys.Files.OpenStatusFilter).
|
Press(keys.Files.OpenStatusFilter).
|
||||||
@ -50,7 +51,8 @@ var FilterByFileStatus = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
Confirm()
|
Confirm()
|
||||||
}).
|
}).
|
||||||
Lines(
|
Lines(
|
||||||
Equals("A file-staged-but-untracked").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" A file-staged-but-untracked"),
|
||||||
Equals(" M file-tracked"),
|
Equals(" M file-tracked"),
|
||||||
).
|
).
|
||||||
Press(keys.Files.OpenStatusFilter).
|
Press(keys.Files.OpenStatusFilter).
|
||||||
@ -61,7 +63,8 @@ var FilterByFileStatus = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
Confirm()
|
Confirm()
|
||||||
}).
|
}).
|
||||||
Lines(
|
Lines(
|
||||||
Equals("A file-staged-but-untracked").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" A file-staged-but-untracked"),
|
||||||
Equals(" M file-tracked"),
|
Equals(" M file-tracked"),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
@ -61,12 +61,14 @@ var NestedFilter = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("A apple").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" A apple"),
|
||||||
Equals(" A grape"),
|
Equals(" A grape"),
|
||||||
Equals(" A orange"),
|
Equals(" A orange"),
|
||||||
).
|
).
|
||||||
FilterOrSearch("grape").
|
FilterOrSearch("grape").
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" A apple"),
|
Equals(" A apple"),
|
||||||
Equals(" A grape").IsSelected(),
|
Equals(" A grape").IsSelected(),
|
||||||
Equals(" A orange"),
|
Equals(" A orange"),
|
||||||
@ -87,6 +89,7 @@ var NestedFilter = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" A apple"),
|
Equals(" A apple"),
|
||||||
Equals(" A grape").IsSelected(),
|
Equals(" A grape").IsSelected(),
|
||||||
Equals(" A orange"),
|
Equals(" A orange"),
|
||||||
@ -100,6 +103,7 @@ var NestedFilter = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Search().IsInvisible()
|
t.Views().Search().IsInvisible()
|
||||||
}).
|
}).
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" A apple"),
|
Equals(" A apple"),
|
||||||
Equals(" A grape").IsSelected(),
|
Equals(" A grape").IsSelected(),
|
||||||
Equals(" A orange"),
|
Equals(" A orange"),
|
||||||
|
@ -69,11 +69,13 @@ var NestedFilterTransient = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("A file-one").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" A file-one"),
|
||||||
Equals(" A file-two"),
|
Equals(" A file-two"),
|
||||||
).
|
).
|
||||||
FilterOrSearch("two").
|
FilterOrSearch("two").
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" A file-one"),
|
Equals(" A file-one"),
|
||||||
Equals(" A file-two").IsSelected(),
|
Equals(" A file-two").IsSelected(),
|
||||||
)
|
)
|
||||||
@ -96,7 +98,8 @@ var NestedFilterTransient = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
IsFocused().
|
IsFocused().
|
||||||
// the search on the commit-files context has been cancelled
|
// the search on the commit-files context has been cancelled
|
||||||
Lines(
|
Lines(
|
||||||
Equals("A file-one").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" A file-one"),
|
||||||
Equals(" A file-two"),
|
Equals(" A file-two"),
|
||||||
).
|
).
|
||||||
Tap(func() {
|
Tap(func() {
|
||||||
|
@ -40,6 +40,7 @@ func postFilterTest(t *TestDriver) {
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Contains(`filterFile`),
|
Contains(`filterFile`),
|
||||||
Contains(`otherFile`),
|
Contains(`otherFile`),
|
||||||
)
|
)
|
||||||
|
@ -26,9 +26,11 @@ var ApplyInReverse = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("A file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" A file1"),
|
||||||
Equals(" A file2"),
|
Equals(" A file2"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressPrimaryAction()
|
PressPrimaryAction()
|
||||||
|
|
||||||
t.Views().Information().Content(Contains("Building patch"))
|
t.Views().Information().Content(Contains("Building patch"))
|
||||||
|
@ -34,9 +34,11 @@ var ApplyInReverseWithConflict = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("M file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" M file1"),
|
||||||
Equals(" M file2"),
|
Equals(" M file2"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
// Add both files to the patch; the first will conflict, the second won't
|
// Add both files to the patch; the first will conflict, the second won't
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Tap(func() {
|
Tap(func() {
|
||||||
@ -81,9 +83,11 @@ var ApplyInReverseWithConflict = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Focus().
|
Focus().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("M file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" M file1"),
|
||||||
Equals(" M file2"),
|
Equals(" M file2"),
|
||||||
)
|
).
|
||||||
|
SelectNextItem()
|
||||||
|
|
||||||
t.Views().Main().
|
t.Views().Main().
|
||||||
ContainsLines(
|
ContainsLines(
|
||||||
|
@ -31,10 +31,12 @@ var MoveRangeToIndex = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("M file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" M file1"),
|
||||||
Equals(" A file2"),
|
Equals(" A file2"),
|
||||||
Equals(" A file3"),
|
Equals(" A file3"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
Press(keys.Universal.ToggleRangeSelect).
|
Press(keys.Universal.ToggleRangeSelect).
|
||||||
NavigateToLine(Contains("file2")).
|
NavigateToLine(Contains("file2")).
|
||||||
PressPrimaryAction()
|
PressPrimaryAction()
|
||||||
@ -55,7 +57,8 @@ var MoveRangeToIndex = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Focus().
|
Focus().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("M file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" M file1"),
|
||||||
Equals(" A file2"),
|
Equals(" A file2"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -66,7 +66,8 @@ var MoveToEarlierCommit = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▼ dir").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ▼ dir"),
|
||||||
Equals(" M file1"),
|
Equals(" M file1"),
|
||||||
Equals(" D file2"),
|
Equals(" D file2"),
|
||||||
Equals(" A file3"),
|
Equals(" A file3"),
|
||||||
|
@ -66,7 +66,8 @@ var MoveToEarlierCommitNoKeepEmpty = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▼ dir").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ▼ dir"),
|
||||||
Equals(" M file1"),
|
Equals(" M file1"),
|
||||||
Equals(" D file2"),
|
Equals(" D file2"),
|
||||||
Equals(" A file3"),
|
Equals(" A file3"),
|
||||||
|
@ -26,9 +26,11 @@ var MoveToIndex = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Contains("file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Contains("file1"),
|
||||||
Contains("file2"),
|
Contains("file2"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressPrimaryAction()
|
PressPrimaryAction()
|
||||||
|
|
||||||
t.Views().Information().Content(Contains("Building patch"))
|
t.Views().Information().Content(Contains("Building patch"))
|
||||||
|
@ -66,7 +66,8 @@ var MoveToLaterCommit = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▼ dir").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ▼ dir"),
|
||||||
Equals(" M file1"),
|
Equals(" M file1"),
|
||||||
Equals(" D file2"),
|
Equals(" D file2"),
|
||||||
Equals(" A file3"),
|
Equals(" A file3"),
|
||||||
|
@ -67,9 +67,11 @@ var MoveToLaterCommitPartialHunk = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Contains("file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Contains("file1"),
|
||||||
Contains("unrelated-file"),
|
Contains("unrelated-file"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
Tap(func() {
|
Tap(func() {
|
||||||
t.Views().Main().
|
t.Views().Main().
|
||||||
Content(Contains("+1st line\n 2nd line"))
|
Content(Contains("+1st line\n 2nd line"))
|
||||||
|
@ -26,9 +26,11 @@ var RemoveFromCommit = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Contains("file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Contains("file1"),
|
||||||
Contains("file2"),
|
Contains("file2"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressPrimaryAction()
|
PressPrimaryAction()
|
||||||
|
|
||||||
t.Views().Information().Content(Contains("Building patch"))
|
t.Views().Information().Content(Contains("Building patch"))
|
||||||
|
@ -27,7 +27,8 @@ var SelectAllFiles = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("A file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" A file1"),
|
||||||
Equals(" A file2"),
|
Equals(" A file2"),
|
||||||
Equals(" A file3"),
|
Equals(" A file3"),
|
||||||
).
|
).
|
||||||
|
@ -33,10 +33,12 @@ var SpecificSelection = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Contains("direct-file").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Contains("direct-file"),
|
||||||
Contains("hunk-file"),
|
Contains("hunk-file"),
|
||||||
Contains("line-file"),
|
Contains("line-file"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Tap(func() {
|
Tap(func() {
|
||||||
t.Views().Information().Content(Contains("Building patch"))
|
t.Views().Information().Content(Contains("Building patch"))
|
||||||
|
@ -34,7 +34,8 @@ var ToggleRange = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▼ dir1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ▼ dir1"),
|
||||||
Equals(" A file1-a"),
|
Equals(" A file1-a"),
|
||||||
Equals(" A file2-a"),
|
Equals(" A file2-a"),
|
||||||
Equals(" A file3-a"),
|
Equals(" A file3-a"),
|
||||||
@ -48,6 +49,7 @@ var ToggleRange = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
NavigateToLine(Contains("file3-a")).
|
NavigateToLine(Contains("file3-a")).
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1"),
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ● file1-a").IsSelected(),
|
Equals(" ● file1-a").IsSelected(),
|
||||||
Equals(" ● file2-a").IsSelected(),
|
Equals(" ● file2-a").IsSelected(),
|
||||||
@ -69,6 +71,7 @@ var ToggleRange = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1"),
|
Equals(" ▼ dir1"),
|
||||||
Equals(" ● file1-a"),
|
Equals(" ● file1-a"),
|
||||||
Equals(" ● file2-a"),
|
Equals(" ● file2-a"),
|
||||||
@ -83,6 +86,7 @@ var ToggleRange = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
NavigateToLine(Contains("dir2")).
|
NavigateToLine(Contains("dir2")).
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1").IsSelected(),
|
Equals(" ▼ dir1").IsSelected(),
|
||||||
Equals(" ● file1-a").IsSelected(),
|
Equals(" ● file1-a").IsSelected(),
|
||||||
Equals(" ● file2-a").IsSelected(),
|
Equals(" ● file2-a").IsSelected(),
|
||||||
@ -94,6 +98,7 @@ var ToggleRange = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
).
|
).
|
||||||
PressPrimaryAction().
|
PressPrimaryAction().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" ▼ dir1").IsSelected(),
|
Equals(" ▼ dir1").IsSelected(),
|
||||||
Equals(" A file1-a").IsSelected(),
|
Equals(" A file1-a").IsSelected(),
|
||||||
Equals(" A file2-a").IsSelected(),
|
Equals(" A file2-a").IsSelected(),
|
||||||
|
@ -48,9 +48,11 @@ var Patch = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Contains("file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Contains("file1"),
|
||||||
Contains("file2"),
|
Contains("file2"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressPrimaryAction()
|
PressPrimaryAction()
|
||||||
|
|
||||||
t.Views().Information().Content(Contains("Building patch"))
|
t.Views().Information().Content(Contains("Building patch"))
|
||||||
|
@ -22,9 +22,11 @@ var DiscardAllChanges = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals(" M file1").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" M file1"),
|
||||||
Equals(" M file2"),
|
Equals(" M file2"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressEnter()
|
PressEnter()
|
||||||
|
|
||||||
t.Views().Staging().
|
t.Views().Staging().
|
||||||
@ -44,7 +46,7 @@ var DiscardAllChanges = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
// because there are no more changes in file1 we switch to file2
|
// because there are no more changes in file1 we switch to file2
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Lines(
|
Lines(
|
||||||
Equals(" M file2").IsSelected(),
|
Equals(" M file2"),
|
||||||
)
|
)
|
||||||
}).
|
}).
|
||||||
// assert we are still in the staging panel, but now looking at the changes of the other file
|
// assert we are still in the staging panel, but now looking at the changes of the other file
|
||||||
|
@ -30,9 +30,11 @@ var ApplyPatch = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Contains("myfile").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Contains("myfile"),
|
||||||
Contains("myfile2"),
|
Contains("myfile2"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
PressPrimaryAction()
|
PressPrimaryAction()
|
||||||
|
|
||||||
t.Views().Information().Content(Contains("Building patch"))
|
t.Views().Information().Content(Contains("Building patch"))
|
||||||
|
@ -23,6 +23,7 @@ var StashAndKeepIndex = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" M file-staged"),
|
Equals(" M file-staged"),
|
||||||
Equals(" M file-unstaged"),
|
Equals(" M file-unstaged"),
|
||||||
).
|
).
|
||||||
@ -49,6 +50,7 @@ var StashAndKeepIndex = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
t.Views().CommitFiles().
|
t.Views().CommitFiles().
|
||||||
IsFocused().
|
IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" M file-staged"),
|
Equals(" M file-staged"),
|
||||||
Equals(" M file-unstaged"),
|
Equals(" M file-unstaged"),
|
||||||
)
|
)
|
||||||
|
@ -22,6 +22,7 @@ var StashIncludingUntrackedFiles = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" A file_1"),
|
Equals(" A file_1"),
|
||||||
Equals(" ?? file_2"),
|
Equals(" ?? file_2"),
|
||||||
).
|
).
|
||||||
|
@ -23,6 +23,7 @@ var StashStaged = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" M file-staged"),
|
Equals(" M file-staged"),
|
||||||
Equals(" M file-unstaged"),
|
Equals(" M file-unstaged"),
|
||||||
).
|
).
|
||||||
|
@ -23,6 +23,7 @@ var StashUnstaged = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" M file-staged"),
|
Equals(" M file-staged"),
|
||||||
Equals(" M file-unstaged"),
|
Equals(" M file-unstaged"),
|
||||||
).
|
).
|
||||||
|
@ -44,9 +44,11 @@ var Add = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().Focus().
|
t.Views().Files().Focus().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("A .gitmodules").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" A .gitmodules"),
|
||||||
Equals(" A my_submodule_path (submodule)"),
|
Equals(" A my_submodule_path (submodule)"),
|
||||||
).
|
).
|
||||||
|
SelectNextItem().
|
||||||
Tap(func() {
|
Tap(func() {
|
||||||
t.Views().Main().Content(
|
t.Views().Main().Content(
|
||||||
Contains("[submodule \"my_submodule\"]").
|
Contains("[submodule \"my_submodule\"]").
|
||||||
|
@ -35,9 +35,11 @@ var Remove = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().Focus().
|
t.Views().Files().Focus().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("M .gitmodules").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" M .gitmodules"),
|
||||||
Equals(" D my_submodule_path"),
|
Equals(" D my_submodule_path"),
|
||||||
)
|
).
|
||||||
|
SelectNextItem()
|
||||||
|
|
||||||
t.Views().Main().Content(
|
t.Views().Main().Content(
|
||||||
Contains("-[submodule \"my_submodule_name\"]").
|
Contains("-[submodule \"my_submodule_name\"]").
|
||||||
|
@ -39,7 +39,8 @@ var RemoveNested = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().IsFocused().
|
t.Views().Files().IsFocused().
|
||||||
Lines(
|
Lines(
|
||||||
Equals("▼ modules").IsSelected(),
|
Equals("▼ /").IsSelected(),
|
||||||
|
Equals(" ▼ modules"),
|
||||||
Equals(" D innerSubPath"),
|
Equals(" D innerSubPath"),
|
||||||
Equals(" M .gitmodules"),
|
Equals(" M .gitmodules"),
|
||||||
).
|
).
|
||||||
|
@ -71,6 +71,7 @@ var Reset = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().Focus().
|
t.Views().Files().Focus().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" M my_submodule_path (submodule)"),
|
Equals(" M my_submodule_path (submodule)"),
|
||||||
Equals(" ?? other_file").IsSelected(),
|
Equals(" ?? other_file").IsSelected(),
|
||||||
).
|
).
|
||||||
@ -78,6 +79,7 @@ var Reset = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
Press(keys.Universal.ToggleRangeSelect).
|
Press(keys.Universal.ToggleRangeSelect).
|
||||||
SelectPreviousItem().
|
SelectPreviousItem().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" M my_submodule_path (submodule)").IsSelected(),
|
Equals(" M my_submodule_path (submodule)").IsSelected(),
|
||||||
Equals(" ?? other_file").IsSelected(),
|
Equals(" ?? other_file").IsSelected(),
|
||||||
).
|
).
|
||||||
@ -87,6 +89,7 @@ var Reset = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
}).
|
}).
|
||||||
Press(keys.Universal.ToggleRangeSelect).
|
Press(keys.Universal.ToggleRangeSelect).
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" M my_submodule_path (submodule)").IsSelected(),
|
Equals(" M my_submodule_path (submodule)").IsSelected(),
|
||||||
Equals(" ?? other_file"),
|
Equals(" ?? other_file"),
|
||||||
).
|
).
|
||||||
|
@ -57,6 +57,7 @@ var UndoCommit = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().
|
t.Views().Files().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" A file"),
|
Equals(" A file"),
|
||||||
Equals(" M other-file"),
|
Equals(" M other-file"),
|
||||||
)
|
)
|
||||||
@ -84,6 +85,7 @@ var UndoCommit = NewIntegrationTest(NewIntegrationTestArgs{
|
|||||||
|
|
||||||
t.Views().Files().Focus().
|
t.Views().Files().Focus().
|
||||||
Lines(
|
Lines(
|
||||||
|
Equals("▼ /"),
|
||||||
Equals(" A file"),
|
Equals(" A file"),
|
||||||
Equals(" M other-file").IsSelected(),
|
Equals(" M other-file").IsSelected(),
|
||||||
).
|
).
|
||||||
|
Reference in New Issue
Block a user