aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/ui/textinput.go2
-rw-r--r--lib/ui/textinput_test.go72
2 files changed, 73 insertions, 1 deletions
diff --git a/lib/ui/textinput.go b/lib/ui/textinput.go
index e41cff75..dd946aec 100644
--- a/lib/ui/textinput.go
+++ b/lib/ui/textinput.go
@@ -220,7 +220,7 @@ func (ti *TextInput) deleteWord() {
for i >= 0 && ti.text[i] == ' ' {
i--
}
- if strings.ContainsRune(separators, ti.text[i]) {
+ if i >= 0 && strings.ContainsRune(separators, ti.text[i]) {
for i >= 0 && strings.ContainsRune(separators, ti.text[i]) {
i--
}
diff --git a/lib/ui/textinput_test.go b/lib/ui/textinput_test.go
new file mode 100644
index 00000000..47a4c294
--- /dev/null
+++ b/lib/ui/textinput_test.go
@@ -0,0 +1,72 @@
+package ui
+
+import "testing"
+
+func TestDeleteWord(t *testing.T) {
+ tests := []struct {
+ name string
+ text string
+ expected string
+ }{
+ {
+ name: "hello-world",
+ text: "hello world",
+ expected: "hello ",
+ },
+ {
+ name: "empty",
+ text: "",
+ expected: "",
+ },
+ {
+ name: "quoted",
+ text: `"hello"`,
+ expected: `"hello`,
+ },
+ {
+ name: "hello-and-space",
+ text: "hello ",
+ expected: "",
+ },
+ {
+ name: "space-and-hello",
+ text: " hello",
+ expected: " ",
+ },
+ {
+ name: "only-quote",
+ text: `"`,
+ expected: "",
+ },
+ {
+ name: "only-space",
+ text: " ",
+ expected: "",
+ },
+ {
+ name: "space-and-quoted",
+ text: " 'hello",
+ expected: " '",
+ },
+ {
+ name: "paths",
+ text: "foo/bar/baz",
+ expected: "foo/bar/",
+ },
+ {
+ name: "space-and-paths",
+ text: " /foo",
+ expected: " /",
+ },
+ }
+
+ for _, test := range tests {
+ t.Run(test.name, func(t *testing.T) {
+ textinput := NewTextInput(test.text, nil)
+ textinput.deleteWord()
+ if string(textinput.text) != test.expected {
+ t.Errorf("word was deleted incorrectly: got %s but expected %s", string(textinput.text), test.expected)
+ }
+ })
+ }
+}