X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=tests%2Fautomated%2Fregexp-tests.el;h=fde79917e90b0ce952919358bbab3c546188945e;hp=2df315642a134ded6f94907ae2804de7c192178b;hb=79d2db7d65205bc85d471590726d0cf3af5598e0;hpb=6ab1a268f151312bbd9c00e3326fac5fe3f4fafd diff --git a/tests/automated/regexp-tests.el b/tests/automated/regexp-tests.el index 2df3156..fde7991 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 () @@ -204,3 +287,101 @@ (setq i (1+ i)))))) ;; (test-regex-charset-mule-paranoid) + +;; Test replace-match +(with-temp-buffer + (insert "This is a test buffer.") + (goto-char (point-min)) + (search-forward "this is a test ") + (looking-at "Unmatchable text") + (replace-match "") + (Assert (looking-at "^buffer.$"))) + +;; Test that trivial regexps reset unused registers +;; Thanks to Martin Sternholm for the report. +;; xemacs-beta <5blm6h2ki5.fsf@lister.roxen.com> +(with-temp-buffer + (insert "ab") + (goto-char (point-min)) + (re-search-forward "\\(a\\)") + ;; test the whole-match data, too -- one try scotched that, too! + (Assert (string= (match-string 0) "a")) + (Assert (string= (match-string 1) "a")) + (re-search-forward "b") + (Assert (string= (match-string 0) "b")) + (Assert (not (match-string 1)))) + +;; Test word boundaries +(Assert (= (string-match " \\ " "a ") 0)) +(Assert (= (string-match " \\ba" " a") 0)) +(Assert (= (string-match "a\\b " "a ") 0)) +(Assert (= (string-match "\\ba" " a") 1)) +(Assert (= (string-match "a\\b" "a ") 0)) +;; should work at target boundaries +(Assert (= (string-match "\\" "a") 0)) +(Assert (= (string-match "\\ba" "a") 0)) +(Assert (= (string-match "a\\b" "a") 0)) +;; but not if the "word" would be on the null side of the boundary! +(Assert (not (string-match "\\<" ""))) +(Assert (not (string-match "\\>" ""))) +(Assert (not (string-match " \\<" " "))) +(Assert (not (string-match "\\> " " "))) +(Assert (not (string-match "a\\<" "a"))) +(Assert (not (string-match "\\>a" "a"))) +;; 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 " " "))) + +;; Added 2002-12-27 +(if (featurep 'mule) + ;; note: (int-to-char 65) => ?A + (let ((ch0 (make-char 'japanese-jisx0208 52 65)) + (ch1 (make-char 'japanese-jisx0208 51 65))) + (Assert (not (string-match "A" (string ch0)))) + (Assert (not (string-match "[A]" (string ch0)))) + (Assert (eq (string-match "[^A]" (string ch0)) 0)) + (Assert (not (string-match "@A" (string ?@ ch0)))) + (Assert (not (string-match "@[A]" (string ?@ ch0)))) + (Assert (eq (string-match "@[^A]" (string ?@ ch0)) 0)) + (Assert (not (string-match "@?A" (string ?@ ch0)))) + (Assert (not (string-match "A" (string ch1)))) + (Assert (not (string-match "[A]" (string ch1)))) + (Assert (eq (string-match "[^A]" (string ch1)) 0)) + (Assert (not (string-match "@A" (string ?@ ch1)))) + (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)))