mod helpers;
use helpers::NOTO_SANS;
use text_typeset::TextFontService;
use text_typeset::font::resolve::resolve_font;
use text_typeset::shaping::shaper::shape_text;
const CJK: &str = "\u{4E2D}";
#[test]
fn without_system_fonts_leaves_uncovered_chars_as_notdef() {
let mut s = TextFontService::new_without_system_fonts();
let face = s.register_font(NOTO_SANS);
s.set_default_font(face, 16.0);
assert_eq!(s.font_registry().all_entries().count(), 1);
let resolved = resolve_font(s.font_registry(), None, None, None, None, None, 1.0, 1.0).unwrap();
let run = shape_text(s.font_registry(), &resolved, CJK, 0).unwrap();
assert!(
run.glyphs.iter().any(|g| g.glyph_id == 0),
"without system fonts an uncovered char should remain .notdef"
);
}
#[test]
#[ignore = "depends on OS-installed fonts (non-deterministic in CI)"]
fn system_fonts_provide_fallback_for_uncovered_chars() {
let mut s = TextFontService::new();
let face = s.register_font(NOTO_SANS);
s.set_default_font(face, 16.0);
assert!(
s.font_registry().all_entries().count() > 1,
"new() should enumerate OS fonts"
);
let resolved = resolve_font(s.font_registry(), None, None, None, None, None, 1.0, 1.0).unwrap();
let run = shape_text(s.font_registry(), &resolved, CJK, 0).unwrap();
assert!(
run.glyphs.iter().all(|g| g.glyph_id != 0),
"system-font fallback should cover a CJK char (is a CJK font installed?)"
);
}