Files
fluxer/fluxer_media_proxy/src/asset_size.rs
T

61 lines
2.2 KiB
Rust

// SPDX-License-Identifier: AGPL-3.0-or-later
pub use crate::constants::{clamp_size, parse_image_size};
#[cfg(test)]
mod tests {
use super::*;
use crate::constants::{AssetKind, DEFAULT_IMAGE_SIZE, IMAGE_SIZES};
#[test]
fn unparsable_sizes_fall_back_to_the_default() {
assert_eq!(DEFAULT_IMAGE_SIZE, parse_image_size(None));
assert_eq!(DEFAULT_IMAGE_SIZE, parse_image_size(Some("")));
assert_eq!(DEFAULT_IMAGE_SIZE, parse_image_size(Some("-1")));
assert_eq!(DEFAULT_IMAGE_SIZE, parse_image_size(Some("99999999999")));
assert_eq!(DEFAULT_IMAGE_SIZE, parse_image_size(Some("not-a-number")));
}
#[test]
fn parsable_sizes_snap_up_to_the_next_rung() {
assert_eq!(16, parse_image_size(Some("0")));
assert_eq!(640, parse_image_size(Some("640")));
assert_eq!(1024, parse_image_size(Some("641")));
assert_eq!(1024, parse_image_size(Some("777")));
assert_eq!(1024, parse_image_size(Some("1000")));
assert_eq!(16384, parse_image_size(Some("99999")));
for size in IMAGE_SIZES {
assert_eq!(*size, parse_image_size(Some(&size.to_string())));
}
assert_eq!(16384, parse_image_size(Some("16384")));
}
#[test]
fn an_off_ladder_size_never_serves_fewer_pixels_than_requested() {
for requested in 1..=4096u32 {
let served = parse_image_size(Some(&requested.to_string()));
assert!(
served >= requested,
"size={requested} served {served}, a silent downscale"
);
}
}
#[test]
fn snapping_is_idempotent() {
for raw in [0u32, 1, 17, 641, 777, 1000, 4097, 99999] {
let once = parse_image_size(Some(&raw.to_string()));
let twice = parse_image_size(Some(&once.to_string()));
assert_eq!(once, twice, "size={raw} did not settle");
}
}
#[test]
fn clamping_respects_kind_bounds() {
assert_eq!(128, clamp_size(1, AssetKind::Avatar));
assert_eq!(1024, clamp_size(4096, AssetKind::Avatar));
assert_eq!(480, clamp_size(16, AssetKind::Banner));
assert_eq!(512, clamp_size(4096, AssetKind::Emoji));
}
}