Cleanup: make integration test assertions for files panel more specific

Assert the entire lines using Equals instead of Contains. This makes the tests a
bit easier to read, and it makes it much easier to decide how they need to be
changed when we change the layout (like we do in the last commit of this
branch).

It is true that this requires changing all these tests for any future UI
changes, but I think this is a good price to pay; those adaptions are trivial
and can be done without thinking.
This commit is contained in:
Stefan Haller 2025-03-10 19:20:41 +01:00
parent 030c2e5aef
commit 0b5504aa98
38 changed files with 358 additions and 358 deletions

View file

@ -72,8 +72,8 @@ var ResetToUpstream = NewIntegrationTest(NewIntegrationTestArgs{
Contains("hard commit"),
)
t.Views().Files().Lines(
Contains("file-1").Contains("A"),
Contains("file-2").Contains("A"),
Equals("A file-1"),
Equals("A file-2"),
)
// hard reset

View file

@ -21,19 +21,19 @@ var Commit = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("?? myfile").IsSelected(),
Contains("?? myfile2"),
Equals("?? myfile").IsSelected(),
Equals("?? myfile2"),
).
PressPrimaryAction(). // stage file
Lines(
Contains("A myfile").IsSelected(),
Contains("?? myfile2"),
Equals("A myfile").IsSelected(),
Equals("?? myfile2"),
).
SelectNextItem().
PressPrimaryAction(). // stage other file
Lines(
Contains("A myfile"),
Contains("A myfile2").IsSelected(),
Equals("A myfile"),
Equals("A myfile2").IsSelected(),
).
Press(keys.Files.CommitChanges)
@ -54,8 +54,8 @@ var Commit = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("A myfile"),
Contains("A myfile2"),
Equals("A myfile"),
Equals("A myfile2"),
)
},
})

View file

@ -43,13 +43,13 @@ var DiscardOldFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("dir1").IsSelected(),
Contains("subd1"),
Contains("subfile0"),
Contains("d1_file0"),
Contains("dir2"),
Contains("d2_file1"),
Contains("d2_file2"),
Equals("▼ dir1").IsSelected(),
Equals(" ▼ subd1"),
Equals(" A subfile0"),
Equals(" A d1_file0"),
Equals("▼ dir2"),
Equals(" A d2_file1"),
Equals(" A d2_file2"),
).
NavigateToLine(Contains("d1_file0")).
Press(keys.Universal.Remove)
@ -62,11 +62,11 @@ var DiscardOldFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("dir1/subd1"),
Contains("subfile0"),
Contains("dir2"),
Contains("d2_file1").IsSelected(),
Contains("d2_file2"),
Equals("▼ dir1/subd1"),
Equals(" A subfile0"),
Equals("▼ dir2"),
Equals(" A d2_file1").IsSelected(),
Equals(" A d2_file2"),
).
PressEscape()
@ -84,11 +84,11 @@ var DiscardOldFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("dir2").IsSelected(),
Contains("d2_file1"),
Contains("d2_file2"),
Contains("d2_file3"),
Contains("d2_file4"),
Equals("▼ dir2").IsSelected(),
Equals(" M d2_file1"),
Equals(" D d2_file2"),
Equals(" A d2_file3"),
Equals(" A d2_file4"),
).
NavigateToLine(Contains("d2_file1")).
Press(keys.Universal.ToggleRangeSelect).
@ -122,11 +122,11 @@ var DiscardOldFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("dir1").IsSelected(),
Contains("subd1"),
Contains("file2ToRemove"),
Contains("fileToRemove"),
Contains("multiLineFile"),
Equals("▼ dir1").IsSelected(),
Equals(" ▼ subd1"),
Equals(" A file2ToRemove"),
Equals(" A fileToRemove"),
Equals(" A multiLineFile"),
).
NavigateToLine(Contains("multiLineFile")).
PressEnter()
@ -142,11 +142,11 @@ var DiscardOldFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("dir1"),
Contains("subd1"),
Contains("file2ToRemove"),
Contains("fileToRemove"),
Contains("multiLineFile").IsSelected(),
Equals("▼ dir1"),
Equals(" ▼ subd1"),
Equals(" A file2ToRemove"),
Equals(" A fileToRemove"),
Equals(" ◐ multiLineFile").IsSelected(),
).
NavigateToLine(Contains("dir1")).
Press(keys.Universal.ToggleRangeSelect).

View file

@ -18,8 +18,8 @@ var Filter = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("UU").Contains("file1").IsSelected(),
Contains("UU").Contains("file2"),
Equals("UU file1").IsSelected(),
Equals("UU file2"),
).
Press(keys.Files.OpenStatusFilter).
Tap(func() {
@ -29,10 +29,10 @@ var Filter = NewIntegrationTest(NewIntegrationTestArgs{
Confirm()
}).
Lines(
Contains("UU").Contains("file1").IsSelected(),
Contains("UU").Contains("file2"),
Equals("UU file1").IsSelected(),
Equals("UU file2"),
// now we see the non-merge conflict file
Contains("A ").Contains("file3"),
Equals("A file3"),
)
},
})

View file

@ -18,8 +18,8 @@ var ResolveMultipleFiles = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("UU").Contains("file1").IsSelected(),
Contains("UU").Contains("file2"),
Equals("UU file1").IsSelected(),
Equals("UU file2"),
).
PressEnter()
@ -35,7 +35,7 @@ var ResolveMultipleFiles = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("UU").Contains("file2").IsSelected(),
Equals("UU file2").IsSelected(),
).
PressEnter()

