~ chicken-r7rs (master) 4f58c169b05696945d43b41cde7d6fcbf3f2bbfc
commit 4f58c169b05696945d43b41cde7d6fcbf3f2bbfc
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Thu May 30 09:05:40 2013 +0000
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Thu May 30 09:05:40 2013 +0000
Basic with-exception-handler & guard tests
diff --git a/tests/run.scm b/tests/run.scm
index bf739af..ccb0a2b 100644
--- a/tests/run.scm
+++ b/tests/run.scm
@@ -15,6 +15,26 @@
((_ . body) (handle-exceptions e e . body))))
(test-group "exceptions"
+ (test "with-exception-handler (escape)"
+ 'exception
+ (call-with-current-continuation
+ (lambda (k)
+ (with-exception-handler
+ (lambda (e) (k 'exception))
+ (lambda () (+ 1 (raise 'an-error)))))))
+ (test-error "with-exception-handler (return)"
+ (with-exception-handler
+ (lambda (e) 'ignore)
+ (lambda () (+ 1 (raise 'an-error)))))
+ (test-error "with-exception-handler (raise)"
+ (with-exception-handler
+ (lambda (e) 'ignore)
+ (lambda () (+ 1 (raise 'an-error)))))
+ (test "with-exception-handler (raise-continuable)"
+ 65
+ (with-exception-handler
+ (lambda (e) 42)
+ (lambda () (+ (raise-continuable "should be a number") 23))))
(test "error-object? (#f)" #f (error-object? 'no))
(test "error-object? (#t)" #t (error-object? (catch (car '()))))
(test "error-object-message" "fubar" (error-object-message (catch (error "fubar"))))
@@ -22,4 +42,18 @@
(test "read-error? (#f)" #f (read-error? (catch (car '()))))
(test "read-error? (#t)" #t (read-error? (catch (read-from-string ")"))))
(test "file-error? (#f)" #f (file-error? (catch (car '()))))
- (test "file-error? (#t)" #t (file-error? (catch (open-input-file "foo")))))
+ (test "file-error? (#t)" #t (file-error? (catch (open-input-file "foo"))))
+ (test-error "guard (no match)"
+ (guard (condition ((assq 'c condition))) (raise '((a . 42)))))
+ (test "guard (match)"
+ '(b . 23)
+ (guard (condition ((assq 'b condition))) (raise '((b . 23)))))
+ (test "guard (=>)"
+ 42
+ (guard (condition ((assq 'a condition) => cdr)) (raise '((a . 42)))))
+ (test "guard (multiple)"
+ '(b . 23)
+ (guard (condition
+ ((assq 'a condition) => cdr)
+ ((assq 'b condition)))
+ (raise '((b . 23))))))
Trap