summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMartin Haug <mhaug@live.de>2021-06-27 18:06:39 +0200
committerMartin Haug <mhaug@live.de>2021-06-27 18:06:39 +0200
commit9bd8b7ddac046f581dc750e148147901d08cb0f4 (patch)
tree0e7a39d25fe2bcccc7625568548759b330b48008 /tests
parent57bd3e23c79878d106ab8be17c71caca6c4f5a7c (diff)
Code review, new stack test
Diffstat (limited to 'tests')
-rw-r--r--tests/ref/layout/stack.pngbin264 -> 325 bytes
-rw-r--r--tests/typ/layout/stack.typ9
-rw-r--r--tests/typeset.rs56
3 files changed, 39 insertions, 26 deletions
diff --git a/tests/ref/layout/stack.png b/tests/ref/layout/stack.png
index 684905f7..2f190c4d 100644
--- a/tests/ref/layout/stack.png
+++ b/tests/ref/layout/stack.png
Binary files differ
diff --git a/tests/typ/layout/stack.typ b/tests/typ/layout/stack.typ
index 006a1412..50ed1eb1 100644
--- a/tests/typ/layout/stack.typ
+++ b/tests/typ/layout/stack.typ
@@ -7,3 +7,12 @@
rect(3cm, forest),
rect(1cm, conifer),
)
+
+---
+
+#let rect(width, color) = rect(width: 1cm, height: 0.4cm, fill: color)
+// This stack overflows.
+#box(height: 0.5cm, stack(
+ rect(3cm, forest),
+ rect(1cm, conifer),
+))
diff --git a/tests/typeset.rs b/tests/typeset.rs
index 9e0c9596..740d9a03 100644
--- a/tests/typeset.rs
+++ b/tests/typeset.rs
@@ -15,14 +15,14 @@ use walkdir::WalkDir;
use typst::cache::Cache;
use typst::color;
-use typst::diag::{Diag, DiagSet, Level};
-use typst::eval::{EvalContext, FuncArgs, FuncValue, Scope, Value};
-use typst::exec::State;
+use typst::diag::{Diag, DiagSet, Level, Pass};
+use typst::eval::{eval, EvalContext, FuncArgs, FuncValue, Scope, Value};
+use typst::exec::{exec, State};
use typst::geom::{self, Length, Point, Sides, Size};
use typst::image::ImageId;
-use typst::layout::{Element, Fill, Frame, Shape, Text};
+use typst::layout::{layout, Element, Fill, Frame, Shape, Text};
use typst::loading::FsLoader;
-use typst::parse::{LineMap, Scanner};
+use typst::parse::{parse, LineMap, Scanner};
use typst::syntax::{Location, Pos};
const TYP_DIR: &str = "./typ";
@@ -224,12 +224,22 @@ fn test_part(
state.page.size = Size::new(Length::pt(120.0), Length::inf());
state.page.margins = Sides::splat(Some(Length::pt(10.0).into()));
- let mut pass =
- typst::typeset(loader, cache, Some(src_path), &src, &scope, state.clone());
+ let parsed = parse(src);
+ let evaluated = eval(
+ loader,
+ cache,
+ Some(src_path),
+ Rc::new(parsed.output),
+ &scope,
+ );
+ let executed = exec(&evaluated.output.template, state.clone());
+ let layouted = layout(loader, cache, &executed.output);
- if !compare_ref {
- pass.output.clear();
- }
+ let mut diags = parsed.diags;
+ diags.extend(evaluated.diags);
+ diags.extend(executed.diags);
+
+ let mut pass = Pass::new(layouted, diags);
let mut ok = true;
@@ -274,35 +284,25 @@ fn test_part(
cache.layout.turnaround();
- let mut cached_result =
- typst::typeset(loader, cache, Some(src_path), &src, &scope, state.clone());
-
- if !compare_ref {
- cached_result.output.clear();
- }
+ let cached_result = layout(loader, cache, &executed.output);
- let misses: Vec<_> = cache
+ let misses = cache
.layout
.frames
.iter()
.flat_map(|(_, e)| e)
.filter(|e| e.level == level && !e.hit() && e.age() == 2)
- .collect();
+ .count();
- if !misses.is_empty() {
+ if misses > 0 {
ok = false;
- let mut miss_count = 0;
- for miss in misses {
- dbg!(miss.frames.iter().map(|f| f.constraints).collect::<Vec<_>>());
- miss_count += 1;
- }
println!(
" Recompilation had {} cache misses on level {} (Subtest {}) ❌",
- miss_count, level, i
+ misses, level, i
);
}
- if cached_result != pass {
+ if cached_result != pass.output {
ok = false;
println!(
" Recompilation of subtest {} differs from clean pass ❌",
@@ -314,6 +314,10 @@ fn test_part(
cache.layout = reference_cache;
cache.layout.turnaround();
+ if !compare_ref {
+ pass.output.clear();
+ }
+
(ok, compare_ref, pass.output)
}