diff options
Diffstat (limited to 'vendor/xz2/tests/xz.rs')
-rw-r--r-- | vendor/xz2/tests/xz.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/vendor/xz2/tests/xz.rs b/vendor/xz2/tests/xz.rs new file mode 100644 index 000000000..5b1dd6bb8 --- /dev/null +++ b/vendor/xz2/tests/xz.rs @@ -0,0 +1,61 @@ +extern crate xz2; + +use std::fs::File; +use std::io::prelude::*; +use std::path::Path; + +use xz2::read; +use xz2::write; +use xz2::stream; + +#[test] +fn standard_files() { + for file in Path::new("lzma-sys/xz-5.2/tests/files").read_dir().unwrap() { + let file = file.unwrap(); + if file.path().extension().and_then(|s| s.to_str()) != Some("xz") { + continue + } + + let filename = file.file_name().into_string().unwrap(); + + // This appears to be implementation-defined how it's handled + if filename.contains("unsupported-check") { + continue + } + + println!("testing {:?}", file.path()); + let mut contents = Vec::new(); + File::open(&file.path()).unwrap().read_to_end(&mut contents).unwrap(); + if filename.starts_with("bad") || filename.starts_with("unsupported") { + test_bad(&contents); + } else { + test_good(&contents); + } + } +} + +fn test_good(data: &[u8]) { + let mut ret = Vec::new(); + read::XzDecoder::new_multi_decoder(data).read_to_end(&mut ret).unwrap(); + let mut w = write::XzDecoder::new_multi_decoder(ret); + w.write_all(data).unwrap(); + w.finish().unwrap(); +} + +fn test_bad(data: &[u8]) { + let mut ret = Vec::new(); + assert!(read::XzDecoder::new(data).read_to_end(&mut ret).is_err()); + let mut w = write::XzDecoder::new(ret); + assert!(w.write_all(data).is_err() || w.finish().is_err()); +} + +fn assert_send_sync<T: Send + Sync>() { } + +#[test] +fn impls_send_and_sync() { + assert_send_sync::<stream::Stream>(); + assert_send_sync::<read::XzDecoder<&[u8]>>(); + assert_send_sync::<read::XzEncoder<&[u8]>>(); + assert_send_sync::<write::XzEncoder<&mut [u8]>>(); + assert_send_sync::<write::XzDecoder<&mut [u8]>>(); +} |