21.4.14 "Reasonable Discussion".
[chise/xemacs-chise.git.1] / tests / automated / regexp-tests.el
index ea42480..98fd3a9 100644 (file)
 (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)))