support new integration test pattern

This commit is contained in:
Jesse Duffield 2022-08-13 20:10:52 +10:00
parent dfd3eb22e1
commit 3a3ab26faa
3 changed files with 27 additions and 10 deletions

16
gui.go
View File

@ -108,6 +108,8 @@ const (
NORMAL PlayMode = iota NORMAL PlayMode = iota
RECORDING RECORDING
REPLAYING REPLAYING
// for the new form of integration tests
REPLAYING_NEW
) )
type Recording struct { type Recording struct {
@ -116,8 +118,8 @@ type Recording struct {
} }
type replayedEvents struct { type replayedEvents struct {
keys chan *TcellKeyEventWrapper Keys chan *TcellKeyEventWrapper
resizes chan *TcellResizeEventWrapper Resizes chan *TcellResizeEventWrapper
} }
type RecordingConfig struct { type RecordingConfig struct {
@ -216,10 +218,10 @@ func NewGui(mode OutputMode, supportOverlaps bool, playMode PlayMode, headless b
KeyEvents: []*TcellKeyEventWrapper{}, KeyEvents: []*TcellKeyEventWrapper{},
ResizeEvents: []*TcellResizeEventWrapper{}, ResizeEvents: []*TcellResizeEventWrapper{},
} }
} else if playMode == REPLAYING { } else if playMode == REPLAYING || playMode == REPLAYING_NEW {
g.ReplayedEvents = replayedEvents{ g.ReplayedEvents = replayedEvents{
keys: make(chan *TcellKeyEventWrapper), Keys: make(chan *TcellKeyEventWrapper),
resizes: make(chan *TcellResizeEventWrapper), Resizes: make(chan *TcellResizeEventWrapper),
} }
} }
@ -1420,7 +1422,7 @@ func (g *Gui) replayRecording() {
case <-ticker.C: case <-ticker.C:
timeWaited += 1 timeWaited += 1
if timeWaited >= timeToWait { if timeWaited >= timeToWait {
g.ReplayedEvents.keys <- event g.ReplayedEvents.Keys <- event
break middle break middle
} }
case <-g.stop: case <-g.stop:
@ -1453,7 +1455,7 @@ func (g *Gui) replayRecording() {
case <-ticker.C: case <-ticker.C:
timeWaited += 1 timeWaited += 1
if timeWaited >= timeToWait { if timeWaited >= timeToWait {
g.ReplayedEvents.resizes <- event g.ReplayedEvents.Resizes <- event
break middle2 break middle2
} }
case <-g.stop: case <-g.stop:

View File

@ -232,11 +232,11 @@ func (g *Gui) timeSinceStart() int64 {
// pollEvent get tcell.Event and transform it into gocuiEvent // pollEvent get tcell.Event and transform it into gocuiEvent
func (g *Gui) pollEvent() GocuiEvent { func (g *Gui) pollEvent() GocuiEvent {
var tev tcell.Event var tev tcell.Event
if g.PlayMode == REPLAYING { if g.PlayMode == REPLAYING || g.PlayMode == REPLAYING_NEW {
select { select {
case ev := <-g.ReplayedEvents.keys: case ev := <-g.ReplayedEvents.Keys:
tev = (ev).toTcellEvent() tev = (ev).toTcellEvent()
case ev := <-g.ReplayedEvents.resizes: case ev := <-g.ReplayedEvents.Resizes:
tev = (ev).toTcellEvent() tev = (ev).toTcellEvent()
} }
} else { } else {

15
view.go
View File

@ -465,6 +465,14 @@ func (v *View) Cursor() (x, y int) {
return v.cx, v.cy return v.cx, v.cy
} }
func (v *View) CursorX() int {
return v.cx
}
func (v *View) CursorY() int {
return v.cy
}
// SetOrigin sets the origin position of the view's internal buffer, // SetOrigin sets the origin position of the view's internal buffer,
// so the buffer starts to be printed from this point, which means that // so the buffer starts to be printed from this point, which means that
// it is linked with the origin point of view. It can be used to // it is linked with the origin point of view. It can be used to
@ -1235,6 +1243,13 @@ func (v *View) SelectedLineIdx() int {
return seletedLineIdx return seletedLineIdx
} }
// expected to only be used in tests
func (v *View) SelectedLine() string {
line := v.lines[v.SelectedLineIdx()]
str := lineType(line).String()
return strings.Replace(str, "\x00", " ", -1)
}
func (v *View) SelectedPoint() (int, int) { func (v *View) SelectedPoint() (int, int) {
cx, cy := v.Cursor() cx, cy := v.Cursor()
ox, oy := v.Origin() ox, oy := v.Origin()