Skip to content

Commit

Permalink
tests: update with tags hashset output
Browse files Browse the repository at this point in the history
  • Loading branch information
erikgrinaker committed Jun 13, 2024
1 parent 7aec20b commit bd98210
Show file tree
Hide file tree
Showing 11 changed files with 82 additions and 67 deletions.
19 changes: 17 additions & 2 deletions src/command.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::collections::{HashSet, VecDeque};
use std::collections::{BTreeSet, HashSet, VecDeque};
use std::error::Error;

/// A block, consisting of multiple commands.
Expand All @@ -14,7 +14,7 @@ pub(crate) struct Block {
}

/// A command.
#[derive(Clone, Debug, PartialEq)]
#[derive(Clone, PartialEq)]
#[non_exhaustive]
pub struct Command {
/// The name of the command. Never empty.
Expand All @@ -35,6 +35,21 @@ pub struct Command {
pub line_number: u32,
}

impl std::fmt::Debug for Command {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Command")
.field("name", &self.name)
.field("args", &self.args)
.field("prefix", &self.prefix)
// Use a sorted BTreeSet for test determinism.
.field("tags", &BTreeSet::from_iter(&self.tags))
.field("silent", &self.silent)
.field("fail", &self.fail)
.field("line_number", &self.line_number)
.finish()
}
}

impl Command {
/// Returns an argument consumer, for more convenient argument processing.
/// Does not affect [`Command::args`].
Expand Down
6 changes: 3 additions & 3 deletions tests/generate/empty_output.out
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
# an empty block at the end of the file.
command
---
Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 3 }
Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 3 }

command
---
Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 6 }
Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 6 }

command
---
Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 9 }
Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 9 }
28 changes: 14 additions & 14 deletions tests/scripts/commands
Original file line number Diff line number Diff line change
@@ -1,51 +1,51 @@
# A bare command.
command
---
Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 2 }
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 }
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 }
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 }
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 }
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 }
: 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 }
: 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 }
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 }
10 changes: 5 additions & 5 deletions tests/scripts/comments
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,25 @@
# Comment before command.
command id=1
---
Command { name: "command", args: [Argument { key: Some("id"), value: "1" }], prefix: None, tags: [], silent: false, fail: false, line_number: 6 }
Command { name: "command", args: [Argument { key: Some("id"), value: "1" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 6 }

command id=2 # Comment beside command.
---
Command { name: "command", args: [Argument { key: Some("id"), value: "2" }], prefix: None, tags: [], silent: false, fail: false, line_number: 10 }
Command { name: "command", args: [Argument { key: Some("id"), value: "2" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 10 }

command id=3
# Comment after command.
---
Command { name: "command", args: [Argument { key: Some("id"), value: "3" }], prefix: None, tags: [], silent: false, fail: false, line_number: 14 }
Command { name: "command", args: [Argument { key: Some("id"), value: "3" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 14 }

# Comment between blocks.

command id=4
---
Command { name: "command", args: [Argument { key: Some("id"), value: "4" }], prefix: None, tags: [], silent: false, fail: false, line_number: 21 }
Command { name: "command", args: [Argument { key: Some("id"), value: "4" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 21 }

command id=5 // Comment using //.
---
Command { name: "command", args: [Argument { key: Some("id"), value: "5" }], prefix: None, tags: [], silent: false, fail: false, line_number: 25 }
Command { name: "command", args: [Argument { key: Some("id"), value: "5" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 25 }

# Comment at end.
12 changes: 6 additions & 6 deletions tests/scripts/dos_line_endings
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,25 @@

command
---
Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 3 }
Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 3 }

// Comment.

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: 9 }
Command { name: "bar", args: [Argument { key: Some("key"), value: "value" }], prefix: None, tags: [], silent: false, fail: false, line_number: 10 }
Command { name: "baz", args: [Argument { key: None, value: "arg" }, Argument { key: Some("key"), value: "value" }], prefix: None, tags: [], silent: false, fail: false, line_number: 11 }
Command { name: "foo", args: [Argument { key: None, value: "arg" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 9 }
Command { name: "bar", args: [Argument { key: Some("key"), value: "value" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 10 }
Command { name: "baz", args: [Argument { key: None, value: "arg" }, Argument { key: Some("key"), value: "value" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 11 }

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

# Comment.
2 changes: 1 addition & 1 deletion tests/scripts/fail
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# the runner expects an error.
! command arg
---
Error: Command { name: "command", args: [Argument { key: None, value: "arg" }], prefix: None, tags: [], silent: false, fail: true, line_number: 3 }
Error: Command { name: "command", args: [Argument { key: None, value: "arg" }], prefix: None, tags: {}, silent: false, fail: true, line_number: 3 }

# Errors and panics are handled when ! is given.
! _error foo
Expand Down
20 changes: 10 additions & 10 deletions tests/scripts/hooks
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,35 @@
_set start_block="start" end_block="end"
command
---
Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 3 }
Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 3 }
end

command
---
start
Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 8 }
Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 8 }
end

# Newlines in block hooks should be handled appropriately.
_set start_block="start\n" end_block="end\n"
command
---
start
Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 16 }
Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 16 }
end

command
---
start
Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 22 }
Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 22 }
end

# As should empty lines.
_set start_block="start\n\n" end_block="end\n\n"
command
---
> start
> Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 30 }
> Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 30 }
> end
>

Expand All @@ -39,7 +39,7 @@ command
---
> start
>
> Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 38 }
> Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 38 }
> end

_set start_block="" end_block=""
Expand All @@ -55,10 +55,10 @@ prefix: command
(command)
---
start
Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 53 }
Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 53 }
end
prefix: start
prefix: Command { name: "command", args: [], prefix: Some("prefix"), tags: [], silent: false, fail: false, line_number: 54 }
prefix: Command { name: "command", args: [], prefix: Some("prefix"), tags: {}, silent: false, fail: false, line_number: 54 }
prefix: end

