Use with-logging-to-port from unstable.

This commit is contained in:
Vincent St-Amour 2011-05-31 19:12:25 -04:00
parent 47f48c08ad
commit 09015722e3

View File

@ -1,41 +1,11 @@
#lang racket #lang racket
(require racket/runtime-path (require racket/runtime-path
rackunit rackunit/text-ui) rackunit rackunit/text-ui
unstable/logging)
(provide optimization-tests missed-optimization-tests (provide optimization-tests missed-optimization-tests
test-opt test-missed-optimization) test-opt test-missed-optimization)
(define (with-logging-to-port port level proc)
(let* ([logger (make-logger #f (current-logger))]
[receiver (make-log-receiver logger level)]
[stop-chan (make-channel)]
[t (thread (lambda ()
(define (output-event l)
(displayln (vector-ref l 1) ; actual message
port))
(define (clear-events)
(let ([l (sync/timeout 0 receiver)])
(when l ; still something to read
(output-event l)
(clear-events))))
(let loop ()
(let ([l (sync receiver stop-chan)])
(cond [(eq? l 'stop)
;; we received all the events we were supposed
;; to get, read them all (w/o waiting), then
;; stop
(clear-events)]
[else ; keep going
(output-event l)
(loop)])))))])
(begin0
(parameterize ([current-logger logger])
(proc))
(channel-put stop-chan 'stop) ; stop the receiver thread
(thread-wait t))))
;; TODO put in unstable somewhere
(define (generate-log name dir) (define (generate-log name dir)
;; some tests require other tests, so some fiddling is required ;; some tests require other tests, so some fiddling is required
(let* ([log-port (open-output-string)] (let* ([log-port (open-output-string)]