this repo has no description
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}