X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=tests%2Fautomated%2Fregexp-tests.el;h=816868f7a273fe40e9bf425287b2f920a8bf265a;hp=6c1fcbac1dbfe8e603b8fa3e9dcc4234412a41ce;hb=ee38d21b330f5001b47a577cefb5ba7b82a3b7d3;hpb=499b5ad5e2308fd04e3654aaa462d099f1769fd1 diff --git a/tests/automated/regexp-tests.el b/tests/automated/regexp-tests.el index 6c1fcba..816868f 100644 --- a/tests/automated/regexp-tests.el +++ b/tests/automated/regexp-tests.el @@ -152,6 +152,89 @@ (Assert (string-match "^\\(Ä\\)\\1$" "ÄÄ")) (Assert (not (string-match "^\\(Ä\\)\\1$" "Ää")))) +;; multiple-match +;; Thanks to Manfred Bartz +;; c.e.x +;; #### Need to do repetitions of more complex regexps +;; #### WASH ME! +(with-temp-buffer + (Assert (not (string-match "^a\\{4,4\\}$" "aaa"))) + (Assert (string-match "^a\\{4,4\\}$" "aaaa")) + (Assert (not (string-match "^a\\{4,4\\}$" "aaaaa"))) + (Assert (not (string-match "^[a]\\{4,4\\}$" "aaa"))) + (Assert (string-match "^[a]\\{4,4\\}$" "aaaa")) + (Assert (not (string-match "^[a]\\{4,4\\}$" "aaaaa"))) + (Assert (not (string-match "^\\(a\\)\\{4,4\\}$" "aaa"))) + (Assert (string-match "^\\(a\\)\\{4,4\\}$" "aaaa")) + (Assert (not (string-match "^\\(a\\)\\{4,4\\}$" "aaaaa"))) + ;; Use class because repetition of single char broken in 21.5.15 + (Assert (not (string-match "^[a]\\{3,5\\}$" "aa"))) + (Assert (string-match "^[a]\\{3,5\\}$" "aaa")) + (Assert (string-match "^[a]\\{3,5\\}$" "aaaa")) + (Assert (string-match "^[a]\\{3,5\\}$" "aaaaa")) + (Assert (not (string-match "^[a]\\{3,5\\}$" "aaaaaa"))) + (insert "\ +aa +aaa +aaaa +aaaaa +aaaaaa +baaaa +") + (goto-char (point-min)) + (forward-line 1) + (Assert (not (looking-at "^a\\{4,4\\}$"))) + (forward-line 1) + (Assert (looking-at "^a\\{4,4\\}$")) + (forward-line 1) + (Assert (not (looking-at "^a\\{4,4\\}$"))) + (goto-char (point-min)) + (forward-line 1) + (Assert (not (looking-at "^[a]\\{4,4\\}$"))) + (forward-line 1) + (Assert (looking-at "^[a]\\{4,4\\}$")) + (forward-line 1) + (Assert (not (looking-at "^[a]\\{4,4\\}$"))) + (goto-char (point-min)) + (forward-line 1) + (Assert (not (looking-at "^\\(a\\)\\{4,4\\}$"))) + (forward-line 1) + (Assert (looking-at "^\\(a\\)\\{4,4\\}$")) + (forward-line 1) + (Assert (not (looking-at "^\\(a\\)\\{4,4\\}$"))) + ;; Use class because repetition of single char broken in 21.5.15 + (goto-char (point-min)) + (Assert (not (looking-at "^[a]\\{3,5\\}$"))) + (forward-line 1) + (Assert (looking-at "^[a]\\{3,5\\}$")) + (forward-line 1) + (Assert (looking-at "^[a]\\{3,5\\}$")) + (forward-line 1) + (Assert (looking-at "^[a]\\{3,5\\}$")) + (forward-line 1) + (Assert (not (looking-at "^[a]\\{3,5\\}$"))) + (goto-char (point-min)) + (Assert (= 12 (re-search-forward "a\\{4,4\\}"))) + (goto-char (point-min)) + (Assert (= 12 (re-search-forward "b?a\\{4,4\\}"))) + (goto-char (point-min)) + (Assert (= 31 (re-search-forward "ba\\{4,4\\}"))) + (goto-char (point-min)) + (Assert (= 31 (re-search-forward "[b]a\\{4,4\\}"))) + (goto-char (point-min)) + (Assert (= 31 (re-search-forward "\\(b\\)a\\{4,4\\}"))) + (goto-char (point-min)) + (Assert (= 12 (re-search-forward "^a\\{4,4\\}"))) + (goto-char (point-min)) + (Assert (= 12 (re-search-forward "^a\\{4,4\\}$"))) + (goto-char (point-min)) + (Assert (= 12 (re-search-forward "[a]\\{4,4\\}"))) + (goto-char (point-min)) + (Assert (= 12 (re-search-forward "^[a]\\{4,4\\}"))) + (goto-char (point-min)) + (Assert (= 12 (re-search-forward "^[a]\\{4,4\\}$"))) + ) + ;; charset, charset_not ;; Not called because it takes too much time. (defun test-regexp-charset-paranoid () @@ -247,8 +330,8 @@ (Assert (not (string-match "\\> " " "))) (Assert (not (string-match "a\\<" "a"))) (Assert (not (string-match "\\>a" "a"))) -;; Expect these to fail :-( -;; Added Known-Bug 2002-09-09 +;; Added Known-Bug 2002-09-09 sjt +;; These are now fixed 2003-03-21 sjt (Assert (not (string-match "\\b" ""))) (Assert (not (string-match " \\b" " "))) (Assert (not (string-match "\\b " " "))) @@ -272,3 +355,97 @@ (Assert (not (string-match "@[A]" (string ?@ ch1)))) (Assert (eq (string-match "@[^A]" (string ?@ ch1)) 0)) (Assert (not (string-match "@?A" (string ?@ ch1)))))) + +;; More stale match data tests. +;; Thanks to for drawing attention to this issue. +;; Flying in the face of sanity, the Asserts with positive results below are +;; correct. Too much code depends on failed matches preserving match-data. +(let ((a "a")) + (Assert (string= (progn (string-match "a" a) + (string-match "b" a) + (match-string 0 a)) + a)) + (Assert (not (progn (string-match "a" a) + (string-match "b" a) + (match-string 1 a)))) + ;; test both for the second match is a plain string match and a regexp match + (Assert (string= (progn (string-match "\\(a\\)" a) + (string-match "\\(b\\)" a) + (match-string 0 a)) + a)) + (Assert (string= (progn (string-match "\\(a\\)" a) + (string-match "b" a) + (match-string 0 a)) + a)) + (Assert (string= (progn (string-match "\\(a\\)" a) + (string-match "\\(b\\)" a) + (match-string 1 a)) + a)) + (Assert (string= (progn (string-match "\\(a\\)" a) + (string-match "b" a) + (match-string 1 a)) + a))) + +;; bug identified by Katsumi Yamaoka 2004-09-03 +;; fix submitted by sjt 2004-09-08 +;; trailing comments are values from buggy 21.4.15 +(let ((text "abc")) + (Assert (eq 0 (string-match "\\(?:ab+\\)*c" text))) ; 2 + (Assert (eq 0 (string-match "^\\(?:ab+\\)*c" text))) ; nil + (Assert (eq 0 (string-match "^\\(?:ab+\\)*" text))) ; 0 + (Assert (eq 0 (string-match "^\\(?:ab+\\)c" text))) ; 0 + (Assert (eq 0 (string-match "^\\(?:ab\\)*c" text))) ; 0 + (Assert (eq 0 (string-match "^\\(?:a+\\)*b" text))) ; nil + (Assert (eq 0 (string-match "^\\(?:a\\)*b" text))) ; 0 +) + +;; per Steve Youngs 2004-09-30 +;; fix submitted by sjt 2004-10-07 +;; trailing comments are values from buggy 21.4.pre16 +(let ((text "abc")) + (Assert (eq 0 (string-match "\\(?:a\\(b\\)\\)" text))) ; 0 + (Assert (string= (match-string 1 text) "b")) ; ab + (Assert (null (match-string 2 text))) ; b + (Assert (null (match-string 3 text))) ; nil + (Assert (eq 0 (string-match "\\(?:a\\(?:b\\(c\\)\\)\\)" text))) ; 0 + (Assert (string= (match-string 1 text) "c")) ; abc + (Assert (null (match-string 2 text))) ; ab + (Assert (null (match-string 3 text))) ; c + (Assert (null (match-string 4 text))) ; nil +) + +;; trivial subpatterns and backreferences with shy groups +(let ((text1 "abb") + (text2 "aba") + (re0 "\\(a\\)\\(b\\)\\2") + (re1 "\\(?:a\\)\\(b\\)\\2") + (re2 "\\(?:a\\)\\(b\\)\\1") + (re3 "\\(a\\)\\(?:b\\)\\1")) + + (Assert (eq 0 (string-match re0 text1))) + (Assert (string= text1 (match-string 0 text1))) + (Assert (string= "a" (match-string 1 text1))) + (Assert (string= "b" (match-string 2 text1))) + (Assert (null (string-match re0 text2))) + + (Check-Error-Message 'invalid-regexp "Invalid back reference" + (string-match re1 text1)) + + (Assert (eq 0 (string-match re2 text1))) + (Assert (string= text1 (match-string 0 text1))) + (Assert (string= "b" (match-string 1 text1))) + (Assert (null (match-string 2 text1))) + (Assert (null (string-match re2 text2))) + + (Assert (null (string-match re3 text1))) + (Assert (eq 0 (string-match re3 text2))) + (Assert (string= text2 (match-string 0 text2))) + (Assert (string= "a" (match-string 1 text2))) + (Assert (null (match-string 2 text2))) + + ;; Test Arnaud Giersch's shy group fix + (Assert (progn (string-match "\\(a\\)" "a") + (string-match "\\(?:a\\)" "a") + (not (match-beginning 1)))) +) +