this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 106 lines 3.7 kB view raw
1use assert_cmd::prelude::*; 2use assert_fs::prelude::*; 3use predicates::prelude::*; 4use std::process::Command; 5 6mod common; 7use common::*; 8 9mod list { 10 use super::*; 11 12 /// `cmprss --list archive.tar` prints every entry's path, one per line. 13 #[test] 14 fn tar_archive() -> Result<(), Box<dyn std::error::Error>> { 15 let working_dir = create_working_dir()?; 16 let a = working_dir.child("alpha.txt"); 17 a.write_str("alpha")?; 18 let b = working_dir.child("beta.txt"); 19 b.write_str("beta")?; 20 21 let mut pack = Command::cargo_bin("cmprss")?; 22 pack.current_dir(&working_dir) 23 .args(["tar", "alpha.txt", "beta.txt", "out.tar"]); 24 pack.assert().success(); 25 26 let mut list = Command::cargo_bin("cmprss")?; 27 list.current_dir(&working_dir).args(["--list", "out.tar"]); 28 list.assert() 29 .success() 30 .stdout(predicate::str::contains("alpha.txt")) 31 .stdout(predicate::str::contains("beta.txt")); 32 Ok(()) 33 } 34 35 /// `cmprss --list archive.zip` enumerates file names via ZipArchive. 36 #[test] 37 fn zip_archive() -> Result<(), Box<dyn std::error::Error>> { 38 let working_dir = create_working_dir()?; 39 let a = working_dir.child("first.txt"); 40 a.write_str("first")?; 41 let b = working_dir.child("second.txt"); 42 b.write_str("second")?; 43 44 let mut pack = Command::cargo_bin("cmprss")?; 45 pack.current_dir(&working_dir) 46 .args(["zip", "first.txt", "second.txt", "out.zip"]); 47 pack.assert().success(); 48 49 let mut list = Command::cargo_bin("cmprss")?; 50 list.current_dir(&working_dir).args(["--list", "out.zip"]); 51 list.assert() 52 .success() 53 .stdout(predicate::str::contains("first.txt")) 54 .stdout(predicate::str::contains("second.txt")); 55 Ok(()) 56 } 57 58 /// Pipelines whose innermost layer is a container format list through 59 /// the in-memory pipe plumbing shared with extract. 60 #[test] 61 fn tar_gz_archive() -> Result<(), Box<dyn std::error::Error>> { 62 let working_dir = create_working_dir()?; 63 let a = working_dir.child("inside.txt"); 64 a.write_str("inside")?; 65 66 let mut pack = Command::cargo_bin("cmprss")?; 67 pack.current_dir(&working_dir) 68 .args(["tar", "inside.txt", "out.tar"]); 69 pack.assert().success(); 70 71 let mut gz = Command::cargo_bin("cmprss")?; 72 gz.current_dir(&working_dir) 73 .args(["gzip", "out.tar", "out.tar.gz"]); 74 gz.assert().success(); 75 76 let mut list = Command::cargo_bin("cmprss")?; 77 list.current_dir(&working_dir) 78 .args(["--list", "out.tar.gz"]); 79 list.assert() 80 .success() 81 .stdout(predicate::str::contains("inside.txt")); 82 Ok(()) 83 } 84 85 /// Stream codecs (gzip, xz, …) don't carry multiple entries — listing 86 /// must fail loudly rather than silently doing nothing. 87 #[test] 88 fn gzip_stream_rejects_list() -> Result<(), Box<dyn std::error::Error>> { 89 let working_dir = create_working_dir()?; 90 let a = working_dir.child("doc.txt"); 91 a.write_str("doc")?; 92 93 let mut pack = Command::cargo_bin("cmprss")?; 94 pack.current_dir(&working_dir) 95 .args(["gzip", "doc.txt", "doc.txt.gz"]); 96 pack.assert().success(); 97 98 let mut list = Command::cargo_bin("cmprss")?; 99 list.current_dir(&working_dir) 100 .args(["--list", "doc.txt.gz"]); 101 list.assert() 102 .failure() 103 .stderr(predicate::str::contains("cannot be listed")); 104 Ok(()) 105 } 106}