View file

@ -20,8 +20,8 @@ var ResolveNoAutoStage = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("UU").Contains("file1").IsSelected(),
Contains("UU").Contains("file2"),
Equals("UU file1").IsSelected(),
Equals("UU file2"),
).
PressEnter()
@ -38,13 +38,13 @@ var ResolveNoAutoStage = NewIntegrationTest(NewIntegrationTestArgs{
IsFocused().
// Resolving the conflict didn't auto-stage it
Lines(
Contains("UU").Contains("file1").IsSelected(),
Contains("UU").Contains("file2"),
Equals("UU file1").IsSelected(),
Equals("UU file2"),
).
// So do that manually
PressPrimaryAction().
Lines(
Contains("UU").Contains("file2").IsSelected(),
Equals("UU file2").IsSelected(),
).
// Trying to stage a file that still has conflicts is not allowed:
PressPrimaryAction().
@ -70,12 +70,12 @@ var ResolveNoAutoStage = NewIntegrationTest(NewIntegrationTestArgs{
IsFocused().
// Again, resolving the conflict didn't auto-stage it
Lines(
Contains("UU").Contains("file2").IsSelected(),
Equals("UU file2").IsSelected(),
).
// Doing that manually now works:
PressPrimaryAction().
Lines(
Contains("A").Contains("file3").IsSelected(),
Equals("A file3").IsSelected(),
)
},
})

View file

@ -21,26 +21,26 @@ var CollapseExpand = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("dir").IsSelected(),
Contains("??").Contains("file-one"),
Contains("dir2"),
Contains("??").Contains("file-two"),
Equals("▼ dir").IsSelected(),
Equals(" ?? file-one"),
Equals("▼ dir2"),
Equals(" ?? file-two"),
)
t.Views().Files().
Press(keys.Files.CollapseAll).
Lines(
Contains("dir"),
Contains("dir2"),
Equals("▶ dir"),
Equals("▶ dir2"),
)
t.Views().Files().
Press(keys.Files.ExpandAll).
Lines(
Contains("dir").IsSelected(),
Contains("??").Contains("file-one"),
Contains("dir2"),
Contains("??").Contains("file-two"),
Equals("▼ dir").IsSelected(),
Equals(" ?? file-one"),
Equals("▼ dir2"),
Equals(" ?? file-two"),
)
},
})

View file

@ -29,33 +29,33 @@ var DiscardRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("▼ dir1").IsSelected(),
Contains(" ??").Contains("file-1a"),
Contains(" ??").Contains("file-1b"),
Contains("▼ dir2"),
Contains(" ??").Contains("file-2a"),
Contains(" M").Contains("file-2b"),
Contains("▼ dir3"),
Contains(" ??").Contains("file-3a"),
Contains(" M").Contains("file-3b"),
Contains("??").Contains("file-a"),
Contains("??").Contains("file-b"),
Equals("▼ dir1").IsSelected(),
Equals(" ?? file-1a"),
Equals(" ?? file-1b"),
Equals("▼ dir2"),
Equals(" ?? file-2a"),
Equals(" M file-2b"),
Equals("▼ dir3"),
Equals(" ?? file-3a"),
Equals(" M file-3b"),
Equals("?? file-a"),
Equals("?? file-b"),
).
NavigateToLine(Contains("file-1b")).
Press(keys.Universal.ToggleRangeSelect).
NavigateToLine(Contains("file-2a")).
Lines(
Contains("▼ dir1"),
Contains(" ??").Contains("file-1a"),
Contains(" ??").Contains("file-1b").IsSelected(),
Contains("▼ dir2").IsSelected(),
Contains(" ??").Contains("file-2a").IsSelected(),
Contains(" M").Contains("file-2b"),
Contains("▼ dir3"),
Contains(" ??").Contains("file-3a"),
Contains(" M").Contains("file-3b"),
Contains("??").Contains("file-a"),
Contains("??").Contains("file-b"),
Equals("▼ dir1"),
Equals(" ?? file-1a"),
Equals(" ?? file-1b").IsSelected(),
Equals("▼ dir2").IsSelected(),
Equals(" ?? file-2a").IsSelected(),
Equals(" M file-2b"),
Equals("▼ dir3"),
Equals(" ?? file-3a"),
Equals(" M file-3b"),
Equals("?? file-a"),
Equals("?? file-b"),
).
// Discard
Press(keys.Universal.Remove).
@ -66,24 +66,24 @@ var DiscardRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
Confirm()
}).
Lines(
Contains("▼ dir1"),
Contains(" ??").Contains("file-1a"),
Contains("▼ dir3").IsSelected(),
Contains(" ??").Contains("file-3a"),
Contains(" M").Contains("file-3b"),
Contains("??").Contains("file-a"),
Contains("??").Contains("file-b"),
Equals("▼ dir1"),
Equals(" ?? file-1a"),
Equals("▼ dir3").IsSelected(),
Equals(" ?? file-3a"),
Equals(" M file-3b"),
Equals("?? file-a"),
Equals("?? file-b"),
).
// Verify you can discard collapsed directories in range select
PressEnter().
Press(keys.Universal.ToggleRangeSelect).
NavigateToLine(Contains("file-a")).
Lines(
Contains("▼ dir1"),
Contains(" ??").Contains("file-1a"),
Contains("▶ dir3").IsSelected(),
Contains("??").Contains("file-a").IsSelected(),
Contains("??").Contains("file-b"),
Equals("▼ dir1"),
Equals(" ?? file-1a"),
Equals("▶ dir3").IsSelected(),
Equals("?? file-a").IsSelected(),
Equals("?? file-b"),
).
Press(keys.Universal.Remove).
Tap(func() {
@ -93,9 +93,9 @@ var DiscardRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
Confirm()
}).
Lines(
Contains("▼ dir1"),
Contains(" ??").Contains("file-1a"),
Contains("??").Contains("file-b").IsSelected(),
Equals("▼ dir1"),
Equals(" ?? file-1a"),
Equals("?? file-b").IsSelected(),
)
},
})

