this repo has no description
0
fork

Configure Feed

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

at main 170 lines 5.9 kB view raw
1use assert_cmd::prelude::*; 2use assert_fs::prelude::*; 3use predicates::prelude::*; 4use std::{path::PathBuf, process::Command}; 5 6mod common; 7use common::*; 8 9mod sevenz { 10 use super::*; 11 12 mod roundtrip { 13 use super::*; 14 15 /// 7z roundtrip with a single file 16 /// 17 /// ``` bash 18 /// cmprss 7z test.txt archive.7z 19 /// cmprss 7z --extract archive.7z . 20 /// ``` 21 #[test] 22 fn explicit() -> Result<(), Box<dyn std::error::Error>> { 23 let file = create_test_file("test.txt", "garbage data for testing")?; 24 let working_dir = create_working_dir()?; 25 let archive = working_dir.child("archive.7z"); 26 archive.assert(predicate::path::missing()); 27 28 let mut compress = Command::cargo_bin("cmprss")?; 29 compress.arg("7z").arg(file.path()).arg(archive.path()); 30 compress.assert().success(); 31 archive.assert(predicate::path::is_file()); 32 33 let mut extract = Command::cargo_bin("cmprss")?; 34 extract 35 .arg("7z") 36 .arg("--extract") 37 .arg(archive.path()) 38 .arg(working_dir.path()); 39 extract.assert().success(); 40 41 assert_files_equal(file.path(), &working_dir.child("test.txt")); 42 43 Ok(()) 44 } 45 46 /// 7z roundtrip with multiple files 47 /// 48 /// ``` bash 49 /// cmprss 7z test.txt test2.txt archive.7z 50 /// cmprss 7z --extract archive.7z . 51 /// ``` 52 #[test] 53 fn explicit_two() -> Result<(), Box<dyn std::error::Error>> { 54 let file = create_test_file("test.txt", "garbage data for testing")?; 55 let file2 = create_test_file("test2.txt", "more garbage data for testing")?; 56 let working_dir = create_working_dir()?; 57 let archive = working_dir.child("archive.7z"); 58 archive.assert(predicate::path::missing()); 59 60 let mut compress = Command::cargo_bin("cmprss")?; 61 compress 62 .arg("7z") 63 .arg(file.path()) 64 .arg(file2.path()) 65 .arg(archive.path()); 66 compress.assert().success(); 67 archive.assert(predicate::path::is_file()); 68 69 let mut extract = Command::cargo_bin("cmprss")?; 70 extract 71 .arg("7z") 72 .arg("--extract") 73 .arg(archive.path()) 74 .arg(working_dir.path()); 75 extract.assert().success(); 76 77 assert_files_equal(file.path(), &working_dir.child("test.txt")); 78 assert_files_equal(file2.path(), &working_dir.child("test2.txt")); 79 80 Ok(()) 81 } 82 83 /// 7z roundtrip with a directory 84 /// 85 /// ``` bash 86 /// cmprss 7z directory archive.7z 87 /// cmprss 7z --extract archive.7z output_dir 88 /// ``` 89 #[test] 90 fn directory() -> Result<(), Box<dyn std::error::Error>> { 91 let dir = create_working_dir()?; 92 let file = dir.child("test.txt"); 93 file.write_str("garbage data for testing")?; 94 let file2 = dir.child("test2.txt"); 95 file2.write_str("more garbage data for testing")?; 96 97 let working_dir = create_working_dir()?; 98 let archive = working_dir.child("archive.7z"); 99 archive.assert(predicate::path::missing()); 100 101 let mut compress = Command::cargo_bin("cmprss")?; 102 compress.arg("7z").arg(dir.path()).arg(archive.path()); 103 compress.assert().success(); 104 archive.assert(predicate::path::is_file()); 105 106 let extract_dir = working_dir.child("output"); 107 std::fs::create_dir_all(extract_dir.path())?; 108 109 let mut extract = Command::cargo_bin("cmprss")?; 110 extract 111 .arg("7z") 112 .arg("--extract") 113 .arg(archive.path()) 114 .arg(extract_dir.path()); 115 extract.assert().success(); 116 117 let dir_name: PathBuf = dir.path().file_name().unwrap().into(); 118 assert_files_equal(file.path(), &extract_dir.child(&dir_name).child("test.txt")); 119 assert_files_equal( 120 file2.path(), 121 &extract_dir.child(&dir_name).child("test2.txt"), 122 ); 123 124 Ok(()) 125 } 126 127 /// 7z listing the contents of an archive 128 /// 129 /// ``` bash 130 /// cmprss 7z --list archive.7z 131 /// ``` 132 #[test] 133 fn list() -> Result<(), Box<dyn std::error::Error>> { 134 let file = create_test_file("listed.txt", "entry data")?; 135 let working_dir = create_working_dir()?; 136 let archive = working_dir.child("archive.7z"); 137 138 let mut compress = Command::cargo_bin("cmprss")?; 139 compress.arg("7z").arg(file.path()).arg(archive.path()); 140 compress.assert().success(); 141 142 let mut list = Command::cargo_bin("cmprss")?; 143 list.arg("7z").arg("--list").arg(archive.path()); 144 list.assert() 145 .success() 146 .stdout(predicate::str::contains("listed.txt")); 147 148 Ok(()) 149 } 150 151 /// 7z via the `sevenz` alias 152 /// 153 /// ``` bash 154 /// cmprss sevenz test.txt archive.7z 155 /// ``` 156 #[test] 157 fn alias() -> Result<(), Box<dyn std::error::Error>> { 158 let file = create_test_file("test.txt", "garbage data for the alias test")?; 159 let working_dir = create_working_dir()?; 160 let archive = working_dir.child("archive.7z"); 161 162 let mut compress = Command::cargo_bin("cmprss")?; 163 compress.arg("sevenz").arg(file.path()).arg(archive.path()); 164 compress.assert().success(); 165 archive.assert(predicate::path::is_file()); 166 167 Ok(()) 168 } 169 } 170}