# A bare command.
command
---
Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 2 }

# Commands with arguments.
foo arg
bar key=value
baz arg key=value
---
Command { name: "foo", args: [Argument { key: None, value: "arg" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 7 }
Command { name: "bar", args: [Argument { key: Some("key"), value: "value" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 8 }
Command { name: "baz", args: [Argument { key: None, value: "arg" }, Argument { key: Some("key"), value: "value" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 9 }

# Commands with tags.
foo [tag]
foo arg key=value [a,b c]
---
Command { name: "foo", args: [], prefix: None, tags: {"tag"}, silent: false, fail: false, line_number: 16 }
Command { name: "foo", args: [Argument { key: None, value: "arg" }, Argument { key: Some("key"), value: "value" }], prefix: None, tags: {"a", "b", "c"}, silent: false, fail: false, line_number: 17 }

# Commands with prefixes.
a: foo arg
b: bar key=value
---
a: Command { name: "foo", args: [Argument { key: None, value: "arg" }], prefix: Some("a"), tags: {}, silent: false, fail: false, line_number: 23 }
b: Command { name: "bar", args: [Argument { key: Some("key"), value: "value" }], prefix: Some("b"), tags: {}, silent: false, fail: false, line_number: 24 }

# Failing commands.
! foo bar
---
Error: Command { name: "foo", args: [Argument { key: None, value: "bar" }], prefix: None, tags: {}, silent: false, fail: true, line_number: 30 }

# Prefixes, commands, and keys can be empty.
"": "" ""=""
---
: Command { name: "", args: [Argument { key: Some(""), value: "" }], prefix: Some(""), tags: {}, silent: false, fail: false, line_number: 35 }

# Prefixes, commands, and keys can be whitespace.
" ": " " " "=" "
---
 : Command { name: " ", args: [Argument { key: Some(" "), value: " " }], prefix: Some(" "), tags: {}, silent: false, fail: false, line_number: 40 }

# Empty argument keys and values are fine.
command ""
command arg=""
command arg=
---
Command { name: "command", args: [Argument { key: None, value: "" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 45 }
Command { name: "command", args: [Argument { key: Some("arg"), value: "" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 46 }
Command { name: "command", args: [Argument { key: Some("arg"), value: "" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 47 }