View file

@ -24,16 +24,16 @@ var DiscardStagedChanges = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains(` M file2`).IsSelected(),
Contains(`?? file3`),
Contains(` M fileToRemove`),
Equals(" M file2").IsSelected(),
Equals("?? file3"),
Equals(" M fileToRemove"),
).
NavigateToLine(Contains(`fileToRemove`)).
PressPrimaryAction().
Lines(
Contains(` M file2`),
Contains(`?? file3`),
Contains(`M fileToRemove`).IsSelected(),
Equals(" M file2"),
Equals("?? file3"),
Equals("M fileToRemove").IsSelected(),
).
Press(keys.Files.ViewResetOptions)
@ -42,8 +42,8 @@ var DiscardStagedChanges = NewIntegrationTest(NewIntegrationTestArgs{
// staged file has been removed
t.Views().Files().
Lines(
Contains(` M file2`),
Contains(`?? file3`).IsSelected(),
Equals(" M file2"),
Equals("?? file3").IsSelected(),
)
// the file should have the same content that it originally had, given that that was committed already

View file

@ -30,12 +30,12 @@ var DiscardUnstagedDirChanges = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("dir").IsSelected(),
Contains("subdir"),
Contains("??").Contains("unstaged-file-one"),
Contains("MM").Contains("file-one"),
Contains("??").Contains("unstaged-file-two"),
Contains("??").Contains("unstaged-file-three"),
Equals("▼ dir").IsSelected(),
Equals(" ▼ subdir"),
Equals(" ?? unstaged-file-one"),
Equals(" MM file-one"),
Equals(" ?? unstaged-file-two"),
Equals("?? unstaged-file-three"),
).
Press(keys.Universal.Remove).
Tap(func() {
@ -45,10 +45,10 @@ var DiscardUnstagedDirChanges = NewIntegrationTest(NewIntegrationTestArgs{
Confirm()
}).
Lines(
Contains("dir").IsSelected(),
Contains("M ").Contains("file-one"),
Equals("▼ dir").IsSelected(),
Equals(" M file-one"),
// this guy remains untouched because it wasn't inside the 'dir' directory
Contains("??").Contains("unstaged-file-three"),
Equals("?? unstaged-file-three"),
)
t.FileSystem().FileContent("dir/file-one", Equals("original content\nnew content\n"))

View file

@ -26,8 +26,8 @@ var DiscardUnstagedFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("MM").Contains("file-one").IsSelected(),
Contains("AM").Contains("file-two"),
Equals("MM file-one").IsSelected(),
Equals("AM file-two"),
).
Press(keys.Universal.Remove).
Tap(func() {
@ -37,13 +37,13 @@ var DiscardUnstagedFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
Confirm()
}).
Lines(
Contains("M ").Contains("file-one").IsSelected(),
Contains("AM").Contains("file-two"),
Equals("M file-one").IsSelected(),
Equals("AM file-two"),
).
SelectNextItem().
Lines(
Contains("M ").Contains("file-one"),
Contains("AM").Contains("file-two").IsSelected(),
Equals("M file-one"),
Equals("AM file-two").IsSelected(),
).
Press(keys.Universal.Remove).
Tap(func() {
@ -53,8 +53,8 @@ var DiscardUnstagedFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
Confirm()
}).
Lines(
Contains("M ").Contains("file-one"),
Contains("A ").Contains("file-two").IsSelected(),
Equals("M file-one"),
Equals("A file-two").IsSelected(),
)
t.FileSystem().FileContent("file-one", Equals("original content\nnew content\n"))

View file

@ -26,27 +26,27 @@ var DiscardUnstagedRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("▼ dir1").IsSelected(),
Contains(" ??").Contains("file-a"),
Contains(" ??").Contains("file-b"),
Contains("▼ dir2"),
Contains(" A ").Contains("file-c"),
Contains(" M").Contains("file-d"),
Contains("??").Contains("file-e"),
Contains("??").Contains("file-f"),
Equals("▼ dir1").IsSelected(),
Equals(" ?? file-a"),
Equals(" ?? file-b"),
Equals("▼ dir2"),
Equals(" A file-c"),
Equals(" M file-d"),
Equals("?? file-e"),
Equals("?? file-f"),
).
NavigateToLine(Contains("file-b")).
Press(keys.Universal.ToggleRangeSelect).
NavigateToLine(Contains("file-c")).
Lines(
Contains("▼ dir1"),
Contains(" ??").Contains("file-a"),
Contains(" ??").Contains("file-b").IsSelected(),
Contains("▼ dir2").IsSelected(),
Contains(" A ").Contains("file-c").IsSelected(),
Contains(" M").Contains("file-d"),
Contains("??").Contains("file-e"),
Contains("??").Contains("file-f"),
Equals("▼ dir1"),
Equals(" ?? file-a"),
Equals(" ?? file-b").IsSelected(),
Equals("▼ dir2").IsSelected(),
Equals(" A file-c").IsSelected(),
Equals(" M file-d"),
Equals("?? file-e"),
Equals("?? file-f"),
).
// Discard
Press(keys.Universal.Remove).
@ -60,14 +60,14 @@ var DiscardUnstagedRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
// 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
Lines(
Contains("▼ dir1"),
Contains(" ??").Contains("file-a"),
Contains("▼ dir2"),
Equals("▼ dir1"),
Equals(" ?? file-a"),
Equals("▼ dir2"),
// Re-selecting file-c because it's where the selected line index
// was before performing the action.
Contains(" A ").Contains("file-c").IsSelected(),
Contains("??").Contains("file-e"),
Contains("??").Contains("file-f"),
Equals(" A file-c").IsSelected(),
Equals("?? file-e"),
Equals("?? file-f"),
)
},
})

