]> git.proxmox.com Git - rustc.git/blame - vendor/xz2/tests/xz.rs
New upstream version 1.47.0~beta.2+dfsg1
[rustc.git] / vendor / xz2 / tests / xz.rs
CommitLineData
2c00a5a8
XL
1extern crate xz2;
2
3use std::fs::File;
4use std::io::prelude::*;
5use std::path::Path;
6
7use xz2::read;
8use xz2::write;
9use xz2::stream;
10
11#[test]
12fn standard_files() {
3dfed10e 13 for file in Path::new("lzma-sys/xz-5.2/tests/files").read_dir().unwrap() {
2c00a5a8
XL
14 let file = file.unwrap();
15 if file.path().extension().and_then(|s| s.to_str()) != Some("xz") {
16 continue
17 }
18
19 let filename = file.file_name().into_string().unwrap();
20
21 // This appears to be implementation-defined how it's handled
22 if filename.contains("unsupported-check") {
23 continue
24 }
25
2c00a5a8
XL
26 println!("testing {:?}", file.path());
27 let mut contents = Vec::new();
28 File::open(&file.path()).unwrap().read_to_end(&mut contents).unwrap();
29 if filename.starts_with("bad") || filename.starts_with("unsupported") {
30 test_bad(&contents);
31 } else {
32 test_good(&contents);
33 }
34 }
35}
36
37fn test_good(data: &[u8]) {
38 let mut ret = Vec::new();
8faf50e0
XL
39 read::XzDecoder::new_multi_decoder(data).read_to_end(&mut ret).unwrap();
40 let mut w = write::XzDecoder::new_multi_decoder(ret);
2c00a5a8
XL
41 w.write_all(data).unwrap();
42 w.finish().unwrap();
43}
44
45fn test_bad(data: &[u8]) {
46 let mut ret = Vec::new();
47 assert!(read::XzDecoder::new(data).read_to_end(&mut ret).is_err());
48 let mut w = write::XzDecoder::new(ret);
49 assert!(w.write_all(data).is_err() || w.finish().is_err());
50}
51
52fn assert_send_sync<T: Send + Sync>() { }
53
54#[test]
55fn impls_send_and_sync() {
56 assert_send_sync::<stream::Stream>();
57 assert_send_sync::<read::XzDecoder<&[u8]>>();
58 assert_send_sync::<read::XzEncoder<&[u8]>>();
59 assert_send_sync::<write::XzEncoder<&mut [u8]>>();
60 assert_send_sync::<write::XzDecoder<&mut [u8]>>();
61}