Add regression test for variable font weight matching
This commit is contained in:
parent
d2e3794fa8
commit
b6216ad123
1 changed files with 50 additions and 0 deletions
50
tests/variable_font_weight.rs
Normal file
50
tests/variable_font_weight.rs
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
use std::path::PathBuf;
|
||||
|
||||
use cosmic_text::{fontdb, Attrs, Buffer, Family, FontSystem, Metrics, Shaping, Weight};
|
||||
|
||||
/// Variable fonts must be matched at all weights within their `wght` axis
|
||||
/// range, not just the default weight they register at in fontdb, otherwise
|
||||
/// they will fall back to a system font despite being able to provide the
|
||||
/// requested weight.
|
||||
#[test]
|
||||
fn variable_font_all_weights_match() {
|
||||
let repo_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap();
|
||||
let fonts_path = PathBuf::from(&repo_dir).join("fonts");
|
||||
|
||||
let mut font_system = FontSystem::new();
|
||||
font_system
|
||||
.db_mut()
|
||||
.load_font_data(std::fs::read(fonts_path.join("InterVariable.ttf")).unwrap());
|
||||
|
||||
for w in [100, 200, 300, 400, 500, 600, 700, 800, 900] {
|
||||
let metrics = Metrics::new(16.0, 20.0);
|
||||
let mut buffer = Buffer::new(&mut font_system, metrics);
|
||||
|
||||
let glyph_font_ids: Vec<fontdb::ID>;
|
||||
{
|
||||
let mut buffer = buffer.borrow_with(&mut font_system);
|
||||
let attrs = Attrs::new()
|
||||
.family(Family::Name("Inter Variable"))
|
||||
.weight(Weight(w));
|
||||
buffer.set_size(Some(300.0), Some(100.0));
|
||||
buffer.set_text("Hello world", &attrs, Shaping::Advanced, None);
|
||||
buffer.shape_until_scroll(true);
|
||||
|
||||
glyph_font_ids = buffer
|
||||
.layout_runs()
|
||||
.flat_map(|run| run.glyphs.iter().map(|g| g.font_id))
|
||||
.collect();
|
||||
}
|
||||
|
||||
assert!(!glyph_font_ids.is_empty(), "Weight {w}: no glyphs produced");
|
||||
|
||||
for id in &glyph_font_ids {
|
||||
let face = font_system.db().face(*id).unwrap();
|
||||
let family = &face.families[0].0;
|
||||
assert!(
|
||||
family.contains("Inter"),
|
||||
"Weight {w}: expected Inter, got \"{family}\""
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue