1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +02:00

8-bit locale needed for 8-bit regexp tests

Since the regex library expects 8-bit clean characters and
an 8-bit locale, tests of 8-bit characters need to occur within
the context of an 8-bit locale.

* test-suite/tests/regexp.test (regexp-quote tests): wrap them in an
  ISO-8859-1 locale
This commit is contained in:
Michael Gran 2009-09-07 18:50:39 -07:00
parent 7519234547
commit 0d05ae7c4b

View file

@ -132,55 +132,56 @@
(with-test-prefix "regexp-quote"
(pass-if-exception "no args" exception:wrong-num-args
(regexp-quote))
(with-locale "en_US.iso88591"
(pass-if-exception "no args" exception:wrong-num-args
(regexp-quote))
(pass-if-exception "bad string arg" exception:wrong-type-arg
(regexp-quote 'blah))
(pass-if-exception "bad string arg" exception:wrong-type-arg
(regexp-quote 'blah))
(let ((lst `((regexp/basic ,regexp/basic)
(regexp/extended ,regexp/extended)))
;; string of all characters, except #\nul which doesn't work because
;; it's the usual end-of-string for the underlying C regexec()
(allchars (list->string (map integer->char
(cdr (iota char-code-limit))))))
(for-each
(lambda (elem)
(let ((name (car elem))
(flag (cadr elem)))
(let ((lst `((regexp/basic ,regexp/basic)
(regexp/extended ,regexp/extended)))
;; string of all characters, except #\nul which doesn't work because
;; it's the usual end-of-string for the underlying C regexec()
(allchars (list->string (map integer->char
(cdr (iota char-code-limit))))))
(for-each
(lambda (elem)
(let ((name (car elem))
(flag (cadr elem)))
(with-test-prefix name
(with-test-prefix name
;; try on each individual character, except #\nul
(do ((i 1 (1+ i)))
((>= i char-code-limit))
(let* ((c (integer->char i))
(s (string c))
(q (regexp-quote s)))
(pass-if (list "char" i c s q)
(let ((m (regexp-exec (make-regexp q flag) s)))
(and (= 0 (match:start m))
(= 1 (match:end m)))))))
;; try on each individual character, except #\nul
(do ((i 1 (1+ i)))
((>= i char-code-limit))
(let* ((c (integer->char i))
(s (string c))
(q (regexp-quote s)))
(pass-if (list "char" i (format #f "~s ~s ~s" c s q))
(let ((m (regexp-exec (make-regexp q flag) s)))
(and (= 0 (match:start m))
(= 1 (match:end m)))))))
;; try on pattern "aX" where X is each character, except #\nul
;; this exposes things like "?" which are special only when they
;; follow a pattern to repeat or whatever ("a" in this case)
(do ((i 1 (1+ i)))
((>= i char-code-limit))
(let* ((c (integer->char i))
(s (string #\a c))
(q (regexp-quote s)))
(pass-if (list "string \"aX\"" i c s q)
(let ((m (regexp-exec (make-regexp q flag) s)))
(and (= 0 (match:start m))
(= 2 (match:end m)))))))
;; try on pattern "aX" where X is each character, except #\nul
;; this exposes things like "?" which are special only when they
;; follow a pattern to repeat or whatever ("a" in this case)
(do ((i 1 (1+ i)))
((>= i char-code-limit))
(let* ((c (integer->char i))
(s (string #\a c))
(q (regexp-quote s)))
(pass-if (list "string \"aX\"" i (format #f "~s ~s ~s" c s q))
(let ((m (regexp-exec (make-regexp q flag) s)))
(and (= 0 (match:start m))
(= 2 (match:end m)))))))
(pass-if "string of all chars"
(let ((m (regexp-exec (make-regexp (regexp-quote allchars)
flag) allchars)))
(and (= 0 (match:start m))
(= (string-length allchars) (match:end m))))))))
lst)))
(pass-if "string of all chars"
(let ((m (regexp-exec (make-regexp (regexp-quote allchars)
flag) allchars)))
(and (= 0 (match:start m))
(= (string-length allchars) (match:end m))))))))
lst))))
;;;
;;; regexp-substitute