Switch from (%8sync (%run)) to just (%8sync) or (%8sync-run)
[8sync.git] / tests / test-agenda.scm
index d62e01ce284f777e831884cf9e9a0610413886f5..12826c29b02efad4b40a4a891ec874ba71f4c8e8 100644 (file)
@@ -23,6 +23,7 @@
 (define-module (tests test-agenda)
   #:use-module (srfi srfi-64)
   #:use-module (ice-9 q)
+  #:use-module (ice-9 match)
   #:use-module (ice-9 receive)
   #:use-module (8sync agenda)
   #:use-module (tests utils))
 ;;; %run, %8sync and friends tests
 ;;; ==============================
 
-(define (test-%run-and-friends async-request expected-when)
-  (let* ((fake-kont (speak-it))
-         (run-request ((@@ (8sync agenda) setup-async-request)
-                       fake-kont async-request)))
-    (test-equal (car async-request) '*async-request*)
-    (test-equal (run-request-when run-request) expected-when)
-    ;; we're using speaker as a fake continuation ;p
-    ((run-request-proc run-request))
-    (test-equal (fake-kont)
-                '("applesauce"))))
-
-(test-%run-and-friends (%run (string-concatenate '("apple" "sauce")))
+(define-syntax-rule (run-in-fake-agenda
+                     code-to-run)
+  (let ((agenda (make-agenda)))
+    (parameterize ((%current-agenda agenda))
+      (call-with-prompt
+       (agenda-prompt-tag agenda)
+       (lambda ()
+         (list '*normal-result* code-to-run))
+       (lambda (kont async-request)
+         (list '*caught-kont*
+               kont async-request
+               ((@@ (8sync agenda) setup-async-request)
+                kont async-request)))))))
+
+(define (test-%run-and-friends run-result expected-when)
+  (match run-result
+    (('*caught-kont* kont async-request setup-request)
+     (let* ((fake-kont (speak-it))
+            (run-request ((@@ (8sync agenda) setup-async-request)
+                          fake-kont async-request)))
+       (test-equal (car async-request) '*async-request*)
+       (test-equal (run-request-when run-request) expected-when)
+       ;; we're using speaker as a fake continuation ;p
+       ((run-request-proc run-request))
+       (test-equal (fake-kont)
+                   '("applesauce"))))))
+
+(test-%run-and-friends (run-in-fake-agenda
+                        (%8sync (string-concatenate '("apple" "sauce"))))
                        #f)
 
-(test-%run-and-friends (%run-at (string-concatenate '("apple" "sauce"))
-                                '(8 . 0))
+(test-%run-and-friends (run-in-fake-agenda
+                        (%8sync (string-concatenate '("apple" "sauce"))
+                                '(8 . 0)))
                        '(8 . 0))
 
-(test-%run-and-friends (%run-delay (string-concatenate '("apple" "sauce"))
-                                   8)
+(test-%run-and-friends (run-in-fake-agenda
+                        (%8sync-delay (string-concatenate '("apple" "sauce"))
+                                      8))
                        ;; whoa, I'm surprised equal? can
                        ;; compare records like this
                        (tdelta 8))
   (speaker "Today I went to the zoo and I saw...\n")
   (speaker
    (string-concatenate
-    `("A " ,(symbol->string (%8sync (%run (return-monkey)))) "!\n"))))
+    `("A " ,(symbol->string (%8sync (return-monkey))) "!\n"))))
 
 (begin
   (set! speaker (speak-it))
 
 (define (indirection-remote-func-breaks)
   (speaker "bebop\n")
-  (%8sync (%run (remote-func-breaks)))
+  (%8sync (remote-func-breaks))
   (speaker "bidop\n"))
 
 (define* (local-func-gets-break #:key with-indirection)