1057 lines
27 KiB
Go
1057 lines
27 KiB
Go
|
package tui
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"errors"
|
||
|
"testing"
|
||
|
|
||
|
"b612.me/apps/b612/gdu/internal/testanalyze"
|
||
|
"b612.me/apps/b612/gdu/internal/testapp"
|
||
|
"b612.me/apps/b612/gdu/internal/testdir"
|
||
|
"b612.me/apps/b612/gdu/pkg/analyze"
|
||
|
"b612.me/apps/b612/gdu/pkg/device"
|
||
|
"b612.me/apps/b612/gdu/pkg/fs"
|
||
|
"github.com/gdamore/tcell/v2"
|
||
|
"github.com/rivo/tview"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
func TestShowHelp(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(false)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, true, true, false, false, false)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, '?', 0))
|
||
|
|
||
|
assert.True(t, ui.pages.HasPage("help"))
|
||
|
}
|
||
|
|
||
|
func TestCloseHelp(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(false)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, true, true, false, false, false)
|
||
|
ui.showHelp()
|
||
|
|
||
|
assert.True(t, ui.pages.HasPage("help"))
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyEsc, 'q', 0))
|
||
|
|
||
|
assert.False(t, ui.pages.HasPage("help"))
|
||
|
}
|
||
|
|
||
|
func TestCloseHelpWithQuestionMark(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(false)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, true, true, false, false, false)
|
||
|
ui.showHelp()
|
||
|
|
||
|
assert.True(t, ui.pages.HasPage("help"))
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, '?', 0))
|
||
|
|
||
|
assert.False(t, ui.pages.HasPage("help"))
|
||
|
}
|
||
|
|
||
|
func TestKeyWhileDeleting(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(false)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, true, true, false, false, false)
|
||
|
|
||
|
modal := tview.NewModal().SetText("Deleting...")
|
||
|
ui.pages.AddPage("deleting", modal, true, true)
|
||
|
|
||
|
key := ui.keyPressed(tcell.NewEventKey(tcell.KeyEnter, ' ', 0))
|
||
|
assert.Equal(t, tcell.KeyEnter, key.Key())
|
||
|
}
|
||
|
|
||
|
func TestLeftRightKeyWhileConfirm(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(false)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, true, true, false, false, false)
|
||
|
|
||
|
modal := tview.NewModal().SetText("Really?")
|
||
|
ui.pages.AddPage("confirm", modal, true, true)
|
||
|
|
||
|
key := ui.keyPressed(tcell.NewEventKey(tcell.KeyLeft, 0, 0))
|
||
|
assert.Equal(t, tcell.KeyLeft, key.Key())
|
||
|
key = ui.keyPressed(tcell.NewEventKey(tcell.KeyRight, 0, 0))
|
||
|
assert.Equal(t, tcell.KeyRight, key.Key())
|
||
|
key = ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'h', 0))
|
||
|
assert.Equal(t, tcell.KeyLeft, key.Key())
|
||
|
key = ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'l', 0))
|
||
|
assert.Equal(t, tcell.KeyRight, key.Key())
|
||
|
}
|
||
|
|
||
|
func TestMoveLeftRight(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(false)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, true, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
ui.table.Select(0, 0)
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRight, 'l', 0))
|
||
|
|
||
|
assert.Equal(t, "nested", ui.currentDir.GetName())
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRight, 'l', 0)) // try /.. first
|
||
|
|
||
|
assert.Equal(t, "nested", ui.currentDir.GetName())
|
||
|
|
||
|
ui.table.Select(1, 0)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRight, 'l', 0))
|
||
|
|
||
|
assert.Equal(t, "subnested", ui.currentDir.GetName())
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyLeft, 'h', 0))
|
||
|
|
||
|
assert.Equal(t, "nested", ui.currentDir.GetName())
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyLeft, 'h', 0))
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyLeft, 'h', 0))
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
}
|
||
|
|
||
|
func TestMoveRightOnDevice(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(false)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, true, true, false, false, false)
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.SetIgnoreDirPaths([]string{})
|
||
|
err := ui.ListDevices(getDevicesInfoMock())
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
ui.table.Select(1, 0)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRight, 'l', 0))
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
// go back to list of devices
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyLeft, 'h', 0))
|
||
|
|
||
|
assert.Nil(t, ui.currentDir)
|
||
|
assert.Equal(t, "/dev/root", ui.table.GetCell(1, 0).GetReference().(*device.Device).Name)
|
||
|
}
|
||
|
|
||
|
func TestStop(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(false)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, true, true, false, false, false)
|
||
|
|
||
|
key := ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'q', 0))
|
||
|
assert.Nil(t, key)
|
||
|
}
|
||
|
|
||
|
func TestStopWithPrintingPath(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(false)
|
||
|
buff := &bytes.Buffer{}
|
||
|
ui := CreateUI(app, simScreen, buff, true, true, false, false, false)
|
||
|
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
key := ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'Q', 0))
|
||
|
assert.Nil(t, key)
|
||
|
|
||
|
assert.Equal(t, "test_dir\n", buff.String())
|
||
|
}
|
||
|
|
||
|
func TestSpawnShell(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(false)
|
||
|
buff := &bytes.Buffer{}
|
||
|
ui := CreateUI(app, simScreen, buff, true, true, false, false, false)
|
||
|
called := false
|
||
|
ui.exec = func(argv0 string, argv, envv []string) error {
|
||
|
called = true
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
key := ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'b', 0))
|
||
|
assert.Nil(t, key)
|
||
|
assert.True(t, called)
|
||
|
}
|
||
|
|
||
|
func TestSpawnShellWithoutDir(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(false)
|
||
|
buff := &bytes.Buffer{}
|
||
|
ui := CreateUI(app, simScreen, buff, true, true, false, false, false)
|
||
|
called := false
|
||
|
ui.exec = func(argv0 string, argv, envv []string) error {
|
||
|
called = true
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
ui.done = make(chan struct{})
|
||
|
|
||
|
key := ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'b', 0))
|
||
|
assert.Nil(t, key)
|
||
|
assert.False(t, called)
|
||
|
}
|
||
|
|
||
|
func TestSpawnShellWithWrongDir(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(false)
|
||
|
buff := &bytes.Buffer{}
|
||
|
ui := CreateUI(app, simScreen, buff, true, true, false, false, false)
|
||
|
called := false
|
||
|
ui.exec = func(argv0 string, argv, envv []string) error {
|
||
|
called = true
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.currentDir = &analyze.Dir{}
|
||
|
ui.currentDirPath = "/xxxxx"
|
||
|
|
||
|
key := ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'b', 0))
|
||
|
assert.Nil(t, key)
|
||
|
assert.False(t, called)
|
||
|
assert.True(t, ui.pages.HasPage("error"))
|
||
|
}
|
||
|
|
||
|
func TestSpawnShellWithError(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(false)
|
||
|
buff := &bytes.Buffer{}
|
||
|
ui := CreateUI(app, simScreen, buff, true, true, false, false, false)
|
||
|
called := false
|
||
|
ui.exec = func(argv0 string, argv, envv []string) error {
|
||
|
called = true
|
||
|
return errors.New("wrong shell")
|
||
|
}
|
||
|
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.currentDir = &analyze.Dir{}
|
||
|
ui.currentDirPath = "."
|
||
|
|
||
|
key := ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'b', 0))
|
||
|
assert.Nil(t, key)
|
||
|
assert.True(t, called)
|
||
|
assert.True(t, ui.pages.HasPage("error"))
|
||
|
}
|
||
|
|
||
|
func TestShowConfirm(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, true, true, false, false, false)
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
ui.table.Select(1, 0)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'd', 0))
|
||
|
|
||
|
assert.True(t, ui.pages.HasPage("confirm"))
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, '?', 0))
|
||
|
|
||
|
assert.False(t, ui.pages.HasPage("help"))
|
||
|
}
|
||
|
|
||
|
func TestDeleteEmpty(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
|
||
|
key := ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'd', 0))
|
||
|
assert.NotNil(t, key)
|
||
|
}
|
||
|
|
||
|
func TestMarkEmpty(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
|
||
|
key := ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, ' ', 0))
|
||
|
assert.NotNil(t, key)
|
||
|
}
|
||
|
|
||
|
func TestIgnoreEmpty(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
|
||
|
key := ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'I', 0))
|
||
|
assert.NotNil(t, key)
|
||
|
}
|
||
|
|
||
|
func TestDelete(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.askBeforeDelete = false
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
assert.Equal(t, 1, ui.table.GetRowCount())
|
||
|
|
||
|
ui.table.Select(0, 0)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'd', 0))
|
||
|
|
||
|
<-ui.done
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.NoDirExists(t, "test_dir/nested")
|
||
|
}
|
||
|
|
||
|
func TestDeleteWithNoDelete(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
assert.Equal(t, 1, ui.table.GetRowCount())
|
||
|
|
||
|
ui.table.Select(0, 0)
|
||
|
|
||
|
ui.SetNoDelete()
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'd', 0))
|
||
|
|
||
|
assert.DirExists(t, "test_dir/nested")
|
||
|
}
|
||
|
|
||
|
func TestDeleteMarked(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.askBeforeDelete = false
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
assert.Equal(t, 1, ui.table.GetRowCount())
|
||
|
|
||
|
ui.table.Select(0, 0)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, ' ', 0))
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'd', 0))
|
||
|
|
||
|
<-ui.done
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.NoDirExists(t, "test_dir/nested")
|
||
|
}
|
||
|
|
||
|
func TestDeleteParent(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.askBeforeDelete = false
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
assert.Equal(t, 1, ui.table.GetRowCount())
|
||
|
|
||
|
ui.table.Select(0, 0)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRight, 'l', 0))
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'd', 0))
|
||
|
|
||
|
assert.DirExists(t, "test_dir/nested")
|
||
|
}
|
||
|
|
||
|
func TestMarkParent(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.askBeforeDelete = false
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
assert.Equal(t, 1, ui.table.GetRowCount())
|
||
|
|
||
|
ui.table.Select(0, 0)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRight, 'l', 0))
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, ' ', 0))
|
||
|
|
||
|
assert.Equal(t, len(ui.markedRows), 0)
|
||
|
}
|
||
|
|
||
|
func TestIgnoreParent(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.askBeforeDelete = false
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
assert.Equal(t, 1, ui.table.GetRowCount())
|
||
|
|
||
|
ui.table.Select(0, 0)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRight, 'l', 0))
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'I', 0))
|
||
|
|
||
|
assert.Equal(t, len(ui.ignoredRows), 0)
|
||
|
}
|
||
|
|
||
|
func TestEmptyDir(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.askBeforeDelete = false
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
assert.Equal(t, 1, ui.table.GetRowCount())
|
||
|
|
||
|
ui.table.Select(0, 0)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'e', 0))
|
||
|
|
||
|
<-ui.done
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.DirExists(t, "test_dir/nested")
|
||
|
assert.NoDirExists(t, "test_dir/nested/subnested")
|
||
|
}
|
||
|
|
||
|
func TestMarkedEmptyDir(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.askBeforeDelete = false
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
assert.Equal(t, 1, ui.table.GetRowCount())
|
||
|
|
||
|
ui.table.Select(0, 0)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, ' ', 0))
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'e', 0))
|
||
|
|
||
|
<-ui.done
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.DirExists(t, "test_dir/nested")
|
||
|
assert.NoDirExists(t, "test_dir/nested/subnested")
|
||
|
}
|
||
|
|
||
|
func TestIgnoreDir(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.askBeforeDelete = false
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
assert.Equal(t, 1, ui.table.GetRowCount())
|
||
|
|
||
|
ui.table.Select(0, 0)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRight, 'l', 0)) // into nested
|
||
|
assert.Equal(t, 3, ui.table.GetRowCount())
|
||
|
|
||
|
ui.table.Select(1, 0) // subnested
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'I', 0)) // ignore subnested
|
||
|
|
||
|
row, _ := ui.table.GetSelection()
|
||
|
assert.Equal(t, 2, row) // selection moves to next row
|
||
|
|
||
|
ui.table.Select(1, 0)
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'I', 0)) // unignore subnested
|
||
|
}
|
||
|
|
||
|
func TestEmptyFile(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.askBeforeDelete = false
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
assert.Equal(t, 1, ui.table.GetRowCount())
|
||
|
|
||
|
ui.table.Select(0, 0)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRight, 'l', 0)) // into nested
|
||
|
|
||
|
ui.table.Select(2, 0) // file2
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'e', 0))
|
||
|
|
||
|
<-ui.done
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.DirExists(t, "test_dir/nested")
|
||
|
assert.DirExists(t, "test_dir/nested/subnested")
|
||
|
}
|
||
|
|
||
|
func TestMarkedEmptyFile(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.askBeforeDelete = false
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
assert.Equal(t, 1, ui.table.GetRowCount())
|
||
|
|
||
|
ui.table.Select(0, 0)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRight, 'l', 0)) // into nested
|
||
|
|
||
|
ui.table.Select(2, 0) // file2
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, ' ', 0))
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'e', 0))
|
||
|
|
||
|
<-ui.done
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.DirExists(t, "test_dir/nested")
|
||
|
assert.DirExists(t, "test_dir/nested/subnested")
|
||
|
}
|
||
|
|
||
|
func TestSortByApparentSize(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, false, false, false, false)
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'a', 0))
|
||
|
|
||
|
assert.True(t, ui.ShowApparentSize)
|
||
|
}
|
||
|
|
||
|
func TestShowFileCount(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, true, false, false, false, false)
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'c', 0))
|
||
|
|
||
|
assert.True(t, ui.showItemCount)
|
||
|
}
|
||
|
|
||
|
func TestShowFileCountBW(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, false, false, false, false)
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'c', 0))
|
||
|
|
||
|
assert.True(t, ui.showItemCount)
|
||
|
}
|
||
|
|
||
|
func TestShowMtime(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, true, false, false, false, false)
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'm', 0))
|
||
|
|
||
|
assert.True(t, ui.showMtime)
|
||
|
}
|
||
|
|
||
|
func TestShowMtimeBW(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, false, false, false, false)
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'm', 0))
|
||
|
|
||
|
assert.True(t, ui.showMtime)
|
||
|
}
|
||
|
|
||
|
func TestShowRelativeBar(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, false, false, false, false)
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
assert.False(t, ui.ShowRelativeSize)
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'B', 0))
|
||
|
|
||
|
assert.True(t, ui.ShowRelativeSize)
|
||
|
}
|
||
|
|
||
|
func TestRescan(t *testing.T) {
|
||
|
parentDir := &analyze.Dir{
|
||
|
File: &analyze.File{
|
||
|
Name: "parent",
|
||
|
},
|
||
|
Files: make([]fs.Item, 0, 1),
|
||
|
}
|
||
|
currentDir := &analyze.Dir{
|
||
|
File: &analyze.File{
|
||
|
Name: "sub",
|
||
|
Parent: parentDir,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.currentDir = currentDir
|
||
|
ui.topDir = parentDir
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'r', 0))
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
assert.Equal(t, parentDir, ui.currentDir.GetParent())
|
||
|
|
||
|
assert.Equal(t, 5, ui.table.GetRowCount())
|
||
|
assert.Contains(t, ui.table.GetCell(0, 0).Text, "/..")
|
||
|
assert.Contains(t, ui.table.GetCell(1, 0).Text, "ccc")
|
||
|
}
|
||
|
|
||
|
func TestSorting(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
ui.table.Select(1, 0)
|
||
|
// mark the item for deletion
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, ' ', 0))
|
||
|
assert.Equal(t, 1, len(ui.markedRows))
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 's', 0))
|
||
|
assert.Equal(t, "size", ui.sortBy)
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'C', 0))
|
||
|
assert.Equal(t, "itemCount", ui.sortBy)
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'n', 0))
|
||
|
assert.Equal(t, "name", ui.sortBy)
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'M', 0))
|
||
|
assert.Equal(t, "mtime", ui.sortBy)
|
||
|
|
||
|
// marking should be dropped after sorting
|
||
|
assert.Equal(t, 0, len(ui.markedRows))
|
||
|
}
|
||
|
|
||
|
func TestShowFile(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
ui.table.Select(0, 0)
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRight, 'l', 0))
|
||
|
ui.table.Select(2, 0)
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'v', 0))
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'q', 0))
|
||
|
}
|
||
|
|
||
|
func TestShowInfoAndMoveAround(t *testing.T) {
|
||
|
fin := testdir.CreateTestDir()
|
||
|
defer fin()
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
err := ui.AnalyzePath("test_dir", nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
<-ui.done // wait for analyzer
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, "test_dir", ui.currentDir.GetName())
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRight, 'l', 0))
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'i', 0))
|
||
|
|
||
|
assert.True(t, ui.pages.HasPage("info"))
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'k', 0)) // move up
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'j', 0)) // move down
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'k', 0)) // move up
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, '?', 0)) // does nothing
|
||
|
|
||
|
assert.True(t, ui.pages.HasPage("info")) // we can still see info page
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'q', 0))
|
||
|
|
||
|
assert.False(t, ui.pages.HasPage("info"))
|
||
|
}
|