#![deny(clippy::all)]
use std::process::Child;
#[macro_use]
pub mod common;
#[cfg(test)]
fn command(input: &str, output: &str, args: &str) -> Child {
common::SicTestCommandBuilder::new()
.input_from_resources(input)
.output_in_target(output)
.with_args(args.split(' '))
.spawn_child()
}
#[cfg(test)]
mod blur {
use crate::common::*;
#[test]
fn blur_1() {
let mut process = SicTestCommandBuilder::new()
.input_from_resources(DEFAULT_IN)
.output_in_target("img_op_arg.png")
.with_args(["--blur", "1"])
.spawn_child();
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
#[test]
fn blur_1_dot_1() {
let mut process = SicTestCommandBuilder::new()
.input_from_resources(DEFAULT_IN)
.output_in_target("img_op_arg.png")
.with_args(["--blur", "1.1"])
.spawn_child();
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
#[test]
fn blur_neg_1_dot_1() {
let mut process = SicTestCommandBuilder::new()
.input_from_resources(DEFAULT_IN)
.output_in_target("img_op_arg.png")
.with_args(["--blur", "-1.1"])
.spawn_child();
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
}
#[cfg(test)]
mod crop {
use super::*;
use crate::common::*;
#[test]
fn crop_simple() {
let mut process = SicTestCommandBuilder::new()
.input_from_resources(DEFAULT_IN)
.output_in_target("img_op_arg.png")
.with_args(["--crop", "0", "0", "1", "1"])
.spawn_child();
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
#[test]
fn dont_allow_separated_values() {
let mut process = command(DEFAULT_IN, "cio_crop2.png", "--crop 0 0 --crop 1 1");
let result = process.wait();
assert!(result.is_ok());
assert_not!(result.unwrap().success());
}
#[test]
fn incorrect_amount_of_values() {
let mut process = command(DEFAULT_IN, "cio_crop3.png", "--crop 0 0 1");
let result = process.wait();
assert!(result.is_ok());
assert_not!(result.unwrap().success());
}
#[test]
fn crop_multiple_ok() {
let mut process = command(DEFAULT_IN, "cio_crop4.png", "--crop 2 2 3 3 --crop 0 0 1 1");
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
#[test]
fn crop_multiple_one_empty() {
let mut process = command(
DEFAULT_IN,
"cio_crop5.png",
"--crop --crop 2 2 3 3 --crop 0 0 1 1",
);
let result = process.wait();
assert!(result.is_ok());
assert_not!(result.unwrap().success());
}
#[test]
fn crop_empty() {
let mut process = command(DEFAULT_IN, "cio_crop6.png", "--crop");
let result = process.wait();
assert!(result.is_ok());
assert_not!(result.unwrap().success());
}
#[test]
fn crop_too_few() {
let mut process = command(DEFAULT_IN, "cio_crop7.png", "--crop 0 0 2");
let result = process.wait();
assert!(result.is_ok());
assert_not!(result.unwrap().success());
}
#[test]
fn crop_too_many() {
let mut process = command(DEFAULT_IN, "cio_crop8.png", "--crop 0 0 2 2 2");
let result = process.wait();
assert!(result.is_ok());
assert_not!(result.unwrap().success());
}
#[test]
fn crop_invalid_selection() {
let mut process = command(DEFAULT_IN, "cio_crop9.png", "--crop 1 1 1 1");
let result = process.wait();
assert!(result.is_ok());
assert_not!(result.unwrap().success());
}
#[test]
fn crop_out_of_bounds_selection() {
let mut process = command(DEFAULT_IN, "cio_crop9.png", "--crop 1 1 10 10");
let result = process.wait();
assert!(result.is_ok());
assert_not!(result.unwrap().success());
}
}
#[cfg(test)]
mod diff {
use super::*;
use crate::common::*;
#[test]
fn diff() {
let mut process = command(
"2x3_wrabaa.png",
"cio_diff_1.png",
&[
"--diff",
setup_input_path("3x2_wbaaba.png").to_str().unwrap(),
]
.join(" "),
);
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
#[test]
fn diff_invalid_path() {
let mut process = command(
"2x3_wrabaa.png",
"cio_diff_2.png",
&["--diff", setup_input_path("0:1.png").to_str().unwrap()].join(" "),
);
let result = process.wait();
assert!(result.is_ok());
assert_not!(result.unwrap().success());
}
}
#[cfg(test)]
mod filter3x3 {
use super::*;
use crate::common::*;
#[test]
fn filter3x3() {
let mut process = command(
DEFAULT_IN,
"cio_f3x3_1.png",
"--filter3x3 1 2 3 4 5 -6 -7 -8 -9.555",
);
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
#[test]
fn filter3x3_emboss() {
let mut process = command(
DEFAULT_IN,
"cio_f3x3_emboss.png",
"--filter3x3 -1 -1 0 -1 1 1 0 1 1",
);
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
#[test]
fn filter3x3_not() {
let mut process = command(
DEFAULT_IN,
"cio_f3x3_2.png",
"--filter3x3 1 2 3 4 p -6 -7 -8 -9.555",
);
let result = process.wait();
assert!(result.is_ok());
assert_not!(result.unwrap().success());
}
}
#[cfg(test)]
mod fliph {
use super::*;
use crate::common::*;
#[test]
fn fliph() {
let mut process = command(DEFAULT_IN, "cio_fliph.png", "--flip-horizontal");
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
}
#[cfg(test)]
mod flipv {
use super::*;
use crate::common::*;
#[test]
fn flipv() {
let mut process = command(DEFAULT_IN, "cio_flipv.png", "--flip-vertical");
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
}
#[cfg(test)]
mod grayscale {
use super::*;
use crate::common::*;
#[test]
fn grayscale() {
let mut process = command(DEFAULT_IN, "cio_gs.png", "--grayscale");
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
}
#[cfg(test)]
mod hue_rotate {
use super::*;
use crate::common::*;
#[test]
fn hue_rotate() {
let mut process = command(DEFAULT_IN, "cio_hr.png", "--hue-rotate -90");
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
#[test]
fn hue_rotate_not() {
let mut process = command(DEFAULT_IN, "cio_hr2.png", "--hue-rotate -p");
let result = process.wait();
assert!(result.is_ok());
assert_not!(result.unwrap().success());
}
}
#[cfg(test)]
mod invert {
use super::*;
use crate::common::*;
#[test]
fn invert() {
let mut process = command(DEFAULT_IN, "cio_invert.png", "--invert");
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
}
#[cfg(test)]
mod overlay {
use super::*;
use crate::common::*;
#[test]
fn overlay() {
let mut process = command(
DEFAULT_IN,
"cio_overlay.png",
&[
"--overlay",
setup_input_path("3x2_wbaaba.png").to_str().unwrap(),
"0",
"0",
]
.join(" "),
);
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
}
#[cfg(test)]
mod resize {
use super::*;
use crate::common::*;
#[test]
fn resize() {
let mut process = command(DEFAULT_IN, "cio_resize1.png", "--resize 10 10");
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
#[test]
fn resize_not() {
let mut process = command(DEFAULT_IN, "cio_resize2.png", "--resize 10 p");
let result = process.wait();
assert!(result.is_ok());
assert_not!(result.unwrap().success());
}
}
#[cfg(test)]
mod rotate90 {
use super::*;
use crate::common::*;
#[test]
fn rotate90() {
let mut process = command(DEFAULT_IN, "cio_rot90.png", "--rotate90");
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
}
#[cfg(test)]
mod rotate180 {
use super::*;
use crate::common::*;
#[test]
fn rotate180() {
let mut process = command(DEFAULT_IN, "cio_rot180.png", "--rotate180");
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
}
#[cfg(test)]
mod rotate270 {
use super::*;
use crate::common::*;
#[test]
fn rotate270() {
let mut process = command(DEFAULT_IN, "cio_rot270.png", "--rotate270");
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
}
#[cfg(test)]
mod unsharpen {
use super::*;
use crate::common::*;
#[test]
fn unsharpen() {
let mut process = command(DEFAULT_IN, "cio_resize1.png", "--unsharpen 1.5 1");
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
#[test]
fn unsharpen_not() {
let mut process = command(DEFAULT_IN, "cio_resize2.png", "--unsharpen 1.5 1.0");
let result = process.wait();
assert!(result.is_ok());
assert_not!(result.unwrap().success());
}
}
#[cfg(test)]
mod mixed {
use super::*;
use crate::common::*;
#[test]
fn all_regular_operations() {
let mut process = command(
DEFAULT_IN,
"img_op_arg_mixed_all.png",
"--blur 1 \
--brighten 2 \
--contrast 3 \
--crop 0 0 2 2 \
--filter3x3 0 1 2 3 4 5 6 7 8 \
--flip-horizontal \
--flip-vertical \
--grayscale \
--hue-rotate -90 \
--invert \
--resize 10 10 \
--rotate90 \
--rotate180 \
--rotate270 \
--unsharpen 1.5 1",
);
let result = process.wait();
assert!(result.is_ok());
assert!(result.unwrap().success());
}
}