use super::super::xyplot::load_fonts;
#[test]
fn test_font_loading() {
let fonts = load_fonts();
let (_, has_main_bitmap) = fonts.main.rasterize('A', 32.0);
assert!(!has_main_bitmap.is_empty(), "Main font should have basic Latin characters");
}
#[test]
fn test_glyph_selection() {
let fonts = load_fonts();
let font = fonts.get_font_for_char('A');
let (_, ascii_bitmap) = font.rasterize('A', 32.0);
assert!(!ascii_bitmap.is_empty(), "Main font should have raster for ASCII");
}
#[test]
fn test_emoji_ranges() {
let fonts = load_fonts();
let test_cases = [
('😀', "Basic emoticon"),
('😎', "Face with sunglasses"),
('🚀', "Rocket"),
('🛸', "Flying saucer"),
('🌈', "Rainbow"),
('🎨', "Artist palette"),
('🤖', "Robot face"),
('🦄', "Unicorn"),
('🩷', "Pink heart"),
('🫂', "People hugging"),
];
for (emoji, description) in test_cases {
let font = fonts.get_font_for_char(emoji);
assert_eq!(std::ptr::from_ref(font), std::ptr::from_ref(fonts.emoji),
"Should use emoji font for {emoji} ({description})");
}
}
#[test]
fn test_mixed_text_glyph_selection() {
let fonts = load_fonts();
let test_str = "Hello 👋 World! 🌍";
for c in test_str.chars() {
let font = fonts.get_font_for_char(c);
match c {
'👋' | '🌍' => {
assert_eq!(std::ptr::from_ref(font), std::ptr::from_ref(fonts.emoji),
"Emoji {c} should use emoji font");
}
_ => {
if !c.is_whitespace() {
assert_eq!(std::ptr::from_ref(font), std::ptr::from_ref(fonts.main),
"Character {c} should use main font");
let (_, bitmap) = font.rasterize(c, 32.0);
assert!(!bitmap.is_empty(), "Character {c} should have bitmap");
}
}
}
}
}
#[test]
fn test_fallback_behavior() {
let fonts = load_fonts();
let fallback_chars = [
'#', '©', '®', '™', ];
for &c in &fallback_chars {
let font = fonts.get_font_for_char(c);
assert_eq!(std::ptr::from_ref(font), std::ptr::from_ref(fonts.main),
"Character {c} should use main font");
let (_, bitmap) = font.rasterize(c, 32.0);
assert!(!bitmap.is_empty(), "Character {c} should have bitmap");
}
}
#[test]
fn test_font_metrics() {
let fonts = load_fonts();
let (metrics, bitmap) = fonts.main.rasterize('A', 32.0);
assert!(metrics.advance_width > 0.0, "ASCII character should have positive advance width");
assert!(metrics.width > 0 && metrics.height > 0, "ASCII character should have non-empty dimensions");
assert!(!bitmap.is_empty(), "ASCII character should have bitmap data");
}