actors: Add cleanup facility to run-hive.
[8sync.git] / tests / utils.scm
index 9eb6d7aea74ae4d9d24c2f2a35880d73289829e4..e20b5b872cd04057c29e6b6af446f5ef10876293 100644 (file)
@@ -1,19 +1,18 @@
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
-
-;; This library is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU Lesser General Public
-;; License as published by the Free Software Foundation; either
-;; version 3 of the License, or (at your option) any later version.
-;;
-;; This library is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; Lesser General Public License for more details.
-;;
-;; You should have received a copy of the GNU Lesser General Public
-;; License along with this library; if not, write to the Free Software
-;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-;; 02110-1301 USA
+;;;
+;;; This library is free software; you can redistribute it and/or
+;;; modify it under the terms of the GNU Lesser General Public
+;;; License as published by the Free Software Foundation; either
+;;; version 3 of the License, or (at your option) any later version.
+;;;
+;;; This library is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;;; Lesser General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU Lesser General Public
+;;; License along with this program.  If not, see
+;;; <http://www.gnu.org/licenses/>.
 
 ;; Thanks for giving permission to license this under LGPL for
 ;; consistency, David!
 
 (define-module (tests utils)
   #:use-module (srfi srfi-64)
-  #:export (test-exit))
+  #:export (test-exit
+
+            speak get-spoken with-fresh-speaker))
 
 (define (test-exit)
   (exit (= (test-runner-fail-count (test-runner-current)) 0)))
+
+
+\f
+
+;;; display-like helpers
+;;; ====================
+
+(define (speak-it)
+  (let ((messages '()))
+    (lambda* (#:optional message)
+      (if message (set! messages (append messages (list message))))
+      messages)))
+
+(define %speaker (make-parameter (speak-it)))
+
+(define (speak message)
+  "Speak a message into the %speaker parameter"
+  ((%speaker) message))
+
+(define (get-spoken)
+  "Get what's been spoken in the %speaker parameter"
+  ((%speaker)))
+
+(define-syntax-rule (with-fresh-speaker body ...)
+  "Run body with a fresh %speaker"
+  (parameterize ((%speaker (speak-it)))
+    body ...))