View file

@ -19,13 +19,13 @@ var DiscardVariousChangesRangeSelect = NewIntegrationTest(NewIntegrationTestArgs
t.Views().Files().
IsFocused().
Lines(
Contains("UA").Contains("added-them-changed-us.txt").IsSelected(),
Contains("AA").Contains("both-added.txt"),
Contains("DD").Contains("both-deleted.txt"),
Contains("UU").Contains("both-modded.txt"),
Contains("AU").Contains("changed-them-added-us.txt"),
Contains("UD").Contains("deleted-them.txt"),
Contains("DU").Contains("deleted-us.txt"),
Equals("UA added-them-changed-us.txt").IsSelected(),
Equals("AA both-added.txt"),
Equals("DD both-deleted.txt"),
Equals("UU both-modded.txt"),
Equals("AU changed-them-added-us.txt"),
Equals("UD deleted-them.txt"),
Equals("DU deleted-us.txt"),
).
Press(keys.Universal.ToggleRangeSelect).
NavigateToLine(Contains("deleted-us.txt")).
@ -42,17 +42,17 @@ var DiscardVariousChangesRangeSelect = NewIntegrationTest(NewIntegrationTestArgs
Cancel()
}).
Lines(
Contains("AM").Contains("added-changed.txt").IsSelected(),
Contains("MD").Contains("change-delete.txt"),
Contains("D ").Contains("delete-change.txt"),
Contains("D ").Contains("deleted-staged.txt"),
Contains(" D").Contains("deleted.txt"),
Contains("MM").Contains("double-modded.txt"),
Contains("M ").Contains("modded-staged.txt"),
Contains(" M").Contains("modded.txt"),
Contains("A ").Contains("new-staged.txt"),
Contains("??").Contains("new.txt"),
Contains("R ").Contains("renamed.txt → renamed2.txt"),
Equals("AM added-changed.txt").IsSelected(),
Equals("MD change-delete.txt"),
Equals("D delete-change.txt"),
Equals("D deleted-staged.txt"),
Equals(" D deleted.txt"),
Equals("MM double-modded.txt"),
Equals("M modded-staged.txt"),
Equals(" M modded.txt"),
Equals("A new-staged.txt"),
Equals("?? new.txt"),
Equals("R renamed.txt → renamed2.txt"),
).
Press(keys.Universal.ToggleRangeSelect).
NavigateToLine(Contains("renamed.txt")).

View file

@ -20,9 +20,9 @@ var Gitignore = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains(`?? .gitignore`).IsSelected(),
Contains(`?? toExclude`),
Contains(`?? toIgnore`),
Equals("?? .gitignore").IsSelected(),
Equals("?? toExclude"),
Equals("?? toIgnore"),
).
Press(keys.Files.IgnoreFile).
// ensure we can't exclude the .gitignore file

View file

@ -21,15 +21,15 @@ var RenameSimilarityThresholdChange = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("D ").Contains("original"),
Contains("A ").Contains("renamed"),
Equals("D original"),
Equals("A renamed"),
).
Press(keys.Universal.DecreaseRenameSimilarityThreshold).
Tap(func() {
t.ExpectToast(Equals("Changed rename similarity threshold to 45%"))
}).
Lines(
Contains("R ").Contains("original → renamed"),
Equals("R original → renamed"),
)
},
})

View file

@ -21,12 +21,12 @@ var StageChildrenRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("▼ baz").IsSelected(),
Contains(" ??").Contains("file"),
Contains("▼ bazbam"),
Contains(" ??").Contains("file"),
Contains("??").Contains("foo"),
Contains("??").Contains("foobar"),
Equals("▼ baz").IsSelected(),
Equals(" ?? file"),
Equals("▼ bazbam"),
Equals(" ?? file"),
Equals("?? foo"),
Equals("?? foobar"),
).
// Select everything
Press(keys.Universal.ToggleRangeSelect).
@ -34,12 +34,12 @@ var StageChildrenRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
// Stage
PressPrimaryAction().
Lines(
Contains("▼ baz").IsSelected(),
Contains(" A ").Contains("file").IsSelected(),
Contains("▼ bazbam").IsSelected(),
Contains(" A ").Contains("file").IsSelected(),
Contains("A ").Contains("foo").IsSelected(),
Contains("A ").Contains("foobar").IsSelected(),
Equals("▼ baz").IsSelected(),
Equals(" A file").IsSelected(),
Equals("▼ bazbam").IsSelected(),
Equals(" A file").IsSelected(),
Equals("A foo").IsSelected(),
Equals("A foobar").IsSelected(),
)
},
})

