aboutsummaryrefslogtreecommitdiffstats
path: root/commands/parser_test.go
diff options
context:
space:
mode:
authorRobin Jarry <robin@jarry.cc>2023-10-22 23:23:18 +0200
committerRobin Jarry <robin@jarry.cc>2023-10-28 19:25:10 +0200
commitabe228b14d97d8d47e8ff4406de387fac45cfe68 (patch)
tree56117403d1ae32d7253f86bab01a944a3cf225b9 /commands/parser_test.go
parent30851656591293ed2e19340ab78c937855a11143 (diff)
downloadaerc-abe228b14d97d8d47e8ff4406de387fac45cfe68.tar.gz
commands: use completion from go-opt
Implement command completion with complete struct field tags from the get-opt library introduced earlier. Changelog-changed: Improved command completion. Signed-off-by: Robin Jarry <robin@jarry.cc> Reviewed-by: Koni Marti <koni.marti@gmail.com> Tested-by: Moritz Poldrack <moritz@poldrack.dev> Tested-by: Inwit <inwit@sindominio.net>
Diffstat (limited to 'commands/parser_test.go')
-rw-r--r--commands/parser_test.go258
1 files changed, 0 insertions, 258 deletions
diff --git a/commands/parser_test.go b/commands/parser_test.go
deleted file mode 100644
index d6ccd385..00000000
--- a/commands/parser_test.go
+++ /dev/null
@@ -1,258 +0,0 @@
-package commands
-
-import (
- "testing"
-)
-
-var parserTests = []struct {
- name string
- cmd string
- wantType completionType
- wantFlag string
- wantArg string
- wantOptind int
-}{
- {
- name: "empty command",
- cmd: "",
- wantType: COMMAND,
- wantFlag: "",
- wantArg: "",
- wantOptind: 0,
- },
- {
- name: "command only",
- cmd: "cmd",
- wantType: COMMAND,
- wantFlag: "",
- wantArg: "",
- wantOptind: 1,
- },
- {
- name: "with space",
- cmd: "cmd ",
- wantType: OPERAND,
- wantFlag: "",
- wantArg: "",
- wantOptind: 1,
- },
- {
- name: "with two spaces",
- cmd: "cmd ",
- wantType: OPERAND,
- wantFlag: "",
- wantArg: "",
- wantOptind: 1,
- },
- {
- name: "with single option flag",
- cmd: "cmd -",
- wantType: SHORT_OPTION,
- wantFlag: "",
- wantArg: "",
- wantOptind: 2,
- },
- {
- name: "with single option flag two spaces",
- cmd: "cmd -",
- wantType: SHORT_OPTION,
- wantFlag: "",
- wantArg: "",
- wantOptind: 2,
- },
- {
- name: "with single option flag completed",
- cmd: "cmd -a",
- wantType: SHORT_OPTION,
- wantFlag: "a",
- wantArg: "",
- wantOptind: 2,
- },
- {
- name: "with single option flag completed and space",
- cmd: "cmd -a ",
- wantType: OPERAND,
- wantFlag: "a",
- wantArg: "",
- wantOptind: 2,
- },
- {
- name: "with single option flag completed and two spaces",
- cmd: "cmd -a ",
- wantType: OPERAND,
- wantFlag: "a",
- wantArg: "",
- wantOptind: 2,
- },
- {
- name: "with two single option flag completed",
- cmd: "cmd -b -a",
- wantType: SHORT_OPTION,
- wantFlag: "a",
- wantArg: "",
- wantOptind: 3,
- },
- {
- name: "with two single option flag combined",
- cmd: "cmd -ab",
- wantType: SHORT_OPTION,
- wantFlag: "ab",
- wantArg: "",
- wantOptind: 2,
- },
- {
- name: "with two single option flag and space",
- cmd: "cmd -ab ",
- wantType: OPERAND,
- wantFlag: "ab",
- wantArg: "",
- wantOptind: 2,
- },
- {
- name: "with mandatory option flag",
- cmd: "cmd -f",
- wantType: OPTION_ARGUMENT,
- wantFlag: "f",
- wantArg: "",
- wantOptind: 2,
- },
- {
- name: "with mandatory option flag and space",
- cmd: "cmd -f ",
- wantType: OPTION_ARGUMENT,
- wantFlag: "f",
- wantArg: "",
- wantOptind: 2,
- },
- {
- name: "with mandatory option flag and two spaces",
- cmd: "cmd -f ",
- wantType: OPTION_ARGUMENT,
- wantFlag: "f",
- wantArg: "",
- wantOptind: 2,
- },
- {
- name: "with mandatory option flag and completed",
- cmd: "cmd -f a",
- wantType: OPTION_ARGUMENT,
- wantFlag: "f",
- wantArg: "a",
- wantOptind: 3,
- },
- {
- name: "with mandatory option flag and completed quote",
- cmd: "cmd -f 'a b'",
- wantType: OPTION_ARGUMENT,
- wantFlag: "f",
- wantArg: "a b",
- wantOptind: 3,
- },
- {
- name: "with mandatory option flag and operand",
- cmd: "cmd -f 'a b' hello",
- wantType: OPERAND,
- wantFlag: "f",
- wantArg: "a b",
- wantOptind: 3,
- },
- {
- name: "with mandatory option flag and two spaces between",
- cmd: "cmd -f a",
- wantType: OPTION_ARGUMENT,
- wantFlag: "f",
- wantArg: "a",
- wantOptind: 3,
- },
- {
- name: "with mandatory option flag and more spaces",
- cmd: "cmd -f a ",
- wantType: OPERAND,
- wantFlag: "f",
- wantArg: "a",
- wantOptind: 3,
- },
- {
- name: "with template data",
- cmd: "cmd -a {{if .Size}} hello {{else}} {{end}}",
- wantType: OPERAND,
- wantFlag: "a",
- wantArg: "",
- wantOptind: 2,
- },
- {
- name: "with operand",
- cmd: "cmd -ab /tmp/aerc-",
- wantType: OPERAND,
- wantFlag: "ab",
- wantArg: "",
- wantOptind: 2,
- },
- {
- name: "with operand indicator",
- cmd: "cmd -ab -- /tmp/aerc-",
- wantType: OPERAND,
- wantFlag: "ab",
- wantArg: "",
- wantOptind: 3,
- },
- {
- name: "hyphen connected command",
- cmd: "cmd-dmc",
- wantType: COMMAND,
- wantFlag: "",
- wantArg: "",
- wantOptind: 1,
- },
- {
- name: "incomplete hyphen connected command",
- cmd: "cmd-",
- wantType: COMMAND,
- wantFlag: "",
- wantArg: "",
- wantOptind: 1,
- },
- {
- name: "hyphen connected command with option",
- cmd: "cmd-dmc -a",
- wantType: SHORT_OPTION,
- wantFlag: "a",
- wantArg: "",
- wantOptind: 2,
- },
-}
-
-func TestCommands_Parser(t *testing.T) {
- for i, test := range parserTests {
- n := len(test.cmd)
- spaceTerminated := n > 0 && test.cmd[n-1] == ' '
- parser, err := newParser(test.cmd, "abf:", spaceTerminated)
- if err != nil {
- t.Errorf("parser error: %v", err)
- }
-
- if test.wantType != parser.kind {
- t.Errorf("test %d '%s': completion type does not match: "+
- "want %d, but got %d", i, test.cmd, test.wantType,
- parser.kind)
- }
-
- if test.wantFlag != parser.flag {
- t.Errorf("test %d '%s': flag does not match: "+
- "want %s, but got %s", i, test.cmd, test.wantFlag,
- parser.flag)
- }
-
- if test.wantArg != parser.arg {
- t.Errorf("test %d '%s': arg does not match: "+
- "want %s, but got %s", i, test.cmd, test.wantArg,
- parser.arg)
- }
-
- if test.wantOptind != parser.optind {
- t.Errorf("test %d '%s': optind does not match: "+
- "want %d, but got %d", i, test.cmd, test.wantOptind,
- parser.optind)
- }
- }
-}