this repo has no description
1use assert_cmd::prelude::*;
2use assert_fs::prelude::*;
3use predicates::prelude::*;
4use std::{
5 fs::File,
6 process::{Command, Stdio},
7};
8
9mod common;
10use common::*;
11
12mod bzip2 {
13 use super::*;
14
15 mod roundtrip {
16 use super::*;
17
18 /// Bzip2 roundtrip using files
19 /// Compressing: input = test.txt, output = test.txt.bz2
20 /// Extracting: input = test.txt.bz2, output = test.txt
21 ///
22 /// ``` bash
23 /// cmprss bzip2 test.txt test.txt.bz2
24 /// cmprss bzip2 --extract --ignore-pipes test.txt.bz2
25 /// ```
26 #[test]
27 fn explicit() -> Result<(), Box<dyn std::error::Error>> {
28 let file = create_test_file("test.txt", "garbage data for testing")?;
29 let working_dir = create_working_dir()?;
30 let archive = working_dir.child("test.txt.bz2");
31 archive.assert(predicate::path::missing());
32
33 let mut compress = Command::cargo_bin("cmprss")?;
34 compress
35 .current_dir(&working_dir)
36 .arg("bzip2")
37 .arg(file.path())
38 .arg(archive.path());
39 compress.assert().success();
40 archive.assert(predicate::path::is_file());
41
42 let mut extract = Command::cargo_bin("cmprss")?;
43 extract
44 .current_dir(&working_dir)
45 .arg("bzip2")
46 .arg("--ignore-pipes")
47 .arg("--extract")
48 .arg(archive.path());
49 extract.assert().success();
50
51 // Assert the files are identical
52 assert_files_equal(file.path(), &working_dir.child("test.txt"));
53
54 Ok(())
55 }
56
57 /// Bzip2 roundtrip using stdin
58 /// Compressing: input = stdin, output = test.txt.bz2
59 /// Extracting: input = stdin(test.txt.bz2), output = test.txt
60 ///
61 /// ``` bash
62 /// cat test.txt | cmprss bzip2 test.txt.bz2
63 /// cat test.txt.bz2 | cmprss bzip2 --extract out.txt
64 /// ```
65 #[test]
66 fn stdin() -> Result<(), Box<dyn std::error::Error>> {
67 let file = create_test_file("test.txt", "garbage data for testing")?;
68 let working_dir = create_working_dir()?;
69 let archive = working_dir.child("test.txt.bz2");
70 archive.assert(predicate::path::missing());
71
72 // Pipe file to stdin
73 let mut compress = Command::cargo_bin("cmprss")?;
74 compress
75 .current_dir(&working_dir)
76 .arg("bzip2")
77 .arg("test.txt.bz2")
78 .stdin(Stdio::from(File::open(file.path())?));
79 compress.assert().success();
80 archive.assert(predicate::path::is_file());
81
82 let mut extract = Command::cargo_bin("cmprss")?;
83 extract
84 .current_dir(&working_dir)
85 .arg("bzip2")
86 .stdin(Stdio::from(File::open(archive.path())?))
87 .arg("--extract")
88 .arg("out.txt");
89 extract.assert().success();
90
91 // Assert the files are identical
92 assert_files_equal(file.path(), &working_dir.child("out.txt"));
93
94 Ok(())
95 }
96
97 /// Bzip2 roundtrip using stdout
98 /// Compressing: input = test.txt, output = stdout
99 /// Extracting: input = test.txt.bz2, output = stdout
100 ///
101 /// ``` bash
102 /// cmprss bzip2 test.txt > test.txt.bz2
103 /// cmprss bzip2 --extract test.txt.bz2 > out.txt
104 /// ```
105 #[test]
106 fn stdout() -> Result<(), Box<dyn std::error::Error>> {
107 let file = create_test_file("test.txt", "garbage data for testing")?;
108 let working_dir = create_working_dir()?;
109 let archive = working_dir.child("test.txt.bz2");
110 archive.assert(predicate::path::missing());
111
112 // Compress file to stdout
113 let mut compress = Command::cargo_bin("cmprss")?;
114 compress
115 .current_dir(&working_dir)
116 .arg("bzip2")
117 .arg(file.path())
118 .stdout(Stdio::from(File::create(archive.path())?));
119 compress.assert().success();
120 archive.assert(predicate::path::is_file());
121
122 // Extract file to stdout
123 let mut extract = Command::cargo_bin("cmprss")?;
124 extract
125 .current_dir(&working_dir)
126 .arg("bzip2")
127 .arg("--ignore-stdin")
128 .arg("--extract")
129 .arg(archive.path())
130 .arg("out.txt");
131 extract.assert().success();
132
133 // Assert the files are identical
134 assert_files_equal(file.path(), &working_dir.child("out.txt"));
135
136 Ok(())
137 }
138 }
139}