* lib.scm (signals-error?, signals-error?*): New macro and function.
authorJim Blandy <jimb@red-bean.com>
Sat, 11 Sep 1999 18:46:32 +0000 (18:46 +0000)
committerJim Blandy <jimb@red-bean.com>
Sat, 11 Sep 1999 18:46:32 +0000 (18:46 +0000)
* tests/reader.test: Use them.

test-suite/lib.scm
test-suite/tests/reader.test

index bcf6bd4..4f1f5f7 100644 (file)
  format-test-name
 
  ;; Finding test input files.
- data-file)
+ data-file
+
+ ;; Noticing whether an error occurs.
+ signals-error? signals-error?*)
 
 
 ;;;; If you're using Emacs's Scheme mode:
     (or (file-exists? f)
        (error "Test suite data file does not exist: " f))
     f))
+
+\f
+;;;; Detecting whether errors occur
+
+;;; (signals-error?* KEY THUNK)
+;;; Apply THUNK, catching errors.  If any errors occur, return #t;
+;;; otherwise, return #f.
+;;;
+;;; KEY indicates the sort of errors to look for; it can be a symbol,
+;;; indicating that only errors with that name should be caught, or
+;;; #t, meaning that any kind of error should be caught.
+(define (signals-error?* key thunk)
+  (catch key
+        (lambda () (thunk) #f)
+        (lambda args #t)))
+
+(defmacro signals-error? key-and-body
+  `(signals-error?* ,(car key-and-body)
+                   (lambda () ,@(cdr key-and-body))))
index 773e6b0..764cb36 100644 (file)
@@ -5,12 +5,10 @@
   (pass-if (call-with-output-string (lambda (port)
                                      (display "Try to read " port)
                                      (write string port)))
-          (catch 'signal
-                 (lambda ()
-                   (call-with-input-string string 
-                                           (lambda (p) (read p)))
-                   #t)
-                 (lambda args #f))))
+          (not (signals-error? 
+                'signal
+                (call-with-input-string string 
+                                        (lambda (p) (read p)))))))
 
 (try-to-read "0")
 (try-to-read "1++i")