complete/args_test.go

216 lines
3.8 KiB
Go

package complete
import (
"fmt"
"strings"
"testing"
)
func TestArgs(t *testing.T) {
t.Parallel()
tests := []struct {
line string
completed string
last string
lastCompleted string
}{
{
line: "a b c",
completed: "b",
last: "c",
lastCompleted: "b",
},
{
line: "a b ",
completed: "b",
last: "",
lastCompleted: "b",
},
{
line: "",
completed: "",
last: "",
lastCompleted: "",
},
{
line: "a",
completed: "",
last: "a",
lastCompleted: "",
},
{
line: "a ",
completed: "",
last: "",
lastCompleted: "",
},
}
for _, tt := range tests {
t.Run(tt.line, func(t *testing.T) {
a := newArgs(strings.Split(tt.line, " "))
if got, want := strings.Join(a.Completed, " "), tt.completed; got != want {
t.Errorf("%s failed: Completed = %q, want %q", t.Name(), got, want)
}
if got, want := a.Last, tt.last; got != want {
t.Errorf("Last = %q, want %q", got, want)
}
if got, want := a.LastCompleted, tt.lastCompleted; got != want {
t.Errorf("%s failed: LastCompleted = %q, want %q", t.Name(), got, want)
}
})
}
}
func TestArgs_From(t *testing.T) {
t.Parallel()
tests := []struct {
line string
from int
newLine string
newCompleted string
}{
{
line: "a b c",
from: 0,
newLine: "b c",
newCompleted: "b",
},
{
line: "a b c",
from: 1,
newLine: "c",
newCompleted: "",
},
{
line: "a b c",
from: 2,
newLine: "",
newCompleted: "",
},
{
line: "a b c",
from: 3,
newLine: "",
newCompleted: "",
},
{
line: "a b c ",
from: 0,
newLine: "b c ",
newCompleted: "b c",
},
{
line: "a b c ",
from: 1,
newLine: "c ",
newCompleted: "c",
},
{
line: "a b c ",
from: 2,
newLine: "",
newCompleted: "",
},
{
line: "",
from: 0,
newLine: "",
newCompleted: "",
},
{
line: "",
from: 1,
newLine: "",
newCompleted: "",
},
}
for _, tt := range tests {
t.Run(fmt.Sprintf("%s/%d", tt.line, tt.from), func(t *testing.T) {
a := newArgs(strings.Split(tt.line, " "))
n := a.from(tt.from)
if got, want := strings.Join(n.All, " "), tt.newLine; got != want {
t.Errorf("%s failed: all = %q, want %q", t.Name(), got, want)
}
if got, want := strings.Join(n.Completed, " "), tt.newCompleted; got != want {
t.Errorf("%s failed: completed = %q, want %q", t.Name(), got, want)
}
})
}
}
func TestArgs_Directory(t *testing.T) {
t.Parallel()
initTests()
tests := []struct {
line string
directory string
}{
{
line: "a b c",
directory: "./",
},
{
line: "a b c /tm",
directory: "/",
},
{
line: "a b c /tmp",
directory: "/tmp/",
},
{
line: "a b c /tmp ",
directory: "./",
},
{
line: "a b c ./",
directory: "./",
},
{
line: "a b c ./dir",
directory: "./dir/",
},
{
line: "a b c dir",
directory: "dir/",
},
{
line: "a b c ./di",
directory: "./",
},
{
line: "a b c ./dir ",
directory: "./",
},
{
line: "a b c ./di",
directory: "./",
},
{
line: "a b c ./a.txt",
directory: "./",
},
{
line: "a b c ./a.txt/x",
directory: "./",
},
}
for _, tt := range tests {
t.Run(tt.line, func(t *testing.T) {
a := newArgs(strings.Split(tt.line, " "))
if got, want := a.Directory(), tt.directory; got != want {
t.Errorf("%s failed: directory = %q, want %q", t.Name(), got, want)
}
})
}
}