package ui import ( "fmt" "testing" "github.com/gdamore/tcell/v2" ) func TestContainerOneBox(t *testing.T) { expect := `┌─ box one ────────┐ │ │ │ │ │ │ └──────────────────┘ ` m := &MockScreen{} one := NewBox("box one", nil, Contents{}, tcell.Style{}, false) container := NewContainer( Contents{{Container: one}}, LayoutHorizontalEven, ) m.Init() m.Resize(0, 0, 5, 20) container.SetSize(0, 0, 5, 20) container.Draw(m) result := m.DumpContents() if result != expect { fmt.Printf("expected:\n%+v", expect) fmt.Printf("actual:\n%+v", result) t.Fail() } } func TestContainerTwoBoxesHStack(t *testing.T) { expect := `┌─ one ──┐┌─ two ──┐ │ ││ │ │ ││ │ │ ││ │ └────────┘└────────┘ ` m := &MockScreen{} one := NewBox("one", nil, Contents{}, tcell.Style{}, false) two := NewBox("two", nil, Contents{}, tcell.Style{}, false) container := NewContainer( Contents{{Container: one}, {Container: two}}, LayoutHorizontalEven, ) m.Init() m.Resize(0, 0, 5, 20) container.SetSize(0, 0, 5, 20) container.Draw(m) result := m.DumpContents() if result != expect { fmt.Printf("expected:\n%+v", expect) fmt.Printf("actual:\n%+v", result) t.Fail() } } func TestContainerThreeBoxesUnevenHStack(t *testing.T) { expect := `┌─ one ──┐┌─ two ──┐┌─ three │ ││ ││ │ │ ││ ││ │ │ ││ ││ │ └────────┘└────────┘└───────┘ ` m := &MockScreen{} one := NewBox("one", nil, Contents{}, tcell.Style{}, false) two := NewBox("two", nil, Contents{}, tcell.Style{}, false) three := NewBox("three", nil, Contents{}, tcell.Style{}, false) container := NewContainer( Contents{{Container: one}, {Container: two}, {Container: three}}, LayoutHorizontalEven, ) m.Init() m.Resize(0, 0, 5, 29) container.SetSize(0, 0, 5, 29) container.Draw(m) result := m.DumpContents() if result != expect { fmt.Printf("expected:\n%+v", expect) fmt.Printf("actual:\n%+v", result) t.Fail() } } func TestContainerTwoBoxesHPercentStack(t *testing.T) { expect := `┌─ one ──────┐┌─ two ┐ │ ││ │ │ ││ │ │ ││ │ └────────────┘└──────┘ ` m := &MockScreen{} one := NewBox("one", nil, Contents{}, tcell.Style{}, false) two := NewBox("two", nil, Contents{}, tcell.Style{}, false) container := NewContainer( Contents{ {Container: one, Offsets: Offsets{Percent: 2}}, {Container: two, Offsets: Offsets{Percent: 1}}}, LayoutHorizontalPercent, ) m.Init() m.Resize(0, 0, 5, 22) container.SetSize(0, 0, 5, 22) container.Draw(m) result := m.DumpContents() if result != expect { fmt.Printf("expected:\n%+v", expect) fmt.Printf("actual:\n%+v", result) t.Fail() } } func TestContainerTwoBoxesVStack(t *testing.T) { expect := `┌─ one ──┐ │ │ │ │ │ │ └────────┘ ┌─ two ──┐ │ │ │ │ │ │ └────────┘ ` m := &MockScreen{} one := NewBox("one", nil, Contents{}, tcell.Style{}, false) two := NewBox("two", nil, Contents{}, tcell.Style{}, false) container := NewContainer( Contents{{Container: one}, {Container: two}}, LayoutVerticalEven, ) m.Init() m.Resize(0, 0, 10, 10) container.SetSize(0, 0, 10, 10) container.Draw(m) result := m.DumpContents() if result != expect { fmt.Printf("expected:\n%+v", expect) fmt.Printf("actual:\n%+v", result) t.Fail() } } func TestContainerTwoBoxesPercentageVStack(t *testing.T) { expect := `┌─ one ──┐ │ │ │ │ │ │ │ │ └────────┘ ┌─ two ──┐ │ │ │ │ └────────┘ ` m := &MockScreen{} one := NewBox("one", nil, Contents{}, tcell.Style{}, false) two := NewBox("two", nil, Contents{}, tcell.Style{}, false) container := NewContainer( Contents{ {Container: one, Offsets: Offsets{Percent: 2}}, {Container: two, Offsets: Offsets{Percent: 1}}}, LayoutVerticalPercent, ) m.Init() m.Resize(0, 0, 10, 10) container.SetSize(0, 0, 10, 10) container.Draw(m) result := m.DumpContents() if result != expect { fmt.Printf("expected:\n%+v", expect) fmt.Printf("actual:\n%+v", result) t.Fail() } } func TestNewEditableTextLine(t *testing.T) { e := NewEditableTextLine("") e.InsertAtCursor('a') e.InsertAtCursor('b') e.InsertAtCursor('c') if e.text != "abc" { fmt.Printf("expected: 'abc', actual: '%+v'", e.text) t.Fail() } e.MoveCursor(-1) e.InsertAtCursor('d') if e.text != "abdc" { fmt.Printf("expected: 'abdc', actual: '%+v'", e.text) t.Fail() } e.MoveCursor(-20) e.InsertAtCursor('e') if e.text != "eabdc" { fmt.Printf("expected: 'eabdc', actual: '%+v'", e.text) t.Fail() } e.MoveCursor(20) e.InsertAtCursor('f') if e.text != "eabdcf" { fmt.Printf("expected: 'eabdcf', actual: '%+v'", e.text) t.Fail() } e.MoveCursor(1) e.InsertAtCursor('g') if e.text != "eabdcfg" { fmt.Printf("expected: 'eabdcfg', actual: '%+v'", e.text) t.Fail() } e.DeleteAtCursor() e.DeleteAtCursor() e.MoveCursor(-1) e.DeleteAtCursor() if e.text != "eabc" { fmt.Printf("expected: 'eabc', actual: '%+v'", e.text) t.Fail() } e.ResetCursor(false) e.InsertAtCursor('h') e.ResetCursor(true) e.InsertAtCursor('g') if e.text != "geabch" { fmt.Printf("expected: 'geabch', actual: '%+v'", e.text) t.Fail() } e.SetText("the rain in spain") e.InsertAtCursor('s') if e.text != "the rain in spains" { fmt.Printf("expected: 'the rain in spains', actual: '%+v'", e.text) t.Fail() } e.SetText("") e.InsertAtCursor('s') if e.text != "s" { fmt.Printf("expected: 's', actual: '%+v'", e.text) t.Fail() } }