this repo has no description
0
fork

Configure Feed

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

at 52ec9ed3a28388caee2e1d877b9b3eaf727655b6 131 lines 4.7 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 zip { 10 use super::*; 11 12 mod roundtrip { 13 use super::*; 14 15 /// Zip roundtrip with a single file 16 /// 17 /// ``` bash 18 /// cmprss zip test.txt archive.zip 19 /// cmprss zip --extract archive.zip . 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.zip"); 26 archive.assert(predicate::path::missing()); 27 28 let mut compress = Command::cargo_bin("cmprss")?; 29 compress.arg("zip").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("zip") 36 .arg("--extract") 37 .arg(archive.path()) 38 .arg(working_dir.path()); 39 extract.assert().success(); 40 41 // Assert the files are identical 42 assert_files_equal(file.path(), &working_dir.child("test.txt")); 43 44 Ok(()) 45 } 46 47 /// Zip roundtrip with multiple files 48 /// 49 /// ``` bash 50 /// cmprss zip test.txt test2.txt archive.zip 51 /// cmprss zip --extract archive.zip . 52 /// ``` 53 #[test] 54 fn explicit_two() -> Result<(), Box<dyn std::error::Error>> { 55 let file = create_test_file("test.txt", "garbage data for testing")?; 56 let file2 = create_test_file("test2.txt", "more garbage data for testing")?; 57 let working_dir = create_working_dir()?; 58 let archive = working_dir.child("archive.zip"); 59 archive.assert(predicate::path::missing()); 60 61 let mut compress = Command::cargo_bin("cmprss")?; 62 compress 63 .arg("zip") 64 .arg(file.path()) 65 .arg(file2.path()) 66 .arg(archive.path()); 67 compress.assert().success(); 68 archive.assert(predicate::path::is_file()); 69 70 let mut extract = Command::cargo_bin("cmprss")?; 71 extract 72 .arg("zip") 73 .arg("--extract") 74 .arg(archive.path()) 75 .arg(working_dir.path()); 76 extract.assert().success(); 77 78 // Assert the files are identical 79 assert_files_equal(file.path(), &working_dir.child("test.txt")); 80 assert_files_equal(file2.path(), &working_dir.child("test2.txt")); 81 82 Ok(()) 83 } 84 85 /// Zip roundtrip with a directory 86 /// 87 /// ``` bash 88 /// cmprss zip directory archive.zip 89 /// cmprss zip --extract archive.zip output_dir 90 /// ``` 91 #[test] 92 fn directory() -> Result<(), Box<dyn std::error::Error>> { 93 let dir = create_working_dir()?; 94 let file = dir.child("test.txt"); 95 file.write_str("garbage data for testing")?; 96 let file2 = dir.child("test2.txt"); 97 file2.write_str("more garbage data for testing")?; 98 99 let working_dir = create_working_dir()?; 100 let archive = working_dir.child("archive.zip"); 101 archive.assert(predicate::path::missing()); 102 103 let mut compress = Command::cargo_bin("cmprss")?; 104 compress.arg("zip").arg(dir.path()).arg(archive.path()); 105 compress.assert().success(); 106 archive.assert(predicate::path::is_file()); 107 108 let extract_dir = working_dir.child("output"); 109 std::fs::create_dir_all(extract_dir.path())?; 110 111 let mut extract = Command::cargo_bin("cmprss")?; 112 extract 113 .arg("zip") 114 .arg("--extract") 115 .arg(archive.path()) 116 .arg(extract_dir.path()); 117 extract.assert().success(); 118 119 // Assert the files are identical 120 // Since the archive stores the entire directory, the extracted file is contained in the directory 121 let dir_name: PathBuf = dir.path().file_name().unwrap().into(); 122 assert_files_equal(file.path(), &extract_dir.child(&dir_name).child("test.txt")); 123 assert_files_equal( 124 file2.path(), 125 &extract_dir.child(&dir_name).child("test2.txt"), 126 ); 127 128 Ok(()) 129 } 130 } 131}