src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/cli/modes/completion_test.go (about) 1 package modes 2 3 import ( 4 "testing" 5 6 "src.elv.sh/pkg/cli" 7 . "src.elv.sh/pkg/cli/clitest" 8 "src.elv.sh/pkg/cli/term" 9 "src.elv.sh/pkg/diag" 10 "src.elv.sh/pkg/ui" 11 ) 12 13 func TestCompletion_Filter(t *testing.T) { 14 f := setupStartedCompletion(t) 15 defer f.Stop() 16 17 f.TTY.Inject(term.K('b'), term.K('a')) 18 f.TestTTY(t, 19 "'foo bar'\n", Styles, 20 "_________", 21 " COMPLETING WORD ba", Styles, 22 "***************** ", term.DotHere, "\n", 23 "foo bar", Styles, 24 "#######", 25 ) 26 } 27 28 func TestCompletion_Accept(t *testing.T) { 29 f := setupStartedCompletion(t) 30 defer f.Stop() 31 32 f.TTY.Inject(term.K(ui.Enter)) 33 f.TestTTY(t, "foo", term.DotHere) 34 } 35 36 func TestCompletion_Dismiss(t *testing.T) { 37 f := setupStartedCompletion(t) 38 defer f.Stop() 39 40 f.App.PopAddon() 41 f.App.Redraw() 42 f.TestTTY(t /* nothing */) 43 } 44 45 func TestNewCompletion_NoItems(t *testing.T) { 46 f := Setup() 47 defer f.Stop() 48 _, err := NewCompletion(f.App, CompletionSpec{Items: []CompletionItem{}}) 49 if err != errNoCandidates { 50 t.Errorf("should return errNoCandidates") 51 } 52 } 53 54 func TestNewCompletion_FocusedWidgetNotCodeArea(t *testing.T) { 55 testFocusedWidgetNotCodeArea(t, func(app cli.App) error { 56 _, err := NewCompletion(app, CompletionSpec{Items: []CompletionItem{{}}}) 57 return err 58 }) 59 } 60 61 func setupStartedCompletion(t *testing.T) *Fixture { 62 f := Setup() 63 w, _ := NewCompletion(f.App, CompletionSpec{ 64 Name: "WORD", 65 Replace: diag.Ranging{From: 0, To: 0}, 66 Items: []CompletionItem{ 67 {ToShow: ui.T("foo"), ToInsert: "foo"}, 68 {ToShow: ui.T("foo bar", ui.FgBlue), ToInsert: "'foo bar'"}, 69 }, 70 }) 71 f.App.PushAddon(w) 72 f.App.Redraw() 73 f.TestTTY(t, 74 "foo\n", Styles, 75 "___", 76 " COMPLETING WORD ", Styles, 77 "***************** ", term.DotHere, "\n", 78 "foo foo bar", Styles, 79 "+++ ///////", 80 ) 81 return f 82 }