aboutsummaryrefslogtreecommitdiff
path: root/tests/functional/lang/eval-okay-regex-split.nix
diff options
context:
space:
mode:
Diffstat (limited to 'tests/functional/lang/eval-okay-regex-split.nix')
-rw-r--r--tests/functional/lang/eval-okay-regex-split.nix48
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/functional/lang/eval-okay-regex-split.nix b/tests/functional/lang/eval-okay-regex-split.nix
new file mode 100644
index 000000000..0073e0577
--- /dev/null
+++ b/tests/functional/lang/eval-okay-regex-split.nix
@@ -0,0 +1,48 @@
+with builtins;
+
+# Non capturing regex returns empty lists
+assert split "foobar" "foobar" == ["" [] ""];
+assert split "fo*" "f" == ["" [] ""];
+assert split "fo+" "f" == ["f"];
+assert split "fo*" "fo" == ["" [] ""];
+assert split "fo*" "foo" == ["" [] ""];
+assert split "fo+" "foo" == ["" [] ""];
+assert split "fo{1,2}" "foo" == ["" [] ""];
+assert split "fo{1,2}" "fooo" == ["" [] "o"];
+assert split "fo*" "foobar" == ["" [] "bar"];
+
+# Capturing regex returns a list of sub-matches
+assert split "(fo*)" "f" == ["" ["f"] ""];
+assert split "(fo+)" "f" == ["f"];
+assert split "(fo*)" "fo" == ["" ["fo"] ""];
+assert split "(f)(o*)" "f" == ["" ["f" ""] ""];
+assert split "(f)(o*)" "foo" == ["" ["f" "oo"] ""];
+assert split "(fo+)" "foo" == ["" ["foo"] ""];
+assert split "(fo{1,2})" "foo" == ["" ["foo"] ""];
+assert split "(fo{1,2})" "fooo" == ["" ["foo"] "o"];
+assert split "(fo*)" "foobar" == ["" ["foo"] "bar"];
+
+# Matches are greedy.
+assert split "(o+)" "oooofoooo" == ["" ["oooo"] "f" ["oooo"] ""];
+
+# Matches multiple times.
+assert split "(b)" "foobarbaz" == ["foo" ["b"] "ar" ["b"] "az"];
+
+# Split large strings containing newlines. null are inserted when a
+# pattern within the current did not match anything.
+assert split "[[:space:]]+|([',.!?])" ''
+ Nix Rocks!
+ That's why I use it.
+'' == [
+ "Nix" [ null ] "Rocks" ["!"] "" [ null ]
+ "That" ["'"] "s" [ null ] "why" [ null ] "I" [ null ] "use" [ null ] "it" ["."] "" [ null ]
+ ""
+];
+
+# Documentation examples
+assert split "(a)b" "abc" == [ "" [ "a" ] "c" ];
+assert split "([ac])" "abc" == [ "" [ "a" ] "b" [ "c" ] "" ];
+assert split "(a)|(c)" "abc" == [ "" [ "a" null ] "b" [ null "c" ] "" ];
+assert split "([[:upper:]]+)" " FOO " == [ " " [ "FOO" ] " " ];
+
+true