116 lines
2.8 KiB
Go
116 lines
2.8 KiB
Go
// +build !windows
|
|
|
|
package prompt
|
|
|
|
import (
|
|
"reflect"
|
|
"syscall"
|
|
"testing"
|
|
)
|
|
|
|
func TestFormatCompletion(t *testing.T) {
|
|
scenarioTable := []struct {
|
|
scenario string
|
|
completions []Suggest
|
|
prefix string
|
|
suffix string
|
|
expected []Suggest
|
|
maxWidth int
|
|
expectedWidth int
|
|
}{
|
|
{
|
|
scenario: "",
|
|
completions: []Suggest{
|
|
{Text: "select"},
|
|
{Text: "from"},
|
|
{Text: "insert"},
|
|
{Text: "where"},
|
|
},
|
|
prefix: " ",
|
|
suffix: " ",
|
|
expected: []Suggest{
|
|
{Text: " select "},
|
|
{Text: " from "},
|
|
{Text: " insert "},
|
|
{Text: " where "},
|
|
},
|
|
maxWidth: 20,
|
|
expectedWidth: 8,
|
|
},
|
|
{
|
|
scenario: "",
|
|
completions: []Suggest{
|
|
{Text: "select", Description: "select description"},
|
|
{Text: "from", Description: "from description"},
|
|
{Text: "insert", Description: "insert description"},
|
|
{Text: "where", Description: "where description"},
|
|
},
|
|
prefix: " ",
|
|
suffix: " ",
|
|
expected: []Suggest{
|
|
{Text: " select ", Description: " select description "},
|
|
{Text: " from ", Description: " from description "},
|
|
{Text: " insert ", Description: " insert description "},
|
|
{Text: " where ", Description: " where description "},
|
|
},
|
|
maxWidth: 40,
|
|
expectedWidth: 28,
|
|
},
|
|
}
|
|
|
|
for _, s := range scenarioTable {
|
|
ac, width := formatSuggestions(s.completions, s.maxWidth)
|
|
if !reflect.DeepEqual(ac, s.expected) {
|
|
t.Errorf("Should be %#v, but got %#v", s.expected, ac)
|
|
}
|
|
if width != s.expectedWidth {
|
|
t.Errorf("Should be %#v, but got %#v", s.expectedWidth, width)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestBreakLineCallback(t *testing.T) {
|
|
var i int
|
|
r := &Render{
|
|
prefix: "> ",
|
|
out: &PosixWriter{
|
|
fd: syscall.Stdin, // "write" to stdin just so we don't mess with the output of the tests
|
|
},
|
|
livePrefixCallback: func() (string, bool) { return "", false },
|
|
prefixTextColor: Blue,
|
|
prefixBGColor: DefaultColor,
|
|
inputTextColor: DefaultColor,
|
|
inputBGColor: DefaultColor,
|
|
previewSuggestionTextColor: Green,
|
|
previewSuggestionBGColor: DefaultColor,
|
|
suggestionTextColor: White,
|
|
suggestionBGColor: Cyan,
|
|
selectedSuggestionTextColor: Black,
|
|
selectedSuggestionBGColor: Turquoise,
|
|
descriptionTextColor: Black,
|
|
descriptionBGColor: Turquoise,
|
|
selectedDescriptionTextColor: White,
|
|
selectedDescriptionBGColor: Cyan,
|
|
scrollbarThumbColor: DarkGray,
|
|
scrollbarBGColor: Cyan,
|
|
col: 1,
|
|
}
|
|
b := NewBuffer()
|
|
r.BreakLine(b)
|
|
|
|
if i != 0 {
|
|
t.Errorf("i should initially be 0, before applying a break line callback")
|
|
}
|
|
|
|
r.breakLineCallback = func(doc *Document) {
|
|
i++
|
|
}
|
|
r.BreakLine(b)
|
|
r.BreakLine(b)
|
|
r.BreakLine(b)
|
|
|
|
if i != 3 {
|
|
t.Errorf("BreakLine callback not called, i should be 3")
|
|
}
|
|
}
|