(Assert (string-match "^\\(Ä\\)\\1$" "ÄÄ"))
(Assert (not (string-match "^\\(Ä\\)\\1$" "Ää"))))
+;; multiple-match
+;; Thanks to Manfred Bartz <MBartz@xix.com>
+;; c.e.x <vn4rkkm7ouf3b5@corp.supernews.com>
+;; #### 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 ()
(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 " " ")))
(Assert (not (string-match "@?A" (string ?@ ch1))))))
;; More stale match data tests.
-;; Thanks to <bjacob@ca.metsci.com>.
-(Assert (not (progn (string-match "a" "a")
- (string-match "b" "a")
- (match-string 0 "a"))))
-(Assert (not (progn (string-match "a" "a")
- (string-match "b" "a")
- (match-string 1 "a"))))
-(Assert (not (progn (string-match "\\(a\\)" "a")
- (string-match "\\(b\\)" "a")
- (match-string 0 "a"))))
-(Assert (not (progn (string-match "\\(a\\)" "a")
- (string-match "\\(b\\)" "a")
- (match-string 1 "a"))))
+;; Thanks to <bjacob@ca.metsci.com> 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)))