mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-02-09 13:47:11 +02:00
allow decimal replay speeds for integration tests
This commit is contained in:
parent
e000620cdf
commit
d7da6dde0e
@ -66,7 +66,7 @@ func test() error {
|
||||
log.Printf("testPath: %s, actualDir: %s, expectedDir: %s", testPath, actualDir, expectedDir)
|
||||
|
||||
for i, speed := range speeds {
|
||||
log.Printf("%s: attempting test at speed %d\n", test.Name, speed)
|
||||
log.Printf("%s: attempting test at speed %f\n", test.Name, speed)
|
||||
|
||||
integration.FindOrCreateDir(testPath)
|
||||
integration.PrepareIntegrationTestDir(actualDir)
|
||||
@ -101,7 +101,7 @@ func test() error {
|
||||
}
|
||||
|
||||
if expected == actual {
|
||||
fmt.Printf("%s: success at speed %d\n", test.Name, speed)
|
||||
fmt.Printf("%s: success at speed %f\n", test.Name, speed)
|
||||
break
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ import (
|
||||
// To override speed, pass e.g. `SPEED=1` as an env var. Otherwise we start each test
|
||||
// at a high speed and then drop down to lower speeds upon each failure until finally
|
||||
// trying at the original playback speed (speed 1). A speed of 2 represents twice the
|
||||
// original playback speed. Speed must be an integer.
|
||||
// original playback speed. Speed may be a decimal.
|
||||
|
||||
func Test(t *testing.T) {
|
||||
rootDir := integration.GetRootDirectory()
|
||||
@ -66,7 +66,7 @@ func Test(t *testing.T) {
|
||||
// three retries at normal speed for the sake of flakey tests
|
||||
speeds = append(speeds, 1, 1, 1)
|
||||
for i, speed := range speeds {
|
||||
t.Logf("%s: attempting test at speed %d\n", test.Name, speed)
|
||||
t.Logf("%s: attempting test at speed %f\n", test.Name, speed)
|
||||
|
||||
integration.FindOrCreateDir(testPath)
|
||||
integration.PrepareIntegrationTestDir(actualDir)
|
||||
@ -102,7 +102,7 @@ func Test(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
|
||||
if expected == actual {
|
||||
t.Logf("%s: success at speed %d\n", test.Name, speed)
|
||||
t.Logf("%s: success at speed %f\n", test.Name, speed)
|
||||
break
|
||||
}
|
||||
|
||||
|
@ -26,13 +26,13 @@ func headless() bool {
|
||||
return os.Getenv("HEADLESS") != ""
|
||||
}
|
||||
|
||||
func getRecordingSpeed() int {
|
||||
func getRecordingSpeed() float64 {
|
||||
// humans are slow so this speeds things up.
|
||||
speed := 1
|
||||
envReplaySpeed := os.Getenv("REPLAY_SPEED")
|
||||
speed := 1.0
|
||||
envReplaySpeed := os.Getenv("SPEED")
|
||||
if envReplaySpeed != "" {
|
||||
var err error
|
||||
speed, err = strconv.Atoi(envReplaySpeed)
|
||||
speed, err = strconv.ParseFloat(envReplaySpeed, 64)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
@ -15,9 +15,9 @@ import (
|
||||
)
|
||||
|
||||
type Test struct {
|
||||
Name string `json:"name"`
|
||||
Speed int `json:"speed"`
|
||||
Description string `json:"description"`
|
||||
Name string `json:"name"`
|
||||
Speed float64 `json:"speed"`
|
||||
Description string `json:"description"`
|
||||
}
|
||||
|
||||
func PrepareIntegrationTestDir(actualDir string) {
|
||||
@ -79,27 +79,27 @@ func TempLazygitPath() string {
|
||||
return filepath.Join("/tmp", "lazygit", "test_lazygit")
|
||||
}
|
||||
|
||||
func GetTestSpeeds(testStartSpeed int, updateSnapshots bool) []int {
|
||||
func GetTestSpeeds(testStartSpeed float64, updateSnapshots bool) []float64 {
|
||||
if updateSnapshots {
|
||||
// have to go at original speed if updating snapshots in case we go to fast and create a junk snapshot
|
||||
return []int{1}
|
||||
return []float64{1.0}
|
||||
}
|
||||
|
||||
speedEnv := os.Getenv("SPEED")
|
||||
if speedEnv != "" {
|
||||
speed, err := strconv.Atoi(speedEnv)
|
||||
speed, err := strconv.ParseFloat(speedEnv, 64)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return []int{speed}
|
||||
return []float64{speed}
|
||||
}
|
||||
|
||||
// default is 10, 5, 1
|
||||
startSpeed := 10
|
||||
startSpeed := 10.0
|
||||
if testStartSpeed != 0 {
|
||||
startSpeed = testStartSpeed
|
||||
}
|
||||
speeds := []int{startSpeed}
|
||||
speeds := []float64{startSpeed}
|
||||
if startSpeed > 5 {
|
||||
speeds = append(speeds, 5)
|
||||
}
|
||||
@ -238,7 +238,7 @@ func GenerateSnapshots(actualDir string, expectedDir string) (string, string, er
|
||||
return actual, expected, nil
|
||||
}
|
||||
|
||||
func GetLazygitCommand(testPath string, rootDir string, record bool, speed int) (*exec.Cmd, error) {
|
||||
func GetLazygitCommand(testPath string, rootDir string, record bool, speed float64) (*exec.Cmd, error) {
|
||||
osCommand := oscommands.NewDummyOSCommand()
|
||||
|
||||
replayPath := filepath.Join(testPath, "recording.json")
|
||||
@ -268,7 +268,7 @@ func GetLazygitCommand(testPath string, rootDir string, record bool, speed int)
|
||||
cmdStr := fmt.Sprintf("%s -debug --use-config-dir=%s --path=%s", TempLazygitPath(), configDir, actualDir)
|
||||
|
||||
cmd := osCommand.ExecutableFromString(cmdStr)
|
||||
cmd.Env = append(cmd.Env, fmt.Sprintf("REPLAY_SPEED=%d", speed))
|
||||
cmd.Env = append(cmd.Env, fmt.Sprintf("SPEED=%f", speed))
|
||||
|
||||
if record {
|
||||
cmd.Env = append(
|
||||
|
@ -1,29 +1,27 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/fatih/color"
|
||||
"github.com/jesseduffield/gocui"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration"
|
||||
"github.com/jesseduffield/lazygit/pkg/secureexec"
|
||||
)
|
||||
|
||||
type App struct {
|
||||
tests []*IntegrationTest
|
||||
tests []*integration.Test
|
||||
itemIdx int
|
||||
testDir string
|
||||
editing bool
|
||||
g *gocui.Gui
|
||||
}
|
||||
|
||||
func (app *App) getCurrentTest() *IntegrationTest {
|
||||
func (app *App) getCurrentTest() *integration.Test {
|
||||
if len(app.tests) > 0 {
|
||||
return app.tests[app.itemIdx]
|
||||
}
|
||||
@ -48,7 +46,7 @@ func (app *App) refreshTests() {
|
||||
}
|
||||
|
||||
func (app *App) loadTests() {
|
||||
tests, err := loadTests(app.testDir)
|
||||
tests, err := integration.LoadTests(app.testDir)
|
||||
if err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
@ -60,7 +58,7 @@ func (app *App) loadTests() {
|
||||
}
|
||||
|
||||
func main() {
|
||||
rootDir := getRootDirectory()
|
||||
rootDir := integration.GetRootDirectory()
|
||||
testDir := filepath.Join(rootDir, "test", "integration")
|
||||
|
||||
app := &App{testDir: testDir}
|
||||
@ -365,7 +363,7 @@ func (app *App) layout(g *gocui.Gui) error {
|
||||
}
|
||||
|
||||
descriptionView.Clear()
|
||||
fmt.Fprintf(descriptionView, "Speed: %d. %s", currentTest.Speed, currentTest.Description)
|
||||
fmt.Fprintf(descriptionView, "Speed: %f. %s", currentTest.Speed, currentTest.Description)
|
||||
|
||||
if err := g.SetKeybinding("list", nil, gocui.KeyArrowDown, gocui.ModNone, func(*gocui.Gui, *gocui.View) error {
|
||||
if app.itemIdx < len(app.tests)-1 {
|
||||
@ -383,63 +381,6 @@ func quit(g *gocui.Gui, v *gocui.View) error {
|
||||
return gocui.ErrQuit
|
||||
}
|
||||
|
||||
func getRootDirectory() string {
|
||||
path, err := os.Getwd()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
for {
|
||||
_, err := os.Stat(filepath.Join(path, ".git"))
|
||||
|
||||
if err == nil {
|
||||
return path
|
||||
}
|
||||
|
||||
if !os.IsNotExist(err) {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
path = filepath.Dir(path)
|
||||
|
||||
if path == "/" {
|
||||
panic("must run in lazygit folder or child folder")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type IntegrationTest struct {
|
||||
Name string `json:"name"`
|
||||
Speed int `json:"speed"`
|
||||
Description string `json:"description"`
|
||||
}
|
||||
|
||||
func loadTests(testDir string) ([]*IntegrationTest, error) {
|
||||
paths, err := filepath.Glob(filepath.Join(testDir, "/*/test.json"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tests := make([]*IntegrationTest, len(paths))
|
||||
|
||||
for i, path := range paths {
|
||||
data, err := ioutil.ReadFile(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
test := &IntegrationTest{}
|
||||
|
||||
err = json.Unmarshal(data, test)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
test.Name = strings.TrimPrefix(filepath.Dir(path), testDir+"/")
|
||||
|
||||
tests[i] = test
|
||||
}
|
||||
|
||||
return tests, nil
|
||||
}
|
||||
|
||||
func coloredString(str string, colorAttributes ...color.Attribute) string {
|
||||
colour := color.New(colorAttributes...)
|
||||
return coloredStringDirect(str, colour)
|
||||
|
14
vendor/github.com/jesseduffield/gocui/gui.go
generated
vendored
14
vendor/github.com/jesseduffield/gocui/gui.go
generated
vendored
@ -95,7 +95,7 @@ type replayedEvents struct {
|
||||
}
|
||||
|
||||
type RecordingConfig struct {
|
||||
Speed int
|
||||
Speed float64
|
||||
Leeway int
|
||||
}
|
||||
|
||||
@ -1218,11 +1218,11 @@ func (g *Gui) replayRecording() {
|
||||
if i > 0 {
|
||||
prevEventTimestamp = g.Recording.KeyEvents[i-1].Timestamp
|
||||
}
|
||||
timeToWait := (event.Timestamp - prevEventTimestamp) / int64(g.RecordingConfig.Speed)
|
||||
timeToWait := float64(event.Timestamp-prevEventTimestamp) / g.RecordingConfig.Speed
|
||||
if i == 0 {
|
||||
timeToWait += int64(g.RecordingConfig.Leeway)
|
||||
timeToWait += float64(g.RecordingConfig.Leeway)
|
||||
}
|
||||
var timeWaited int64 = 0
|
||||
var timeWaited float64 = 0
|
||||
middle:
|
||||
for {
|
||||
select {
|
||||
@ -1251,11 +1251,11 @@ func (g *Gui) replayRecording() {
|
||||
if i > 0 {
|
||||
prevEventTimestamp = g.Recording.ResizeEvents[i-1].Timestamp
|
||||
}
|
||||
timeToWait := (event.Timestamp - prevEventTimestamp) / int64(g.RecordingConfig.Speed)
|
||||
timeToWait := float64(event.Timestamp-prevEventTimestamp) / g.RecordingConfig.Speed
|
||||
if i == 0 {
|
||||
timeToWait += int64(g.RecordingConfig.Leeway)
|
||||
timeToWait += float64(g.RecordingConfig.Leeway)
|
||||
}
|
||||
var timeWaited int64 = 0
|
||||
var timeWaited float64 = 0
|
||||
middle2:
|
||||
for {
|
||||
select {
|
||||
|
Loading…
x
Reference in New Issue
Block a user