diff options
| author | Pietro Albini <pietro.albini@ferrous-systems.com> | 2022-05-02 10:09:08 +0200 |
|---|---|---|
| committer | Pietro Albini <pietro.albini@ferrous-systems.com> | 2022-05-02 10:09:08 +0200 |
| commit | 95e1bd0df83e7595dfc0ef9d4415b7e601d8fa4f (patch) | |
| tree | 56736ad081ae21a0f5467c403c8710c6c5077245 /src | |
| parent | da139693f6375415567725b949c26ddb0367b73c (diff) | |
| download | rust-95e1bd0df83e7595dfc0ef9d4415b7e601d8fa4f.tar.gz rust-95e1bd0df83e7595dfc0ef9d4415b7e601d8fa4f.zip | |
add tests
Diffstat (limited to 'src')
| -rw-r--r-- | src/tools/compiletest/src/read2.rs | 3 | ||||
| -rw-r--r-- | src/tools/compiletest/src/read2/tests.rs | 123 |
2 files changed, 126 insertions, 0 deletions
diff --git a/src/tools/compiletest/src/read2.rs b/src/tools/compiletest/src/read2.rs index bd5f3593b65..313508a7966 100644 --- a/src/tools/compiletest/src/read2.rs +++ b/src/tools/compiletest/src/read2.rs @@ -1,6 +1,9 @@ // FIXME: This is a complete copy of `cargo/src/cargo/util/read2.rs` // Consider unify the read2() in libstd, cargo and this to prevent further code duplication. +#[cfg(test)] +mod tests; + pub use self::imp::read2; use std::io::{self, Write}; use std::mem::replace; diff --git a/src/tools/compiletest/src/read2/tests.rs b/src/tools/compiletest/src/read2/tests.rs new file mode 100644 index 00000000000..d66b501fc2b --- /dev/null +++ b/src/tools/compiletest/src/read2/tests.rs @@ -0,0 +1,123 @@ +use crate::read2::{ProcOutput, EXCLUDED_PLACEHOLDER_LEN, HEAD_LEN, TAIL_LEN}; + +#[test] +fn test_abbreviate_short_string() { + let mut out = ProcOutput::new(); + out.extend(b"Hello world!", &[]); + assert_eq!(b"Hello world!", &*out.into_bytes()); +} + +#[test] +fn test_abbreviate_short_string_multiple_steps() { + let mut out = ProcOutput::new(); + + out.extend(b"Hello ", &[]); + out.extend(b"world!", &[]); + + assert_eq!(b"Hello world!", &*out.into_bytes()); +} + +#[test] +fn test_abbreviate_long_string() { + let mut out = ProcOutput::new(); + + let data = vec![b'.'; HEAD_LEN + TAIL_LEN + 16]; + out.extend(&data, &[]); + + let mut expected = vec![b'.'; HEAD_LEN]; + expected.extend_from_slice(b"\n\n<<<<<< SKIPPED 16 BYTES >>>>>>\n\n"); + expected.extend_from_slice(&vec![b'.'; TAIL_LEN]); + + // We first check the length to avoid endless terminal output if the length differs, since + // `out` is hundreds of KBs in size. + let out = out.into_bytes(); + assert_eq!(expected.len(), out.len()); + assert_eq!(expected, out); +} + +#[test] +fn test_abbreviate_long_string_multiple_steps() { + let mut out = ProcOutput::new(); + + out.extend(&vec![b'.'; HEAD_LEN], &[]); + out.extend(&vec![b'.'; TAIL_LEN], &[]); + // Also test whether the rotation works + out.extend(&vec![b'!'; 16], &[]); + out.extend(&vec![b'?'; 16], &[]); + + let mut expected = vec![b'.'; HEAD_LEN]; + expected.extend_from_slice(b"\n\n<<<<<< SKIPPED 32 BYTES >>>>>>\n\n"); + expected.extend_from_slice(&vec![b'.'; TAIL_LEN - 32]); + expected.extend_from_slice(&vec![b'!'; 16]); + expected.extend_from_slice(&vec![b'?'; 16]); + + // We first check the length to avoid endless terminal output if the length differs, since + // `out` is hundreds of KBs in size. + let out = out.into_bytes(); + assert_eq!(expected.len(), out.len()); + assert_eq!(expected, out); +} + +#[test] +fn test_abbreviate_exclusions_are_detected() { + let mut out = ProcOutput::new(); + let exclusions = &["foo".to_string(), "quux".to_string()]; + + out.extend(b"Hello foo", exclusions); + // Check items from a previous extension are not double-counted. + out.extend(b"! This is a qu", exclusions); + // Check items are detected across extensions. + out.extend(b"ux.", exclusions); + + match out { + ProcOutput::Full { excluded_len, .. } => assert_eq!( + excluded_len, + EXCLUDED_PLACEHOLDER_LEN * exclusions.len() as isize + - exclusions.iter().map(|i| i.len() as isize).sum::<isize>() + ), + ProcOutput::Abbreviated { .. } => panic!("out should not be abbreviated"), + } + + assert_eq!(b"Hello foo! This is a quux.", &*out.into_bytes()); +} + +#[test] +fn test_abbreviate_exclusions_avoid_abbreviations() { + let mut out = ProcOutput::new(); + let exclusions = &[std::iter::repeat('a').take(64).collect::<String>()]; + + let mut expected = vec![b'.'; HEAD_LEN - EXCLUDED_PLACEHOLDER_LEN as usize]; + expected.extend_from_slice(exclusions[0].as_bytes()); + expected.extend_from_slice(&vec![b'.'; TAIL_LEN]); + + out.extend(&expected, exclusions); + + // We first check the length to avoid endless terminal output if the length differs, since + // `out` is hundreds of KBs in size. + let out = out.into_bytes(); + assert_eq!(expected.len(), out.len()); + assert_eq!(expected, out); +} + +#[test] +fn test_abbreviate_exclusions_can_still_cause_abbreviations() { + let mut out = ProcOutput::new(); + let exclusions = &[std::iter::repeat('a').take(64).collect::<String>()]; + + let mut input = vec![b'.'; HEAD_LEN]; + input.extend_from_slice(&vec![b'.'; TAIL_LEN]); + input.extend_from_slice(exclusions[0].as_bytes()); + + let mut expected = vec![b'.'; HEAD_LEN]; + expected.extend_from_slice(b"\n\n<<<<<< SKIPPED 64 BYTES >>>>>>\n\n"); + expected.extend_from_slice(&vec![b'.'; TAIL_LEN - 64]); + expected.extend_from_slice(&vec![b'a'; 64]); + + out.extend(&input, exclusions); + + // We first check the length to avoid endless terminal output if the length differs, since + // `out` is hundreds of KBs in size. + let out = out.into_bytes(); + assert_eq!(expected.len(), out.len()); + assert_eq!(expected, out); +} |
