summaryrefslogtreecommitdiff
path: root/tests/suite/scripting/let.typ
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2024-04-13 10:39:45 +0200
committerGitHub <noreply@github.com>2024-04-13 08:39:45 +0000
commit020294fca9a7065d4b9cf4e677f606ebaaa29b00 (patch)
treec0027ad22046e2726c22298461327823d6b88d53 /tests/suite/scripting/let.typ
parent72dd79210602ecc799726fc096b078afbb47f299 (diff)
Better test runner (#3922)
Diffstat (limited to 'tests/suite/scripting/let.typ')
-rw-r--r--tests/suite/scripting/let.typ143
1 files changed, 143 insertions, 0 deletions
diff --git a/tests/suite/scripting/let.typ b/tests/suite/scripting/let.typ
new file mode 100644
index 00000000..2604c4ea
--- /dev/null
+++ b/tests/suite/scripting/let.typ
@@ -0,0 +1,143 @@
+// Test let bindings.
+
+--- let-basic ---
+// Automatically initialized with none.
+#let x
+#test(x, none)
+
+// Manually initialized with one.
+#let z = 1
+#test(z, 1)
+
+// Syntax sugar for function definitions.
+#let fill = conifer
+#let f(body) = rect(width: 2cm, fill: fill, inset: 5pt, body)
+#f[Hi!]
+
+--- let-termination ---
+// Termination.
+
+// Terminated by line break.
+#let v1 = 1
+One
+
+// Terminated by semicolon.
+#let v2 = 2; Two
+
+// Terminated by semicolon and line break.
+#let v3 = 3;
+Three
+
+#test(v1, 1)
+#test(v2, 2)
+#test(v3, 3)
+
+--- let-valid-idents ---
+// Test what constitutes a valid Typst identifier.
+#let name = 1
+#test(name, 1)
+#let name_ = 1
+#test(name_, 1)
+#let name-2 = 1
+#test(name-2, 1)
+#let name_2 = 1
+#test(name_2, 1)
+#let __name = 1
+#test(__name, 1)
+#let ůñıćóðė = 1
+#test(ůñıćóðė, 1)
+
+--- let-binding-keyword-in-markup ---
+// Error: 6-8 expected pattern, found keyword `as`
+// Hint: 6-8 keyword `as` is not allowed as an identifier; try `as_` instead
+#let as = 1 + 2
+
+--- let-binding-keyword-in-code ---
+#{
+ // Error: 7-9 expected pattern, found keyword `as`
+ // Hint: 7-9 keyword `as` is not allowed as an identifier; try `as_` instead
+ let as = 10
+}
+
+--- let-ident-parenthesized ---
+// Test parenthesised assignments.
+#let (a) = (1, 2)
+
+--- let-incomplete ---
+// Error: 5 expected pattern
+#let
+
+// Error: 6 expected pattern
+#{let}
+
+// Error: 6-9 expected pattern, found string
+#let "v"
+
+// Error: 7 expected semicolon or line break
+#let v 1
+
+// Error: 9 expected expression
+#let v =
+
+// Error: 6-9 expected pattern, found string
+#let "v" = 1
+
+// Terminated because expression ends.
+// Error: 12 expected semicolon or line break
+#let v4 = 4 Four
+
+// Terminated by semicolon even though we are in a paren group.
+// Error: 18 expected expression
+// Error: 11-12 unclosed delimiter
+#let v5 = (1, 2 + ; Five
+
+// Error: 9-13 expected pattern, found boolean
+#let (..true) = false
+
+--- underscore-invalid ---
+#let _ = 4
+
+#for _ in range(2) []
+
+// Error: 2-3 unexpected underscore
+#_
+
+// Error: 8-9 expected expression, found underscore
+#lorem(_)
+
+// Error: 3-4 expected expression, found underscore
+#(_,)
+
+// Error: 3-4 expected expression, found underscore
+#{_}
+
+// Error: 8-9 expected expression, found underscore
+#{ 1 + _ }
+
+--- let-function-incomplete ---
+// Error: 13 expected equals sign
+#let func(x)
+
+// Error: 15 expected expression
+#let func(x) =
+
+--- let-function-parenthesized ---
+// This is not yet parsed in the ideal way.
+// Error: 12 expected equals sign
+#let (func)(x)
+
+--- let-function-parenthesized-with-init ---
+// These errors aren't great.
+// Error: 12 expected equals sign
+// Error: 15-15 expected semicolon or line break
+#let (func)(x) = 3
+
+--- let-with-no-init-group ---
+// This was unintentionally allowed ...
+// Error: 9 expected equals sign
+#let (a)
+
+--- let-with-no-init-destructuring ---
+// ... where this wasn't.
+// Error: 12 expected equals sign
+#let (a, b)