Merge r21-4-14-chise-b1.
[chise/xemacs-chise.git] / tests / automated / regexp-tests.el
index 6c1fcba..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))))
       (Assert (eq (string-match "@[^A]" (string ?@ ch1)) 0))
       (Assert (not (string-match "@?A" (string ?@ ch1))))))
+
+;; More stale match data tests.
+;; 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)))