libcaesium/tests/compress_to_size.rs

102 lines
2.9 KiB
Rust
Raw Normal View History

2024-01-23 18:51:39 +01:00
use crate::cleanup::remove_compressed_test_file;
2023-05-01 13:55:39 +02:00
use std::fs::File;
use std::sync::Once;
2024-10-10 20:02:38 +02:00
use caesium::parameters::CSParameters;
2023-05-01 13:55:39 +02:00
mod cleanup;
static INIT: Once = Once::new();
pub fn initialize(file: &str) {
INIT.call_once(|| {
remove_compressed_test_file(file);
});
}
#[test]
fn compress_to_1_byte() {
let output = "tests/samples/output/compressed_1b.jpg";
initialize(output);
2024-10-10 20:02:38 +02:00
let mut pars = CSParameters::new();
2023-05-01 13:55:39 +02:00
caesium::compress_to_size(
String::from("tests/samples/uncompressed_드림캐쳐.jpg"),
String::from(output),
&mut pars,
1,
2024-01-23 18:51:39 +01:00
false,
)
.expect_err("Cannot compress to desired quality");
2023-05-01 13:55:39 +02:00
remove_compressed_test_file(output)
}
#[test]
fn compress_to_1_byte_and_return() {
let output = "tests/samples/output/compressed_1b_return.jpg";
initialize(output);
2024-10-10 20:02:38 +02:00
let mut pars = CSParameters::new();
caesium::compress_to_size(
String::from("tests/samples/uncompressed_드림캐쳐.jpg"),
String::from(output),
&mut pars,
1,
2024-01-23 18:51:39 +01:00
true,
)
.unwrap();
assert!(std::path::Path::new(output).exists());
assert!(File::open(output).unwrap().metadata().unwrap().len() > 1);
let kind = infer::get_from_path(output).unwrap().unwrap();
assert_eq!(kind.mime_type(), "image/jpeg");
remove_compressed_test_file(output)
}
2023-05-01 13:55:39 +02:00
#[test]
fn compress_to_10_mb() {
let output = "tests/samples/output/compressed_10mb.jpg";
let max_output_size = 10_000_000;
2023-05-01 13:55:39 +02:00
initialize(output);
2024-10-10 20:02:38 +02:00
let mut pars = CSParameters::new();
2023-05-01 13:55:39 +02:00
caesium::compress_to_size(
String::from("tests/samples/uncompressed_드림캐쳐.jpg"),
String::from(output),
&mut pars,
max_output_size,
2024-01-23 18:51:39 +01:00
false,
)
.unwrap();
2023-05-01 13:55:39 +02:00
2023-07-07 20:50:49 +02:00
assert_eq!(80, pars.jpeg.quality);
2023-05-01 13:55:39 +02:00
assert!(std::path::Path::new(output).exists());
assert!(File::open(output).unwrap().metadata().unwrap().len() < max_output_size as u64);
2023-05-01 13:55:39 +02:00
let kind = infer::get_from_path(output).unwrap().unwrap();
assert_eq!(kind.mime_type(), "image/jpeg");
remove_compressed_test_file(output)
}
#[test]
fn compress_to_range() {
let output = "tests/samples/output/compressed_range.jpg";
let max_desired_size = 2_000_000;
let mut max_output_size = 500_000;
2023-05-01 13:55:39 +02:00
initialize(output);
while max_output_size < max_desired_size {
2024-10-10 20:02:38 +02:00
let mut pars = CSParameters::new();
2023-05-01 13:55:39 +02:00
caesium::compress_to_size(
String::from("tests/samples/uncompressed_드림캐쳐.jpg"),
String::from(output),
&mut pars,
max_output_size,
2024-01-23 18:51:39 +01:00
false,
)
.unwrap();
2023-05-01 13:55:39 +02:00
assert!(std::path::Path::new(output).exists());
assert!(File::open(output).unwrap().metadata().unwrap().len() < max_output_size as u64);
2023-05-01 13:55:39 +02:00
let kind = infer::get_from_path(output).unwrap().unwrap();
assert_eq!(kind.mime_type(), "image/jpeg");
max_output_size += 100_000;
2023-05-01 13:55:39 +02:00
remove_compressed_test_file(output);
}
}