2020-03-23 03:08:41 +01:00
|
|
|
// ██████╗ █████╗ ███████╗███████╗██╗███╗ ██╗ ██████╗
|
|
|
|
// ██╔══██╗██╔══██╗██╔════╝██╔════╝██║████╗ ██║██╔════╝
|
|
|
|
// ██████╔╝███████║███████╗███████╗██║██╔██╗ ██║██║ ███╗
|
|
|
|
// ██╔═══╝ ██╔══██║╚════██║╚════██║██║██║╚██╗██║██║ ██║
|
|
|
|
// ██║ ██║ ██║███████║███████║██║██║ ╚████║╚██████╔╝
|
|
|
|
// ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝╚═╝ ╚═══╝ ╚═════╝
|
|
|
|
|
2020-05-23 09:49:04 +02:00
|
|
|
#[cfg(test)]
|
|
|
|
mod passing {
|
|
|
|
use assert_cmd::prelude::*;
|
|
|
|
use std::env;
|
|
|
|
use std::io::Write;
|
2021-01-01 01:38:31 +01:00
|
|
|
use std::process::{Command, Stdio};
|
2020-05-23 09:49:04 +02:00
|
|
|
use tempfile::NamedTempFile;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn print_version() -> Result<(), Box<dyn std::error::Error>> {
|
|
|
|
let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME"))?;
|
|
|
|
let out = cmd.arg("-V").output().unwrap();
|
|
|
|
|
|
|
|
// STDOUT should contain program name and version
|
|
|
|
assert_eq!(
|
|
|
|
std::str::from_utf8(&out.stdout).unwrap(),
|
|
|
|
format!("{} {}\n", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"))
|
|
|
|
);
|
|
|
|
|
|
|
|
// STDERR should be empty
|
|
|
|
assert_eq!(std::str::from_utf8(&out.stderr).unwrap(), "");
|
|
|
|
|
|
|
|
// The exit code should be 0
|
|
|
|
out.assert().code(0);
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2021-01-01 01:38:31 +01:00
|
|
|
fn stdin_target_input() -> Result<(), Box<dyn std::error::Error>> {
|
|
|
|
let mut echo = Command::new("echo")
|
|
|
|
.arg("Hello from STDIN")
|
|
|
|
.stdout(Stdio::piped())
|
|
|
|
.spawn()
|
2020-05-23 09:49:04 +02:00
|
|
|
.unwrap();
|
2021-01-01 01:38:31 +01:00
|
|
|
let echo_out = echo.stdout.take().unwrap();
|
|
|
|
echo.wait().unwrap();
|
2020-05-23 09:49:04 +02:00
|
|
|
|
|
|
|
let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME"))?;
|
2021-01-01 01:38:31 +01:00
|
|
|
cmd.stdin(echo_out);
|
|
|
|
let out = cmd.arg("-M").arg("-").output().unwrap();
|
2020-05-23 09:49:04 +02:00
|
|
|
|
2021-01-01 01:38:31 +01:00
|
|
|
// STDOUT should contain HTML from STDIN
|
2020-05-23 09:49:04 +02:00
|
|
|
assert_eq!(
|
|
|
|
std::str::from_utf8(&out.stdout).unwrap(),
|
2021-01-01 01:38:31 +01:00
|
|
|
"<html><head></head><body>Hello from STDIN\n</body></html>\n"
|
2020-05-23 09:49:04 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn css_import_string() -> Result<(), Box<dyn std::error::Error>> {
|
|
|
|
let file_url_prefix: &str = if cfg!(windows) { "file:///" } else { "file://" };
|
|
|
|
let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME"))?;
|
|
|
|
let mut file_css = NamedTempFile::new()?;
|
|
|
|
writeln!(file_css, "body{{background-color:#000;color:#fff}}")?;
|
|
|
|
let mut file_html = NamedTempFile::new()?;
|
|
|
|
writeln!(
|
|
|
|
file_html,
|
2020-03-29 09:54:20 +02:00
|
|
|
"\
|
2020-05-23 09:49:04 +02:00
|
|
|
<style>\n\
|
|
|
|
@charset 'UTF-8';\n\
|
|
|
|
\n\
|
|
|
|
@import '{file}{css_path}';\n\
|
|
|
|
\n\
|
|
|
|
@import url({file}{css_path});\n\
|
|
|
|
\n\
|
|
|
|
@import url('{file}{css_path}')\n\
|
|
|
|
</style>\n\
|
|
|
|
",
|
2020-03-29 09:54:20 +02:00
|
|
|
file = file_url_prefix,
|
|
|
|
css_path = str!(file_css.path().to_str().unwrap()).replace("\\", "/"),
|
2020-05-23 09:49:04 +02:00
|
|
|
)?;
|
|
|
|
let out = cmd.arg("-M").arg(file_html.path()).output().unwrap();
|
|
|
|
|
|
|
|
// STDOUT should contain embedded CSS url()'s
|
|
|
|
assert_eq!(
|
|
|
|
std::str::from_utf8(&out.stdout).unwrap(),
|
|
|
|
"<html><head><style>\n@charset 'UTF-8';\n\n@import 'data:text/css;base64,Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7Y29sb3I6I2ZmZn0K';\n\n@import url('data:text/css;base64,Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7Y29sb3I6I2ZmZn0K');\n\n@import url('data:text/css;base64,Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7Y29sb3I6I2ZmZn0K')\n</style>\n\n</head><body></body></html>\n"
|
|
|
|
);
|
|
|
|
|
|
|
|
// STDERR should list temporary files that got retrieved
|
|
|
|
assert_eq!(
|
|
|
|
std::str::from_utf8(&out.stderr).unwrap(),
|
|
|
|
format!(
|
|
|
|
"\
|
2020-06-28 22:11:15 +02:00
|
|
|
{file}{html_path}\n \
|
|
|
|
{file}{css_path}\n \
|
|
|
|
{file}{css_path}\n \
|
2020-05-23 09:49:04 +02:00
|
|
|
{file}{css_path}\n\
|
|
|
|
",
|
|
|
|
file = file_url_prefix,
|
|
|
|
html_path = str!(file_html.path().to_str().unwrap()).replace("\\", "/"),
|
|
|
|
css_path = str!(file_css.path().to_str().unwrap()).replace("\\", "/"),
|
|
|
|
)
|
|
|
|
);
|
2020-03-29 09:54:20 +02:00
|
|
|
|
2020-05-23 09:49:04 +02:00
|
|
|
// The exit code should be 0
|
|
|
|
out.assert().code(0);
|
2020-03-29 09:54:20 +02:00
|
|
|
|
2020-05-23 09:49:04 +02:00
|
|
|
Ok(())
|
|
|
|
}
|
2020-03-29 09:54:20 +02:00
|
|
|
}
|
2021-01-01 01:38:31 +01:00
|
|
|
|
|
|
|
// ███████╗ █████╗ ██╗██╗ ██╗███╗ ██╗ ██████╗
|
|
|
|
// ██╔════╝██╔══██╗██║██║ ██║████╗ ██║██╔════╝
|
|
|
|
// █████╗ ███████║██║██║ ██║██╔██╗ ██║██║ ███╗
|
|
|
|
// ██╔══╝ ██╔══██║██║██║ ██║██║╚██╗██║██║ ██║
|
|
|
|
// ██║ ██║ ██║██║███████╗██║██║ ╚████║╚██████╔╝
|
|
|
|
// ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝╚═╝╚═╝ ╚═══╝ ╚═════╝
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod failing {
|
|
|
|
use assert_cmd::prelude::*;
|
|
|
|
use std::env;
|
|
|
|
use std::process::Command;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn bad_input_empty_target() -> Result<(), Box<dyn std::error::Error>> {
|
|
|
|
let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME"))?;
|
|
|
|
let out = cmd.arg("").output().unwrap();
|
|
|
|
|
|
|
|
// STDOUT should be empty
|
|
|
|
assert_eq!(std::str::from_utf8(&out.stdout).unwrap(), "");
|
|
|
|
|
|
|
|
// STDERR should contain error description
|
|
|
|
assert_eq!(
|
|
|
|
std::str::from_utf8(&out.stderr).unwrap(),
|
|
|
|
"No target specified\n"
|
|
|
|
);
|
|
|
|
|
|
|
|
// The exit code should be 1
|
|
|
|
out.assert().code(1);
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
}
|