summaryrefslogtreecommitdiff
path: root/tests/suite/scripting/params.typ
diff options
context:
space:
mode:
Diffstat (limited to 'tests/suite/scripting/params.typ')
-rw-r--r--tests/suite/scripting/params.typ69
1 files changed, 69 insertions, 0 deletions
diff --git a/tests/suite/scripting/params.typ b/tests/suite/scripting/params.typ
new file mode 100644
index 00000000..688124f2
--- /dev/null
+++ b/tests/suite/scripting/params.typ
@@ -0,0 +1,69 @@
+--- param-underscore-missing-argument ---
+// Error: 17-20 missing argument: pattern parameter
+#let f(a: 10) = a() + 1
+#f(a: _ => 5)
+
+--- params-sink-named ---
+// ... but this was.
+#let f(..x) = {}
+#f(arg: 1)
+
+--- params-sink-unnamed ---
+// unnamed spread
+#let f(.., a) = a
+#test(f(1, 2, 3), 3)
+
+// This wasn't allowed before the bug fix ...
+#let f(..) = 2
+#test(f(arg: 1), 2)
+
+--- params-sink-bool-invalid ---
+// Error: 10-14 expected pattern, found boolean
+#let f(..true) = none
+
+--- params-sink-multiple-invalid ---
+// Error: 13-16 only one argument sink is allowed
+#let f(..a, ..b) = none
+
+--- params-sink-at-start ---
+// Spread at beginning.
+#{
+ let f(..a, b) = (a, b)
+ test(repr(f(1)), "((), 1)")
+ test(repr(f(1, 2, 3)), "((1, 2), 3)")
+ test(repr(f(1, 2, 3, 4, 5)), "((1, 2, 3, 4), 5)")
+}
+
+--- params-sink-in-middle ---
+// Spread in the middle.
+#{
+ let f(a, ..b, c) = (a, b, c)
+ test(repr(f(1, 2)), "(1, (), 2)")
+ test(repr(f(1, 2, 3, 4, 5)), "(1, (2, 3, 4), 5)")
+}
+
+--- params-sink-unnamed-empty ---
+// Unnamed sink should just ignore any extra arguments.
+#{
+ let f(a, b: 5, ..) = (a, b)
+ test(f(4), (4, 5))
+ test(f(10, b: 11), (10, 11))
+ test(f(13, 20, b: 12), (13, 12))
+ test(f(15, b: 16, c: 13), (15, 16))
+}
+
+--- params-sink-missing-arguments ---
+#{
+ let f(..a, b, c, d) = none
+
+ // Error: 3-10 missing argument: d
+ f(1, 2)
+}
+
+--- issue-1029-parameter-destructuring ---
+// Test that underscore works in parameter patterns.
+#test((1, 2, 3).zip((1, 2, 3)).map(((_, x)) => x), (1, 2, 3))
+
+--- issue-1351-parameter-dictionary ---
+// Error: 17-22 expected pattern, found string
+#let foo((test: "bar")) = {}