]>
Commit | Line | Data |
---|---|---|
2c00a5a8 XL |
1 | extern crate xz2; |
2 | ||
3 | use std::fs::File; | |
4 | use std::io::prelude::*; | |
5 | use std::path::Path; | |
6 | ||
7 | use xz2::read; | |
8 | use xz2::write; | |
9 | use xz2::stream; | |
10 | ||
11 | #[test] | |
12 | fn 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 | ||
37 | fn 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 | ||
45 | fn 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 | ||
52 | fn assert_send_sync<T: Send + Sync>() { } | |
53 | ||
54 | #[test] | |
55 | fn 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 | } |