mirror of
https://github.com/storytold/designcraft.git
synced 2026-10-26 11:16:50 -06:00
FontDb cataloged the system fonts only when a character needed a fallback (nothing else calls load_system_fonts), so a document set in an installed family was composed in Source Sans 3, and font.list and preflight reported the family missing (#22). Every lookup by family name now waits for one scan of the font folders per session, as VectorCraft does since #130: the app starts the scan in the background at startup, other processes run it on first use. The scan reads only each file's table directory and name table, and skips folders it has already read, so a symlink loop can't hang it. has_family counts installed families. FontDb::with_font_dirs and system_font_dirs let tests use their own font folder. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
24 lines
1.2 KiB
Rust
24 lines
1.2 KiB
Rust
//! A new session finds the installed system fonts by family name (#22). One test in its own
|
|
//! process, so the process-wide database starts fresh, as it does when the app starts.
|
|
// Integration tests: unwrapping and panicking on failure is fine here, unlike in shipped code.
|
|
#![allow(clippy::unwrap_used, clippy::expect_used, clippy::panic)]
|
|
|
|
use designcraft_fonts::{FontDb, system_font_dirs};
|
|
|
|
#[test]
|
|
fn a_fresh_session_finds_installed_fonts_by_name() {
|
|
let bundled = FontDb::with_font_dirs(vec![]).families();
|
|
let probe = FontDb::with_font_dirs(system_font_dirs());
|
|
probe.load_system_fonts();
|
|
// An installed family that isn't bundled and that loads.
|
|
let installed = probe.families();
|
|
let Some(family) = installed.iter().filter(|f| !bundled.contains(f)).find(|f| probe.face(f, "Regular").family == **f) else {
|
|
eprintln!("no system fonts installed: nothing to check");
|
|
return;
|
|
};
|
|
// The first lookup in the session: nothing has scanned the font folders yet.
|
|
assert!(FontDb::global().has_family(family));
|
|
assert_eq!(&FontDb::global().face(family, "Regular").family, family);
|
|
assert!(FontDb::global().families().contains(family));
|
|
}
|