summaryrefslogtreecommitdiff
path: root/Userland/Shell/Tests/match.sh
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Shell/Tests/match.sh')
-rw-r--r--Userland/Shell/Tests/match.sh83
1 files changed, 83 insertions, 0 deletions
diff --git a/Userland/Shell/Tests/match.sh b/Userland/Shell/Tests/match.sh
new file mode 100644
index 0000000000..1f1809166c
--- /dev/null
+++ b/Userland/Shell/Tests/match.sh
@@ -0,0 +1,83 @@
+#!/bin/Shell
+
+result=no
+match hello {
+ he* { result=yes }
+ * { result=fail }
+};
+
+test "$result" = yes || echo invalid result $result for normal string match, single option && exit 1
+
+result=no
+match hello {
+ he* | f* { result=yes }
+ * { result=fail }
+};
+
+test "$result" = yes || echo invalid result $result for normal string match, multiple options && exit 1
+
+result=no
+match (well hello friends) {
+ (* *) { result=fail }
+ (* * *) { result=yes }
+ * { result=fail }
+};
+
+test "$result" = yes || echo invalid result $result for list match && exit 1
+
+result=no
+match yes as v {
+ () { result=fail }
+ (*) { result=yes }
+ * { result=$v }
+};
+
+test "$result" = yes || echo invalid result $result for match with name && exit 1
+
+result=no
+# $(...) is a list, $(echo) should be an empty list, not an empty string
+match $(echo) {
+ * { result=fail }
+ () { result=yes }
+};
+
+test "$result" = yes || echo invalid result $result for list subst match && exit 1
+
+result=no
+# "$(...)" is a string, "$(echo)" should be an empty string, not an empty list
+match "$(echo)" {
+ * { result=yes }
+ () { result=fail }
+};
+
+test "$result" = yes || echo invalid result $result for string subst match && exit 1
+
+match (foo bar) {
+ (f? *) as (x y) {
+ result=fail
+ }
+ (f* b*) as (x y) {
+ if [ "$x" = oo -a "$y" = ar ] {
+ result=yes
+ } else {
+ result=fail
+ }
+ }
+}
+
+test "$result" = yes || echo invalid result $result for subst match with name && exit 1
+
+match (foo bar baz) {
+ (f? * *z) as (x y z) {
+ result=fail
+ }
+ (f* b* *z) as (x y z) {
+ if [ "$x" = oo -a "$y" = ar -a "$z" = ba ] {
+ result=yes
+ } else {
+ result=fail
+ }
+ }
+}
+
+test "$result" = yes || echo invalid result $result for subst match with name 2 && exit 1