summaryrefslogtreecommitdiff
path: root/tests/suite/foundations/context.typ
diff options
context:
space:
mode:
Diffstat (limited to 'tests/suite/foundations/context.typ')
-rw-r--r--tests/suite/foundations/context.typ65
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/suite/foundations/context.typ b/tests/suite/foundations/context.typ
new file mode 100644
index 00000000..fea9f544
--- /dev/null
+++ b/tests/suite/foundations/context.typ
@@ -0,0 +1,65 @@
+// Test context expressions.
+
+--- context-body-atomic-in-markup ---
+// Test that context body is parsed as atomic expression.
+#let c = [#context "hello".]
+#test(c.children.first().func(), (context none).func())
+#test(c.children.last(), [.])
+
+--- context-element-constructor-forbidden ---
+// Test that manual construction is forbidden.
+// Error: 2-25 cannot be constructed manually
+#(context none).func()()
+
+--- context-in-show-rule ---
+// Test that show rule establishes context.
+#set heading(numbering: "1.")
+#show heading: it => test(
+ counter(heading).get(),
+ (intro: (1,), back: (2,)).at(str(it.label)),
+)
+
+= Introduction <intro>
+= Background <back>
+
+--- context-in-show-rule-query ---
+// Test that show rule on non-locatable element allows `query`.
+// Error: 18-47 Assertion failed: 2 != 3
+#show emph: _ => test(query(heading).len(), 3)
+#show strong: _ => test(query(heading).len(), 2)
+= Introduction
+= Background
+*Hi* _there_
+
+--- context-assign-to-captured-variable ---
+// Test error when captured variable is assigned to.
+#let i = 0
+// Error: 11-12 variables from outside the context expression are read-only and cannot be modified
+#context (i = 1)
+
+--- context-compatibility-locate ---
+#let s = state("x", 0)
+#let compute(expr) = [
+ #s.update(x =>
+ eval(expr.replace("x", str(x)))
+ )
+ New value is #s.display().
+]
+
+#locate(loc => {
+ let elem = query(<here>, loc).first()
+ test(s.at(elem.location()), 13)
+})
+
+#compute("10") \
+#compute("x + 3") \
+*Here.* <here> \
+#compute("x * 2") \
+#compute("x - 5")
+
+--- context-compatibility-styling ---
+#style(styles => measure([it], styles).width < 20pt)
+
+--- context-compatibility-counter-display ---
+#counter(heading).update(10)
+#counter(heading).display(n => test(n, 10))