1 // TODO: remove tests of CompressionFormat::try_from since that's no longer used anywhere
5 use std::{convert::TryFrom, fs, path::Path};
8 cli::{clap_app, Command, CommandKind::*},
9 extension::{CompressionFormat::*, Extension},
13 // ouch's command-line logic uses fs::canonicalize on its inputs so we cannot
14 // use made-up files for testing.
15 // make_dummy_file therefores creates a small temporary file to bypass fs::canonicalize errors
16 fn make_dummy_file<'a, P>(path: P) -> crate::Result<()>
20 fs::write(path.as_ref(), &[2, 3, 4, 5, 6, 7, 8, 9, 10])?;
25 fn decompress_files_into_folder() -> crate::Result<()> {
26 make_dummy_file("file.zip")?;
27 let matches = clap_app().get_matches_from(vec!["ouch", "-i", "file.zip", "-o", "folder/"]);
28 let command_from_matches = Command::try_from(matches)?;
33 kind: Decompression(vec![File {
34 path: fs::canonicalize("file.zip")?,
35 contents_in_memory: None,
36 extension: Some(Extension::from(Zip))
39 path: "folder".into(),
40 contents_in_memory: None,
46 fs::remove_file("file.zip")?;
52 fn decompress_files() -> crate::Result<()> {
53 make_dummy_file("my-cool-file.zip")?;
54 make_dummy_file("file.tar")?;
56 clap_app().get_matches_from(vec!["ouch", "-i", "my-cool-file.zip", "file.tar"]);
57 let command_from_matches = Command::try_from(matches)?;
62 kind: Decompression(vec![
64 path: fs::canonicalize("my-cool-file.zip")?,
65 contents_in_memory: None,
66 extension: Some(Extension::from(Zip))
69 path: fs::canonicalize("file.tar")?,
70 contents_in_memory: None,
71 extension: Some(Extension::from(Tar))
78 fs::remove_file("my-cool-file.zip")?;
79 fs::remove_file("file.tar")?;
85 fn compress_files() -> crate::Result<()> {
86 make_dummy_file("file")?;
87 make_dummy_file("file2.jpeg")?;
88 make_dummy_file("file3.ok")?;
90 let matches = clap_app().get_matches_from(vec![
99 let command_from_matches = Command::try_from(matches)?;
102 command_from_matches,
104 kind: Compression(vec![
105 fs::canonicalize("file")?,
106 fs::canonicalize("file2.jpeg")?,
107 fs::canonicalize("file3.ok")?
110 path: "file.tar".into(),
111 contents_in_memory: None,
112 extension: Some(Extension::from(Tar))
117 fs::remove_file("file")?;
118 fs::remove_file("file2.jpeg")?;
119 fs::remove_file("file3.ok")?;
128 use std::convert::TryFrom;
131 cli::{clap_app, Command},
135 fn compress_files() -> crate::Result<()> {
137 clap_app().get_matches_from(vec!["ouch", "-i", "a_file", "file2.jpeg", "file3.ok"]);
138 let res = Command::try_from(matches);
142 Err(crate::Error::InputsMustHaveBeenDecompressible(
152 mod extension_extraction {
153 use std::{convert::TryFrom, path::PathBuf, str::FromStr};
156 extension::{CompressionFormat, Extension},
160 fn zip() -> crate::Result<()> {
161 let path = PathBuf::from_str("filename.tar.zip").unwrap();
162 assert_eq!(CompressionFormat::try_from(&path)?, CompressionFormat::Zip);
168 fn tar_gz() -> crate::Result<()> {
169 let extension = Extension::new("folder.tar.gz")?;
174 first_ext: Some(CompressionFormat::Tar),
175 second_ext: CompressionFormat::Gzip
183 fn tar() -> crate::Result<()> {
184 let path = PathBuf::from_str("pictures.tar").unwrap();
185 assert_eq!(CompressionFormat::try_from(&path)?, CompressionFormat::Tar);
191 fn gz() -> crate::Result<()> {
192 let path = PathBuf::from_str("passwords.tar.gz").unwrap();
193 assert_eq!(CompressionFormat::try_from(&path)?, CompressionFormat::Gzip);
199 fn lzma() -> crate::Result<()> {
200 let path = PathBuf::from_str("mygame.tar.lzma").unwrap();
201 assert_eq!(CompressionFormat::try_from(&path)?, CompressionFormat::Lzma);
207 fn bz() -> crate::Result<()> {
208 let path = PathBuf::from_str("songs.tar.bz").unwrap();
209 assert_eq!(CompressionFormat::try_from(&path)?, CompressionFormat::Bzip);