#lang racket/base ;; Provides a harness for running programs on the browser and ;; examining their results. ;; Provides a test form that expects the path of a program and its ;; expected output. (require "browser-evaluate.rkt" "../js-assembler/package.rkt" "../make/make-structs.rkt" racket/port racket/path racket/runtime-path racket/runtime-path (for-syntax racket/base racket/path racket/port)) (define evaluate (make-evaluate (lambda (program op) (fprintf op "(function () {") (displayln (get-runtime) op) (newline op) (fprintf op "var innerInvoke = ") (package-anonymous program #:should-follow-children? (lambda (src) #t) #:output-port op) (fprintf op "();\n") (fprintf op #<string))]) (quasisyntax/loc #'stx (begin (printf "running test on ~s..." original-source-file-path) (flush-output (current-output-port)) (let* ([src-path source-file-path] [result (evaluate (make-MainModuleSource (make-ModuleSource src-path)))] [output (evaluated-stdout result)]) (cond [(string=? output exp) (printf " ok (~a milliseconds)\n" (evaluated-t result))] [else (printf " error!\n") (raise (make-exn:fail:error-on-test (format "Expected ~s, got ~s" exp output) (current-continuation-marks) (srcloc '#,(syntax-source #'stx) '#,(syntax-line #'stx) '#,(syntax-column #'stx) '#,(syntax-position #'stx) '#,(syntax-span #'stx))))])))))])) (provide test)