summaryrefslogtreecommitdiff
path: root/dotfiles/system/.zsh/modules/Test/V07pcre.ztst
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/system/.zsh/modules/Test/V07pcre.ztst')
-rw-r--r--dotfiles/system/.zsh/modules/Test/V07pcre.ztst139
1 files changed, 139 insertions, 0 deletions
diff --git a/dotfiles/system/.zsh/modules/Test/V07pcre.ztst b/dotfiles/system/.zsh/modules/Test/V07pcre.ztst
new file mode 100644
index 0000000..ad17707
--- /dev/null
+++ b/dotfiles/system/.zsh/modules/Test/V07pcre.ztst
@@ -0,0 +1,139 @@
+%prep
+
+ if ! zmodload -F zsh/pcre C:pcre-match 2>/dev/null
+ then
+ ZTST_unimplemented="the zsh/pcre module is not available"
+ return 0
+ fi
+# Load the rest of the builtins
+ zmodload zsh/pcre
+ setopt rematch_pcre
+# Find a UTF-8 locale.
+ setopt multibyte
+# Don't let LC_* override our choice of locale.
+ unset -m LC_\*
+ mb_ok=
+ langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
+ $(locale -a 2>/dev/null | egrep 'utf8|UTF-8'))
+ for LANG in $langs; do
+ if [[ é = ? ]]; then
+ mb_ok=1
+ break;
+ fi
+ done
+ if [[ -z $mb_ok ]]; then
+ ZTST_unimplemented="no UTF-8 locale or multibyte mode is not implemented"
+ else
+ print -u $ZTST_fd Testing PCRE multibyte with locale $LANG
+ mkdir multibyte.tmp && cd multibyte.tmp
+ fi
+
+%test
+
+ [[ 'foo→bar' =~ .([^[:ascii:]]). ]]
+ print $MATCH
+ print $match[1]
+0:Basic non-ASCII regexp matching
+>o→b
+>→
+
+ unset match mend
+ s=$'\u00a0'
+ [[ $s =~ '^.$' ]] && print OK
+ [[ A${s}B =~ .(.). && $match[1] == $s ]] && print OK
+ [[ A${s}${s}B =~ A([^[:ascii:]]*)B && $mend[1] == 3 ]] && print OK
+ unset s
+0:Raw IMETA characters in input string
+>OK
+>OK
+>OK
+
+ [[ foo =~ f.+ ]] ; print $?
+ [[ foo =~ x.+ ]] ; print $?
+ [[ ! foo =~ f.+ ]] ; print $?
+ [[ ! foo =~ x.+ ]] ; print $?
+ [[ foo =~ f.+ && bar =~ b.+ ]] ; print $?
+ [[ foo =~ x.+ && bar =~ b.+ ]] ; print $?
+ [[ foo =~ f.+ && bar =~ x.+ ]] ; print $?
+ [[ ! foo =~ f.+ && bar =~ b.+ ]] ; print $?
+ [[ foo =~ f.+ && ! bar =~ b.+ ]] ; print $?
+ [[ ! ( foo =~ f.+ && bar =~ b.+ ) ]] ; print $?
+ [[ ! foo =~ x.+ && bar =~ b.+ ]] ; print $?
+ [[ foo =~ x.+ && ! bar =~ b.+ ]] ; print $?
+ [[ ! ( foo =~ x.+ && bar =~ b.+ ) ]] ; print $?
+0:Regex result inversion detection
+>0
+>1
+>1
+>0
+>0
+>1
+>1
+>1
+>1
+>1
+>0
+>1
+>0
+
+# Note that PCRE_ANCHORED only means anchored at the start
+# Also note that we don't unset MATCH/match on failed match (and it's an
+# open issue as to whether or not we should)
+ pcre_compile '.(→.)'
+ pcre_match foo→bar
+ print $? $MATCH $match ; unset MATCH match
+ pcre_match foo.bar
+ print $? $MATCH $match ; unset MATCH match
+ pcre_match foo†bar
+ print $? $MATCH $match ; unset MATCH match
+ pcre_match foo→†ar
+ print $? $MATCH $match ; unset MATCH match
+ pcre_study
+ pcre_match foo→bar
+ print $? $MATCH $match ; unset MATCH match
+ pcre_compile -a '.(→.)'
+ pcre_match foo→bar
+ print $? $MATCH $match ; unset MATCH match
+ pcre_match o→bar
+ print $? $MATCH $match ; unset MATCH match
+ pcre_match o→b
+ print $? $MATCH $match ; unset MATCH match
+ pcre_compile 'x.(→.)'
+ pcre_match xo→t
+ print $? $MATCH $match ; unset MATCH match
+ pcre_match Xo→t
+ print $? $MATCH $match ; unset MATCH match
+ pcre_compile -i 'x.(→.)'
+ pcre_match xo→t
+ print $? $MATCH $match ; unset MATCH match
+ pcre_match Xo→t
+ print $? $MATCH $match ; unset MATCH match
+0:pcre_compile interface testing: basic, anchored & case-insensitive
+>0 o→b →b
+>1
+>1
+>0 o→† →†
+>0 o→b →b
+>1
+>0 o→b →b
+>0 o→b →b
+>0 xo→t →t
+>1
+>0 xo→t →t
+>0 Xo→t →t
+
+ string="The following zip codes: 78884 90210 99513"
+ pcre_compile -m "\d{5}"
+ pcre_match -b -- $string && print "$MATCH; ZPCRE_OP: $ZPCRE_OP"
+ pcre_match -b -n $ZPCRE_OP[(w)2] -- $string || print failed
+ print "$MATCH; ZPCRE_OP: $ZPCRE_OP"
+0:pcre_match -b and pcre_match -n
+>78884; ZPCRE_OP: 25 30
+>90210; ZPCRE_OP: 31 36
+
+# Subshell because crash on failure
+ ( setopt re_match_pcre
+ [[ test.txt =~ '^(.*_)?(test)' ]]
+ echo $match[2] )
+0:regression for segmentation fault, workers/38307
+>test