Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var CollapseExpand = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Collapsing and expanding all files in the file tree", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateDir("dir") shell.CreateFile("dir/file-one", "original content\n") shell.CreateDir("dir2") shell.CreateFile("dir2/file-two", "original content\n") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /").IsSelected(), Equals(" ▼ dir"), Equals(" ?? file-one"), Equals(" ▼ dir2"), Equals(" ?? file-two"), ) t.Views().Files(). Press(keys.Files.CollapseAll). Lines( Equals("▶ /"), ) t.Views().Files(). Press(keys.Files.ExpandAll). Lines( Equals("▼ /").IsSelected(), Equals(" ▼ dir"), Equals(" ?? file-one"), Equals(" ▼ dir2"), Equals(" ?? file-two"), ) }, })
View Source
var CopyMenu = NewIntegrationTest(NewIntegrationTestArgs{ Description: "The copy menu allows to copy name and diff of selected/all files", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { config.GetUserConfig().OS.CopyToClipboardCmd = "printf '%s' {{text}} > clipboard" }, SetupRepo: func(shell *Shell) {}, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsEmpty(). Press(keys.Files.CopyFileInfoToClipboard). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Copy to clipboard")). Select(Contains("File name")). Tooltip(Equals("Disabled: No item selected")). Confirm(). Tap(func() { t.ExpectToast(Equals("Disabled: No item selected")) }). Cancel() }) t.Shell(). CreateDir("dir"). CreateFile("dir/1-unstaged_file", "unstaged content") t.Views().Files(). Press(keys.Universal.Refresh). Lines( Contains("dir").IsSelected(), Contains("unstaged_file"), ). SelectNextItem(). Press(keys.Files.CopyFileInfoToClipboard). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Copy to clipboard")). Select(Contains("Diff of selected file")). Tooltip(Contains("Disabled: Nothing to copy")). Confirm(). Tap(func() { t.ExpectToast(Equals("Disabled: Nothing to copy")) }). Cancel() }). Press(keys.Files.CopyFileInfoToClipboard). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Copy to clipboard")). Select(Contains("Diff of all files")). Tooltip(Contains("Disabled: Nothing to copy")). Confirm(). Tap(func() { t.ExpectToast(Equals("Disabled: Nothing to copy")) }). Cancel() }) t.Shell(). GitAdd("dir/1-unstaged_file"). Commit("commit-unstaged"). UpdateFile("dir/1-unstaged_file", "unstaged content (new)"). CreateFileAndAdd("dir/2-staged_file", "staged content"). Commit("commit-staged"). UpdateFile("dir/2-staged_file", "staged content (new)"). GitAdd("dir/2-staged_file") t.Views().Files(). Press(keys.Universal.Refresh). Lines( Contains("dir"), Contains("unstaged_file").IsSelected(), Contains("staged_file"), ). Press(keys.Files.CopyFileInfoToClipboard). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Copy to clipboard")). Select(Contains("File name")). Confirm() t.ExpectToast(Equals("File name copied to clipboard")) expectClipboard(t, Equals("1-unstaged_file")) }) t.Views().Files(). Press(keys.Files.CopyFileInfoToClipboard). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Copy to clipboard")). Select(Contains("Relative path")). Confirm() t.ExpectToast(Equals("File path copied to clipboard")) expectClipboard(t, Equals("dir/1-unstaged_file")) }) t.Views().Files(). Press(keys.Files.CopyFileInfoToClipboard). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Copy to clipboard")). Select(Contains("Absolute path")). Confirm() t.ExpectToast(Equals("File path copied to clipboard")) repoDir, _ := os.Getwd() expectClipboard(t, Equals(repoDir+"/dir/1-unstaged_file")) }) t.Views().Files(). Press(keys.Files.CopyFileInfoToClipboard). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Copy to clipboard")). Select(Contains("Diff of selected file")). Tooltip(Equals("If there are staged items, this command considers only them. Otherwise, it considers all the unstaged ones.")). Confirm() t.ExpectToast(Equals("File diff copied to clipboard")) expectClipboard(t, Contains("+unstaged content (new)")) }) t.Views().Files(). SelectPreviousItem(). Lines( Contains("dir").IsSelected(), Contains("unstaged_file"), Contains("staged_file"), ). Press(keys.Files.CopyFileInfoToClipboard). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Copy to clipboard")). Select(Contains("Diff of selected file")). Tooltip(Equals("If there are staged items, this command considers only them. Otherwise, it considers all the unstaged ones.")). Confirm() t.ExpectToast(Equals("File diff copied to clipboard")) expectClipboard(t, Contains("+staged content (new)")) }) t.Views().Files(). Press(keys.Files.CopyFileInfoToClipboard). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Copy to clipboard")). Select(Contains("Diff of all files")). Tooltip(Equals("If there are staged items, this command considers only them. Otherwise, it considers all the unstaged ones.")). Confirm() t.ExpectToast(Equals("All files diff copied to clipboard")) expectClipboard(t, Contains("+staged content (new)")) }) t.Views().Files(). SelectNextItem(). SelectNextItem(). Lines( Contains("dir"), Contains("unstaged_file"), Contains("staged_file").IsSelected(), ). Press(keys.Universal.Select). Press(keys.Files.CopyFileInfoToClipboard). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Copy to clipboard")). Select(Contains("Diff of all files")). Tooltip(Equals("If there are staged items, this command considers only them. Otherwise, it considers all the unstaged ones.")). Confirm() t.ExpectToast(Equals("All files diff copied to clipboard")) expectClipboard(t, Contains("+staged content (new)").Contains("+unstaged content (new)")) }) }, })
View Source
var DirWithUntrackedFile = NewIntegrationTest(NewIntegrationTestArgs{ Description: "When selecting a directory that contains an untracked file, we should not get an error", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) {}, SetupRepo: func(shell *Shell) { shell.CreateDir("dir") shell.CreateFile("dir/file", "foo") shell.GitAddAll() shell.Commit("first commit") shell.CreateFile("dir/untracked", "bar") shell.UpdateFile("dir/file", "baz") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Commits(). Lines( Contains("first commit"), ) t.Views().Main(). Content(DoesNotContain("error: Could not access")). Content(Contains("baz")) }, })
View Source
var DiscardAllDirChanges = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Discarding all changes in a directory", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateDir("dir") shell.RunShellCommand(`echo test > dir/both-deleted.txt`) shell.RunShellCommand(`git checkout -b conflict && git add dir/both-deleted.txt`) shell.RunShellCommand(`echo bothmodded > dir/both-modded.txt && git add dir/both-modded.txt`) shell.RunShellCommand(`echo haha > dir/deleted-them.txt && git add dir/deleted-them.txt`) shell.RunShellCommand(`echo haha2 > dir/deleted-us.txt && git add dir/deleted-us.txt`) shell.RunShellCommand(`echo mod > dir/modded.txt && git add dir/modded.txt`) shell.RunShellCommand(`echo mod > dir/modded-staged.txt && git add dir/modded-staged.txt`) shell.RunShellCommand(`echo del > dir/deleted.txt && git add dir/deleted.txt`) shell.RunShellCommand(`echo del > dir/deleted-staged.txt && git add dir/deleted-staged.txt`) shell.RunShellCommand(`echo change-delete > dir/change-delete.txt && git add dir/change-delete.txt`) shell.RunShellCommand(`echo delete-change > dir/delete-change.txt && git add dir/delete-change.txt`) shell.RunShellCommand(`echo double-modded > dir/double-modded.txt && git add dir/double-modded.txt`) shell.RunShellCommand(`echo "renamed\nhaha" > dir/renamed.txt && git add dir/renamed.txt`) shell.RunShellCommand(`git commit -m one`) shell.RunShellCommand(`git branch conflict_second && git mv dir/both-deleted.txt dir/added-them-changed-us.txt`) shell.RunShellCommand(`git commit -m "dir/both-deleted.txt renamed in dir/added-them-changed-us.txt"`) shell.RunShellCommand(`echo blah > dir/both-added.txt && git add dir/both-added.txt`) shell.RunShellCommand(`echo mod1 > dir/both-modded.txt && git add dir/both-modded.txt`) shell.RunShellCommand(`rm dir/deleted-them.txt && git add dir/deleted-them.txt`) shell.RunShellCommand(`echo modded > dir/deleted-us.txt && git add dir/deleted-us.txt`) shell.RunShellCommand(`git commit -m "two"`) shell.RunShellCommand(`git checkout conflict_second`) shell.RunShellCommand(`git mv dir/both-deleted.txt dir/changed-them-added-us.txt`) shell.RunShellCommand(`git commit -m "both-deleted.txt renamed in dir/changed-them-added-us.txt"`) shell.RunShellCommand(`echo mod2 > dir/both-modded.txt && git add dir/both-modded.txt`) shell.RunShellCommand(`echo blah2 > dir/both-added.txt && git add dir/both-added.txt`) shell.RunShellCommand(`echo modded > dir/deleted-them.txt && git add dir/deleted-them.txt`) shell.RunShellCommand(`rm dir/deleted-us.txt && git add dir/deleted-us.txt`) shell.RunShellCommand(`git commit -m "three"`) shell.RunShellCommand(`git reset --hard conflict_second`) shell.RunCommandExpectError([]string{"git", "merge", "conflict"}) shell.RunShellCommand(`echo "new" > dir/new.txt`) shell.RunShellCommand(`echo "new staged" > dir/new-staged.txt && git add dir/new-staged.txt`) shell.RunShellCommand(`echo mod2 > dir/modded.txt`) shell.RunShellCommand(`echo mod2 > dir/modded-staged.txt && git add dir/modded-staged.txt`) shell.RunShellCommand(`rm dir/deleted.txt`) shell.RunShellCommand(`rm dir/deleted-staged.txt && git add dir/deleted-staged.txt`) shell.RunShellCommand(`echo change-delete2 > dir/change-delete.txt && git add dir/change-delete.txt`) shell.RunShellCommand(`rm dir/change-delete.txt`) shell.RunShellCommand(`rm dir/delete-change.txt && git add dir/delete-change.txt`) shell.RunShellCommand(`echo "changed" > dir/delete-change.txt`) shell.RunShellCommand(`echo "change1" > dir/double-modded.txt && git add dir/double-modded.txt`) shell.RunShellCommand(`echo "change2" > dir/double-modded.txt`) shell.RunShellCommand(`echo before > dir/added-changed.txt && git add dir/added-changed.txt`) shell.RunShellCommand(`echo after > dir/added-changed.txt`) shell.RunShellCommand(`rm dir/renamed.txt && git add dir/renamed.txt`) shell.RunShellCommand(`echo "renamed\nhaha" > dir/renamed2.txt && git add dir/renamed2.txt`) }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Contains("dir").IsSelected(), Contains("UA").Contains("added-them-changed-us.txt"), 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"), ). Press(keys.Universal.Remove). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Discard changes")). Select(Contains("Discard all changes")). Confirm() }). Tap(func() { t.Common().ContinueOnConflictsResolved("merge") t.ExpectPopup().Confirmation(). Title(Equals("Continue")). Content(Contains("Files have been modified since conflicts were resolved. Auto-stage them and continue?")). Cancel() t.GlobalPress(keys.Universal.CreateRebaseOptionsMenu) t.ExpectPopup().Menu(). Title(Equals("Merge options")). Select(Contains("continue")). Confirm() }). Lines( Contains("dir").IsSelected(), Contains(" M").Contains("added-changed.txt"), Contains(" D").Contains("change-delete.txt"), Contains("??").Contains("delete-change.txt"), Contains(" D").Contains("deleted.txt"), Contains(" M").Contains("double-modded.txt"), Contains(" M").Contains("modded.txt"), Contains("??").Contains("new.txt"), ). Press(keys.Universal.Remove). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Discard changes")). Select(Contains("Discard all changes")). Confirm() }). IsEmpty() }, })
View Source
var DiscardRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Discard a range of files using range select", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateFileAndAdd("dir2/file-2b", "old content") shell.CreateFileAndAdd("dir3/file-3b", "old content") shell.Commit("first commit") shell.UpdateFile("dir2/file-2b", "new content") shell.UpdateFile("dir3/file-3b", "new content") shell.CreateFile("dir1/file-1a", "") shell.CreateFile("dir1/file-1b", "") shell.CreateFile("dir2/file-2a", "") shell.CreateFile("dir3/file-3a", "") shell.CreateFile("file-a", "") shell.CreateFile("file-b", "") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /").IsSelected(), Equals(" ▼ dir1"), 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( Equals("▼ /"), 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"), ). Press(keys.Universal.Remove). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Discard changes")). Select(Contains("Discard all changes")). Confirm() }). Lines( Equals("▼ /"), Equals(" ▼ dir1"), Equals(" ?? file-1a"), Equals(" ▼ dir3").IsSelected(), Equals(" ?? file-3a"), Equals(" M file-3b"), Equals(" ?? file-a"), Equals(" ?? file-b"), ). PressEnter(). Press(keys.Universal.ToggleRangeSelect). NavigateToLine(Contains("file-a")). Lines( Equals("▼ /"), Equals(" ▼ dir1"), Equals(" ?? file-1a"), Equals(" ▶ dir3").IsSelected(), Equals(" ?? file-a").IsSelected(), Equals(" ?? file-b"), ). Press(keys.Universal.Remove). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Discard changes")). Select(Contains("Discard all changes")). Confirm() }). Lines( Equals("▼ /"), Equals(" ▼ dir1"), Equals(" ?? file-1a"), Equals(" ?? file-b").IsSelected(), ) }, })
View Source
var DiscardStagedChanges = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Discarding staged changes", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateFileAndAdd("fileToRemove", "original content") shell.CreateFileAndAdd("file2", "original content") shell.Commit("first commit") shell.CreateFile("file3", "original content") shell.UpdateFile("fileToRemove", "new content") shell.UpdateFile("file2", "new content") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /").IsSelected(), Equals(" M file2"), Equals(" ?? file3"), Equals(" M fileToRemove"), ). NavigateToLine(Contains(`fileToRemove`)). PressPrimaryAction(). Lines( Equals("▼ /"), Equals(" M file2"), Equals(" ?? file3"), Equals(" M fileToRemove").IsSelected(), ). Press(keys.Files.ViewResetOptions) t.ExpectPopup().Menu().Title(Equals("")).Select(Contains("Discard staged changes")).Confirm() t.Views().Files(). Lines( Equals("▼ /"), Equals(" M file2"), Equals(" ?? file3").IsSelected(), ) t.FileSystem().FileContent("fileToRemove", Equals("original content")) }, })
View Source
var DiscardUnstagedDirChanges = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Discarding unstaged changes in a directory", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateDir("dir") shell.CreateFileAndAdd("dir/file-one", "original content\n") shell.Commit("first commit") shell.UpdateFileAndAdd("dir/file-one", "original content\nnew content\n") shell.UpdateFile("dir/file-one", "original content\nnew content\neven newer content\n") shell.CreateDir("dir/subdir") shell.CreateFile("dir/subdir/unstaged-file-one", "unstaged file") shell.CreateFile("dir/unstaged-file-two", "unstaged file") shell.CreateFile("unstaged-file-three", "unstaged file") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /").IsSelected(), Equals(" ▼ dir"), Equals(" ▼ subdir"), Equals(" ?? unstaged-file-one"), Equals(" MM file-one"), Equals(" ?? unstaged-file-two"), Equals(" ?? unstaged-file-three"), ). SelectNextItem(). Press(keys.Universal.Remove). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Discard changes")). Select(Contains("Discard unstaged changes")). Confirm() }). Lines( Equals("▼ /"), Equals(" ▼ dir").IsSelected(), Equals(" M file-one"), Equals(" ?? unstaged-file-three"), ) t.FileSystem().FileContent("dir/file-one", Equals("original content\nnew content\n")) }, })
View Source
var DiscardUnstagedFileChanges = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Discarding unstaged changes in a file", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateFileAndAdd("file-one", "original content\n") shell.Commit("first commit") shell.UpdateFileAndAdd("file-one", "original content\nnew content\n") shell.UpdateFile("file-one", "original content\nnew content\neven newer content\n") shell.CreateFileAndAdd("file-two", "original content\n") shell.UpdateFile("file-two", "original content\nnew content\n") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /").IsSelected(), Equals(" MM file-one"), Equals(" AM file-two"), ). SelectNextItem(). Press(keys.Universal.Remove). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Discard changes")). Select(Contains("Discard unstaged changes")). Confirm() }). Lines( Equals("▼ /"), Equals(" M file-one").IsSelected(), Equals(" AM file-two"), ). SelectNextItem(). Lines( Equals("▼ /"), Equals(" M file-one"), Equals(" AM file-two").IsSelected(), ). Press(keys.Universal.Remove). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Discard changes")). Select(Contains("Discard unstaged changes")). Confirm() }). Lines( Equals("▼ /"), Equals(" M file-one"), Equals(" A file-two").IsSelected(), ) t.FileSystem().FileContent("file-one", Equals("original content\nnew content\n")) t.FileSystem().FileContent("file-two", Equals("original content\n")) }, })
View Source
var DiscardUnstagedRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Discard unstaged changed in a range of files using range select", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateFileAndAdd("dir2/file-d", "old content") shell.Commit("first commit") shell.UpdateFile("dir2/file-d", "new content") shell.CreateFile("dir1/file-a", "") shell.CreateFile("dir1/file-b", "") shell.CreateFileAndAdd("dir2/file-c", "") shell.CreateFile("file-e", "") shell.CreateFile("file-f", "") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /").IsSelected(), Equals(" ▼ dir1"), 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( Equals("▼ /"), 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"), ). Press(keys.Universal.Remove). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Discard changes")). Select(Contains("Discard unstaged changes")). Confirm() }). Lines( Equals("▼ /"), Equals(" ▼ dir1"), Equals(" ?? file-a"), Equals(" ▼ dir2"), Equals(" A file-c").IsSelected(), Equals(" ?? file-e"), Equals(" ?? file-f"), ) }, })
View Source
var DiscardVariousChanges = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Discarding all possible permutations of changed files", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { createAllPossiblePermutationsOfChangedFiles(shell) }, Run: func(t *TestDriver, keys config.KeybindingConfig) { type statusFile struct { status string label string } t.Views().Files(). IsFocused(). TopLines( Equals("▼ /").IsSelected(), ) discardOneByOne := func(files []statusFile) { for _, file := range files { t.Views().Files(). IsFocused(). NavigateToLine(Contains(file.status + " " + file.label)). Press(keys.Universal.Remove) t.ExpectPopup().Menu(). Title(Equals("Discard changes")). Select(Contains("Discard all changes")). Confirm() } } discardOneByOne([]statusFile{ {status: "UA", label: "added-them-changed-us.txt"}, {status: "AA", label: "both-added.txt"}, {status: "DD", label: "both-deleted.txt"}, {status: "UU", label: "both-modded.txt"}, {status: "AU", label: "changed-them-added-us.txt"}, {status: "UD", label: "deleted-them.txt"}, {status: "DU", label: "deleted-us.txt"}, }) t.ExpectPopup().Confirmation(). Title(Equals("Continue")). Content(Contains("All merge conflicts resolved. Continue the merge?")). Cancel() discardOneByOne([]statusFile{ {status: "AM", label: "added-changed.txt"}, {status: "MD", label: "change-delete.txt"}, {status: "D ", label: "delete-change.txt"}, {status: "D ", label: "deleted-staged.txt"}, {status: " D", label: "deleted.txt"}, {status: "MM", label: "double-modded.txt"}, {status: "M ", label: "modded-staged.txt"}, {status: " M", label: "modded.txt"}, {status: "A ", label: "new-staged.txt"}, {status: "??", label: "new.txt"}, {status: "R ", label: "renamed.txt → renamed2.txt"}, }) t.Views().Files().IsEmpty() }, })
View Source
var DiscardVariousChangesRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Discarding all possible permutations of changed files via range select", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { createAllPossiblePermutationsOfChangedFiles(shell) }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /").IsSelected(), Equals(" UA added-them-changed-us.txt"), 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"), ). SelectNextItem(). Press(keys.Universal.ToggleRangeSelect). NavigateToLine(Contains("deleted-us.txt")). Press(keys.Universal.Remove). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Discard changes")). Select(Contains("Discard all changes")). Confirm() t.ExpectPopup().Confirmation(). Title(Equals("Continue")). Content(Contains("All merge conflicts resolved. Continue the merge?")). Cancel() }). Lines( Equals("▼ /").IsSelected(), Equals(" AM added-changed.txt"), 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")). Press(keys.Universal.Remove). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Discard changes")). Select(Contains("Discard all changes")). Confirm() }) t.Views().Files().IsEmpty() }, })
View Source
var Gitignore = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Verify that we can't ignore the .gitignore file, then ignore/exclude other files", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateFile(".gitignore", "") shell.CreateFile("toExclude", "") shell.CreateFile("toIgnore", "") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /").IsSelected(), Equals(" ?? .gitignore"), Equals(" ?? toExclude"), Equals(" ?? toIgnore"), ). SelectNextItem(). Press(keys.Files.IgnoreFile). Tap(func() { t.ExpectPopup().Menu().Title(Equals("Ignore or exclude file")).Select(Contains("Add to .git/info/exclude")).Confirm() t.ExpectPopup().Alert().Title(Equals("Error")).Content(Equals("Cannot exclude .gitignore")).Confirm() }). Press(keys.Files.IgnoreFile). Tap(func() { t.ExpectPopup().Menu().Title(Equals("Ignore or exclude file")).Select(Contains("Add to .gitignore")).Confirm() t.ExpectPopup().Alert().Title(Equals("Error")).Content(Equals("Cannot ignore .gitignore")).Confirm() t.FileSystem().FileContent(".gitignore", Equals("")) t.FileSystem().FileContent(".git/info/exclude", DoesNotContain(".gitignore")) }). SelectNextItem(). Press(keys.Files.IgnoreFile). Tap(func() { t.ExpectPopup().Menu().Title(Equals("Ignore or exclude file")).Select(Contains("Add to .git/info/exclude")).Confirm() t.FileSystem().FileContent(".gitignore", Equals("")) t.FileSystem().FileContent(".git/info/exclude", Contains("toExclude")) }). SelectNextItem(). Press(keys.Files.IgnoreFile). Tap(func() { t.ExpectPopup().Menu().Title(Equals("Ignore or exclude file")).Select(Contains("Add to .gitignore")).Confirm() t.FileSystem().FileContent(".gitignore", Equals("toIgnore\n")) t.FileSystem().FileContent(".git/info/exclude", Contains("toExclude")) }) }, })
View Source
var GitignoreSpecialCharacters = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Ignore files with special characters in their names", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateFile(".gitignore", "") shell.CreateFile("#file", "") shell.CreateFile("file#abc", "") shell.CreateFile("!file", "") shell.CreateFile("file!abc", "") shell.CreateFile("abc*def", "") shell.CreateFile("abc_def", "") shell.CreateFile("file[x]", "") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { excludeFile := func(fileName string) { t.Views().Files(). NavigateToLine(Contains(fileName)). Press(keys.Files.IgnoreFile) t.ExpectPopup().Menu(). Title(Equals("Ignore or exclude file")). Select(Contains("Add to .gitignore")). Confirm() } t.Views().Files(). Focus(). Lines( Equals("▼ /"), Equals(" ?? !file"), Equals(" ?? #file"), Equals(" ?? .gitignore"), Equals(" ?? abc*def"), Equals(" ?? abc_def"), Equals(" ?? file!abc"), Equals(" ?? file#abc"), Equals(" ?? file[x]"), ) excludeFile("#file") excludeFile("file#abc") excludeFile("!file") excludeFile("file!abc") excludeFile("abc*def") excludeFile("file[x]") t.Views().Files(). Lines( Equals("▼ /"), Equals(" ?? .gitignore"), Equals(" ?? abc_def"), ) t.FileSystem().FileContent(".gitignore", Equals("\\#file\nfile#abc\n\\!file\nfile!abc\nabc\\*def\nfile\\[x\\]\n")) }, })
View Source
var RememberCommitMessageAfterFail = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Verify that the commit message is remembered after a failed attempt at committing", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateFile(".git/hooks/pre-commit", preCommitHook) shell.MakeExecutable(".git/hooks/pre-commit") shell.CreateFileAndAdd("one", "one") shell.CreateFile("bad", "bad") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /"), Contains("bad"), Contains("one"), ). Press(keys.Files.CommitChanges). Tap(func() { t.ExpectPopup().CommitMessagePanel().Type("my message").Confirm() t.ExpectPopup().Alert().Title(Equals("Error")).Content(Contains("Git command failed")).Confirm() }). NavigateToLine(Contains("bad")). Press(keys.Universal.Remove). Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Discard changes")). Select(Contains("Discard all changes")). Confirm() }). Lines( Contains("one"), ). Press(keys.Files.CommitChanges). Tap(func() { t.ExpectPopup().CommitMessagePanel(). InitialText(Equals("my message")). Confirm() t.Views().Commits(). Lines( Contains("my message"), ) }) }, })
View Source
var RenameSimilarityThresholdChange = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Change the rename similarity threshold while in the files panel", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) {}, SetupRepo: func(shell *Shell) { shell.CreateFileAndAdd("original", "one\ntwo\nthree\nfour\nfive\n") shell.Commit("add original") shell.DeleteFileAndAdd("original") shell.CreateFileAndAdd("renamed", "one\ntwo\nthree\nfour\nfive\nsix\nseven\neight\nnine\nten\n") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /"), Equals(" D original"), Equals(" A renamed"), ). Press(keys.Universal.DecreaseRenameSimilarityThreshold). Tap(func() { t.ExpectToast(Equals("Changed rename similarity threshold to 45%")) }). Lines( Equals("R original → renamed"), ). Press(keys.Universal.FocusMainView). Tap(func() { t.Views().Main(). Press(keys.Universal.IncreaseRenameSimilarityThreshold) t.ExpectToast(Equals("Changed rename similarity threshold to 50%")) }). Lines( Equals("▼ /"), Equals(" D original"), Equals(" A renamed"), ) }, })
View Source
var RenamedFiles = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Regression test for the display of renamed files in the file tree", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateDir("dir") shell.CreateDir("dir/nested") shell.CreateFileAndAdd("file1", "file1 content\n") shell.CreateFileAndAdd("dir/file2", "file2 content\n") shell.CreateFileAndAdd("dir/nested/file3", "file3 content\n") shell.Commit("initial commit") shell.RunCommand([]string{"git", "mv", "file1", "dir/file1"}) shell.RunCommand([]string{"git", "mv", "dir/file2", "dir/file2-renamed"}) shell.RunCommand([]string{"git", "mv", "dir/nested/file3", "file3"}) }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /"), Equals(" ▼ dir"), Equals(" R file1 → file1"), Equals(" R file2 → file2-renamed"), Equals(" R dir/nested/file3 → file3"), ) }, })
View Source
var RenamedFilesNoRootItem = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Regression test for the display of renamed files in the file tree, when the root item is disabled", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { config.GetUserConfig().Gui.ShowRootItemInFileTree = false }, SetupRepo: func(shell *Shell) { shell.CreateDir("dir") shell.CreateDir("dir/nested") shell.CreateFileAndAdd("file1", "file1 content\n") shell.CreateFileAndAdd("dir/file2", "file2 content\n") shell.CreateFileAndAdd("dir/nested/file3", "file3 content\n") shell.Commit("initial commit") shell.RunCommand([]string{"git", "mv", "file1", "dir/file1"}) shell.RunCommand([]string{"git", "mv", "dir/file2", "dir/file2-renamed"}) shell.RunCommand([]string{"git", "mv", "dir/nested/file3", "file3"}) }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ dir"), Equals(" R file1 → file1"), Equals(" R file2 → file2-renamed"), Equals("R dir/nested/file3 → file3"), ) }, })
View Source
var StageChildrenRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Stage a range of files/folders and their children using range select", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateFile("foo", "") shell.CreateFile("foobar", "") shell.CreateFile("baz/file", "") shell.CreateFile("bazbam/file", "") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /").IsSelected(), Equals(" ▼ baz"), Equals(" ?? file"), Equals(" ▼ bazbam"), Equals(" ?? file"), Equals(" ?? foo"), Equals(" ?? foobar"), ). Press(keys.Universal.ToggleRangeSelect). NavigateToLine(Contains("foobar")). PressPrimaryAction(). Lines( Equals("▼ /").IsSelected(), Equals(" ▼ baz").IsSelected(), Equals(" A file").IsSelected(), Equals(" ▼ bazbam").IsSelected(), Equals(" A file").IsSelected(), Equals(" A foo").IsSelected(), Equals(" A foobar").IsSelected(), ) }, })
View Source
var StageDeletedRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Stage a range of deleted files using range select", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateFileAndAdd("file-a", "") shell.CreateFileAndAdd("file-b", "") shell.Commit("first commit") shell.DeleteFile("file-a") shell.DeleteFile("file-b") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /").IsSelected(), Equals(" D file-a"), Equals(" D file-b"), ). SelectNextItem(). PressPrimaryAction(). Lines( Equals("▼ /"), Equals(" D file-a").IsSelected(), Equals(" D file-b"), ). Press(keys.Universal.ToggleRangeSelect). NavigateToLine(Contains("file-b")). PressPrimaryAction(). Lines( Equals("▼ /"), Equals(" D file-a").IsSelected(), Equals(" D file-b").IsSelected(), ). PressPrimaryAction(). Lines( Equals("▼ /"), Equals(" D file-a").IsSelected(), Equals(" D file-b").IsSelected(), ) }, })
View Source
var StageRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Stage/unstage a range of files using range select", ExtraCmdArgs: []string{}, Skip: false, SetupConfig: func(config *config.AppConfig) { }, SetupRepo: func(shell *Shell) { shell.CreateFileAndAdd("dir2/file-d", "old content") shell.Commit("first commit") shell.UpdateFile("dir2/file-d", "new content") shell.CreateFile("dir1/file-a", "") shell.CreateFile("dir1/file-b", "") shell.CreateFile("dir2/file-c", "") shell.CreateFile("file-e", "") shell.CreateFile("file-f", "") }, Run: func(t *TestDriver, keys config.KeybindingConfig) { t.Views().Files(). IsFocused(). Lines( Equals("▼ /").IsSelected(), Equals(" ▼ dir1"), 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). NavigateToLine(Contains("file-c")). PressPrimaryAction(). Lines( Equals("▼ /"), Equals(" ▼ dir1"), Equals(" ?? file-a"), Equals(" A file-b").IsSelected(), Equals(" ▼ dir2").IsSelected(), Equals(" A file-c").IsSelected(), Equals(" M file-d"), Equals(" ?? file-e"), Equals(" ?? file-f"), ). PressPrimaryAction(). Lines( Equals("▼ /"), 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")). PressEnter(). Lines( Equals("▼ /"), 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")). PressPrimaryAction(). Lines( Equals("▼ /"), 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")). PressEnter(). Lines( Equals("▼ /"), 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"), ) }, })
Functions ¶
This section is empty.
Types ¶
This section is empty.
Source Files
¶
- collapse_expand.go
- copy_menu.go
- dir_with_untracked_file.go
- discard_all_dir_changes.go
- discard_range_select.go
- discard_staged_changes.go
- discard_unstaged_dir_changes.go
- discard_unstaged_file_changes.go
- discard_unstaged_range_select.go
- discard_various_changes.go
- discard_various_changes_range_select.go
- gitignore.go
- gitignore_special_characters.go
- remember_commit_message_after_fail.go
- rename_similarity_threshold_change.go
- renamed_files.go
- renamed_files_no_root_item.go
- shared.go
- stage_children_range_select.go
- stage_deleted_range_select.go
- stage_range_select.go
Click to show internal directories.
Click to hide internal directories.