aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2020-05-25 12:12:13 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2020-05-27 15:52:53 +0200
commitde3de2d1a58556cff5d8549e9befe2ec3cf2d08a (patch)
tree8f7f109c70d615bc93daa2a8f4b25ceb3842e062 /tests
parentb808c255b6a9ddba085bf5646e7d20ec344f2e2d (diff)
Add support for value subscript after expansions
Value subscript is only recognized in evaluation contexts (due to ambiguity with wildcard patterns; consider: $x[123].txt) and should be unseparated from the previous token. For example: x = ($y[1]) x = (($f ? $y : $z)[1]) x = ($identity($y)[$z])
Diffstat (limited to 'tests')
-rw-r--r--tests/expansion/concat.testscript2
-rw-r--r--tests/expansion/subscript.testscript97
2 files changed, 98 insertions, 1 deletions
diff --git a/tests/expansion/concat.testscript b/tests/expansion/concat.testscript
index 181a738..bec48ce 100644
--- a/tests/expansion/concat.testscript
+++ b/tests/expansion/concat.testscript
@@ -1,4 +1,4 @@
-# file : tests/expansion/type.testscript
+# file : tests/expansion/concat.testscript
# license : MIT; see accompanying LICENSE file
# Test concatenated expansion.
diff --git a/tests/expansion/subscript.testscript b/tests/expansion/subscript.testscript
new file mode 100644
index 0000000..0c06394
--- /dev/null
+++ b/tests/expansion/subscript.testscript
@@ -0,0 +1,97 @@
+# file : tests/expansion/subscript.testscript
+# license : MIT; see accompanying LICENSE file
+
+# Test subscript expansion.
+
+.include ../common.testscript
+
+: basics
+:
+$* <<EOI >>EOO
+x = zero one two three
+y = zero@one two@three
+i = 2
+
+print ($x[1])
+print ($x[4])
+print (($x)[1])
+print (($x)[4])
+print ($identity($x)[1])
+print ($identity($x)[4])
+
+print
+
+print ($y[1])
+print ($y[4])
+print (($y)[1])
+print (($y)[4])
+print ($identity($y)[1])
+print ($identity($y)[4])
+
+print
+
+print ($x[$i])
+
+EOI
+one
+[null]
+one
+[null]
+one
+[null]
+
+two@three
+[null]
+two@three
+[null]
+two@three
+[null]
+
+two
+EOO
+
+: unseparated
+:
+$* <<EOI >>EOO
+x = zero one
+print ($x [1])
+EOI
+zero one
+EOO
+
+: escape
+:
+$* <<EOI >>EOO
+x = zero
+print ($x\[abc])
+EOI
+EOO
+
+: preparse
+:
+$* <<EOI >>EOO
+x = zero one two three
+print (true ? $x[1] : $x[])
+EOI
+one
+EOO
+
+: missing-rsbrace
+:
+$* <'print ($x[1)' 2>>EOE != 0
+<stdin>:1:12: error: expected ']' instead of ')'
+EOE
+
+: invalid-subscript
+:
+$* <'print ($x[1a])' 2>>EOE != 0
+<stdin>:1:11: error: invalid value subscript: invalid uint64 value: '1a'
+ <stdin>:1:9: info: use the '\[' escape sequence if this is a wildcard pattern
+EOE
+
+: empty-subscript
+:
+$* <'print ($x[])' 2>>EOE != 0
+<stdin>:1:11: error: invalid value subscript: invalid uint64 value: empty
+ <stdin>:1:9: info: use the '\[' escape sequence if this is a wildcard pattern
+EOE