write tests for handle-stanza
authorrekado <rekado@elephly.net>
Tue, 16 Dec 2014 17:38:32 +0000 (18:38 +0100)
committerrekado <rekado@elephly.net>
Tue, 16 Dec 2014 17:38:32 +0000 (18:38 +0100)
spec/xmpp.scm

index a5f5ed8..0b9a74b 100644 (file)
 
 ;; TODO
 (suite "next-stanza-id!" (tests))
-(suite "handle-stanza" (tests))
+(suite "handle-stanza"
+       (tests
+        (test "calls id handler first, then generic handler" e
+              (assert-equal
+               '(generic-handler id-handler)
+               (let ((results '()))
+                 (register-stanza-handler
+                  (lambda _ (set! results (cons 'generic-handler results))))
+                 (register-temp-stanza-handler-for-id
+                  (stanza-id (e 'stanza))
+                  (lambda _ (set! results (cons 'id-handler results))))
+                 ((@@ (gnubba xmpp) handle-stanza) (e 'stanza))
+                 results)))
+        (test "catches 'halt" e
+              (assert-false
+               (error?
+                (begin
+                  (register-stanza-handler
+                   (lambda _ (throw 'never-executed)))
+                  (register-temp-stanza-handler-for-id
+                   (stanza-id (e 'stanza))
+                   (lambda _ (throw 'halt)))
+                  ((@@ (gnubba xmpp) handle-stanza) (e 'stanza)))))))
+       (options)
+       (setups
+        (setup 'stanza (iq "payload" #:to "romeo@capulet.it" #:id "1234")))
+       (teardowns
+        ;; always reset the internal state after each test
+        (teardown e (set! (@@ (gnubba xmpp) *stanza-handlers*) '()))))
 
 (suite "run-handler-loop"
        (tests