mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-17 13:05:32 +09:00
61 lines
2.2 KiB
Rust
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));
|
|
}
|
|
}
|