drdr-ized the rest of the drscheme test suite

svn: r17945
This commit is contained in:
Robby Findler 2010-02-02 21:06:07 +00:00
parent 8d2f32efed
commit e74e46d9ca
11 changed files with 587 additions and 807 deletions

View File

@ -1,20 +1,19 @@
(module text-string-style-desc mzscheme
(provide get-string/style-desc)
(require mred
mzlib/etc
mzlib/class)
#lang scheme/base
;; get-string/style-desc : text -> (listof str/ann)
(define get-string/style-desc
(opt-lambda (text [start 0] [end (send text last-position)])
(provide get-string/style-desc)
(require scheme/gui/base
scheme/class)
;; get-string/style-desc : text -> (listof str/ann)
(define (get-string/style-desc text [start 0] [end (send text last-position)])
(let* ([snips (get-snips text start end)]
[str/ann (map snip->str/ann snips)]
[joined-str/ann (join-like str/ann)])
joined-str/ann)))
joined-str/ann))
;; get-snips : text -> (listof snip)
;; extracts the snips from a text
(define (get-snips text start end)
;; get-snips : text -> (listof snip)
;; extracts the snips from a text
(define (get-snips text start end)
(send text split-snip start)
(send text split-snip end)
(let loop ([snip (send text find-snip start 'after-or-none)])
@ -24,9 +23,9 @@
(cons snip (loop (send snip next)))]
[else null])))
;; snip->str/ann : snip -> str/ann
;; extracts the style type from the snip
(define (snip->str/ann snip)
;; snip->str/ann : snip -> str/ann
;; extracts the style type from the snip
(define (snip->str/ann snip)
(let* ([str (cond
[(is-a? snip string-snip%)
(send snip get-text 0 (send snip get-count))]
@ -40,8 +39,8 @@
(describe-style style))])
(list str style-desc)))
;; describe-style : style -> (listof symbol)
(define (describe-style style)
;; describe-style : style -> (listof symbol)
(define (describe-style style)
(list
'alignment (send style get-alignment)
'background (symbolic-color (send style get-background))
@ -51,25 +50,25 @@
'size (send style get-size)
'underlined (send style get-underlined)))
(define (symbolic-color color)
(define (symbolic-color color)
(list (send color red)
(send color green)
(send color blue)))
;; translate-name : (union #f string) -> symbol
;; translates the style name to a symbol
(define (translate-name str)
;; translate-name : (union #f string) -> symbol
;; translates the style name to a symbol
(define (translate-name str)
(and str
(let ([m (regexp-match re:translate-name str)])
(and m
(string->symbol (cadr m))))))
;; re:translate-name : regexp
(define re:translate-name (regexp "^.*:([^:]*)$"))
;; re:translate-name : regexp
(define re:translate-name (regexp "^.*:([^:]*)$"))
;; join-like : (listof str/ann) -> (listof str/ann)
;; joins same styles to form largest groups
(define (join-like str/anns)
;; join-like : (listof str/ann) -> (listof str/ann)
;; joins same styles to form largest groups
(define (join-like str/anns)
(cond
[(null? str/anns) null]
[else
@ -87,4 +86,4 @@
(cdr rest))
(cons first
(loop second
(cdr rest)))))]))])))
(cdr rest)))))]))]))

View File

