;;;; advice tests (use advice test) (define (foo x) (print "foo: " x) (values x (* x 2))) (define (bing args) (print "bing: " args) ) (define (bong args) (print "bong: " args) ) (define ((oink n) old args) (print "--> oink #" n ": " args) (let ((r (receive (old (add1 (car args)))))) (print "<-- oink #" n) (apply values r))) (define id1 (advise 'before foo bing)) (define id2 (advise 'after foo bong)) (define id3 (advise 'around foo (oink 1))) (test-begin) (advise 'around foo (oink 2)) (test '(35 70) (receive (foo 33))) (unadvise foo id2) (test '(102 204) (receive (foo 100))) (unadvise foo #f 'around) (test '(3 6) (receive (foo 3))) (unadvise foo) (test '(9 18) (receive (foo 9))) (test-end) (test-exit)