aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscgilardi <scgilardi@gmail.com>2009-02-15 05:45:49 +0000
committerscgilardi <scgilardi@gmail.com>2009-02-15 05:45:49 +0000
commit504ee3b34e60c92adb8e071d71f33c4dc9928894 (patch)
tree1cebc7eba70e0cd0c63af7e5936d2aa07078efa7
parentf4bc2008141857fbe32eeb54c8fcd0183b27ffee (diff)
fix issue 18: test agents error handling. Patch from Shawn Hoover
-rw-r--r--src/clojure/contrib/test_clojure.clj4
-rw-r--r--src/clojure/contrib/test_clojure/agents.clj29
2 files changed, 32 insertions, 1 deletions
diff --git a/src/clojure/contrib/test_clojure.clj b/src/clojure/contrib/test_clojure.clj
index 6c262337..8bc921ab 100644
--- a/src/clojure/contrib/test_clojure.clj
+++ b/src/clojure/contrib/test_clojure.clj
@@ -24,7 +24,9 @@
:data-structures
:numbers
:sequences
- :for])
+ :for
+ :agents
+ ])
(defn test-name
[test]
diff --git a/src/clojure/contrib/test_clojure/agents.clj b/src/clojure/contrib/test_clojure/agents.clj
new file mode 100644
index 00000000..30951fc0
--- /dev/null
+++ b/src/clojure/contrib/test_clojure/agents.clj
@@ -0,0 +1,29 @@
+;; Copyright (c) Shawn Hoover. All rights reserved. The use and
+;; distribution terms for this software are covered by the Eclipse Public
+;; License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can
+;; be found in the file epl-v10.html at the root of this distribution. By
+;; using this software in any fashion, you are agreeing to be bound by the
+;; terms of this license. You must not remove this notice, or any other,
+;; from this software.
+
+(ns clojure.contrib.test-clojure.agents
+ (:use clojure.contrib.test-is))
+
+(deftest handle-all-throwables-during-agent-actions
+ ;; Bug fixed in r1198; previously hung Clojure or didn't report agent errors
+ ;; after OutOfMemoryError, yet wouldn't execute new actions.
+ (let [agt (agent nil)]
+ (send agt (fn [state] (throw (Throwable. "just testing Throwables"))))
+ (try
+ ;; Let the action finish; eat the "agent has errors" error that bubbles up
+ (await agt)
+ (catch RuntimeException _))
+ (is (instance? Throwable (first (agent-errors agt))))
+ (is (= 1 (count (agent-errors agt))))
+
+ ;; And now send an action that should work
+ (clear-agent-errors agt)
+ (is (= nil @agt))
+ (send agt nil?)
+ (await agt)
+ (is (true? @agt))))