@ -1,55 +0,0 @@
#lang scheme/base
(provide all-tests)
(define all-tests (map symbol->string '(
#|
This directory contains code for testing DrScheme. To run the tests,
load run-test.ss. It will return a function that accepts the names of
tests. Those names must be listed here. If no arguments are passed to
the function, all tests will be run.
stepper-test.ss
runs the stepper on the sample solutions and
checks the results.
(this test suite is not being maintained)
|# io.ss #|
This tests the drscheme's io implementation.
|# repl-test.ss #|
This tests various interactions between parameters in the
implementation of drscheme.
|# language-test.ss #|
This tests that all of the individual settings in the language dialog
take effect in the repl.
|# module-lang-test.ss #|
This tests the code involved in implementing the new module language.
graphics.ss
This tests the various graphic elements that can appear
in programs.
launcher.ss
This tests the launcher feature of drscheme.
|# sample-solutions-one-window.ss #|
This tests the sample solutions in HtDP,
but reuses the same drscheme window.
There is a race condition in this test,
so it is commented out here, for now.
|# teachpack.ss #|
Tests the teachpacks
|#)))

View File

@ -1,3 +1,5 @@
#lang scheme/base
#|
add this test:
@ -10,21 +12,14 @@ add this test:
|#
(module io mzscheme
(require "drscheme-test-util.ss"
(require "drscheme-test-util.ss"
tests/utils/gui
mzlib/class
mzlib/list
mzlib/pretty
mred
framework
mrlib/text-string-style-desc
(prefix fw: framework))
mrlib/text-string-style-desc)
(provide run-test)
(define (output-err-port-checking)
(define (check-output expression expected)
(define (check-output expression expected)
(begin
(clear-definitions drs-frame)
(type-in-definitions drs-frame expression)
@ -40,12 +35,12 @@ add this test:
expected
got))
(fprintf (current-error-port)
"expected ~s, got ~s for ~s\n\n"
"expected ~s\n got ~s\nfor ~s\n\n"
expected
got
expression)))))
(define (get-annotated-output)
(define (get-annotated-output)
(let ([chan (make-channel)])
(queue-callback
(λ ()
@ -55,16 +50,18 @@ add this test:
(send text paragraph-start-position 2))))))
(channel-get chan)))
(define (output-style x) (eq? x '|ports out|))
(define (error-style x) (eq? x '|ports err|))
(define (value-style x) (eq? x '|ports value|))
(define prompt '("\n> " default-color))
(define (output-style x) (eq? x '|ports out|))
(define (error-style x) (eq? x '|ports err|))
(define (value-style x) (eq? x '|ports value|))
(define prompt '("\n> " default-color))
(define (output-err-port-checking)
;; this test has to be first to test an uninitialized state of the port
(check-output "(port-next-location (current-input-port))"
(list `("1\n0\n1" |ports value|)
prompt))
(list `("1\n0\n1\n" |ports value|)
'("> " default-color)))
(check-output "(display 1)" (list (list "1" output-style) prompt))
(check-output "(display 1 (current-output-port))" (list (list "1" output-style) prompt))
@ -100,7 +97,7 @@ add this test:
(list (list "1" error-style)
prompt)))
(define (long-io/execute-test)
(define (long-io/execute-test)
(let ([string-port (open-output-string)])
(pretty-print
(let f ([n 7] [p null]) (if (= n 0) p (list (f (- n 1) (cons 'l p)) (f (- n 1) (cons 'r p)))))
@ -121,7 +118,7 @@ add this test:
(error 'io.ss "failed long io / execute test (output doesn't match)")))))
(define (reading-test)
(define (reading-test)
(define (do-input-test program input expected-transcript)
(do-execute drs-frame)
(type-in-interactions drs-frame program)
@ -140,7 +137,8 @@ add this test:
(send interactions-text paragraph-end-position
(- (send interactions-text last-paragraph) 1)))])
(unless (equal? got-value expected-transcript)
(printf "FAILED: expected: ~s~n got: ~s~n program: ~s~n input: ~s~n"
(fprintf (current-error-port)
"FAILED: expected: ~s~n got: ~s~n program: ~s~n input: ~s~n"
expected-transcript got-value program input)))))
(clear-definitions drs-frame)
@ -156,7 +154,7 @@ add this test:
(do-input-test "(begin (read-char) (sleep 1) (read-char))" "ab\ncd\n" "ab\ncd\n#\\b")
(do-input-test "(list (read) (sleep 1) (read) (read))" "a b\nc d\n" "a b\nc d\n(a #<void> b c)")
(do-input-test "(begin (display 1) (read))" "2\n" "12\n2\n") ;; why an extra newline?!
(do-input-test "(begin (display 1) (read))" "2\n" "12\n2")
(do-input-test "(read-line)" "\n" "\n\"\"")
(do-input-test "(read-char)" "\n" "\n#\\newline")
@ -169,7 +167,7 @@ add this test:
"()\n"
"()\n()")
(do-input-test "(begin (write (read)) (write (read)))"
(do-input-test "(begin (write (read)) (flush-output) (write (read)))"
"(1)\n(2)\n"
"(1)\n(1)(2)\n(2)")
@ -182,14 +180,23 @@ add this test:
"ab\n"
"ab\n(97 #\"b\" #\"\\n\" #\"\\2\")"))
(define drs-frame #f)
(define interactions-text #f)
(define drs-frame #f)
(define interactions-text #f)
(define (run-test)
(let ([s (make-semaphore)])
(fire-up-drscheme)
(thread
(λ ()
(set! drs-frame (wait-for-drscheme-frame))
(set! interactions-text (send drs-frame get-interactions-text))
(set-language-level! (list #rx"Pretty Big"))
(clear-definitions drs-frame)
(do-execute drs-frame)
(output-err-port-checking) ;; must come first
;(long-io/execute-test)
(reading-test)
))
(semaphore-post s)))
(yield s)
(exit))

View File

@ -20,8 +20,6 @@ the settings above should match r5rs
framework
(prefix-in fw: framework))
(provide run-test)
(define language (make-parameter "<<not a language>>"))
;; set-language : boolean -> void
@ -1045,7 +1043,8 @@ the settings above should match r5rs
(do-execute drs)
(let* ([got (fetch-output/should-be-tested drs)])
(unless (string=? result got)
(printf "FAILED: ~s ~s ~s test~n expected: ~s~n got: ~s~n"
(fprintf (current-error-port)
"FAILED: ~s ~s ~s test~n expected: ~s~n got: ~s~n"
(language) setting-name expression result got)))))
(define (test-hash-bang)
@ -1058,7 +1057,8 @@ the settings above should match r5rs
(do-execute drs)
(let* ([got (fetch-output/should-be-tested drs)])
(unless (string=? "1" got)
(printf "FAILED: ~s ~a test~n expected: ~s~n got: ~s~n"
(fprintf (current-error-port)
"FAILED: ~s ~a test~n expected: ~s~n got: ~s~n"
(language) expression result got)))))
(define (fetch-output/should-be-tested . args)
@ -1094,7 +1094,8 @@ the settings above should match r5rs
(min (string-length line1-expect)
(string-length line1-got))))
(regexp-match line1-expect line1-got)))
(printf "expected lines: ~n ~a~n ~a~ngot lines:~n ~a~n ~a~n"
(fprintf (current-error-port)
"expected lines: ~n ~a~n ~a~ngot lines:~n ~a~n ~a~n"
line0-expect line1-expect
line0-got line1-got)
(error 'language-test.ss "failed get top of repl test")))))
@ -1176,7 +1177,8 @@ the settings above should match r5rs
(unless (if (procedure? answer)
(answer got)
(whitespace-string=? answer got))
(printf "FAILED ~s ~a, sharing ~a pretty? ~a~n got ~s~n expected ~s~n"
(fprintf (current-error-port)
"FAILED ~s ~a, sharing ~a pretty? ~a~n got ~s~n expected ~s~n"
(language) option show-sharing pretty?
(shorten got)
(if (procedure? answer) (answer) answer)))))])
@ -1244,7 +1246,8 @@ the settings above should match r5rs
(send interactions-text paragraph-end-position
(- (send interactions-text last-paragraph) 1)))])
(unless (equal? got "0")
(printf "FAILED: test-error-after-definition failed, expected 0, got ~s\n" got))))))
(fprintf (current-error-port)
"FAILED: test-error-after-definition failed, expected 0, got ~s\n" got))))))
;; test-expression : (union string 'xml 'image (listof (union string 'xml 'image)))
@ -1348,3 +1351,8 @@ the settings above should match r5rs
(go advanced)
(go pretty-big)
(go r5rs))
(let ()
(fire-up-drscheme)
(thread (λ () (run-test) (exit)))
(yield (make-semaphore)))

View File

@ -75,7 +75,8 @@
(send interactions-text paragraph-start-position 2)
(send interactions-text paragraph-end-position 2))])
(unless (or (test-all? test) (string=? "> " after-execute-output))
(printf "FAILED (line ~a): ~a\n ~a\n expected no output after execution, got: ~s\n"
(fprintf (current-error-port)
"FAILED (line ~a): ~a\n ~a\n expected no output after execution, got: ~s\n"
(test-line test)
(test-definitions test)
(or (test-interactions test) 'no-interactions)
@ -107,7 +108,8 @@
[else 'module-lang-test "bad test value: ~e" r])
r text))])
(unless output-passed?
(printf "FAILED (line ~a): ~a\n ~a\n expected: ~s\n got: ~s\n"
(fprintf (current-error-port)
"FAILED (line ~a): ~a\n ~a\n expected: ~s\n got: ~s\n"
(test-line test)
(test-definitions test)
(or (test-interactions test) 'no-interactions)
@ -120,7 +122,8 @@
(let ([error-ranges-expected
((test-error-ranges test) definitions-text interactions-text)])
(unless (equal? error-ranges-expected (send interactions-text get-error-ranges))
(printf "FAILED (line ~a; ranges): ~a\n expected: ~s\n got: ~s\n"
(fprintf (current-error-port)
"FAILED (line ~a; ranges): ~a\n expected: ~s\n got: ~s\n"
(test-line test)
(test-definitions test)
error-ranges-expected

View File

@ -262,3 +262,10 @@
(current-namespace (make-base-empty-namespace))}
"(+ 1 2)"
"3")
(require "drscheme-test-util.ss")
(let ()
(fire-up-drscheme)
(thread (λ () (run-test) (exit)))
(yield (make-semaphore 0)))

View File

@ -17,8 +17,6 @@ This produces an ACK message
mred
framework)
(provide run-test)
(define-struct loc (line col offset))
;; loc = (make-loc number number number)
;; all numbers in loc structs start at zero.
@ -1186,11 +1184,13 @@ This produces an ACK message
(cond
[(eq? source-location 'definitions)
(unless (send definitions-canvas has-focus?)
(printf "FAILED execute test for ~s\n expected definitions to have the focus\n"
(fprintf (current-error-port)
"FAILED execute test for ~s\n expected definitions to have the focus\n"
program))]
[(eq? source-location 'interactions)
(unless (send interactions-canvas has-focus?)
(printf "FAILED execute test for ~s\n expected interactions to have the focus\n"
(fprintf (current-error-port)
"FAILED execute test for ~s\n expected interactions to have the focus\n"
program))]
[(send definitions-canvas has-focus?)
(let ([start (car source-location)]
@ -1203,7 +1203,8 @@ This produces an ACK message
(= (+ (srcloc-position error-range) -1) (loc-offset start))
(= (+ (srcloc-position error-range) -1 (srcloc-span error-range))
(loc-offset finish)))
(printf "FAILED execute test for ~s\n error-range is ~s\n expected ~s\n"
(fprintf (current-error-port)
"FAILED execute test for ~s\n error-range is ~s\n expected ~s\n"
program
(and error-range
(list (+ (srcloc-position error-range) -1)
@ -1220,7 +1221,8 @@ This produces an ACK message
(regexp-match execute-answer received-execute)]
[else #f])
(failure)
(printf "FAILED execute test for ~s (~a)\n expected: ~s\n got: ~s\n"
(fprintf (current-error-port)
"FAILED execute test for ~s (~a)\n expected: ~s\n got: ~s\n"
program
language-cust
execute-answer received-execute))
@ -1274,7 +1276,8 @@ This produces an ACK message
(regexp-match load-answer received-load)]
[else #f])
(failure)
(printf "FAILED load test ~a for ~s\n expected: ~s\n got: ~s\n"
(fprintf (current-error-port)
"FAILED load test ~a for ~s\n expected: ~s\n got: ~s\n"
short-filename
program load-answer received-load)))))])
(load-test tmp-load-short-filename (make-load-answer in-vector language-cust #f))
@ -1287,7 +1290,7 @@ This produces an ACK message
; check for edit-sequence
(when (repl-in-edit-sequence?)
(printf "FAILED: repl in edit-sequence")
(fprintf (current-error-port) "FAILED: repl in edit-sequence")
(escape)))))
(define tests 0)
@ -1298,7 +1301,7 @@ This produces an ACK message
(define (final-report)
(if (= 0 failures)
(printf "tests finished: all ~a tests passed\n" tests)
(printf "tests finished: ~a failed out of ~a total\n" failures tests)))
(fprintf (current-error-port) "tests finished: ~a failed out of ~a total\n" failures tests)))
(define (run-test-in-language-level language-cust)
(let ([level (list #rx"Pretty Big")])
@ -1470,8 +1473,7 @@ This produces an ACK message
(kill-tests)
(callcc-test)
(top-interaction-test)
(final-report)
)
(final-report))
(define (insert-in-definitions/newlines drs str)
(let loop ([strs (regexp-split #rx"\n" str)])
@ -1504,3 +1506,9 @@ This produces an ACK message
(if (regexp? b)
(regexp (string-append (regexp-quote a) (object-name b)))
(string-append a b)))
(let ()
(fire-up-drscheme)
(thread (λ () (run-test) (exit)))
(yield (make-semaphore 0)))

View File

@ -1,143 +0,0 @@
;; load this file as a tool to run the test suites
#lang scheme/base
(require scheme/class
scheme/gui/base
framework
"README.ss")
(provide ask-test-suite run-test-suite)
(define test-thread
(let ([kill-old void])
(lambda (test thunk)
(kill-old)
(let ([thread-desc (thread
(lambda ()
(printf "t>> ~a started~n" test)
(thunk)
(printf "t>> ~a finished~n" test)))])
(set! kill-old
(lambda ()
(when (thread-running? thread-desc)
(kill-thread thread-desc)
(printf "t>> killed ~a~n" test))))))))
(define (make-repl)
(test-thread
"REPL"
(lambda ()
(let ([startup "~/.mzschemerc"])
(when (file-exists? startup)
(load startup)))
(case (system-type)
[(windows macos)
(graphical-read-eval-print-loop (current-eventspace))]
[else
(read-eval-print-loop)]))))
(define (run-test-suite filename [die-afterwards? #f])
(test-thread
filename
(lambda ()
((dynamic-require `(lib ,filename "tests" "drscheme") 'run-test))
(when die-afterwards? (exit)))))
(define current-test-suite-frame #f)
(define test-suite-frame%
(class frame%
(define/override (on-size w h)
(preferences:set 'drscheme:test-suite:frame-width w)
(preferences:set 'drscheme:test-suite:frame-height h))
(define/augment (on-close)
(inner (void) on-close)
(set! current-test-suite-frame #f))
(super-new)))
(define (ask-test-suite parent)
(if current-test-suite-frame
(send current-test-suite-frame show #t)
(let* ([drscheme-test-dir (collection-path "tests" "drscheme")]
[frame (make-object test-suite-frame%
"Test Suites"
parent
(preferences:get 'drscheme:test-suite:frame-width)
(preferences:get 'drscheme:test-suite:frame-height))]
[panel (make-object vertical-panel% frame)]
[top-panel (make-object vertical-panel% panel)]
[bottom-panel (make-object horizontal-panel% panel)])
(send top-panel stretchable-height #f)
(make-object button%
"REPL"
bottom-panel
(lambda (_1 _2)
(send frame show #f)
(make-repl)))
(when drscheme-test-dir
(send top-panel stretchable-height #t)
(send bottom-panel stretchable-height #f)
(letrec ([lb (make-object list-box%
#f
all-tests
top-panel
(lambda (b e)
(when (eq? (send e get-event-type) 'list-box-dclick)
(run-test-suite-callback))))]
[run-test-suite-callback
(lambda ()
(let ([selection (send lb get-selection)])
(when selection
(send frame show #f)
(let ([test (list-ref all-tests selection)])
(preferences:set
'drscheme:test-suite:file-name
test)
(run-test-suite test)))))])
;; set values from preferences
(let* ([test-suite (preferences:get 'drscheme:test-suite:file-name)]
[num (send lb find-string test-suite)])
(when num
(send lb set-string-selection test-suite)
(send lb set-first-visible-item num)
(test:run-interval (preferences:get 'drscheme:test-suite:run-interval))))
(send
(make-object button%
"Run Test Suite"
bottom-panel
(lambda (_1 _2)
(run-test-suite-callback))
'(border))
focus))
(let* ([pre-times (list 0 10 50 100 500)]
[times (if (member (test:run-interval) pre-times)
pre-times
(append pre-times (list (test:run-interval))))]
[choice
(make-object choice%
"Run Interval"
(map number->string times)
top-panel
(lambda (choice event)
(let ([time (list-ref times (send choice get-selection))])
(preferences:set 'drscheme:test-suite:run-interval time)
(test:run-interval time))))])
(send choice set-selection
(let loop ([l times]
[n 0])
(if (= (car l) (test:run-interval))
n
(loop (cdr l)
(+ n 1)))))))
(make-object button%
"Cancel"
bottom-panel
(lambda (_1 _2)
(send frame show #f)))
(make-object grow-box-spacer-pane% bottom-panel)
(send frame show #t)
(set! current-test-suite-frame frame))))

View File

@ -1,20 +1,19 @@
#lang scheme/base
(module teachpack mzscheme
(require "drscheme-test-util.ss"
mzlib/class
mzlib/file
mred
framework
(prefix fw: framework))
(require "drscheme-test-util.ss"
scheme/class
scheme/path
scheme/gui/base
(prefix-in fw: framework))
(provide run-test)
(provide run-test)
(define drs-frame 'not-yet-drs-frame)
(define interactions-text 'not-yet-interactions-text)
(define drs-frame 'not-yet-drs-frame)
(define interactions-text 'not-yet-interactions-text)
(define good-teachpack-name "teachpack-tmp~a")
(define good-teachpack-name "teachpack-tmp~a")
(define (test-good-teachpack tp-exps dr-exp expected)
(define (test-good-teachpack tp-exps dr-exp expected)
(clear-definitions drs-frame)
(type-in-definitions drs-frame dr-exp)
(fw:test:menu-select "Language" "Clear All Teachpacks")
@ -58,8 +57,8 @@
full-expectation
got)))))
;; there are no more errors when the teachpack is loaded (for now...)
(define (test-bad/load-teachpack tp-exp expected-error)
;; there are no more errors when the teachpack is loaded (for now...)
(define (test-bad/load-teachpack tp-exp expected-error)
(fw:test:menu-select "Language" "Clear All Teachpacks")
(let ([tp-name (normal-case-path
(normalize-path
@ -89,7 +88,7 @@
(printf "FAILED: no error message appeared~n tp: ~s~n expected: ~s~n"
tp-exp expected-error)]))))
(define (test-bad/execute-teachpack tp-exp expected)
(define (test-bad/execute-teachpack tp-exp expected)
(fw:test:menu-select "Language" "Clear All Teachpacks")
(let ([tp-name (normal-case-path
(normalize-path
@ -134,7 +133,7 @@
(printf "FAILED: no error message appeared~n tp: ~s~n expected: ~s~n"
tp-exp error)]))))
(define (generic-tests)
(define (generic-tests)
(test-good-teachpack
(list
`(module ,(string->symbol (format good-teachpack-name 0)) mzscheme))
@ -158,12 +157,12 @@
"(+ not-a-primitive1 not-a-primitive2)"
"3"))
(define (good-tests)
(define (good-tests)
(set-language-level! '("How to Design Programs" "Beginning Student"))
(do-execute drs-frame)
(generic-tests))
(define (bad-tests)
(define (bad-tests)
(set-language-level! '("How to Design Programs" "Beginning Student"))
(test-bad/execute-teachpack
@ -174,7 +173,7 @@
`(module teachpack-tmp mzscheme (car))
"car: expects argument of type <pair>; given 1"))
(define (get-string-from-file fn)
(define (get-string-from-file fn)
(call-with-input-file fn
(lambda (port)
(apply string-append
@ -185,8 +184,8 @@
(list* l " " (loop)))))))
'text))
;; doesn't test graphing.ss teachpack
(define (test-built-in-teachpacks)
;; doesn't test graphing.ss teachpack
(define (test-built-in-teachpacks)
(clear-definitions drs-frame)
(type-in-definitions drs-frame "1")
(let* ([test-teachpack
@ -224,7 +223,7 @@
(test-teachpacks (list (build-path teachpack-dir "2htdp")
(build-path teachpack-dir "htdp")))))
(define (find-leftmost-choice frame)
(define (find-leftmost-choice frame)
(let loop ([p frame])
(cond
[(is-a? p list-box%) p]
@ -232,9 +231,14 @@
(ormap loop (send p get-children))]
[else #f])))
(define (run-test)
(define (run-test)
(set! drs-frame (wait-for-drscheme-frame))
(set! interactions-text (send drs-frame get-interactions-text))
;(good-tests)
;(bad-tests)
(test-built-in-teachpacks)))
(test-built-in-teachpacks))
(let ()
(fire-up-drscheme)
(thread (λ () (run-test) (exit)))
(yield (make-semaphore)))

View File

@ -1,58 +0,0 @@
;; load this file as a tool to run the test suites
(module tool mzscheme
(require drscheme/tool
mzlib/list
mzlib/unit
mzlib/class
mred
framework
"README.ss")
(provide tool@)
(define tool@
(unit
(import drscheme:tool^)
(export drscheme:tool-exports^)
(define (phase1) (void))
(define (phase2) (void))
(preferences:set-default 'drscheme:test-suite:file-name "repl-tests.ss" string?)
(preferences:set-default 'drscheme:test-suite:run-interval 10 number?)
(preferences:set-default 'drscheme:test-suite:frame-width #f (lambda (x) (or (not x) (number? x))))
(preferences:set-default 'drscheme:test-suite:frame-height 300 (lambda (x) (or (not x) (number? x))))
(define (tool-mixin super%)
(class super%
(inherit get-button-panel)
(super-new)
(let* ([bitmap (make-object bitmap%
(if (<= (get-display-depth) 1)
(build-path (collection-path "icons") "bb-sm-bw.bmp")
(build-path (collection-path "icons") "bb-small.bmp"))
'bmp)]
[button (make-object button%
(if (send bitmap ok?) bitmap "Console")
(get-button-panel)
(lambda (button evt)
(let ([ask-test-suite (dynamic-require 'tests/drscheme/run-tests
'ask-test-suite)])
(ask-test-suite this))))])
(send (get-button-panel) change-children
(lambda (l)
(cons button (remq button l)))))))
(define tests (getenv "PLTDRTESTS"))
(cond
[(not tests) (void)]
[(member tests all-tests)
((dynamic-require 'tests/drscheme/run-tests 'run-test-suite)
tests
#t)]
[else
(printf "PLTDRTESTS: installing unit frame mixin\n")
(drscheme:get/extend:extend-unit-frame tool-mixin)]))))

View File

@ -1,8 +1,8 @@
#lang setup/infotab
(define name "Test Suites")
(define tools '(("tool.ss" "drscheme") ("time-keystrokes.ss" "drscheme")))
(define tool-names '("DrScheme Test Suites" "Time Keystrokes"))
(define tools '(("time-keystrokes.ss" "drscheme")))
(define tool-names '("Time Keystrokes"))
(define compile-omit-paths
'("2htdp"