Split into category packages; module github.com/ZacharyZhang-NY/MujicaUI
This commit is contained in:
1822 files changed
+24568
-21314
No files matched your search
@@ -0,0 +1,107 @@
|
||||
package code
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/egoist/mygo/ui"
|
||||
|
||||
"github.com/ZacharyZhang-NY/MujicaUI/core"
|
||||
)
|
||||
|
||||
func terminalSearchTester(term *TerminalState, s *TerminalSearchState, opts TerminalSearchOptions, moves *int) *ui.Tester {
|
||||
return ui.NewTester(func(c *ui.Context) {
|
||||
core.Use(c, core.Settings{})
|
||||
ui.Column(c).Children(func() {
|
||||
if TerminalSearch(c, term, s, opts).Changed() {
|
||||
*moves++
|
||||
}
|
||||
Terminal(c, term, TerminalOptions{}).Size(400, 120)
|
||||
})
|
||||
}, 420, 220)
|
||||
}
|
||||
|
||||
func terminalSearchFill() *TerminalState {
|
||||
term := &TerminalState{}
|
||||
term.Resize(40, 5)
|
||||
for i := range 30 {
|
||||
if i%10 == 3 {
|
||||
term.Write(fmt.Sprintf("step %d: Error found\r\n", i))
|
||||
} else {
|
||||
term.Write(fmt.Sprintf("step %d: ok\r\n", i))
|
||||
}
|
||||
}
|
||||
return term
|
||||
}
|
||||
|
||||
func TestTerminalSearchCountsAndJumps(t *testing.T) {
|
||||
term := terminalSearchFill()
|
||||
s := &TerminalSearchState{}
|
||||
moves := 0
|
||||
tt := terminalSearchTester(term, s, TerminalSearchOptions{}, &moves)
|
||||
tt.Key(0, ui.KeyTab)
|
||||
tt.Type("error")
|
||||
if len(term.matches) != 3 || !tt.HasText("1 of 3") {
|
||||
t.Fatalf("matches %d, texts %q", len(term.matches), tt.Texts())
|
||||
}
|
||||
first := term.matches[0].pos.Line
|
||||
top := len(term.back) - term.Offset()
|
||||
if first < top || first >= top+5 {
|
||||
t.Fatalf("match line %d not on screen from %d", first, top)
|
||||
}
|
||||
tt.Key(0, ui.KeyEnter)
|
||||
if s.Current != 1 || !tt.HasText("2 of 3") {
|
||||
t.Fatalf("Enter moved to %d", s.Current)
|
||||
}
|
||||
tt.Key(ui.Shift, ui.KeyEnter)
|
||||
tt.Key(ui.Shift, ui.KeyEnter)
|
||||
if s.Current != 2 {
|
||||
t.Fatalf("Shift+Enter twice from 1 gave %d, want 2 (wraps)", s.Current)
|
||||
}
|
||||
if line := term.matches[2].pos.Line; line < len(term.back)-term.Offset() {
|
||||
t.Fatalf("current match line %d above the view", line)
|
||||
}
|
||||
if moves < 4 {
|
||||
t.Fatalf("Changed reported %d times", moves)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTerminalSearchFollowsNewOutput(t *testing.T) {
|
||||
term := terminalSearchFill()
|
||||
s := &TerminalSearchState{Query: "error"}
|
||||
moves := 0
|
||||
tt := terminalSearchTester(term, s, TerminalSearchOptions{}, &moves)
|
||||
term.Write("late error\r\n")
|
||||
tt.Frame()
|
||||
if len(term.matches) != 4 {
|
||||
t.Fatalf("%d matches after new output, want 4", len(term.matches))
|
||||
}
|
||||
}
|
||||
|
||||
func TestTerminalSearchNoMatchAndDisabled(t *testing.T) {
|
||||
term := terminalSearchFill()
|
||||
s := &TerminalSearchState{Query: "zebra"}
|
||||
moves := 0
|
||||
tt := terminalSearchTester(term, s, TerminalSearchOptions{Disabled: true}, &moves)
|
||||
if !tt.HasText("No matches") || len(term.matches) != 0 {
|
||||
t.Fatalf("texts %q", tt.Texts())
|
||||
}
|
||||
tt.Key(0, ui.KeyTab)
|
||||
tt.Type("ok")
|
||||
if s.Query != "zebra" || moves != 0 {
|
||||
t.Fatalf("disabled search changed to %q", s.Query)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTerminalSearchSnapshot(t *testing.T) {
|
||||
snapshot(t, "terminal_search", 420, 170, func(c *ui.Context) {
|
||||
st := ui.Local(c.Root(), "snap", func() [2]any {
|
||||
return [2]any{terminalSearchFill(), &TerminalSearchState{Query: "error", Current: 1}}
|
||||
})
|
||||
term, s := (*st)[0].(*TerminalState), (*st)[1].(*TerminalSearchState)
|
||||
ui.Column(c).Padding(12).Gap(8).Children(func() {
|
||||
TerminalSearch(c, term, s, TerminalSearchOptions{})
|
||||
Terminal(c, term, TerminalOptions{}).Height(96)
|
||||
})
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user