View file

@ -23,28 +23,28 @@ var StageDeletedRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains(" D").Contains("file-a").IsSelected(),
Contains(" D").Contains("file-b"),
Equals(" D file-a").IsSelected(),
Equals(" D file-b"),
).
// Stage a single deleted file
PressPrimaryAction().
Lines(
Contains("D ").Contains("file-a").IsSelected(),
Contains(" D").Contains("file-b"),
Equals("D file-a").IsSelected(),
Equals(" D file-b"),
).
Press(keys.Universal.ToggleRangeSelect).
NavigateToLine(Contains("file-b")).
// Stage both files while a deleted file is already staged
PressPrimaryAction().
Lines(
Contains("D ").Contains("file-a").IsSelected(),
Contains("D ").Contains("file-b").IsSelected(),
Equals("D file-a").IsSelected(),
Equals("D file-b").IsSelected(),
).
// Unstage; back to everything being unstaged
PressPrimaryAction().
Lines(
Contains(" D").Contains("file-a").IsSelected(),
Contains(" D").Contains("file-b").IsSelected(),
Equals(" D file-a").IsSelected(),
Equals(" D file-b").IsSelected(),
)
},
})

View file

@ -26,14 +26,14 @@ var StageRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("▼ dir1").IsSelected(),
Contains(" ??").Contains("file-a"),
Contains(" ??").Contains("file-b"),
Contains("▼ dir2"),
Contains(" ??").Contains("file-c"),
Contains(" M").Contains("file-d"),
Contains("??").Contains("file-e"),
Contains("??").Contains("file-f"),
Equals("▼ dir1").IsSelected(),
Equals(" ?? file-a"),
Equals(" ?? file-b"),
Equals("▼ dir2"),
Equals(" ?? file-c"),
Equals(" M file-d"),
Equals("?? file-e"),
Equals("?? file-f"),
).
NavigateToLine(Contains("file-b")).
Press(keys.Universal.ToggleRangeSelect).
@ -41,27 +41,27 @@ var StageRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
// Stage
PressPrimaryAction().
Lines(
Contains("▼ dir1"),
Contains(" ??").Contains("file-a"),
Contains(" A ").Contains("file-b").IsSelected(),
Contains("▼ dir2").IsSelected(),
Contains(" A ").Contains("file-c").IsSelected(),
Equals("▼ dir1"),
Equals(" ?? file-a"),
Equals(" A file-b").IsSelected(),
Equals("▼ dir2").IsSelected(),
Equals(" A file-c").IsSelected(),
// Staged because dir2 was part of the selection when he hit space
Contains(" M ").Contains("file-d"),
Contains("??").Contains("file-e"),
Contains("??").Contains("file-f"),
Equals(" M file-d"),
Equals("?? file-e"),
Equals("?? file-f"),
).
// Unstage; back to everything being unstaged
PressPrimaryAction().
Lines(
Contains("▼ dir1"),
Contains(" ??").Contains("file-a"),
Contains(" ??").Contains("file-b").IsSelected(),
Contains("▼ dir2").IsSelected(),
Contains(" ??").Contains("file-c").IsSelected(),
Contains(" M").Contains("file-d"),
Contains("??").Contains("file-e"),
Contains("??").Contains("file-f"),
Equals("▼ dir1"),
Equals(" ?? file-a"),
Equals(" ?? file-b").IsSelected(),
Equals("▼ dir2").IsSelected(),
Equals(" ?? file-c").IsSelected(),
Equals(" M file-d"),
Equals("?? file-e"),
Equals("?? file-f"),
).
Press(keys.Universal.ToggleRangeSelect).
NavigateToLine(Contains("dir2")).
@ -69,38 +69,38 @@ var StageRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
// Collapse the directory
PressEnter().
Lines(
Contains("▼ dir1"),
Contains(" ??").Contains("file-a"),
Contains(" ??").Contains("file-b"),
Contains("▶ dir2").IsSelected(),
Contains("??").Contains("file-e"),
Contains("??").Contains("file-f"),
Equals("▼ dir1"),
Equals(" ?? file-a"),
Equals(" ?? file-b"),
Equals("▶ dir2").IsSelected(),
Equals("?? file-e"),
Equals("?? file-f"),
).
Press(keys.Universal.ToggleRangeSelect).
NavigateToLine(Contains("file-e")).
// Stage
PressPrimaryAction().
Lines(
Contains("▼ dir1"),
Contains(" ??").Contains("file-a"),
Contains(" ??").Contains("file-b"),
Contains("▶ dir2").IsSelected(),
Contains("A ").Contains("file-e").IsSelected(),
Contains("??").Contains("file-f"),
Equals("▼ dir1"),
Equals(" ?? file-a"),
Equals(" ?? file-b"),
Equals("▶ dir2").IsSelected(),
Equals("A file-e").IsSelected(),
Equals("?? file-f"),
).
Press(keys.Universal.ToggleRangeSelect).
NavigateToLine(Contains("dir2")).
// Expand the directory again to verify it's been staged
PressEnter().
Lines(
Contains("▼ dir1"),
Contains(" ??").Contains("file-a"),
Contains(" ??").Contains("file-b"),
Contains("▼ dir2").IsSelected(),
Contains(" A ").Contains("file-c"),
Contains(" M ").Contains("file-d"),
Contains("A ").Contains("file-e"),
Contains("??").Contains("file-f"),
Equals("▼ dir1"),
Equals(" ?? file-a"),
Equals(" ?? file-b"),
Equals("▼ dir2").IsSelected(),
Equals(" A file-c"),
Equals(" M file-d"),
Equals("A file-e"),
Equals("?? file-f"),
)
},
})

