mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-03-25 22:01:14 +02:00
108 lines
2.3 KiB
Go
108 lines
2.3 KiB
Go
package helpers
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/jesseduffield/lazygit/pkg/config"
|
|
"github.com/jesseduffield/lazygit/pkg/integration/types"
|
|
"github.com/jesseduffield/lazygit/pkg/utils"
|
|
)
|
|
|
|
type TestImpl struct {
|
|
name string
|
|
description string
|
|
extraCmdArgs string
|
|
skip bool
|
|
setupRepo func(shell types.Shell)
|
|
setupConfig func(config *config.AppConfig)
|
|
run func(
|
|
shell types.Shell,
|
|
input types.Input,
|
|
assert types.Assert,
|
|
keys config.KeybindingConfig,
|
|
)
|
|
}
|
|
|
|
type NewTestArgs struct {
|
|
Description string
|
|
SetupRepo func(shell types.Shell)
|
|
SetupConfig func(config *config.AppConfig)
|
|
Run func(shell types.Shell, input types.Input, assert types.Assert, keys config.KeybindingConfig)
|
|
ExtraCmdArgs string
|
|
Skip bool
|
|
}
|
|
|
|
func NewTest(args NewTestArgs) *TestImpl {
|
|
return &TestImpl{
|
|
name: testNameFromFilePath(),
|
|
description: args.Description,
|
|
extraCmdArgs: args.ExtraCmdArgs,
|
|
skip: args.Skip,
|
|
setupRepo: args.SetupRepo,
|
|
setupConfig: args.SetupConfig,
|
|
run: args.Run,
|
|
}
|
|
}
|
|
|
|
var _ types.Test = (*TestImpl)(nil)
|
|
|
|
func (self *TestImpl) Name() string {
|
|
return self.name
|
|
}
|
|
|
|
func (self *TestImpl) Description() string {
|
|
return self.description
|
|
}
|
|
|
|
func (self *TestImpl) ExtraCmdArgs() string {
|
|
return self.extraCmdArgs
|
|
}
|
|
|
|
func (self *TestImpl) Skip() bool {
|
|
return self.skip
|
|
}
|
|
|
|
func (self *TestImpl) SetupConfig(config *config.AppConfig) {
|
|
self.setupConfig(config)
|
|
}
|
|
|
|
func (self *TestImpl) SetupRepo(shell types.Shell) {
|
|
self.setupRepo(shell)
|
|
}
|
|
|
|
// I want access to all contexts, the model, the ability to press a key, the ability to log,
|
|
func (self *TestImpl) Run(
|
|
gui types.GuiAdapter,
|
|
) {
|
|
shell := &ShellImpl{}
|
|
assert := &AssertImpl{gui: gui}
|
|
keys := gui.Keys()
|
|
input := NewInputImpl(gui, keys, assert, KeyPressDelay())
|
|
|
|
self.run(shell, input, assert, keys)
|
|
}
|
|
|
|
func testNameFromFilePath() string {
|
|
path := utils.FilePath(3)
|
|
name := strings.Split(path, "integration/integration_tests/")[1]
|
|
|
|
return name[:len(name)-len(".go")]
|
|
}
|
|
|
|
// this is the delay in milliseconds between keypresses
|
|
// defaults to zero
|
|
func KeyPressDelay() int {
|
|
delayStr := os.Getenv("KEY_PRESS_DELAY")
|
|
if delayStr == "" {
|
|
return 0
|
|
}
|
|
|
|
delay, err := strconv.Atoi(delayStr)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return delay
|
|
}
|