use oxitext::Pipeline;
use std::path::Path;
fn load_test_font() -> Vec<u8> {
let fixture = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../tests/fixtures/test-font.ttf");
if fixture.exists() {
return std::fs::read(&fixture).expect("read fixture font");
}
oxifont_bundled::NOTO_SANS_REGULAR.to_vec()
}
#[test]
fn pipeline_from_bytes_invalid_data() {
let result = Pipeline::from_bytes(b"not a valid font");
assert!(result.is_err(), "invalid font data should return an error");
}
#[test]
fn pipeline_from_bytes_empty() {
let result = Pipeline::from_bytes(b"");
assert!(result.is_err(), "empty font data should return an error");
}
#[test]
fn pipeline_builder_no_font_returns_error() {
let result = Pipeline::builder().build();
assert!(result.is_err(), "builder with no font should fail");
}
#[test]
fn pipeline_builder_invalid_font() {
let result = Pipeline::builder().font(b"invalid".to_vec()).build();
assert!(
result.is_err(),
"builder with invalid font data should fail"
);
}
#[test]
fn pipeline_builder_valid_font() {
let data = load_test_font();
let result = Pipeline::builder().font(data).build();
assert!(
result.is_ok(),
"builder with valid font data should succeed"
);
}
#[test]
fn available_features_does_not_panic() {
let features = Pipeline::available_features();
for f in features {
assert!(!f.is_empty(), "feature name must not be empty");
}
}
#[test]
#[cfg(feature = "pure")]
fn available_features_includes_pure() {
let features = Pipeline::available_features();
assert!(
features.contains(&"pure"),
"expected \"pure\" in available_features(), got: {features:?}"
);
}
#[test]
fn render_result_glyph_bitmap_lengths_match() {
let data = load_test_font();
let mut pipeline = Pipeline::from_bytes(&data).expect("valid font");
let style = oxitext::TextStyle::default();
let result = pipeline.render("Hello", &style).expect("render");
assert_eq!(
result.glyphs.len(),
result.bitmaps.len(),
"glyphs and bitmaps must have the same length"
);
assert!(
!result.glyphs.is_empty(),
"render result must have at least one glyph"
);
}
#[test]
fn pipeline_from_bytes_valid_font() {
let data = load_test_font();
let pipeline = Pipeline::from_bytes(&data);
assert!(
pipeline.is_ok(),
"from_bytes with a valid font must succeed"
);
}