View file

@ -61,15 +61,15 @@ var NestedFilter = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains(`apple`).IsSelected(),
Contains(`grape`),
Contains(`orange`),
Equals("A apple").IsSelected(),
Equals("A grape"),
Equals("A orange"),
).
FilterOrSearch("grape").
Lines(
Contains(`apple`),
Contains(`grape`).IsSelected(),
Contains(`orange`),
Equals("A apple"),
Equals("A grape").IsSelected(),
Equals("A orange"),
).
PressEnter()
@ -87,9 +87,9 @@ var NestedFilter = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains(`apple`),
Contains(`grape`).IsSelected(),
Contains(`orange`),
Equals("A apple"),
Equals("A grape").IsSelected(),
Equals("A orange"),
).
Tap(func() {
t.Views().Search().IsVisible().Content(Contains("matches for 'grape'"))
@ -100,9 +100,9 @@ var NestedFilter = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Search().IsInvisible()
}).
Lines(
Contains(`apple`),
Contains(`grape`).IsSelected(),
Contains(`orange`),
Equals("A apple"),
Equals("A grape").IsSelected(),
Equals("A orange"),
).
// escape to sub-commits view
PressEscape()

View file

@ -69,13 +69,13 @@ var NestedFilterTransient = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains(`file-one`).IsSelected(),
Contains(`file-two`),
Equals("A file-one").IsSelected(),
Equals("A file-two"),
).
FilterOrSearch("two").
Lines(
Contains(`file-one`),
Contains(`file-two`).IsSelected(),
Equals("A file-one"),
Equals("A file-two").IsSelected(),
)
t.Views().Branches().
@ -96,8 +96,8 @@ var NestedFilterTransient = NewIntegrationTest(NewIntegrationTestArgs{
IsFocused().
// the search on the commit-files context has been cancelled
Lines(
Contains(`file-one`).IsSelected(),
Contains(`file-two`),
Equals("A file-one").IsSelected(),
Equals("A file-two"),
).
Tap(func() {
t.Views().Search().IsInvisible()

View file

@ -26,8 +26,8 @@ var ApplyInReverse = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("file1").IsSelected(),
Contains("file2"),
Equals("A file1").IsSelected(),
Equals("A file2"),
).
PressPrimaryAction()

View file

@ -34,8 +34,8 @@ var ApplyInReverseWithConflict = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("M").Contains("file1").IsSelected(),
Contains("M").Contains("file2"),
Equals("M file1").IsSelected(),
Equals("M file2"),
).
// Add both files to the patch; the first will conflict, the second won't
PressPrimaryAction().
@ -61,7 +61,7 @@ var ApplyInReverseWithConflict = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
Focus().
Lines(
Contains("UU").Contains("file1").IsSelected(),
Equals("UU file1").IsSelected(),
).
PressEnter()
@ -81,8 +81,8 @@ var ApplyInReverseWithConflict = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
Focus().
Lines(
Contains("M").Contains("file1").IsSelected(),
Contains("M").Contains("file2"),
Equals("M file1").IsSelected(),
Equals("M file2"),
)
t.Views().Main().

View file

@ -31,9 +31,9 @@ var MoveRangeToIndex = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("M file1").IsSelected(),
Contains("A file2"),
Contains("A file3"),
Equals("M file1").IsSelected(),
Equals("A file2"),
Equals("A file3"),
).
Press(keys.Universal.ToggleRangeSelect).
NavigateToLine(Contains("file2")).
@ -55,8 +55,8 @@ var MoveRangeToIndex = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
Focus().
Lines(
Contains("file1").IsSelected(),
Contains("file2"),
Equals("M file1").IsSelected(),
Equals("A file2"),
)
t.Views().Main().

View file

@ -66,11 +66,11 @@ var MoveToEarlierCommit = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("dir").IsSelected(),
Contains(" M file1"),
Contains(" D file2"),
Contains(" A file3"),
Contains("A unrelated-file"),
Equals("▼ dir").IsSelected(),
Equals(" M file1"),
Equals(" D file2"),
Equals(" A file3"),
Equals("A unrelated-file"),
).
PressEscape()

View file

@ -66,11 +66,11 @@ var MoveToEarlierCommitNoKeepEmpty = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("dir").IsSelected(),
Contains(" M file1"),
Contains(" D file2"),
Contains(" A file3"),
Contains("A unrelated-file"),
Equals("▼ dir").IsSelected(),
Equals(" M file1"),
Equals(" D file2"),
Equals(" A file3"),
Equals("A unrelated-file"),
).
PressEscape()
},

View file

@ -66,11 +66,11 @@ var MoveToLaterCommit = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("dir").IsSelected(),
Contains(" M file1"),
Contains(" D file2"),
Contains(" A file3"),
Contains("A unrelated-file"),
Equals("▼ dir").IsSelected(),
Equals(" M file1"),
Equals(" D file2"),
Equals(" A file3"),
Equals("A unrelated-file"),
).
PressEscape()

View file

@ -27,9 +27,9 @@ var SelectAllFiles = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("file1").IsSelected(),
Contains("file2"),
Contains("file3"),
Equals("A file1").IsSelected(),
Equals("A file2"),
Equals("A file3"),
).
Press(keys.Files.ToggleStagedAll)

View file

@ -34,28 +34,28 @@ var ToggleRange = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("▼ dir1").IsSelected(),
Contains(" A").Contains("file1-a"),
Contains(" A").Contains("file2-a"),
Contains(" A").Contains("file3-a"),
Contains("▼ dir2"),
Contains(" A").Contains("file1-b"),
Contains(" A").Contains("file2-b"),
Contains(" A").Contains("file3-b"),
Equals("▼ dir1").IsSelected(),
Equals(" A file1-a"),
Equals(" A file2-a"),
Equals(" A file3-a"),
Equals("▼ dir2"),
Equals(" A file1-b"),
Equals(" A file2-b"),
Equals(" A file3-b"),
).
NavigateToLine(Contains("file1-a")).
Press(keys.Universal.ToggleRangeSelect).
NavigateToLine(Contains("file3-a")).
PressPrimaryAction().
Lines(
Contains("▼ dir1"),
Contains(" ●").Contains("file1-a").IsSelected(),
Contains(" ●").Contains("file2-a").IsSelected(),
Contains(" ●").Contains("file3-a").IsSelected(),
Contains("▼ dir2"),
Contains(" A").Contains("file1-b"),
Contains(" A").Contains("file2-b"),
Contains(" A").Contains("file3-b"),
Equals("▼ dir1"),
Equals(" ● file1-a").IsSelected(),
Equals(" ● file2-a").IsSelected(),
Equals(" ● file3-a").IsSelected(),
Equals("▼ dir2"),
Equals(" A file1-b"),
Equals(" A file2-b"),
Equals(" A file3-b"),
).
PressEscape().
NavigateToLine(Contains("file3-b")).
@ -69,39 +69,39 @@ var ToggleRange = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("▼ dir1"),
Contains(" ●").Contains("file1-a"),
Contains(" ●").Contains("file2-a"),
Contains(" ●").Contains("file3-a"),
Contains("▼ dir2"),
Contains(" A").Contains("file1-b"),
Contains(" A").Contains("file2-b"),
Contains(" ◐").Contains("file3-b").IsSelected(),
Equals("▼ dir1"),
Equals(" ● file1-a"),
Equals(" ● file2-a"),
Equals(" ● file3-a"),
Equals("▼ dir2"),
Equals(" A file1-b"),
Equals(" A file2-b"),
Equals(" ◐ file3-b").IsSelected(),
).
NavigateToLine(Contains("dir1")).
Press(keys.Universal.ToggleRangeSelect).
NavigateToLine(Contains("dir2")).
PressPrimaryAction().
Lines(
Contains("▼ dir1").IsSelected(),
Contains(" ●").Contains("file1-a").IsSelected(),
Contains(" ●").Contains("file2-a").IsSelected(),
Contains(" ●").Contains("file3-a").IsSelected(),
Contains("▼ dir2").IsSelected(),
Contains(" ●").Contains("file1-b"),
Contains(" ●").Contains("file2-b"),
Contains(" ●").Contains("file3-b"),
Equals("▼ dir1").IsSelected(),
Equals(" ● file1-a").IsSelected(),
Equals(" ● file2-a").IsSelected(),
Equals(" ● file3-a").IsSelected(),
Equals("▼ dir2").IsSelected(),
Equals(" ● file1-b"),
Equals(" ● file2-b"),
Equals(" ● file3-b"),
).
PressPrimaryAction().
Lines(
Contains("▼ dir1").IsSelected(),
Contains(" A").Contains("file1-a").IsSelected(),
Contains(" A").Contains("file2-a").IsSelected(),
Contains(" A").Contains("file3-a").IsSelected(),
Contains("▼ dir2").IsSelected(),
Contains(" A").Contains("file1-b"),
Contains(" A").Contains("file2-b"),
Contains(" A").Contains("file3-b"),
Equals("▼ dir1").IsSelected(),
Equals(" A file1-a").IsSelected(),
Equals(" A file2-a").IsSelected(),
Equals(" A file3-a").IsSelected(),
Equals("▼ dir2").IsSelected(),
Equals(" A file1-b"),
Equals(" A file2-b"),
Equals(" A file3-b"),
)
},
})

View file

@ -22,8 +22,8 @@ var DiscardAllChanges = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
IsFocused().
Lines(
Contains("file1").IsSelected(),
Contains("file2"),
Equals(" M file1").IsSelected(),
Equals(" M file2"),
).
PressEnter()
@ -44,7 +44,7 @@ var DiscardAllChanges = NewIntegrationTest(NewIntegrationTestArgs{
// because there are no more changes in file1 we switch to file2
t.Views().Files().
Lines(
Contains("file2").IsSelected(),
Equals(" M file2").IsSelected(),
)
}).
// assert we are still in the staging panel, but now looking at the changes of the other file

