changeset 4504:b82fdf7305ee

Correct the implementation, add a few basic tests for #'skip-chars-quote. tests/ChangeLog addition: 2008-08-27 Aidan Kehoe <kehoea@parhasard.net> * automated/regexp-tests.el: Add a few basic #'skip-chars-forward, #'skip-chars-backward tests. lisp/ChangeLog addition: 2008-08-27 Aidan Kehoe <kehoea@parhasard.net> * subr.el (skip-chars-quote): Correct the implementation, following the docstring of #'skip-char-forward more closely rather than the documentation of character classes in the Lispref.
author Aidan Kehoe <kehoea@parhasard.net>
date Wed, 27 Aug 2008 21:47:21 +0200
parents af95657e0bfd
children a5f1da0eb001 bd28481bb0e1
files lisp/ChangeLog lisp/subr.el tests/ChangeLog tests/automated/regexp-tests.el
diffstat 4 files changed, 38 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Wed Aug 27 00:39:09 2008 +0200
+++ b/lisp/ChangeLog	Wed Aug 27 21:47:21 2008 +0200
@@ -1,3 +1,10 @@
+2008-08-27  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* subr.el (skip-chars-quote): 
+	Correct the implementation, following the docstring of
+	#'skip-char-forward more closely rather than the documentation of
+	character classes in the Lispref. 
+
 2008-08-23  Aidan Kehoe  <kehoea@parhasard.net>
 
 	* custom.el: Move #'custom-variable-p to C, since it's now called
--- a/lisp/subr.el	Wed Aug 27 00:39:09 2008 +0200
+++ b/lisp/subr.el	Wed Aug 27 21:47:21 2008 +0200
@@ -1730,17 +1730,15 @@
 Ranges and carets are not treated specially.  This implementation is
 in Lisp; do not use it in performance-critical code."
   (let ((list (delete-duplicates (string-to-list string) :test #'=)))
-    (when (equal list '((?- ?\[) (?\[ ?\-)))
-      (error 'invalid-argument
-	     "Cannot create `skip-chars-forward' arg from string"
-	     string))
-    (when (memq ?\] list)
-      (setq list (cons ?\] (delq ?\] list))))
-    (when (eq ?^ (car list))
-      (setq list (nconc (cdr list) '(?^))))
-    (when (memq ?- list)
-      (setq list (delq ?- list)
-	    list (nconc list (list (second list) ?- (second list) ?-))))
+    (when (/= 1 (length list)) ;; No quoting needed in a string of length 1.
+      (when (eq ?^ (car list))
+        (setq list (nconc (cdr list) '(?^))))
+      (when (memq ?\\ list)
+        (setq list (delq ?\\ list)
+              list (nconc (list ?\\ ?\\) list)))
+      (when (memq ?- list)
+        (setq list (delq ?- list)
+              list (nconc list '(?\\ ?-)))))
     (apply #'string list)))
 
 ;;; subr.el ends here
--- a/tests/ChangeLog	Wed Aug 27 00:39:09 2008 +0200
+++ b/tests/ChangeLog	Wed Aug 27 21:47:21 2008 +0200
@@ -1,3 +1,9 @@
+2008-08-27  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* automated/regexp-tests.el: 
+	Add a few basic #'skip-chars-forward, #'skip-chars-backward
+	tests. 
+
 2008-08-10  Aidan Kehoe  <kehoea@parhasard.net>
 
 	* automated/mule-tests.el (featurep): Update the list of character
--- a/tests/automated/regexp-tests.el	Wed Aug 27 00:39:09 2008 +0200
+++ b/tests/automated/regexp-tests.el	Wed Aug 27 21:47:21 2008 +0200
@@ -522,6 +522,22 @@
 						     2))
       )))
 
+;; Not very comprehensive tests of skip-chars-forward, skip-chars-background: 
+
+(with-string-as-buffer-contents 
+    "-]-----------------------------][]]------------------------"
+  (skip-chars-forward (skip-chars-quote "-[]"))
+  (Assert (= (point) (point-max)))
+  (skip-chars-backward (skip-chars-quote "-[]"))
+  (Assert (= (point) (point-min)))
+  ;; Testing in passing for an old bug in #'skip-chars-forward where I
+  ;; thought it was impossible to call it with a string containing only ?-
+  ;; and ?]: 
+  (Assert (= (skip-chars-forward (skip-chars-quote "-]"))
+             (position ?[ (buffer-string) :test #'=)))
+  ;; This used to error, incorrectly: 
+  (Assert (skip-chars-quote "[-")))
+
 ;; replace-match (REPLACEMENT &optional FIXEDCASE LITERAL STRING STRBUFFER)
 
 ;; #### Write some tests!  Much functionality is implicitly tested above