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  }