View file

@ -23,8 +23,8 @@ var StashAndKeepIndex = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
Lines(
Contains("file-staged"),
Contains("file-unstaged"),
Equals("M file-staged"),
Equals(" M file-unstaged"),
).
Press(keys.Files.ViewStashOptions)
@ -39,7 +39,7 @@ var StashAndKeepIndex = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
Lines(
Contains("file-staged"),
Equals("M file-staged"),
)
t.Views().Stash().
@ -49,8 +49,8 @@ var StashAndKeepIndex = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().CommitFiles().
IsFocused().
Lines(
Contains("file-staged"),
Contains("file-unstaged"),
Equals("M file-staged"),
Equals("M file-unstaged"),
)
},
})

View file

@ -22,8 +22,8 @@ var StashIncludingUntrackedFiles = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
Lines(
Contains("file_1"),
Contains("file_2"),
Equals("A file_1"),
Equals("?? file_2"),
).
Press(keys.Files.ViewStashOptions)

View file

@ -23,8 +23,8 @@ var StashStaged = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
Lines(
Contains("file-staged"),
Contains("file-unstaged"),
Equals("M file-staged"),
Equals(" M file-unstaged"),
).
Press(keys.Files.ViewStashOptions)
@ -39,7 +39,7 @@ var StashStaged = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
Lines(
Contains("file-unstaged"),
Equals(" M file-unstaged"),
)
t.Views().Stash().

View file

@ -23,8 +23,8 @@ var StashUnstaged = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
Lines(
Contains("file-staged"),
Contains("file-unstaged"),
Equals("M file-staged"),
Equals(" M file-unstaged"),
).
Press(keys.Files.ViewStashOptions)

View file

@ -44,8 +44,8 @@ var Add = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().Focus().
Lines(
Contains(".gitmodules").IsSelected(),
Contains("my_submodule_path (submodule)"),
Equals("A .gitmodules").IsSelected(),
Equals("A my_submodule_path (submodule)"),
).
Tap(func() {
t.Views().Main().Content(

View file

@ -35,8 +35,8 @@ var Remove = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().Focus().
Lines(
MatchesRegexp(`M.*\.gitmodules`).IsSelected(),
MatchesRegexp(`D.*my_submodule_path`),
Equals("M .gitmodules").IsSelected(),
Equals("D my_submodule_path"),
)
t.Views().Main().Content(

View file

@ -39,9 +39,9 @@ var RemoveNested = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().IsFocused().
Lines(
Contains("modules").IsSelected(),
MatchesRegexp(`D.*innerSubPath`),
MatchesRegexp(`M.*\.gitmodules`),
Equals("▼ modules").IsSelected(),
Equals(" D innerSubPath"),
Equals("M .gitmodules"),
).
NavigateToLine(Contains(".gitmodules"))

View file

@ -71,15 +71,15 @@ var Reset = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().Focus().
Lines(
MatchesRegexp(` M.*my_submodule_path \(submodule\)`),
Contains("other_file").IsSelected(),
Equals(" M my_submodule_path (submodule)"),
Equals("?? other_file").IsSelected(),
).
// Verify we can't use range select on submodules
Press(keys.Universal.ToggleRangeSelect).
SelectPreviousItem().
Lines(
MatchesRegexp(` M.*my_submodule_path \(submodule\)`).IsSelected(),
Contains("other_file").IsSelected(),
Equals(" M my_submodule_path (submodule)").IsSelected(),
Equals("?? other_file").IsSelected(),
).
Press(keys.Universal.Remove).
Tap(func() {
@ -87,8 +87,8 @@ var Reset = NewIntegrationTest(NewIntegrationTestArgs{
}).
Press(keys.Universal.ToggleRangeSelect).
Lines(
MatchesRegexp(` M.*my_submodule_path \(submodule\)`).IsSelected(),
Contains("other_file"),
Equals(" M my_submodule_path (submodule)").IsSelected(),
Equals("?? other_file"),
).
Press(keys.Universal.Remove).
Tap(func() {
@ -98,7 +98,7 @@ var Reset = NewIntegrationTest(NewIntegrationTestArgs{
Confirm()
}).
Lines(
Contains("other_file").IsSelected(),
Equals("?? other_file").IsSelected(),
)
t.Views().Submodules().Focus().

View file

@ -57,8 +57,8 @@ var UndoCommit = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
Lines(
Contains("A file"),
Contains(" M other-file"),
Equals("A file"),
Equals(" M other-file"),
)
t.Views().Commits().Focus().
@ -71,7 +71,7 @@ var UndoCommit = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
Lines(
Contains(" M other-file"),
Equals(" M other-file"),
)
// Undo again, this time discarding the original change before redoing again
@ -84,14 +84,14 @@ var UndoCommit = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().Focus().
Lines(
Contains("A file"),
Contains(" M other-file").IsSelected(),
Equals("A file"),
Equals(" M other-file").IsSelected(),
).
Press(keys.Universal.PrevItem).
Press(keys.Universal.Remove).
Tap(confirmDiscardFile).
Lines(
Contains(" M other-file"),
Equals(" M other-file"),
).
Press(keys.Universal.Redo).
Tap(confirmRedo)
@ -104,7 +104,7 @@ var UndoCommit = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Files().
Lines(
Contains(" M other-file"),
Equals(" M other-file"),
)
},
})