# They should also be called after commands that were expected to fail.
Expand All @@ -73,14 +73,14 @@ end
command
---
start
Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 73 }
Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 73 }
end

(_set start_command="start\n\n" end_command="end\n\n")
command
---
> start
>
> Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 80 }
> Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 80 }
> end
>
18 changes: 9 additions & 9 deletions tests/scripts/output
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
command
command arg
---
Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 2 }
Command { name: "command", args: [Argument { key: None, value: "arg" }], prefix: None, tags: [], silent: false, fail: false, line_number: 3 }
Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 2 }
Command { name: "command", args: [Argument { key: None, value: "arg" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 3 }

# Output that contains empty lines should automatically be prefixed with >.
# This should be the case for empty lines at the start and end of the output,
Expand All @@ -13,28 +13,28 @@ command id=1
command id=2
---
>
> Command { name: "command", args: [Argument { key: Some("id"), value: "1" }], prefix: None, tags: [], silent: false, fail: false, line_number: 12 }
> Command { name: "command", args: [Argument { key: Some("id"), value: "1" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 12 }
>
> Command { name: "command", args: [Argument { key: Some("id"), value: "2" }], prefix: None, tags: [], silent: false, fail: false, line_number: 13 }
> Command { name: "command", args: [Argument { key: Some("id"), value: "2" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 13 }

_set prefix="" suffix="\n\n"
command id=1
command id=2
---
> Command { name: "command", args: [Argument { key: Some("id"), value: "1" }], prefix: None, tags: [], silent: false, fail: false, line_number: 21 }
> Command { name: "command", args: [Argument { key: Some("id"), value: "1" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 21 }
>
> Command { name: "command", args: [Argument { key: Some("id"), value: "2" }], prefix: None, tags: [], silent: false, fail: false, line_number: 22 }
> Command { name: "command", args: [Argument { key: Some("id"), value: "2" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 22 }
>

_set prefix="\n" suffix="\n\n"
command id=1
command id=2
---
>
> Command { name: "command", args: [Argument { key: Some("id"), value: "1" }], prefix: None, tags: [], silent: false, fail: false, line_number: 30 }
> Command { name: "command", args: [Argument { key: Some("id"), value: "1" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 30 }
>
>
> Command { name: "command", args: [Argument { key: Some("id"), value: "2" }], prefix: None, tags: [], silent: false, fail: false, line_number: 31 }
> Command { name: "command", args: [Argument { key: Some("id"), value: "2" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 31 }
>

# Empty output blocks should default to "ok", but only once, and only if none of
Expand All @@ -54,7 +54,7 @@ ok
command
(command)
---
Command { name: "command", args: [], prefix: None, tags: [], silent: false, fail: false, line_number: 54 }
Command { name: "command", args: [], prefix: None, tags: {}, silent: false, fail: false, line_number: 54 }

_set start_block="" end_block="end"
---
Expand Down
4 changes: 2 additions & 2 deletions tests/scripts/silent
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ command id=1
(command id=2)
command id=3
---
Command { name: "command", args: [Argument { key: Some("id"), value: "1" }], prefix: None, tags: [], silent: false, fail: false, line_number: 7 }
Command { name: "command", args: [Argument { key: Some("id"), value: "3" }], prefix: None, tags: [], silent: false, fail: false, line_number: 9 }
Command { name: "command", args: [Argument { key: Some("id"), value: "1" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 7 }
Command { name: "command", args: [Argument { key: Some("id"), value: "3" }], prefix: None, tags: {}, silent: false, fail: false, line_number: 9 }

# Whitespace is allowed around the parentheses, except for the first.
( command ) # eol
Expand Down
Loading

0 comments on commit bd98210

Please sign in to comment.