From cb6f84e3d86cad0afbd76c1d33875f9f31c65113 Mon Sep 17 00:00:00 2001 From: Nathan Ross Date: Sat, 6 Aug 2016 14:58:46 -0400 Subject: [PATCH] tests/cut: positive testcases for feature complete --- .../fixtures/cut/delimiter_specified.expected | 5 ++ tests/fixtures/cut/lists.txt | 1 + .../cut/lists_change_delimiter.expected | 4 - tests/fixtures/cut/lists_char_range.expected | 4 - .../cut/lists_column_to_end_of_line.expected | 4 - .../cut/lists_multiple_fields.expected | 4 - tests/fixtures/cut/lists_prefix.expected | 4 - tests/fixtures/cut/lists_tail.expected | 4 - tests/fixtures/cut/output_delimiter.expected | 5 ++ .../cut/sequences/byte_aggregate.expected | 5 ++ .../cut/sequences/byte_prefix.expected | 5 ++ .../cut/sequences/byte_range.expected | 5 ++ .../cut/sequences/byte_singular.expected | 5 ++ .../cut/sequences/byte_subsumed.expected | 5 ++ .../cut/sequences/byte_suffix.expected | 5 ++ .../cut/sequences/field_aggregate.expected | 5 ++ .../cut/sequences/field_prefix.expected | 5 ++ .../cut/sequences/field_range.expected | 5 ++ .../field_singular.expected} | 3 +- .../cut/sequences/field_subsumed.expected | 5 ++ .../cut/sequences/field_suffix.expected | 5 ++ tests/test_cut.rs | 90 +++++++++++++++---- 22 files changed, 142 insertions(+), 41 deletions(-) create mode 100644 tests/fixtures/cut/delimiter_specified.expected delete mode 100644 tests/fixtures/cut/lists_change_delimiter.expected delete mode 100644 tests/fixtures/cut/lists_char_range.expected delete mode 100644 tests/fixtures/cut/lists_column_to_end_of_line.expected delete mode 100644 tests/fixtures/cut/lists_multiple_fields.expected delete mode 100644 tests/fixtures/cut/lists_prefix.expected delete mode 100644 tests/fixtures/cut/lists_tail.expected create mode 100644 tests/fixtures/cut/output_delimiter.expected create mode 100644 tests/fixtures/cut/sequences/byte_aggregate.expected create mode 100644 tests/fixtures/cut/sequences/byte_prefix.expected create mode 100644 tests/fixtures/cut/sequences/byte_range.expected create mode 100644 tests/fixtures/cut/sequences/byte_singular.expected create mode 100644 tests/fixtures/cut/sequences/byte_subsumed.expected create mode 100644 tests/fixtures/cut/sequences/byte_suffix.expected create mode 100644 tests/fixtures/cut/sequences/field_aggregate.expected create mode 100644 tests/fixtures/cut/sequences/field_prefix.expected create mode 100644 tests/fixtures/cut/sequences/field_range.expected rename tests/fixtures/cut/{lists_specific_field.expected => sequences/field_singular.expected} (70%) create mode 100644 tests/fixtures/cut/sequences/field_subsumed.expected create mode 100644 tests/fixtures/cut/sequences/field_suffix.expected diff --git a/tests/fixtures/cut/delimiter_specified.expected b/tests/fixtures/cut/delimiter_specified.expected new file mode 100644 index 000000000..ec022895e --- /dev/null +++ b/tests/fixtures/cut/delimiter_specified.expected @@ -0,0 +1,5 @@ +foo:bar:qux +one:two:four:six:seven +alpha:beta:delta:zeta:eta:iota:kappa:lambda:mu +the quick brown fox jumps over the lazy dog +sally sells seashells down by the seashore where are the seashells sally sells diff --git a/tests/fixtures/cut/lists.txt b/tests/fixtures/cut/lists.txt index bc31b9a8d..3ecb99519 100644 --- a/tests/fixtures/cut/lists.txt +++ b/tests/fixtures/cut/lists.txt @@ -2,3 +2,4 @@ foo:bar:baz:qux:quux one:two:three:four:five:six:seven alpha:beta:gamma:delta:epsilon:zeta:eta:theta:iota:kappa:lambda:mu the quick brown fox jumps over the lazy dog +sally sells seashells down by the seashore where are the seashells sally sells diff --git a/tests/fixtures/cut/lists_change_delimiter.expected b/tests/fixtures/cut/lists_change_delimiter.expected deleted file mode 100644 index 3f695b26c..000000000 --- a/tests/fixtures/cut/lists_change_delimiter.expected +++ /dev/null @@ -1,4 +0,0 @@ -bar#baz#qux#quux -two#three#four#five#six#seven -beta#gamma#delta#epsilon#zeta#eta#theta#iota#kappa#lambda#mu -the quick brown fox jumps over the lazy dog diff --git a/tests/fixtures/cut/lists_char_range.expected b/tests/fixtures/cut/lists_char_range.expected deleted file mode 100644 index 185c87346..000000000 --- a/tests/fixtures/cut/lists_char_range.expected +++ /dev/null @@ -1,4 +0,0 @@ -:bar:ba -:two:th -ha:beta - quick diff --git a/tests/fixtures/cut/lists_column_to_end_of_line.expected b/tests/fixtures/cut/lists_column_to_end_of_line.expected deleted file mode 100644 index f93071e7d..000000000 --- a/tests/fixtures/cut/lists_column_to_end_of_line.expected +++ /dev/null @@ -1,4 +0,0 @@ -quux -five:six:seven -epsilon:zeta:eta:theta:iota:kappa:lambda:mu -the quick brown fox jumps over the lazy dog diff --git a/tests/fixtures/cut/lists_multiple_fields.expected b/tests/fixtures/cut/lists_multiple_fields.expected deleted file mode 100644 index 2ded1424b..000000000 --- a/tests/fixtures/cut/lists_multiple_fields.expected +++ /dev/null @@ -1,4 +0,0 @@ -foo:baz -one:three -alpha:gamma -the quick brown fox jumps over the lazy dog diff --git a/tests/fixtures/cut/lists_prefix.expected b/tests/fixtures/cut/lists_prefix.expected deleted file mode 100644 index 29b3f2e3e..000000000 --- a/tests/fixtures/cut/lists_prefix.expected +++ /dev/null @@ -1,4 +0,0 @@ -foo:bar:ba -one:two:th -alpha:beta -the quick diff --git a/tests/fixtures/cut/lists_tail.expected b/tests/fixtures/cut/lists_tail.expected deleted file mode 100644 index f20335c90..000000000 --- a/tests/fixtures/cut/lists_tail.expected +++ /dev/null @@ -1,4 +0,0 @@ -bar:baz:qux:quux -two:three:four:five:six:seven -beta:gamma:delta:epsilon:zeta:eta:theta:iota:kappa:lambda:mu -the quick brown fox jumps over the lazy dog diff --git a/tests/fixtures/cut/output_delimiter.expected b/tests/fixtures/cut/output_delimiter.expected new file mode 100644 index 000000000..5be747a20 --- /dev/null +++ b/tests/fixtures/cut/output_delimiter.expected @@ -0,0 +1,5 @@ +foo@bar@qux +one@two@four@six@seven +alpha@beta@delta@zeta@eta@iota@kappa@lambda@mu +the quick brown fox jumps over the lazy dog +sally sells seashells down by the seashore where are the seashells sally sells diff --git a/tests/fixtures/cut/sequences/byte_aggregate.expected b/tests/fixtures/cut/sequences/byte_aggregate.expected new file mode 100644 index 000000000..85891e06e --- /dev/null +++ b/tests/fixtures/cut/sequences/byte_aggregate.expected @@ -0,0 +1,5 @@ +fo:arbaz:qux:quux +on:wothree:four:five:six:seven +alh:bta:gamma:delta:epsilon:zeta:eta:theta:iota:kappa:lambda:mu +th uik brown fox jumps over the lazy dog +sal slls seashells down by the seashore where are the seashells sally sells diff --git a/tests/fixtures/cut/sequences/byte_prefix.expected b/tests/fixtures/cut/sequences/byte_prefix.expected new file mode 100644 index 000000000..e7df5a318 --- /dev/null +++ b/tests/fixtures/cut/sequences/byte_prefix.expected @@ -0,0 +1,5 @@ +fo +on +al +th +sa diff --git a/tests/fixtures/cut/sequences/byte_range.expected b/tests/fixtures/cut/sequences/byte_range.expected new file mode 100644 index 000000000..35314cf20 --- /dev/null +++ b/tests/fixtures/cut/sequences/byte_range.expected @@ -0,0 +1,5 @@ +oo: +ne: +lph +he +all diff --git a/tests/fixtures/cut/sequences/byte_singular.expected b/tests/fixtures/cut/sequences/byte_singular.expected new file mode 100644 index 000000000..7faa91b4e --- /dev/null +++ b/tests/fixtures/cut/sequences/byte_singular.expected @@ -0,0 +1,5 @@ +o +n +l +h +a diff --git a/tests/fixtures/cut/sequences/byte_subsumed.expected b/tests/fixtures/cut/sequences/byte_subsumed.expected new file mode 100644 index 000000000..914c8a6e1 --- /dev/null +++ b/tests/fixtures/cut/sequences/byte_subsumed.expected @@ -0,0 +1,5 @@ +oo:bar:baz:qux:quux +ne:two:three:four:five:six:seven +lpha:beta:gamma:delta:epsilon:zeta:eta:theta:iota:kappa:lambda:mu +he quick brown fox jumps over the lazy dog +ally sells seashells down by the seashore where are the seashells sally sells diff --git a/tests/fixtures/cut/sequences/byte_suffix.expected b/tests/fixtures/cut/sequences/byte_suffix.expected new file mode 100644 index 000000000..914c8a6e1 --- /dev/null +++ b/tests/fixtures/cut/sequences/byte_suffix.expected @@ -0,0 +1,5 @@ +oo:bar:baz:qux:quux +ne:two:three:four:five:six:seven +lpha:beta:gamma:delta:epsilon:zeta:eta:theta:iota:kappa:lambda:mu +he quick brown fox jumps over the lazy dog +ally sells seashells down by the seashore where are the seashells sally sells diff --git a/tests/fixtures/cut/sequences/field_aggregate.expected b/tests/fixtures/cut/sequences/field_aggregate.expected new file mode 100644 index 000000000..6be14fadb --- /dev/null +++ b/tests/fixtures/cut/sequences/field_aggregate.expected @@ -0,0 +1,5 @@ +foo:bar:baz:qux:quux +one:two:three:four:five:six:seven +alpha:beta:gamma:delta:epsilon:zeta:eta:theta:iota:kappa:lambda:mu +the quick brown fox jumps over the lazy dog +sally sells down the seashore are the seashells sally sells diff --git a/tests/fixtures/cut/sequences/field_prefix.expected b/tests/fixtures/cut/sequences/field_prefix.expected new file mode 100644 index 000000000..e5a018f3b --- /dev/null +++ b/tests/fixtures/cut/sequences/field_prefix.expected @@ -0,0 +1,5 @@ +foo:bar:baz:qux:quux +one:two:three:four:five:six:seven +alpha:beta:gamma:delta:epsilon:zeta:eta:theta:iota:kappa:lambda:mu +the quick brown fox jumps over the lazy dog +sally sells diff --git a/tests/fixtures/cut/sequences/field_range.expected b/tests/fixtures/cut/sequences/field_range.expected new file mode 100644 index 000000000..246b20827 --- /dev/null +++ b/tests/fixtures/cut/sequences/field_range.expected @@ -0,0 +1,5 @@ +foo:bar:baz:qux:quux +one:two:three:four:five:six:seven +alpha:beta:gamma:delta:epsilon:zeta:eta:theta:iota:kappa:lambda:mu +the quick brown fox jumps over the lazy dog +sells seashells down diff --git a/tests/fixtures/cut/lists_specific_field.expected b/tests/fixtures/cut/sequences/field_singular.expected similarity index 70% rename from tests/fixtures/cut/lists_specific_field.expected rename to tests/fixtures/cut/sequences/field_singular.expected index 657258fcb..70dc5cc16 100644 --- a/tests/fixtures/cut/lists_specific_field.expected +++ b/tests/fixtures/cut/sequences/field_singular.expected @@ -1,4 +1,5 @@ foo:bar:baz:qux:quux one:two:three:four:five:six:seven alpha:beta:gamma:delta:epsilon:zeta:eta:theta:iota:kappa:lambda:mu -brown +the quick brown fox jumps over the lazy dog +sells diff --git a/tests/fixtures/cut/sequences/field_subsumed.expected b/tests/fixtures/cut/sequences/field_subsumed.expected new file mode 100644 index 000000000..cff4d1061 --- /dev/null +++ b/tests/fixtures/cut/sequences/field_subsumed.expected @@ -0,0 +1,5 @@ +foo:bar:baz:qux:quux +one:two:three:four:five:six:seven +alpha:beta:gamma:delta:epsilon:zeta:eta:theta:iota:kappa:lambda:mu +the quick brown fox jumps over the lazy dog +sells seashells down by the seashore where are the seashells sally sells diff --git a/tests/fixtures/cut/sequences/field_suffix.expected b/tests/fixtures/cut/sequences/field_suffix.expected new file mode 100644 index 000000000..cff4d1061 --- /dev/null +++ b/tests/fixtures/cut/sequences/field_suffix.expected @@ -0,0 +1,5 @@ +foo:bar:baz:qux:quux +one:two:three:four:five:six:seven +alpha:beta:gamma:delta:epsilon:zeta:eta:theta:iota:kappa:lambda:mu +the quick brown fox jumps over the lazy dog +sells seashells down by the seashore where are the seashells sally sells diff --git a/tests/test_cut.rs b/tests/test_cut.rs index f237af052..03b1d1c69 100644 --- a/tests/test_cut.rs +++ b/tests/test_cut.rs @@ -7,40 +7,98 @@ fn new_ucmd() -> UCommand { static INPUT: &'static str = "lists.txt"; +struct TestedSequence<'b> { + name : &'b str, + sequence: &'b str +} + +static EXAMPLE_SEQUENCES: &'static [TestedSequence<'static>] = &[ + TestedSequence{ name: "singular", sequence:"2" }, + TestedSequence{ name: "prefix", sequence: "-2" }, + TestedSequence{ name: "suffix", sequence: "2-" }, + TestedSequence{ name: "range", sequence: "2-4" }, + TestedSequence{ name: "aggregate", sequence: "9-,6-7,-2,4" }, + TestedSequence{ name: "subsumed", sequence: "2-,3" } +]; + +static COMPLEX_SEQUENCE: &'static TestedSequence<'static> = &TestedSequence{ name: "", sequence: "9-,6-7,-2,4" }; #[test] -fn test_prefix() { - new_ucmd().args(&["-c", "-10", INPUT]).run().stdout_is_fixture("lists_prefix.expected"); +fn test_byte_sequence() { + for param in vec!["-b", "--bytes"] { + for example_seq in EXAMPLE_SEQUENCES { + new_ucmd().args(&[param, example_seq.sequence, INPUT]) + .succeeds().stdout_only_fixture(format!("sequences/byte_{}.expected", example_seq.name)); + } + } +} + +#[cfg_attr(not(feature="test_unimplemented"),ignore)] +#[test] +fn test_char_sequence() { + for param in vec!["-c", "--characters"] { + for example_seq in EXAMPLE_SEQUENCES { + //as of coreutils 8.25 a char range is effectively the same as a byte range; there is no distinct treatment of utf8 chars. + new_ucmd().args(&[param, example_seq.sequence, INPUT]) + .succeeds().stdout_only_fixture(format!("sequences/byte_{}.expected", example_seq.name)); + } + } } #[test] -fn test_char_range() { - new_ucmd().args(&["-c", "4-10", INPUT]).run().stdout_is_fixture("lists_char_range.expected"); +fn test_field_sequence() { + for param in vec!["-f", "--fields"] { + for example_seq in EXAMPLE_SEQUENCES { + new_ucmd().args(&[param, example_seq.sequence, INPUT]) + .succeeds().stdout_only_fixture(format!("sequences/field_{}.expected", example_seq.name)); + } + } } #[test] -fn test_column_to_end_of_line() { - new_ucmd().args(&["-d", ":", "-f", "5-", INPUT]).run().stdout_is_fixture("lists_column_to_end_of_line.expected"); +fn test_specify_delimiter() { + for param in vec!["-d", "--delimiter"] { + new_ucmd().args(&[param, ":", "-f", COMPLEX_SEQUENCE.sequence, INPUT]) + .succeeds().stdout_only_fixture("delimiter_specified.expected"); + } } #[test] -fn test_specific_field() { - new_ucmd().args(&["-d", " ", "-f", "3", INPUT]).run().stdout_is_fixture("lists_specific_field.expected"); +fn test_output_delimiter() { + // we use -d here to ensure output delimiter + // is applied to the current, and not just the default, input delimiter + new_ucmd().args(&["-d:", "--output-delimiter=@", "-f", COMPLEX_SEQUENCE.sequence, INPUT]) + .succeeds().stdout_only_fixture("output_delimiter.expected"); } #[test] -fn test_multiple_fields() { - new_ucmd().args(&["-d", ":", "-f", "1,3", INPUT]).run().stdout_is_fixture("lists_multiple_fields.expected"); +fn test_complement() { + new_ucmd().args(&["-d_","--complement", "-f", "2"]) + .pipe_in("9_1\n8_2\n7_3") + .succeeds().stdout_only("9\n8\n7\n"); +} + +#[cfg_attr(not(feature="test_unimplemented"),ignore)] +#[test] +fn test_zero_terminated() { + new_ucmd().args(&["-d_","-z", "-f", "1"]) + .pipe_in("9_1\n8_2\n\07_3") + .succeeds().stdout_only("9\07\0"); } #[test] -fn test_tail() { - new_ucmd().args(&["-d", ":", "--complement", "-f", "1", INPUT]).run().stdout_is_fixture("lists_tail.expected"); +fn test_only_delimited() { + for param in vec!["-s", "--only-delimited"] { + new_ucmd().args(&["-d_", param, "-f", "1"]) + .pipe_in("91\n82\n7_3") + .succeeds().stdout_only("7\n"); + } } +#[cfg_attr(not(feature="test_unimplemented"),ignore)] #[test] -fn test_change_delimiter() { - new_ucmd() - .args(&["-d", ":", "--complement", "--output-delimiter=#", "-f", "1", INPUT]) - .run().stdout_is_fixture("lists_change_delimiter.expected"); +fn test_zero_terminated_only_delimited() { + new_ucmd().args(&["-d_","-z", "-s", "-f", "1"]) + .pipe_in("91\n\082\n7_3") + .succeeds().stdout_only("82\n7\0"); }