this repo has no description
1use assert_cmd::prelude::*;
2use assert_fs::prelude::*;
3use predicates::prelude::*;
4use std::process::Command;
5
6mod common;
7use common::*;
8
9mod tar {
10 use super::*;
11
12 mod roundtrip {
13 use super::*;
14
15 /// Tar roundtrip with a single file
16 ///
17 /// ``` bash
18 /// cmprss tar test.txt archive.tar
19 /// cmprss tar --extract archive.tar .
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.tar");
26 archive.assert(predicate::path::missing());
27
28 let mut compress = Command::cargo_bin("cmprss")?;
29 compress.arg("tar").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("tar")
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 /// Tar roundtrip with multiple files
48 ///
49 /// ``` bash
50 /// cmprss tar test.txt test2.txt archive.tar
51 /// cmprss tar --extract archive.tar .
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.tar");
59 archive.assert(predicate::path::missing());
60
61 let mut compress = Command::cargo_bin("cmprss")?;
62 compress
63 .arg("tar")
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("tar")
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 /// Tar roundtrip with a single file inferring output filename
86 /// Compressing: output = './test.txt.tar'
87 /// Extracting: output = '.'
88 ///
89 /// ``` bash
90 /// cmprss tar test.txt
91 /// cmprss tar --extract test.txt.tar
92 /// ```
93 #[test]
94 fn implicit() -> Result<(), Box<dyn std::error::Error>> {
95 let file = create_test_file("test.txt", "garbage data for testing")?;
96 let working_dir = create_persistent_working_dir()?;
97 let archive = working_dir.child("test.txt.tar");
98 archive.assert(predicate::path::missing());
99
100 let mut compress = Command::cargo_bin("cmprss")?;
101 compress
102 .current_dir(&working_dir)
103 .arg("tar")
104 .arg("--ignore-pipes")
105 .arg(file.path());
106 compress.assert().success();
107 archive.assert(predicate::path::is_file());
108
109 let mut extract = Command::cargo_bin("cmprss")?;
110 extract
111 .current_dir(&working_dir)
112 .arg("tar")
113 .arg("--ignore-pipes")
114 .arg("--extract")
115 .arg(archive.path());
116 extract.assert().success();
117
118 // Assert the files are identical
119 assert_files_equal(file.path(), &working_dir.child("test.txt"));
120
121 Ok(())
122 }
123
124 /// Tar roundtrip with multiple files inferring output
125 /// Uses the first file's name to generate the output filename
126 /// Compressing: output = './test.txt.tar'
127 /// Extracting: output = '.'
128 ///
129 /// ``` bash
130 /// cmprss tar test.txt test2.txt
131 /// cmprss tar test.txt.tar
132 /// ```
133 #[test]
134 fn implicit_two() -> Result<(), Box<dyn std::error::Error>> {
135 let file = create_test_file("test.txt", "garbage data for testing")?;
136 let file2 = create_test_file("test2.txt", "more garbage data for testing")?;
137 let working_dir = create_persistent_working_dir()?;
138 let archive = working_dir.child("test.txt.tar");
139 archive.assert(predicate::path::missing());
140
141 let mut compress = Command::cargo_bin("cmprss")?;
142 compress
143 .current_dir(&working_dir)
144 .arg("tar")
145 .arg("--ignore-pipes")
146 .arg(file.path())
147 .arg(file2.path());
148 compress.assert().success();
149 archive.assert(predicate::path::is_file());
150
151 let mut extract = Command::cargo_bin("cmprss")?;
152 extract
153 .current_dir(&working_dir)
154 .arg("--ignore-pipes")
155 .arg(archive.path());
156 extract.assert().success();
157
158 // Assert the files are identical
159 assert_files_equal(file.path(), &working_dir.child("test.txt"));
160 assert_files_equal(file2.path(), &working_dir.child("test2.txt"));
161
162 Ok(())
163 }
164 }
165}