@ -7,6 +7,7 @@ import (
"testing"
"time"
"github.com/charmbracelet/bubbles/textinput"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/charmbracelet/x/exp/teatest"
@ -15,10 +16,10 @@ import (
)
func init ( ) {
lipgloss . SetColorProfile ( termenv . A scii )
lipgloss . SetColorProfile ( termenv . A NSI )
}
func TestOutput ( t * testing . T ) {
func prepare ( t * testing . T ) * teatest . TestModel {
file , err := os . Open ( "testdata/example.json" )
require . NoError ( t , err )
@ -29,25 +30,73 @@ func TestOutput(t *testing.T) {
require . NoError ( t , err )
m := & model {
top : head ,
head : head ,
wrap : true ,
showCursor : true ,
search : newSearch ( ) ,
top : head ,
head : head ,
wrap : true ,
showCursor : true ,
digInput : textinput . New ( ) ,
searchInput : textinput . New ( ) ,
search : newSearch ( ) ,
}
tm := teatest . NewTestModel (
t , m ,
teatest . WithInitialTermSize ( 300, 10 0) ,
teatest . WithInitialTermSize ( 80, 4 0) ,
)
return tm
}
func read ( t * testing . T , tm * teatest . TestModel ) [ ] byte {
var out [ ] byte
teatest . WaitFor ( t ,
tm . Output ( ) ,
func ( b [ ] byte ) bool {
return bytes . Contains ( b , [ ] byte ( "Fox and Dog" ) )
out = b
return bytes . Contains ( b , [ ] byte ( "{" ) )
} ,
teatest . WithCheckInterval ( time . Millisecond * 100 ) ,
teatest . WithDuration ( time . Second ) ,
)
return out
}
func TestOutput ( t * testing . T ) {
tm := prepare ( t )
teatest . RequireEqualOutput ( t , read ( t , tm ) )
tm . Send ( tea . KeyMsg { Type : tea . KeyRunes , Runes : [ ] rune ( "q" ) } )
tm . WaitFinished ( t , teatest . WithFinalTimeout ( time . Second ) )
}
func TestNavigation ( t * testing . T ) {
tm := prepare ( t )
tm . Send ( tea . KeyMsg { Type : tea . KeyDown } )
tm . Send ( tea . KeyMsg { Type : tea . KeyDown } )
tm . Send ( tea . KeyMsg { Type : tea . KeyDown } )
teatest . RequireEqualOutput ( t , read ( t , tm ) )
tm . Send ( tea . KeyMsg { Type : tea . KeyRunes , Runes : [ ] rune ( "q" ) } )
tm . WaitFinished ( t , teatest . WithFinalTimeout ( time . Second ) )
}
func TestDig ( t * testing . T ) {
tm := prepare ( t )
tm . Send ( tea . KeyMsg { Type : tea . KeyRunes , Runes : [ ] rune ( "." ) } )
tm . Send ( tea . KeyMsg { Type : tea . KeyRunes , Runes : [ ] rune ( ".year" ) } )
tm . Send ( tea . KeyMsg { Type : tea . KeyEnter } )
teatest . RequireEqualOutput ( t , read ( t , tm ) )
tm . Send ( tea . KeyMsg { Type : tea . KeyRunes , Runes : [ ] rune ( "q" ) } )
tm . WaitFinished ( t , teatest . WithFinalTimeout ( time . Second ) )
}
func TestCollapseRecursive ( t * testing . T ) {
tm := prepare ( t )
tm . Send ( tea . KeyMsg { Type : tea . KeyShiftLeft } )
teatest . RequireEqualOutput ( t , read ( t , tm ) )
tm . Send ( tea . KeyMsg { Type : tea . KeyRunes , Runes : [ ] rune ( "q" ) } )
tm . WaitFinished ( t , teatest . WithFinalTimeout ( time . Second ) )