diff --git a/cmd/integration_test/main.go b/cmd/integration_test/main.go index 492e5e19f..83321fc34 100644 --- a/cmd/integration_test/main.go +++ b/cmd/integration_test/main.go @@ -13,7 +13,7 @@ Usage: See https://github.com/jesseduffield/lazygit/tree/master/pkg/integration/README.md CLI mode: - > go run cmd/integration_test/main.go cli ... + > go run cmd/integration_test/main.go cli [--slow] ... If you pass no test names, it runs all tests Accepted environment variables: KEY_PRESS_DELAY (e.g. 200): the number of milliseconds to wait between keypresses @@ -40,7 +40,14 @@ func main() { case "help": fmt.Println(usage) case "cli": - clients.RunCLI(os.Args[2:]) + testNames := os.Args[2:] + slow := false + // get the next arg if it's --slow + if len(os.Args) > 2 && (os.Args[2] == "--slow" || os.Args[2] == "-slow") { + testNames = os.Args[3:] + slow = true + } + clients.RunCLI(testNames, slow) case "tui": clients.RunTUI() default: diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index 804a5bee0..7e6a21656 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -314,7 +314,9 @@ type CustomCommand struct { } type CustomCommandPrompt struct { - Type string `yaml:"type"` // one of 'input', 'menu', or 'confirm' + // one of 'input', 'menu', 'confirm', or 'menuFromCommand' + Type string `yaml:"type"` + Title string `yaml:"title"` // this only apply to input prompts diff --git a/pkg/gui/gui_driver.go b/pkg/gui/gui_driver.go index 860c6c9b8..7df2b95ba 100644 --- a/pkg/gui/gui_driver.go +++ b/pkg/gui/gui_driver.go @@ -71,3 +71,11 @@ func (self *GuiDriver) LogUI(message string) { func (self *GuiDriver) CheckedOutRef() *models.Branch { return self.gui.helpers.Refs.GetCheckedOutRef() } + +func (self *GuiDriver) MainView() *gocui.View { + return self.gui.mainView() +} + +func (self *GuiDriver) SecondaryView() *gocui.View { + return self.gui.secondaryView() +} diff --git a/pkg/integration/README.md b/pkg/integration/README.md index ba2365403..658339a43 100644 --- a/pkg/integration/README.md +++ b/pkg/integration/README.md @@ -37,7 +37,7 @@ If you find yourself doing something frequently in a test, consider making it a There are three ways to invoke a test: -1. go run cmd/integration_test/main.go cli [...] +1. go run cmd/integration_test/main.go cli [--slow] [...] 2. go run cmd/integration_test/main.go tui 3. go test pkg/integration/clients/go_test.go @@ -47,7 +47,7 @@ The third, the go-test command, intended only for use in CI, to be run along wit The name of a test is based on its path, so the name of the test at `pkg/integration/tests/commit/new_branch.go` is commit/new_branch. So to run it with our test runner you would run `go run cmd/integration_test/main.go cli commit/new_branch`. -You can pass the KEY_PRESS_DELAY env var to the test runner in order to set a delay in milliseconds between keypresses, which helps for watching a test at a realistic speed to understand what it's doing. Or in the tui you can press 't' to run the test with a pre-set delay. +You can pass the KEY_PRESS_DELAY env var to the test runner in order to set a delay in milliseconds between keypresses, which helps for watching a test at a realistic speed to understand what it's doing. Or you can pass the '--slow' flag which sets a pre-set 'slow' key delay. In the tui you can press 't' to run the test in slow mode. ### Snapshots diff --git a/pkg/integration/clients/cli.go b/pkg/integration/clients/cli.go index 76f0c9549..eedb82984 100644 --- a/pkg/integration/clients/cli.go +++ b/pkg/integration/clients/cli.go @@ -4,8 +4,11 @@ import ( "log" "os" "os/exec" + "regexp" "strconv" + "strings" + "github.com/jesseduffield/generics/slices" "github.com/jesseduffield/lazygit/pkg/integration/components" "github.com/jesseduffield/lazygit/pkg/integration/tests" ) @@ -20,14 +23,19 @@ import ( // If invoked directly, you can specify tests to run by passing their names as positional arguments -func RunCLI(testNames []string) { +func RunCLI(testNames []string, slow bool) { + keyPressDelay := tryConvert(os.Getenv("KEY_PRESS_DELAY"), 0) + if slow { + keyPressDelay = SLOW_KEY_PRESS_DELAY + } + err := components.RunTests( getTestsToRun(testNames), log.Printf, runCmdInTerminal, runAndPrintError, getModeFromEnv(), - tryConvert(os.Getenv("KEY_PRESS_DELAY"), 0), + keyPressDelay, ) if err != nil { log.Print(err.Error()) @@ -36,21 +44,30 @@ func RunCLI(testNames []string) { func runAndPrintError(test *components.IntegrationTest, f func() error) { if err := f(); err != nil { - log.Print(err.Error()) + log.Fatalf(err.Error()) } } func getTestsToRun(testNames []string) []*components.IntegrationTest { + allIntegrationTests := tests.GetTests() var testsToRun []*components.IntegrationTest if len(testNames) == 0 { - return tests.Tests + return allIntegrationTests } + testNames = slices.Map(testNames, func(name string) string { + // allowing full test paths to be passed for convenience + return strings.TrimSuffix( + regexp.MustCompile(`.*pkg/integration/tests/`).ReplaceAllString(name, ""), + ".go", + ) + }) + outer: for _, testName := range testNames { // check if our given test name actually exists - for _, test := range tests.Tests { + for _, test := range allIntegrationTests { if test.Name() == testName { testsToRun = append(testsToRun, test) continue outer diff --git a/pkg/integration/clients/go_test.go b/pkg/integration/clients/go_test.go index d52cd409a..9fceecd40 100644 --- a/pkg/integration/clients/go_test.go +++ b/pkg/integration/clients/go_test.go @@ -29,7 +29,7 @@ func TestIntegration(t *testing.T) { testNumber := 0 err := components.RunTests( - tests.Tests, + tests.GetTests(), t.Logf, runCmdHeadless, func(test *components.IntegrationTest, f func() error) { diff --git a/pkg/integration/clients/injector/main.go b/pkg/integration/clients/injector/main.go index 263dba5da..37c76fe3e 100644 --- a/pkg/integration/clients/injector/main.go +++ b/pkg/integration/clients/injector/main.go @@ -52,7 +52,8 @@ func getIntegrationTest() integrationTypes.IntegrationTest { )) } - for _, candidateTest := range tests.Tests { + allTests := tests.GetTests() + for _, candidateTest := range allTests { if candidateTest.Name() == integrationTestName { return candidateTest } diff --git a/pkg/integration/clients/tui.go b/pkg/integration/clients/tui.go index 707e482ca..9348cd1f3 100644 --- a/pkg/integration/clients/tui.go +++ b/pkg/integration/clients/tui.go @@ -19,6 +19,8 @@ import ( // This program lets you run integration tests from a TUI. See pkg/integration/README.md for more info. +var SLOW_KEY_PRESS_DELAY = 300 + func RunTUI() { rootDir := utils.GetLazygitRootDirectory() testDir := filepath.Join(rootDir, "test", "integration") @@ -106,7 +108,7 @@ func RunTUI() { return nil } - suspendAndRunTest(currentTest, components.ASK_TO_UPDATE_SNAPSHOT, 200) + suspendAndRunTest(currentTest, components.ASK_TO_UPDATE_SNAPSHOT, SLOW_KEY_PRESS_DELAY) return nil }); err != nil { @@ -168,7 +170,7 @@ func RunTUI() { return err } - app.filteredTests = tests.Tests + app.filteredTests = app.allTests app.renderTests() app.editorView.TextArea.Clear() app.editorView.Clear() @@ -204,6 +206,7 @@ func RunTUI() { } type app struct { + allTests []*components.IntegrationTest filteredTests []*components.IntegrationTest itemIdx int testDir string @@ -214,7 +217,7 @@ type app struct { } func newApp(testDir string) *app { - return &app{testDir: testDir} + return &app{testDir: testDir, allTests: tests.GetTests()} } func (self *app) getCurrentTest() *components.IntegrationTest { @@ -226,7 +229,7 @@ func (self *app) getCurrentTest() *components.IntegrationTest { } func (self *app) loadTests() { - self.filteredTests = tests.Tests + self.filteredTests = self.allTests self.adjustCursor() } @@ -237,9 +240,9 @@ func (self *app) adjustCursor() { func (self *app) filterWithString(needle string) { if needle == "" { - self.filteredTests = tests.Tests + self.filteredTests = self.allTests } else { - self.filteredTests = slices.Filter(tests.Tests, func(test *components.IntegrationTest) bool { + self.filteredTests = slices.Filter(self.allTests, func(test *components.IntegrationTest) bool { return strings.Contains(test.Name(), needle) }) } diff --git a/pkg/integration/components/assert.go b/pkg/integration/components/assert.go index 584ad438b..ae363eb8d 100644 --- a/pkg/integration/components/assert.go +++ b/pkg/integration/components/assert.go @@ -19,6 +19,43 @@ func NewAssert(gui integrationTypes.GuiDriver) *Assert { return &Assert{gui: gui} } +// for making assertions on string values +type matcher struct { + testFn func(string) (bool, string) + prefix string +} + +func (self *matcher) test(value string) (bool, string) { + ok, message := self.testFn(value) + if ok { + return true, "" + } + + if self.prefix != "" { + return false, self.prefix + " " + message + } + + return false, message +} + +func (self *matcher) context(prefix string) *matcher { + self.prefix = prefix + + return self +} + +func Contains(target string) *matcher { + return &matcher{testFn: func(value string) (bool, string) { + return strings.Contains(value, target), fmt.Sprintf("Expected '%s' to contain '%s'", value, target) + }} +} + +func Equals(target string) *matcher { + return &matcher{testFn: func(value string) (bool, string) { + return target == value, fmt.Sprintf("Expected '%s' to equal '%s'", value, target) + }} +} + func (self *Assert) WorkingTreeFileCount(expectedCount int) { self.assertWithRetries(func() (bool, string) { actualCount := len(self.gui.Model().Files) @@ -41,22 +78,16 @@ func (self *Assert) CommitCount(expectedCount int) { }) } -func (self *Assert) HeadCommitMessage(expectedMessage string) { +func (self *Assert) MatchHeadCommitMessage(matcher *matcher) { self.assertWithRetries(func() (bool, string) { - if len(self.gui.Model().Commits) == 0 { - return false, "Expected at least one commit to be present" - } - - headCommit := self.gui.Model().Commits[0] - if headCommit.Name != expectedMessage { - return false, fmt.Sprintf( - "Expected commit message to be '%s', but got '%s'", - expectedMessage, headCommit.Name, - ) - } - - return true, "" + return len(self.gui.Model().Commits) > 0, "Expected at least one commit to be present" }) + + self.matchString(matcher, "Unexpected commit message.", + func() string { + return self.gui.Model().Commits[0].Name + }, + ) } func (self *Assert) CurrentViewName(expectedViewName string) { @@ -81,10 +112,70 @@ func (self *Assert) InListContext() { }) } -func (self *Assert) SelectedLineContains(text string) { +func (self *Assert) MatchSelectedLine(matcher *matcher) { + self.matchString(matcher, "Unexpected selected line.", + func() string { + return self.gui.CurrentContext().GetView().SelectedLine() + }, + ) +} + +func (self *Assert) InPrompt() { self.assertWithRetries(func() (bool, string) { - line := self.gui.CurrentContext().GetView().SelectedLine() - return strings.Contains(line, text), fmt.Sprintf("Expected selected line to contain '%s', but got '%s'", text, line) + currentView := self.gui.CurrentContext().GetView() + return currentView.Name() == "confirmation" && currentView.Editable, "Expected prompt popup to be focused" + }) +} + +func (self *Assert) InConfirm() { + self.assertWithRetries(func() (bool, string) { + currentView := self.gui.CurrentContext().GetView() + return currentView.Name() == "confirmation" && !currentView.Editable, "Expected confirmation popup to be focused" + }) +} + +func (self *Assert) InAlert() { + // basically the same thing as a confirmation popup with the current implementation + self.assertWithRetries(func() (bool, string) { + currentView := self.gui.CurrentContext().GetView() + return currentView.Name() == "confirmation" && !currentView.Editable, "Expected alert popup to be focused" + }) +} + +func (self *Assert) InMenu() { + self.assertWithRetries(func() (bool, string) { + return self.gui.CurrentContext().GetView().Name() == "menu", "Expected popup menu to be focused" + }) +} + +func (self *Assert) MatchCurrentViewTitle(matcher *matcher) { + self.matchString(matcher, "Unexpected current view title.", + func() string { + return self.gui.CurrentContext().GetView().Title + }, + ) +} + +func (self *Assert) MatchMainViewContent(matcher *matcher) { + self.matchString(matcher, "Unexpected main view content.", + func() string { + return self.gui.MainView().Buffer() + }, + ) +} + +func (self *Assert) MatchSecondaryViewContent(matcher *matcher) { + self.matchString(matcher, "Unexpected secondary view title.", + func() string { + return self.gui.SecondaryView().Buffer() + }, + ) +} + +func (self *Assert) matchString(matcher *matcher, context string, getValue func() string) { + self.assertWithRetries(func() (bool, string) { + value := getValue() + return matcher.context(context).test(value) }) } diff --git a/pkg/integration/components/input.go b/pkg/integration/components/input.go index d44b11830..63e902613 100644 --- a/pkg/integration/components/input.go +++ b/pkg/integration/components/input.go @@ -77,7 +77,7 @@ func (self *Input) Cancel() { } // i.e. pressing space -func (self *Input) Select() { +func (self *Input) PrimaryAction() { self.pressKey(self.keys.Universal.Select) } @@ -93,7 +93,7 @@ func (self *Input) PreviousItem() { func (self *Input) ContinueMerge() { self.PressKeys(self.keys.Universal.CreateRebaseOptionsMenu) - self.assert.SelectedLineContains("continue") + self.assert.MatchSelectedLine(Contains("continue")) self.Confirm() } diff --git a/pkg/integration/components/test.go b/pkg/integration/components/test.go index a5973c07a..3cc6a7641 100644 --- a/pkg/integration/components/test.go +++ b/pkg/integration/components/test.go @@ -53,7 +53,7 @@ func NewIntegrationTest(args NewIntegrationTestArgs) *IntegrationTest { if args.Description != unitTestDescription { // this panics if we're in a unit test for our integration tests, // so we're using "test test" as a sentinel value - name = testNameFromFilePath() + name = testNameFromCurrentFilePath() } return &IntegrationTest{ @@ -106,8 +106,12 @@ func (self *IntegrationTest) Run(gui integrationTypes.GuiDriver) { } } -func testNameFromFilePath() string { +func testNameFromCurrentFilePath() string { path := utils.FilePath(3) + return TestNameFromFilePath(path) +} + +func TestNameFromFilePath(path string) string { name := strings.Split(path, "integration/tests/")[1] return name[:len(name)-len(".go")] diff --git a/pkg/integration/components/test_test.go b/pkg/integration/components/test_test.go index de8dac8e4..e180bfccb 100644 --- a/pkg/integration/components/test_test.go +++ b/pkg/integration/components/test_test.go @@ -3,6 +3,7 @@ package components import ( "testing" + "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" "github.com/jesseduffield/lazygit/pkg/config" "github.com/jesseduffield/lazygit/pkg/gui/types" @@ -47,6 +48,14 @@ func (self *fakeGuiDriver) CheckedOutRef() *models.Branch { return nil } +func (self *fakeGuiDriver) MainView() *gocui.View { + return nil +} + +func (self *fakeGuiDriver) SecondaryView() *gocui.View { + return nil +} + func TestAssertionFailure(t *testing.T) { test := NewIntegrationTest(NewIntegrationTestArgs{ Description: unitTestDescription, diff --git a/pkg/integration/tests/commit/commit.go b/pkg/integration/tests/commit/commit.go index 12a68925d..dbef083ae 100644 --- a/pkg/integration/tests/commit/commit.go +++ b/pkg/integration/tests/commit/commit.go @@ -2,24 +2,24 @@ package commit import ( "github.com/jesseduffield/lazygit/pkg/config" - "github.com/jesseduffield/lazygit/pkg/integration/components" + . "github.com/jesseduffield/lazygit/pkg/integration/components" ) -var Commit = components.NewIntegrationTest(components.NewIntegrationTestArgs{ +var Commit = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Staging a couple files and committing", ExtraCmdArgs: "", Skip: false, SetupConfig: func(config *config.AppConfig) {}, - SetupRepo: func(shell *components.Shell) { + SetupRepo: func(shell *Shell) { shell.CreateFile("myfile", "myfile content") shell.CreateFile("myfile2", "myfile2 content") }, - Run: func(shell *components.Shell, input *components.Input, assert *components.Assert, keys config.KeybindingConfig) { + Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) { assert.CommitCount(0) - input.Select() + input.PrimaryAction() input.NextItem() - input.Select() + input.PrimaryAction() input.PressKeys(keys.Files.CommitChanges) commitMessage := "my commit message" @@ -27,6 +27,6 @@ var Commit = components.NewIntegrationTest(components.NewIntegrationTestArgs{ input.Confirm() assert.CommitCount(1) - assert.HeadCommitMessage(commitMessage) + assert.MatchHeadCommitMessage(Equals(commitMessage)) }, }) diff --git a/pkg/integration/tests/commit/new_branch.go b/pkg/integration/tests/commit/new_branch.go index ad96938f5..ea784791d 100644 --- a/pkg/integration/tests/commit/new_branch.go +++ b/pkg/integration/tests/commit/new_branch.go @@ -2,21 +2,21 @@ package commit import ( "github.com/jesseduffield/lazygit/pkg/config" - "github.com/jesseduffield/lazygit/pkg/integration/components" + . "github.com/jesseduffield/lazygit/pkg/integration/components" ) -var NewBranch = components.NewIntegrationTest(components.NewIntegrationTestArgs{ +var NewBranch = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Creating a new branch from a commit", ExtraCmdArgs: "", Skip: false, SetupConfig: func(config *config.AppConfig) {}, - SetupRepo: func(shell *components.Shell) { + SetupRepo: func(shell *Shell) { shell. EmptyCommit("commit 1"). EmptyCommit("commit 2"). EmptyCommit("commit 3") }, - Run: func(shell *components.Shell, input *components.Input, assert *components.Assert, keys config.KeybindingConfig) { + Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) { assert.CommitCount(3) input.SwitchToCommitsWindow() @@ -32,7 +32,7 @@ var NewBranch = components.NewIntegrationTest(components.NewIntegrationTestArgs{ input.Confirm() assert.CommitCount(2) - assert.HeadCommitMessage("commit 2") + assert.MatchHeadCommitMessage(Contains("commit 2")) assert.CurrentBranchName(branchName) }, }) diff --git a/pkg/integration/tests/custom_commands/basic.go b/pkg/integration/tests/custom_commands/basic.go new file mode 100644 index 000000000..e92e3eed3 --- /dev/null +++ b/pkg/integration/tests/custom_commands/basic.go @@ -0,0 +1,36 @@ +package custom_commands + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var Basic = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Using a custom command to create a new file", + ExtraCmdArgs: "", + Skip: false, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("blah") + }, + SetupConfig: func(cfg *config.AppConfig) { + cfg.UserConfig.CustomCommands = []config.CustomCommand{ + { + Key: "a", + Context: "files", + Command: "touch myfile", + }, + } + }, + Run: func( + shell *Shell, + input *Input, + assert *Assert, + keys config.KeybindingConfig, + ) { + assert.WorkingTreeFileCount(0) + + input.PressKeys("a") + assert.WorkingTreeFileCount(1) + assert.MatchSelectedLine(Contains("myfile")) + }, +}) diff --git a/pkg/integration/tests/custom_commands/menu_from_command.go b/pkg/integration/tests/custom_commands/menu_from_command.go new file mode 100644 index 000000000..f45d820d6 --- /dev/null +++ b/pkg/integration/tests/custom_commands/menu_from_command.go @@ -0,0 +1,74 @@ +package custom_commands + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +// NOTE: we're getting a weird offset in the popup prompt for some reason. Not sure what's behind that. + +var MenuFromCommand = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Using menuFromCommand prompt type", + ExtraCmdArgs: "", + Skip: false, + SetupRepo: func(shell *Shell) { + shell. + EmptyCommit("foo"). + EmptyCommit("bar"). + EmptyCommit("baz"). + NewBranch("feature/foo") + }, + SetupConfig: func(cfg *config.AppConfig) { + cfg.UserConfig.CustomCommands = []config.CustomCommand{ + { + Key: "a", + Context: "localBranches", + Command: `echo "{{index .PromptResponses 0}} {{index .PromptResponses 1}} {{ .SelectedLocalBranch.Name }}" > output.txt`, + Prompts: []config.CustomCommandPrompt{ + { + Type: "menuFromCommand", + Title: "Choose commit message", + Command: `git log --oneline --pretty=%B`, + Filter: `(?P.*)`, + ValueFormat: `{{ .commit_message }}`, + LabelFormat: `{{ .commit_message | yellow }}`, + }, + { + Type: "input", + Title: "Description", + InitialValue: `{{ if .SelectedLocalBranch.Name }}Branch: #{{ .SelectedLocalBranch.Name }}{{end}}`, + }, + }, + }, + } + }, + Run: func( + shell *Shell, + input *Input, + assert *Assert, + keys config.KeybindingConfig, + ) { + assert.WorkingTreeFileCount(0) + input.SwitchToBranchesWindow() + + input.PressKeys("a") + + assert.InMenu() + assert.MatchCurrentViewTitle(Equals("Choose commit message")) + assert.MatchSelectedLine(Equals("baz")) + input.NextItem() + assert.MatchSelectedLine(Equals("bar")) + input.Confirm() + + assert.InPrompt() + assert.MatchCurrentViewTitle(Equals("Description")) + input.Type(" my branch") + input.Confirm() + + input.SwitchToFilesWindow() + + assert.WorkingTreeFileCount(1) + assert.MatchSelectedLine(Contains("output.txt")) + assert.MatchMainViewContent(Contains("bar Branch: #feature/foo my branch feature/foo")) + }, +}) diff --git a/pkg/integration/tests/custom_commands/multiple_prompts.go b/pkg/integration/tests/custom_commands/multiple_prompts.go new file mode 100644 index 000000000..e66b6a091 --- /dev/null +++ b/pkg/integration/tests/custom_commands/multiple_prompts.go @@ -0,0 +1,86 @@ +package custom_commands + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var MultiplePrompts = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Using a custom command with multiple prompts", + ExtraCmdArgs: "", + Skip: false, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("blah") + }, + SetupConfig: func(cfg *config.AppConfig) { + cfg.UserConfig.CustomCommands = []config.CustomCommand{ + { + Key: "a", + Context: "files", + Command: `echo "{{index .PromptResponses 1}}" > {{index .PromptResponses 0}}`, + Prompts: []config.CustomCommandPrompt{ + { + Type: "input", + Title: "Enter a file name", + }, + { + Type: "menu", + Title: "Choose file content", + Options: []config.CustomCommandMenuOption{ + { + Name: "foo", + Description: "Foo", + Value: "FOO", + }, + { + Name: "bar", + Description: "Bar", + Value: "BAR", + }, + { + Name: "baz", + Description: "Baz", + Value: "BAZ", + }, + }, + }, + { + Type: "confirm", + Title: "Are you sure?", + Body: "Are you REALLY sure you want to make this file? Up to you buddy.", + }, + }, + }, + } + }, + Run: func( + shell *Shell, + input *Input, + assert *Assert, + keys config.KeybindingConfig, + ) { + assert.WorkingTreeFileCount(0) + + input.PressKeys("a") + + assert.InPrompt() + assert.MatchCurrentViewTitle(Equals("Enter a file name")) + input.Type("myfile") + input.Confirm() + + assert.InMenu() + assert.MatchCurrentViewTitle(Equals("Choose file content")) + assert.MatchSelectedLine(Contains("foo")) + input.NextItem() + assert.MatchSelectedLine(Contains("bar")) + input.Confirm() + + assert.InConfirm() + assert.MatchCurrentViewTitle(Equals("Are you sure?")) + input.Confirm() + + assert.WorkingTreeFileCount(1) + assert.MatchSelectedLine(Contains("myfile")) + assert.MatchMainViewContent(Contains("BAR")) + }, +}) diff --git a/pkg/integration/tests/interactive_rebase/one.go b/pkg/integration/tests/interactive_rebase/one.go index 3c785a727..014a4b8c9 100644 --- a/pkg/integration/tests/interactive_rebase/one.go +++ b/pkg/integration/tests/interactive_rebase/one.go @@ -2,37 +2,37 @@ package interactive_rebase import ( "github.com/jesseduffield/lazygit/pkg/config" - "github.com/jesseduffield/lazygit/pkg/integration/components" + . "github.com/jesseduffield/lazygit/pkg/integration/components" ) -var One = components.NewIntegrationTest(components.NewIntegrationTestArgs{ +var One = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Begins an interactive rebase, then fixups, drops, and squashes some commits", ExtraCmdArgs: "", Skip: false, SetupConfig: func(config *config.AppConfig) {}, - SetupRepo: func(shell *components.Shell) { + SetupRepo: func(shell *Shell) { shell. CreateNCommits(5) // these will appears at commit 05, 04, 04, down to 01 }, - Run: func(shell *components.Shell, input *components.Input, assert *components.Assert, keys config.KeybindingConfig) { + Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) { input.SwitchToCommitsWindow() assert.CurrentViewName("commits") input.NavigateToListItemContainingText("commit 02") input.PressKeys(keys.Universal.Edit) - assert.SelectedLineContains("YOU ARE HERE") + assert.MatchSelectedLine(Contains("YOU ARE HERE")) input.PreviousItem() input.PressKeys(keys.Commits.MarkCommitAsFixup) - assert.SelectedLineContains("fixup") + assert.MatchSelectedLine(Contains("fixup")) input.PreviousItem() input.PressKeys(keys.Universal.Remove) - assert.SelectedLineContains("drop") + assert.MatchSelectedLine(Contains("drop")) input.PreviousItem() input.PressKeys(keys.Commits.SquashDown) - assert.SelectedLineContains("squash") + assert.MatchSelectedLine(Contains("squash")) input.ContinueRebase() diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go index e9794169a..587ac8e30 100644 --- a/pkg/integration/tests/tests.go +++ b/pkg/integration/tests/tests.go @@ -1,18 +1,74 @@ package tests import ( + "fmt" + "os" + "path/filepath" + "strings" + + "github.com/jesseduffield/generics/set" + "github.com/jesseduffield/generics/slices" "github.com/jesseduffield/lazygit/pkg/integration/components" "github.com/jesseduffield/lazygit/pkg/integration/tests/branch" "github.com/jesseduffield/lazygit/pkg/integration/tests/commit" + "github.com/jesseduffield/lazygit/pkg/integration/tests/custom_commands" "github.com/jesseduffield/lazygit/pkg/integration/tests/interactive_rebase" + "github.com/jesseduffield/lazygit/pkg/utils" ) // Here is where we lists the actual tests that will run. When you create a new test, // be sure to add it to this list. -var Tests = []*components.IntegrationTest{ +var tests = []*components.IntegrationTest{ commit.Commit, commit.NewBranch, branch.Suggestions, interactive_rebase.One, + custom_commands.Basic, + custom_commands.MultiplePrompts, + custom_commands.MenuFromCommand, +} + +func GetTests() []*components.IntegrationTest { + // first we ensure that each test in this directory has actually been added to the above list. + testCount := 0 + + testNamesSet := set.NewFromSlice(slices.Map( + tests, + func(test *components.IntegrationTest) string { + return test.Name() + }, + )) + + missingTestNames := []string{} + + if err := filepath.Walk(filepath.Join(utils.GetLazygitRootDirectory(), "pkg/integration/tests"), func(path string, info os.FileInfo, err error) error { + if !info.IsDir() && strings.HasSuffix(path, ".go") { + // ignoring this current file + if filepath.Base(path) == "tests.go" { + return nil + } + + nameFromPath := components.TestNameFromFilePath(path) + if !testNamesSet.Includes(nameFromPath) { + missingTestNames = append(missingTestNames, nameFromPath) + } + testCount++ + } + return nil + }); err != nil { + panic(fmt.Sprintf("failed to walk tests: %v", err)) + } + + if len(missingTestNames) > 0 { + panic(fmt.Sprintf("The following tests are missing from the list of tests: %s. You need to add them to `pkg/integration/tests/tests.go`.", strings.Join(missingTestNames, ", "))) + } + + if testCount > len(tests) { + panic("you have not added all of the tests to the tests list in `pkg/integration/tests/tests.go`") + } else if testCount < len(tests) { + panic("There are more tests in `pkg/integration/tests/tests.go` than there are test files in the tests directory. Ensure that you only have one test per file and you haven't included the same test twice in the tests list.") + } + + return tests } diff --git a/pkg/integration/types/types.go b/pkg/integration/types/types.go index 543212d59..b5ee2ca68 100644 --- a/pkg/integration/types/types.go +++ b/pkg/integration/types/types.go @@ -1,6 +1,7 @@ package types import ( + "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" "github.com/jesseduffield/lazygit/pkg/config" "github.com/jesseduffield/lazygit/pkg/gui/types" @@ -28,4 +29,9 @@ type GuiDriver interface { // logs in the actual UI (in the commands panel) LogUI(message string) CheckedOutRef() *models.Branch + // the view that appears to the right of the side panel + MainView() *gocui.View + // the other view that sometimes appears to the right of the side panel + // e.g. when we're showing both staged and unstaged changes + SecondaryView() *gocui.View } diff --git a/test/integration/customCommands/config/config.yml b/test/integration/customCommands/config/config.yml deleted file mode 100644 index 33c1d684e..000000000 --- a/test/integration/customCommands/config/config.yml +++ /dev/null @@ -1,18 +0,0 @@ -disableStartupPopups: true -customCommands: - - key : 'N' - description: 'Add file' - command: "echo {{index .PromptResponses 0}} > {{index .PromptResponses 1}}" - context: 'files' - prompts: - - type: 'input' - title: 'File name:' - - type: 'input' - title: 'File content:' -gui: - theme: - activeBorderColor: - - green - - bold - SelectedRangeBgcolor: - - reverse diff --git a/test/integration/customCommands/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/customCommands/expected/repo/.git_keep/COMMIT_EDITMSG deleted file mode 100644 index 9daeafb98..000000000 --- a/test/integration/customCommands/expected/repo/.git_keep/COMMIT_EDITMSG +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/test/integration/customCommands/expected/repo/.git_keep/index b/test/integration/customCommands/expected/repo/.git_keep/index deleted file mode 100644 index 1cdf852e0..000000000 Binary files a/test/integration/customCommands/expected/repo/.git_keep/index and /dev/null differ diff --git a/test/integration/customCommands/expected/repo/.git_keep/logs/HEAD b/test/integration/customCommands/expected/repo/.git_keep/logs/HEAD deleted file mode 100644 index db58e88aa..000000000 --- a/test/integration/customCommands/expected/repo/.git_keep/logs/HEAD +++ /dev/null @@ -1 +0,0 @@ -0000000000000000000000000000000000000000 15bdb2c31c825116ad5af06ee25517d90b24f13b CI 1617684452 +1000 commit (initial): test diff --git a/test/integration/customCommands/expected/repo/.git_keep/logs/refs/heads/master b/test/integration/customCommands/expected/repo/.git_keep/logs/refs/heads/master deleted file mode 100644 index db58e88aa..000000000 --- a/test/integration/customCommands/expected/repo/.git_keep/logs/refs/heads/master +++ /dev/null @@ -1 +0,0 @@ -0000000000000000000000000000000000000000 15bdb2c31c825116ad5af06ee25517d90b24f13b CI 1617684452 +1000 commit (initial): test diff --git a/test/integration/customCommands/expected/repo/.git_keep/objects/15/bdb2c31c825116ad5af06ee25517d90b24f13b b/test/integration/customCommands/expected/repo/.git_keep/objects/15/bdb2c31c825116ad5af06ee25517d90b24f13b deleted file mode 100644 index c309d426a..000000000 Binary files a/test/integration/customCommands/expected/repo/.git_keep/objects/15/bdb2c31c825116ad5af06ee25517d90b24f13b and /dev/null differ diff --git a/test/integration/customCommands/expected/repo/.git_keep/objects/20/f11a5545b04a86ca81f7a9967d5207349052d7 b/test/integration/customCommands/expected/repo/.git_keep/objects/20/f11a5545b04a86ca81f7a9967d5207349052d7 deleted file mode 100644 index 368e30f82..000000000 Binary files a/test/integration/customCommands/expected/repo/.git_keep/objects/20/f11a5545b04a86ca81f7a9967d5207349052d7 and /dev/null differ diff --git a/test/integration/customCommands/expected/repo/.git_keep/objects/8a/2e45643093ea7cf7b06382e38470034c24e812 b/test/integration/customCommands/expected/repo/.git_keep/objects/8a/2e45643093ea7cf7b06382e38470034c24e812 deleted file mode 100644 index 78c73ed64..000000000 Binary files a/test/integration/customCommands/expected/repo/.git_keep/objects/8a/2e45643093ea7cf7b06382e38470034c24e812 and /dev/null differ diff --git a/test/integration/customCommands/expected/repo/.git_keep/refs/heads/master b/test/integration/customCommands/expected/repo/.git_keep/refs/heads/master deleted file mode 100644 index ce73a61b4..000000000 --- a/test/integration/customCommands/expected/repo/.git_keep/refs/heads/master +++ /dev/null @@ -1 +0,0 @@ -15bdb2c31c825116ad5af06ee25517d90b24f13b diff --git a/test/integration/customCommands/expected/repo/blah b/test/integration/customCommands/expected/repo/blah deleted file mode 100644 index 20f11a554..000000000 --- a/test/integration/customCommands/expected/repo/blah +++ /dev/null @@ -1 +0,0 @@ -myfile diff --git a/test/integration/customCommands/recording.json b/test/integration/customCommands/recording.json deleted file mode 100644 index f49c696e3..000000000 --- a/test/integration/customCommands/recording.json +++ /dev/null @@ -1 +0,0 @@ -{"KeyEvents":[{"Timestamp":837,"Mod":0,"Key":256,"Ch":78},{"Timestamp":1622,"Mod":0,"Key":256,"Ch":109},{"Timestamp":1798,"Mod":0,"Key":256,"Ch":121},{"Timestamp":1918,"Mod":0,"Key":256,"Ch":102},{"Timestamp":2006,"Mod":0,"Key":256,"Ch":105},{"Timestamp":2078,"Mod":0,"Key":256,"Ch":108},{"Timestamp":2174,"Mod":0,"Key":256,"Ch":101},{"Timestamp":2431,"Mod":0,"Key":13,"Ch":13},{"Timestamp":3246,"Mod":0,"Key":256,"Ch":98},{"Timestamp":3294,"Mod":0,"Key":256,"Ch":108},{"Timestamp":3398,"Mod":0,"Key":256,"Ch":97},{"Timestamp":3462,"Mod":0,"Key":256,"Ch":104},{"Timestamp":3735,"Mod":0,"Key":13,"Ch":13},{"Timestamp":4206,"Mod":0,"Key":256,"Ch":32},{"Timestamp":4421,"Mod":0,"Key":256,"Ch":99},{"Timestamp":4646,"Mod":0,"Key":256,"Ch":116},{"Timestamp":4726,"Mod":0,"Key":256,"Ch":101},{"Timestamp":4886,"Mod":0,"Key":256,"Ch":115},{"Timestamp":4918,"Mod":0,"Key":256,"Ch":116},{"Timestamp":5190,"Mod":0,"Key":13,"Ch":13},{"Timestamp":5550,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":272,"Height":74}]} \ No newline at end of file diff --git a/test/integration/customCommands/setup.sh b/test/integration/customCommands/setup.sh deleted file mode 100644 index fbd02e952..000000000 --- a/test/integration/customCommands/setup.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -set -e - -cd $1 - -git init - -git config user.email "CI@example.com" -git config user.name "CI" diff --git a/test/integration/customCommands/test.json b/test/integration/customCommands/test.json deleted file mode 100644 index c5c5aaf5c..000000000 --- a/test/integration/customCommands/test.json +++ /dev/null @@ -1 +0,0 @@ -{ "description": "Invoke a custom command that creates a file, and then stage and commit that file", "speed": 5 } diff --git a/test/integration/customCommandsComplex/config/config.yml b/test/integration/customCommandsComplex/config/config.yml deleted file mode 100644 index 69072c2c7..000000000 --- a/test/integration/customCommandsComplex/config/config.yml +++ /dev/null @@ -1,31 +0,0 @@ -disableStartupPopups: true -customCommands: - - key: 'N' - description: 'Add file' - context: 'localBranches' - command: 'echo "{{index .PromptResponses 0}} {{index .PromptResponses 1}} {{index .PromptResponses 2}} {{ .SelectedLocalBranch.Name }}" > output.txt' - loadingText: 'Running custom command...' - prompts: - - type: 'menuFromCommand' - title: 'Title' - command: 'git log --oneline --pretty=%B' - filter: '(?P.*)' - valueFormat: '{{ .commit_message }}' - labelFormat: '{{ .commit_message | yellow }}' - - type: 'input' - title: 'Description' - initialValue: "{{ if .SelectedLocalBranch.Name }}Branch: #{{ .SelectedLocalBranch.Name }}{{end}}" - - type: 'menu' - title: 'yes or no' - options: - - name: 'no' - value: 'false' - - name: 'yes' - value: 'true' -gui: - theme: - activeBorderColor: - - green - - bold - SelectedRangeBgcolor: - - reverse diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/customCommandsComplex/expected/repo/.git_keep/COMMIT_EDITMSG deleted file mode 100644 index 9daeafb98..000000000 --- a/test/integration/customCommandsComplex/expected/repo/.git_keep/COMMIT_EDITMSG +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/index b/test/integration/customCommandsComplex/expected/repo/.git_keep/index deleted file mode 100644 index 005c7dd34..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/index and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/logs/HEAD b/test/integration/customCommandsComplex/expected/repo/.git_keep/logs/HEAD deleted file mode 100644 index 605138dc1..000000000 --- a/test/integration/customCommandsComplex/expected/repo/.git_keep/logs/HEAD +++ /dev/null @@ -1,5 +0,0 @@ -0000000000000000000000000000000000000000 ab38b1ca116f77648925d952e731f419db360cdb CI 1642201096 +1100 commit (initial): myfile1 -ab38b1ca116f77648925d952e731f419db360cdb 4fdfedfd9d406506be8b02f5b863dbc08d43cc9f CI 1642201096 +1100 commit: myfile2 -4fdfedfd9d406506be8b02f5b863dbc08d43cc9f 7dd93a4be3d27d40fbe791d6d77e0d2fedc4d785 CI 1642201096 +1100 commit: myfile3 -7dd93a4be3d27d40fbe791d6d77e0d2fedc4d785 f708d3e3819470a69f6c8562ff1e68eef02f8cac CI 1642201096 +1100 commit: myfile4 -f708d3e3819470a69f6c8562ff1e68eef02f8cac 5428838691c97ac192c8b8e1c3f573d8541a94b6 CI 1642201104 +1100 commit: test diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/logs/refs/heads/master b/test/integration/customCommandsComplex/expected/repo/.git_keep/logs/refs/heads/master deleted file mode 100644 index 605138dc1..000000000 --- a/test/integration/customCommandsComplex/expected/repo/.git_keep/logs/refs/heads/master +++ /dev/null @@ -1,5 +0,0 @@ -0000000000000000000000000000000000000000 ab38b1ca116f77648925d952e731f419db360cdb CI 1642201096 +1100 commit (initial): myfile1 -ab38b1ca116f77648925d952e731f419db360cdb 4fdfedfd9d406506be8b02f5b863dbc08d43cc9f CI 1642201096 +1100 commit: myfile2 -4fdfedfd9d406506be8b02f5b863dbc08d43cc9f 7dd93a4be3d27d40fbe791d6d77e0d2fedc4d785 CI 1642201096 +1100 commit: myfile3 -7dd93a4be3d27d40fbe791d6d77e0d2fedc4d785 f708d3e3819470a69f6c8562ff1e68eef02f8cac CI 1642201096 +1100 commit: myfile4 -f708d3e3819470a69f6c8562ff1e68eef02f8cac 5428838691c97ac192c8b8e1c3f573d8541a94b6 CI 1642201104 +1100 commit: test diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/05/3cf208ac3728c36c6ed86f2a03a1fb72a8e6bc b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/05/3cf208ac3728c36c6ed86f2a03a1fb72a8e6bc deleted file mode 100644 index 161576b97..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/05/3cf208ac3728c36c6ed86f2a03a1fb72a8e6bc and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/0e/6cf0a6b79e8d44e186d812a1f74b43d64fac52 b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/0e/6cf0a6b79e8d44e186d812a1f74b43d64fac52 deleted file mode 100644 index 7f2ebf4ee..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/0e/6cf0a6b79e8d44e186d812a1f74b43d64fac52 and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 deleted file mode 100644 index f74bf2335..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/2b/173c861df433fa43ffad13f80c8b312c5c8bce b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/2b/173c861df433fa43ffad13f80c8b312c5c8bce deleted file mode 100644 index 0a734f981..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/2b/173c861df433fa43ffad13f80c8b312c5c8bce and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/2f/6174050380438f14b16658a356e762435ca591 b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/2f/6174050380438f14b16658a356e762435ca591 deleted file mode 100644 index 31ae3f5ba..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/2f/6174050380438f14b16658a356e762435ca591 and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/4f/dfedfd9d406506be8b02f5b863dbc08d43cc9f b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/4f/dfedfd9d406506be8b02f5b863dbc08d43cc9f deleted file mode 100644 index 5bcc5c659..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/4f/dfedfd9d406506be8b02f5b863dbc08d43cc9f and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/54/28838691c97ac192c8b8e1c3f573d8541a94b6 b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/54/28838691c97ac192c8b8e1c3f573d8541a94b6 deleted file mode 100644 index bd598d7ab..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/54/28838691c97ac192c8b8e1c3f573d8541a94b6 and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/7d/b446a082f8c10183f1f27178698f07f3750b6b b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/7d/b446a082f8c10183f1f27178698f07f3750b6b deleted file mode 100644 index 6de444c0f..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/7d/b446a082f8c10183f1f27178698f07f3750b6b and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/7d/d93a4be3d27d40fbe791d6d77e0d2fedc4d785 b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/7d/d93a4be3d27d40fbe791d6d77e0d2fedc4d785 deleted file mode 100644 index a96d76d40..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/7d/d93a4be3d27d40fbe791d6d77e0d2fedc4d785 and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 deleted file mode 100644 index 285df3e5f..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/a7/341a59f0ddeef969e69fb6368266d22b0f2416 b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/a7/341a59f0ddeef969e69fb6368266d22b0f2416 deleted file mode 100644 index 96d2e71a6..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/a7/341a59f0ddeef969e69fb6368266d22b0f2416 and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/ab/38b1ca116f77648925d952e731f419db360cdb b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/ab/38b1ca116f77648925d952e731f419db360cdb deleted file mode 100644 index 3de7c78a7..000000000 --- a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/ab/38b1ca116f77648925d952e731f419db360cdb +++ /dev/null @@ -1,2 +0,0 @@ -xA -0@ѮsL:#)1P!")#tyS5[˥*`5df 9T:KL⧽qzm[ @#a/p%Btg='MξeY.,, \ No newline at end of file diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 deleted file mode 100644 index d39fa7d2f..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b deleted file mode 100644 index 9b771fc2f..000000000 Binary files a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b and /dev/null differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/f7/08d3e3819470a69f6c8562ff1e68eef02f8cac b/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/f7/08d3e3819470a69f6c8562ff1e68eef02f8cac deleted file mode 100644 index 010f8e879..000000000 --- a/test/integration/customCommandsComplex/expected/repo/.git_keep/objects/f7/08d3e3819470a69f6c8562ff1e68eef02f8cac +++ /dev/null @@ -1,2 +0,0 @@ -xA -0@Q9E$I"BW=F`R"~◵[Lt껪u1*Ҍa>FvC!nHfYcBaQA\U)$q&c88KY"s؞QrӾuy*39 \ No newline at end of file diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/refs/heads/master b/test/integration/customCommandsComplex/expected/repo/.git_keep/refs/heads/master deleted file mode 100644 index 8d1ca4f04..000000000 --- a/test/integration/customCommandsComplex/expected/repo/.git_keep/refs/heads/master +++ /dev/null @@ -1 +0,0 @@ -5428838691c97ac192c8b8e1c3f573d8541a94b6 diff --git a/test/integration/customCommandsComplex/expected/repo/myfile1 b/test/integration/customCommandsComplex/expected/repo/myfile1 deleted file mode 100644 index a5bce3fd2..000000000 --- a/test/integration/customCommandsComplex/expected/repo/myfile1 +++ /dev/null @@ -1 +0,0 @@ -test1 diff --git a/test/integration/customCommandsComplex/expected/repo/myfile2 b/test/integration/customCommandsComplex/expected/repo/myfile2 deleted file mode 100644 index 180cf8328..000000000 --- a/test/integration/customCommandsComplex/expected/repo/myfile2 +++ /dev/null @@ -1 +0,0 @@ -test2 diff --git a/test/integration/customCommandsComplex/expected/repo/myfile3 b/test/integration/customCommandsComplex/expected/repo/myfile3 deleted file mode 100644 index df6b0d2bc..000000000 --- a/test/integration/customCommandsComplex/expected/repo/myfile3 +++ /dev/null @@ -1 +0,0 @@ -test3 diff --git a/test/integration/customCommandsComplex/expected/repo/myfile4 b/test/integration/customCommandsComplex/expected/repo/myfile4 deleted file mode 100644 index d234c5e05..000000000 --- a/test/integration/customCommandsComplex/expected/repo/myfile4 +++ /dev/null @@ -1 +0,0 @@ -test4 diff --git a/test/integration/customCommandsComplex/expected/repo/output.txt b/test/integration/customCommandsComplex/expected/repo/output.txt deleted file mode 100644 index 7db446a08..000000000 --- a/test/integration/customCommandsComplex/expected/repo/output.txt +++ /dev/null @@ -1 +0,0 @@ -myfile2 Branch: #master haha true master diff --git a/test/integration/customCommandsComplex/recording.json b/test/integration/customCommandsComplex/recording.json deleted file mode 100644 index 8fdbd648c..000000000 --- a/test/integration/customCommandsComplex/recording.json +++ /dev/null @@ -1 +0,0 @@ -{"KeyEvents":[{"Timestamp":623,"Mod":0,"Key":259,"Ch":0},{"Timestamp":1369,"Mod":0,"Key":256,"Ch":78},{"Timestamp":1904,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2033,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2328,"Mod":0,"Key":13,"Ch":13},{"Timestamp":2848,"Mod":0,"Key":256,"Ch":32},{"Timestamp":3296,"Mod":0,"Key":256,"Ch":97},{"Timestamp":3616,"Mod":0,"Key":127,"Ch":127},{"Timestamp":3824,"Mod":0,"Key":256,"Ch":104},{"Timestamp":3879,"Mod":0,"Key":256,"Ch":97},{"Timestamp":3927,"Mod":0,"Key":256,"Ch":104},{"Timestamp":4000,"Mod":0,"Key":256,"Ch":97},{"Timestamp":4239,"Mod":0,"Key":13,"Ch":13},{"Timestamp":4809,"Mod":0,"Key":258,"Ch":0},{"Timestamp":5024,"Mod":0,"Key":13,"Ch":13},{"Timestamp":5824,"Mod":0,"Key":260,"Ch":0},{"Timestamp":6079,"Mod":0,"Key":256,"Ch":32},{"Timestamp":6376,"Mod":0,"Key":256,"Ch":99},{"Timestamp":6591,"Mod":0,"Key":256,"Ch":116},{"Timestamp":6640,"Mod":0,"Key":256,"Ch":101},{"Timestamp":6816,"Mod":0,"Key":256,"Ch":115},{"Timestamp":6856,"Mod":0,"Key":256,"Ch":116},{"Timestamp":7136,"Mod":0,"Key":13,"Ch":13},{"Timestamp":7487,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":272,"Height":36}]} \ No newline at end of file diff --git a/test/integration/customCommandsComplex/setup.sh b/test/integration/customCommandsComplex/setup.sh deleted file mode 100644 index 0f364d18a..000000000 --- a/test/integration/customCommandsComplex/setup.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -set -e - -cd $1 - -git init - -git config user.email "CI@example.com" -git config user.name "CI" - -echo test1 > myfile1 -git add . -git commit -am "myfile1" -echo test2 > myfile2 -git add . -git commit -am "myfile2" -echo test3 > myfile3 -git add . -git commit -am "myfile3" -echo test4 > myfile4 -git add . -git commit -am "myfile4" diff --git a/test/integration/customCommandsComplex/test.json b/test/integration/customCommandsComplex/test.json deleted file mode 100644 index beac0e9ca..000000000 --- a/test/integration/customCommandsComplex/test.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "description": "Invoke a custom command that creates a file, and then stage and commit that file. In this case we're using a more customised flow", - "speed": 5 -} diff --git a/test/integration_new/custom_commands/basic/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/COMMIT_EDITMSG new file mode 100644 index 000000000..907b30816 --- /dev/null +++ b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/COMMIT_EDITMSG @@ -0,0 +1 @@ +blah diff --git a/test/integration/customCommands/expected/repo/.git_keep/FETCH_HEAD b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/FETCH_HEAD similarity index 100% rename from test/integration/customCommands/expected/repo/.git_keep/FETCH_HEAD rename to test/integration_new/custom_commands/basic/expected/repo/.git_keep/FETCH_HEAD diff --git a/test/integration/customCommands/expected/repo/.git_keep/HEAD b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/HEAD similarity index 100% rename from test/integration/customCommands/expected/repo/.git_keep/HEAD rename to test/integration_new/custom_commands/basic/expected/repo/.git_keep/HEAD diff --git a/test/integration/customCommands/expected/repo/.git_keep/config b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/config similarity index 100% rename from test/integration/customCommands/expected/repo/.git_keep/config rename to test/integration_new/custom_commands/basic/expected/repo/.git_keep/config diff --git a/test/integration/customCommands/expected/repo/.git_keep/description b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/description similarity index 100% rename from test/integration/customCommands/expected/repo/.git_keep/description rename to test/integration_new/custom_commands/basic/expected/repo/.git_keep/description diff --git a/test/integration_new/custom_commands/basic/expected/repo/.git_keep/index b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/index new file mode 100644 index 000000000..65d675154 Binary files /dev/null and b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/index differ diff --git a/test/integration/customCommands/expected/repo/.git_keep/info/exclude b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/info/exclude similarity index 100% rename from test/integration/customCommands/expected/repo/.git_keep/info/exclude rename to test/integration_new/custom_commands/basic/expected/repo/.git_keep/info/exclude diff --git a/test/integration_new/custom_commands/basic/expected/repo/.git_keep/logs/HEAD b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/logs/HEAD new file mode 100644 index 000000000..b6f3a54de --- /dev/null +++ b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/logs/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 fe47c0cf0521f8864cd0531ddf35d2f741c14abf CI 1660476851 +1000 commit (initial): blah diff --git a/test/integration_new/custom_commands/basic/expected/repo/.git_keep/logs/refs/heads/master b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/logs/refs/heads/master new file mode 100644 index 000000000..b6f3a54de --- /dev/null +++ b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/logs/refs/heads/master @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 fe47c0cf0521f8864cd0531ddf35d2f741c14abf CI 1660476851 +1000 commit (initial): blah diff --git a/test/integration_new/custom_commands/basic/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 new file mode 100644 index 000000000..adf64119a Binary files /dev/null and b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 differ diff --git a/test/integration_new/custom_commands/basic/expected/repo/.git_keep/objects/fe/47c0cf0521f8864cd0531ddf35d2f741c14abf b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/objects/fe/47c0cf0521f8864cd0531ddf35d2f741c14abf new file mode 100644 index 000000000..91494d1a9 Binary files /dev/null and b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/objects/fe/47c0cf0521f8864cd0531ddf35d2f741c14abf differ diff --git a/test/integration_new/custom_commands/basic/expected/repo/.git_keep/refs/heads/master b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/refs/heads/master new file mode 100644 index 000000000..0dfced756 --- /dev/null +++ b/test/integration_new/custom_commands/basic/expected/repo/.git_keep/refs/heads/master @@ -0,0 +1 @@ +fe47c0cf0521f8864cd0531ddf35d2f741c14abf diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/FETCH_HEAD b/test/integration_new/custom_commands/basic/expected/repo/myfile similarity index 100% rename from test/integration/customCommandsComplex/expected/repo/.git_keep/FETCH_HEAD rename to test/integration_new/custom_commands/basic/expected/repo/myfile diff --git a/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/COMMIT_EDITMSG new file mode 100644 index 000000000..76018072e --- /dev/null +++ b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/COMMIT_EDITMSG @@ -0,0 +1 @@ +baz diff --git a/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/FETCH_HEAD b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/FETCH_HEAD new file mode 100644 index 000000000..e69de29bb diff --git a/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/HEAD b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/HEAD new file mode 100644 index 000000000..0e5fcffdf --- /dev/null +++ b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/HEAD @@ -0,0 +1 @@ +ref: refs/heads/feature/foo diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/config b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/config similarity index 100% rename from test/integration/customCommandsComplex/expected/repo/.git_keep/config rename to test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/config diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/description b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/description similarity index 100% rename from test/integration/customCommandsComplex/expected/repo/.git_keep/description rename to test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/description diff --git a/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/index b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/index new file mode 100644 index 000000000..65d675154 Binary files /dev/null and b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/index differ diff --git a/test/integration/customCommandsComplex/expected/repo/.git_keep/info/exclude b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/info/exclude similarity index 100% rename from test/integration/customCommandsComplex/expected/repo/.git_keep/info/exclude rename to test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/info/exclude diff --git a/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/logs/HEAD b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/logs/HEAD new file mode 100644 index 000000000..22805e198 --- /dev/null +++ b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/logs/HEAD @@ -0,0 +1,4 @@ +0000000000000000000000000000000000000000 d50975554a574b9c66e109927fdb4edfb6bbadb3 CI 1660476303 +1000 commit (initial): foo +d50975554a574b9c66e109927fdb4edfb6bbadb3 af550d3777f20bf024ad55c9c796e7e85ef32ccb CI 1660476303 +1000 commit: bar +af550d3777f20bf024ad55c9c796e7e85ef32ccb 16919871d6b442beac07e1573c557ca433cff356 CI 1660476303 +1000 commit: baz +16919871d6b442beac07e1573c557ca433cff356 16919871d6b442beac07e1573c557ca433cff356 CI 1660476303 +1000 checkout: moving from master to feature/foo diff --git a/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/logs/refs/heads/feature/foo b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/logs/refs/heads/feature/foo new file mode 100644 index 000000000..5538ba67f --- /dev/null +++ b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/logs/refs/heads/feature/foo @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 16919871d6b442beac07e1573c557ca433cff356 CI 1660476303 +1000 branch: Created from HEAD diff --git a/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/logs/refs/heads/master b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/logs/refs/heads/master new file mode 100644 index 000000000..f9d13618c --- /dev/null +++ b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/logs/refs/heads/master @@ -0,0 +1,3 @@ +0000000000000000000000000000000000000000 d50975554a574b9c66e109927fdb4edfb6bbadb3 CI 1660476303 +1000 commit (initial): foo +d50975554a574b9c66e109927fdb4edfb6bbadb3 af550d3777f20bf024ad55c9c796e7e85ef32ccb CI 1660476303 +1000 commit: bar +af550d3777f20bf024ad55c9c796e7e85ef32ccb 16919871d6b442beac07e1573c557ca433cff356 CI 1660476303 +1000 commit: baz diff --git a/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/objects/16/919871d6b442beac07e1573c557ca433cff356 b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/objects/16/919871d6b442beac07e1573c557ca433cff356 new file mode 100644 index 000000000..7b0995a4d Binary files /dev/null and b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/objects/16/919871d6b442beac07e1573c557ca433cff356 differ diff --git a/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 new file mode 100644 index 000000000..adf64119a Binary files /dev/null and b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 differ diff --git a/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/objects/af/550d3777f20bf024ad55c9c796e7e85ef32ccb b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/objects/af/550d3777f20bf024ad55c9c796e7e85ef32ccb new file mode 100644 index 000000000..5de7e30df Binary files /dev/null and b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/objects/af/550d3777f20bf024ad55c9c796e7e85ef32ccb differ diff --git a/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/objects/d5/0975554a574b9c66e109927fdb4edfb6bbadb3 b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/objects/d5/0975554a574b9c66e109927fdb4edfb6bbadb3 new file mode 100644 index 000000000..a8654985c --- /dev/null +++ b/test/integration_new/custom_commands/menu_from_command/expected/repo/.git_keep/objects/d5/0975554a574b9c66e109927fdb4edfb6bbadb3 @@ -0,0 +1,3 @@ +xA +0@Q91)BW=F&`R"n?~ 1660476863 +1000 commit (initial): blah diff --git a/test/integration_new/custom_commands/multiple_prompts/expected/repo/.git_keep/logs/refs/heads/master b/test/integration_new/custom_commands/multiple_prompts/expected/repo/.git_keep/logs/refs/heads/master new file mode 100644 index 000000000..4f92ac410 --- /dev/null +++ b/test/integration_new/custom_commands/multiple_prompts/expected/repo/.git_keep/logs/refs/heads/master @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 b97a1d7c0e8dceef724220008962f8512a974ff0 CI 1660476863 +1000 commit (initial): blah diff --git a/test/integration_new/custom_commands/multiple_prompts/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/test/integration_new/custom_commands/multiple_prompts/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 new file mode 100644 index 000000000..adf64119a Binary files /dev/null and b/test/integration_new/custom_commands/multiple_prompts/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 differ diff --git a/test/integration_new/custom_commands/multiple_prompts/expected/repo/.git_keep/objects/b9/7a1d7c0e8dceef724220008962f8512a974ff0 b/test/integration_new/custom_commands/multiple_prompts/expected/repo/.git_keep/objects/b9/7a1d7c0e8dceef724220008962f8512a974ff0 new file mode 100644 index 000000000..7344889d7 Binary files /dev/null and b/test/integration_new/custom_commands/multiple_prompts/expected/repo/.git_keep/objects/b9/7a1d7c0e8dceef724220008962f8512a974ff0 differ diff --git a/test/integration_new/custom_commands/multiple_prompts/expected/repo/.git_keep/refs/heads/master b/test/integration_new/custom_commands/multiple_prompts/expected/repo/.git_keep/refs/heads/master new file mode 100644 index 000000000..9cd8f786a --- /dev/null +++ b/test/integration_new/custom_commands/multiple_prompts/expected/repo/.git_keep/refs/heads/master @@ -0,0 +1 @@ +b97a1d7c0e8dceef724220008962f8512a974ff0 diff --git a/test/integration_new/custom_commands/multiple_prompts/expected/repo/myfile b/test/integration_new/custom_commands/multiple_prompts/expected/repo/myfile new file mode 100644 index 000000000..ba578e48b --- /dev/null +++ b/test/integration_new/custom_commands/multiple_prompts/expected/repo/myfile @@ -0,0 +1 @@ +BAR