This commit is contained in:
2026-04-07 01:07:12 +03:00
parent b6287906a9
commit 7cf49ee1e4
24 changed files with 769 additions and 270 deletions

View File

@@ -0,0 +1,21 @@
use dreport_layout::FontData;
pub fn load_test_fonts() -> Vec<FontData> {
let font_dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
.parent()
.unwrap()
.join("backend/fonts");
let mut fonts = Vec::new();
for entry in std::fs::read_dir(&font_dir).expect("backend/fonts directory not found") {
let entry = entry.unwrap();
let path = entry.path();
if path.extension().is_some_and(|e| e == "ttf") {
let data = std::fs::read(&path).unwrap();
if let Some(fd) = FontData::from_bytes(data) {
fonts.push(fd);
}
}
}
fonts
}

View File

@@ -8,27 +8,10 @@
#![cfg(not(target_arch = "wasm32"))]
use dreport_core::models::*;
use dreport_layout::{compute_layout, FontData, LayoutResult, ResolvedContent};
use dreport_layout::{compute_layout, LayoutResult, ResolvedContent};
fn load_test_fonts() -> Vec<FontData> {
let font_dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
.parent()
.unwrap()
.join("backend/fonts");
let mut fonts = Vec::new();
for entry in std::fs::read_dir(&font_dir).expect("backend/fonts directory not found") {
let entry = entry.unwrap();
let path = entry.path();
if path.extension().is_some_and(|e| e == "ttf") {
let data = std::fs::read(&path).unwrap();
if let Some(fd) = FontData::from_bytes(data) {
fonts.push(fd);
}
}
}
fonts
}
mod common;
use common::load_test_fonts;
fn base_template() -> Template {
Template {

View File

@@ -1,27 +1,10 @@
//! Integration tests for the layout engine's compute_layout() public API.
use dreport_core::models::*;
use dreport_layout::{compute_layout, FontData, LayoutResult};
use dreport_layout::{compute_layout, LayoutResult};
fn load_test_fonts() -> Vec<FontData> {
let font_dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
.parent()
.unwrap()
.join("backend/fonts");
let mut fonts = Vec::new();
for entry in std::fs::read_dir(&font_dir).expect("backend/fonts directory not found") {
let entry = entry.unwrap();
let path = entry.path();
if path.extension().is_some_and(|e| e == "ttf") {
let data = std::fs::read(&path).unwrap();
if let Some(fd) = FontData::from_bytes(data) {
fonts.push(fd);
}
}
}
fonts
}
mod common;
use common::load_test_fonts;
fn simple_template() -> Template {
Template {

View File

@@ -4,27 +4,10 @@
#![cfg(not(target_arch = "wasm32"))]
use dreport_core::models::*;
use dreport_layout::{compute_layout, FontData};
use dreport_layout::compute_layout;
fn load_test_fonts() -> Vec<FontData> {
let font_dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
.parent()
.unwrap()
.join("backend/fonts");
let mut fonts = Vec::new();
for entry in std::fs::read_dir(&font_dir).expect("backend/fonts directory not found") {
let entry = entry.unwrap();
let path = entry.path();
if path.extension().is_some_and(|e| e == "ttf") {
let data = std::fs::read(&path).unwrap();
if let Some(fd) = FontData::from_bytes(data) {
fonts.push(fd);
}
}
}
fonts
}
mod common;
use common::load_test_fonts;
fn simple_template() -> Template {
Template {
@@ -320,10 +303,8 @@ fn test_page_break_produces_multiple_pages() {
let pdf_bytes = dreport_layout::pdf_render::render_pdf(&layout, &fonts).unwrap();
assert!(pdf_bytes.starts_with(b"%PDF"));
// Write PDF for manual inspection
let out_path = std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
.parent().unwrap()
.join("test_page_break.pdf");
// Write PDF to temp dir for manual inspection
let out_path = std::env::temp_dir().join("dreport_test_page_break.pdf");
std::fs::write(&out_path, &pdf_bytes).unwrap();
println!("Wrote: {}", out_path.display());
}

View File

@@ -7,15 +7,19 @@
#![cfg(not(target_arch = "wasm32"))]
mod common;
mod visual {
use std::fs;
use std::path::Path;
use std::process::Command;
use dreport_core::models::Template;
use dreport_layout::{compute_layout, FontData, ResolvedContent};
use dreport_layout::{compute_layout, ResolvedContent};
use dreport_layout::pdf_render::render_pdf;
use crate::common::load_test_fonts;
fn fixtures_dir() -> std::path::PathBuf {
Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures")
}
@@ -24,26 +28,6 @@ mod visual {
Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/snapshots")
}
fn load_test_fonts() -> Vec<FontData> {
let font_dir = Path::new(env!("CARGO_MANIFEST_DIR"))
.parent()
.unwrap()
.join("backend/fonts");
let mut fonts = Vec::new();
for entry in fs::read_dir(&font_dir).expect("backend/fonts directory not found") {
let entry = entry.unwrap();
let path = entry.path();
if path.extension().is_some_and(|e| e == "ttf") {
let data = fs::read(&path).unwrap();
if let Some(fd) = FontData::from_bytes(data) {
fonts.push(fd);
}
}
}
fonts
}
fn generate_test_pdf(template_name: &str, data_name: &str) -> Vec<u8> {
let template_json = fs::read_to_string(fixtures_dir().join(template_name)).unwrap();
let data_json = fs::read_to_string(fixtures_dir().join(data_name)).unwrap();