original commit: a1c58bdd0fe81e8a514397ef7cb076bb0912668e
This commit is contained in:
Robby Findler 2001-06-28 06:12:41 +00:00
parent 88df9a66f3
commit 05c24425e8
22 changed files with 416 additions and 337 deletions

View File

@ -3,7 +3,7 @@
(lib "mred.ss" "mred")
(lib "mred-sig.ss" "mred")
(prefix test: "test.ss")
"test.ss"
"test-sig.ss"
(prefix prefs-file: "prefs-file.ss")

View File

@ -69,4 +69,4 @@
(when (can-exit?)
(on-exit)
(queue-callback (lambda () (exit))))
(set! exiting? #f))))))
(set! exiting? #f))))))

View File

@ -143,7 +143,7 @@
(super-instantiate ())
(accept-drop-files #t)
(make-object menu% "&Window" (make-object (get-menu-bar%) this))
(make-object menu% "&Windows" (make-object (get-menu-bar%) this))
(reorder-menus this)
(send (group:get-the-frame-group) insert-frame this)
[define panel (make-root-area-container (get-area-container%) this)]
@ -583,7 +583,7 @@
(define editor-mixin
(mixin (standard-menus<%>) (-editor<%>)
(init file-name)
(init (file-name #f))
(inherit get-area-container get-client-size
show get-edit-target-window get-edit-target-object)

View File

@ -69,11 +69,11 @@
(instantiate (get-menu-item%) ()
(label ,(join menu-before-string menu-after-string
`(,(an-item->string-name item))))
(parent ,(menu-item-menu-name item))
(menu ,(menu-item-menu-name item))
(callback (let ([,callback-name (lambda (item evt) (,callback-name item evt))])
,callback-name))
(shortcut ,key)
(help (,(an-item->help-string-name item)))
(help-string (,(an-item->help-string-name item)))
(demand-callback (lambda (menu-item) (,(an-item->on-demand-name item) menu-item)))))))))
;; build-after-super-clause : ((X -> symbol) -> X -> (listof clause))
@ -187,4 +187,4 @@
(reorder-menus this)))
port))
'text
'truncate))
'truncate))

View File

@ -150,6 +150,15 @@
#f])
#f)))
(scheme-paren:get-comments))))
(rename [super-on-close on-close])
(override on-close)
(define (on-close)
(remove-indents-callback)
(remove-paren-callback)
(super-on-close))
(define remove-indents-callback
(preferences:add-callback
'framework:tabify
@ -1038,4 +1047,4 @@
(reset lambda-list-box lambda-keywords)
#t))])
(preferences:add-callback 'framework:tabify (lambda (p v) (update-list-boxes v)))
main-panel))))))))
main-panel))))))))

View File

@ -5,9 +5,12 @@
(lib "mred-sig.ss" "mred")
(lib "mred.ss" "mred"))
(provide-signature-elements framework:test^)
(provide-signature-elements ((unit test : framework:test^)))
(define-values/invoke-unit/sig framework:test^
framework:test@
(define-values/invoke-unit/sig ((unit test : framework:test^))
(compound-unit/sig
(import [m : mred^])
(link [test : framework:test^ (framework:test@ m)])
(export (unit test)))
#f
mred^))
mred^))

View File

@ -114,5 +114,3 @@ test as last time, or `all' to run all of the tests.
|#)
`(load.ss)

View File

@ -1,7 +1,10 @@
(module canvas mzscheme
(require "test-suite-utils.ss")
(define (test-creation class name)
(test
name
(lambda (x) #t)
(lambda (x) (eq? 'passed x))
(lambda ()
(send-sexp-to-mred
`(let* ([f (make-object frame:basic% "test canvas" #f 300 300)]
@ -10,7 +13,8 @@
(send f show #t)))
(wait-for-frame "test canvas")
(send-sexp-to-mred
`(send (get-top-level-focus-window) show #f)))))
`(send (get-top-level-focus-window) show #f))
'passed)))
(test-creation '(canvas:basic-mixin editor-canvas%)
'canvas:basic-mixin-creation)
@ -21,3 +25,4 @@
'canvas:wide-snip-mixin-creation)
(test-creation 'canvas:wide-snip%
'canvas:wide-snip%-creation)
)

View File

@ -1,44 +1,50 @@
(module debug mzscheme
(provide debug-printf debug-when)
;; all of the steps in the tcp connection
(define tcp? #f)
(define-syntax debug-when
(lambda (stx)
;; administrative messages about preferences files and
;; command line flags
(define admin? #f)
;; all of the steps in the tcp connection
(define mz-tcp? #f)
(define mr-tcp? mz-tcp?)
;; administrative messages about preferences files and
;; command line flags
(define admin? #f)
;; tests that passed and those that failed
(define schedule? #t)
;; of the sexpression transactions between mz and mred
(define messages? #t)
;; tests that passed and those that failed
(define schedule? #t)
;; of the sexpression transactions between mz and mred
(define messages? #t)
(syntax-case stx (mr-tcp mz-tcp admin schedule messages)
[(_ mr-tcp rest ...)
(if mr-tcp?
(syntax (begin rest ...))
(syntax (void)))]
[(_ mz-tcp rest ...)
(if mz-tcp?
(syntax (begin rest ...))
(syntax (void)))]
[(_ admin rest ...)
(if admin?
(syntax (begin rest ...))
(syntax (void)))]
[(_ schedule rest ...)
(if schedule?
(syntax (begin rest ...))
(syntax (void)))]
[(_ messages rest ...)
(if messages?
(syntax (begin rest ...))
(syntax (void)))]
[(_ unk rest ...)
(raise-syntax-error 'debug-when "unknown flag" stx (syntax unk))])))
(define-syntax debug-printf
(lambda (stx)
(syntax-case stx ()
[(_ flag fmt-string rest ...)
(with-syntax ([flag-name (format ">> ~a: " (syntax-object->datum (syntax flag)))])
(syntax (debug-when flag (printf (string-append flag-name fmt-string) rest ...))))])))
(define-syntax debug-when
(lambda (stx)
(syntax-case stx (tcp admin schedule messages)
[(_ tcp rest ...)
(syntax
(when tcp?
rest ...))]
[(_ admin rest ...)
(syntax
(when admin?
rest ...))]
[(_ schedule rest ...)
(syntax
(when schedule?
rest ...))]
[(_ messages rest ...)
(syntax
(when messages?
rest ...))]
[(_ unk rest ...)
(raise-syntax-error 'debug-when "unknown flag" stx (syntax unk))]))))
(syntax (debug-when flag (printf (string-append flag-name fmt-string) rest ...))))]))))

View File

@ -1,3 +1,6 @@
(module exit mzscheme
(require "test-suite-utils.ss")
(test 'exit/no-prompt
(lambda (x)
(and (eq? x 'passed)
@ -99,3 +102,4 @@
(with-handlers ([eof-result? (lambda (x) 'passed)])
(send-sexp-to-mred
`(exit:exit))))))
)

View File

@ -1,50 +1,69 @@
(define (test-creation name class-expression)
(module frame mzscheme
(require "test-suite-utils.ss")
(define (test-creation name class-expression . args)
(test
name
(lambda (x) x)
(lambda (x) (eq? 'passed x))
(lambda ()
(send-sexp-to-mred
`(begin (preferences:set 'framework:exit-when-no-frames #f)
(send (make-object ,class-expression "test") show #t)))
(wait-for-frame "test")
(queue-sexp-to-mred
'(send (get-top-level-focus-window) close))
#t)))
(let ([frame-label
(send-sexp-to-mred
`(let ([f (instantiate ,class-expression () ,@args)])
(preferences:set 'framework:exit-when-no-frames #f)
(send f show #t)
(send f get-label)))])
(wait-for-frame frame-label)
(queue-sexp-to-mred
'(send (get-top-level-focus-window) close))
'passed))))
(test-creation
'basic%-creation
'frame:basic%)
'frame:basic%
'(label "test"))
(test-creation
'basic-mixin-creation
'(frame:basic-mixin frame%))
'(frame:basic-mixin frame%)
'(label "test"))
(test-creation
'info-mixin-creation
'(frame:info-mixin frame:basic%))
'(frame:info-mixin frame:basic%)
'(label "test"))
(test-creation
'info%-creation
'frame:info%)
'frame:info%
'(label "test"))
(test-creation
'text-info-mixin-creation
'(frame:text-info-mixin frame:info%))
'(frame:text-info-mixin frame:info%)
'(label "test"))
(test-creation
'text-info%-creation
'frame:text-info%)
'frame:text-info%
'(label "test"))
(test-creation
'pasteboard-info-mixin-creation
'(frame:pasteboard-info-mixin frame:info%))
'(frame:pasteboard-info-mixin frame:info%)
'(label "test"))
(test-creation
'pasteboard-info%-creation
'frame:pasteboard-info%)
'frame:pasteboard-info%
'(label "test"))
(test-creation
'standard-menus%-creation
'frame:standard-menus%)
'frame:standard-menus%
'(label "test"))
(test-creation
'standard-menus-mixin
'(frame:standard-menus-mixin frame:basic%))
'(frame:standard-menus-mixin frame:basic%)
'(label "test"))
(test-creation
'text%-creation
@ -95,15 +114,18 @@
(test
name
(lambda (x)
(delete-file tmp-file)
(when (file-exists? tmp-file)
(delete-file tmp-file))
(equal? x test-file-contents))
(lambda ()
(send-sexp-to-mred
`(begin
(preferences:set 'framework:exit-when-no-frames #f)
(preferences:set 'framework:file-dialogs 'common)
(send (make-object ,class-expression "test open") show #t)))
(wait-for-frame "test open")
(let ([frame-name
(send-sexp-to-mred
`(let ([frame (instantiate ,class-expression ())])
(preferences:set 'framework:exit-when-no-frames #f)
(preferences:set 'framework:file-dialogs 'common)
(send frame show #t)
(send frame get-label)))])
(wait-for-frame frame-name)
(send-sexp-to-mred
`(test:menu-select "File" "Open..."))
(wait-for-frame "Get file")
@ -128,37 +150,10 @@
[t (send (send w get-editor) get-text)])
(test:close-top-level-window w)
t))
(wait-for-frame "test open")
(wait-for-frame frame-name)
(queue-sexp-to-mred
`(send (get-top-level-focus-window) close)))))))
`(send (get-top-level-focus-window) close))))))))
(test-open "frame:editor open" 'frame:text%)
(test-open "frame:searchable open" 'frame:searchable%)
(test-open "frame:text-info open" 'frame:text-info-file%)
(test
"set!-ing menu callback in standard-menus-frame"
(lambda (x) (eq? x 'passed))
(lambda ()
(send-sexp-to-mred
`(let* ([set!-cb-frame%
(class frame:standard-menus% ()
(private [value 'failed])
(public
[get-value
(lambda () value)]
[update-printing-proc
(lambda ()
(set! file-menu:print
(lambda x (set! value 'passed))))])
(override
[file-menu:print (lambda x (void))])
(sequence (super-init "set!-cb frame")))]
[f (make-object set!-cb-frame%)])
(send f update-printing-proc)
(send f show #t)))
(wait-for-frame "set!-cb frame")
(send-sexp-to-mred
`(test:menu-select "File" "Print..."))
(send-sexp-to-mred
`(send (get-top-level-focus-window) get-value))))
(test-open "frame:text-info open" 'frame:text-info-file%))

View File

@ -1,11 +1,9 @@
(require (lib "errortrace.ss" "errortrace"))
;(require (lib "errortrace.ss" "errortrace"))
(module framework-test-engine mzscheme
(require (lib "pconvert.ss")
(lib "mred.ss" "mred")
(lib "errortrace.ss" "errortrace")
"debug.ss"
)
"debug.ss")
(define errs null)
(define sema (make-semaphore 1))
@ -16,43 +14,50 @@
(define (exception->string x)
(if (exn? x)
; (let ([p (open-output-string)])
; (print-error-trace p x)
; (string-append (exn-message x) (string #\newline) (get-output-string p)))
(exn-message x)
(format "~s" x)))
(let ([p (open-output-string)])
(parameterize ([current-error-port p])
((error-display-handler) (exn-message x) x))
(get-output-string p))
(format "uncaught exn: ~s" x)))
(thread
(lambda ()
(let ([port (load
(build-path
(collection-path "tests" "framework")
"receive-sexps-port.ss"))])
(debug-printf tcp "about to connect to ~a~n" port)
(let*-values ([(in out) (tcp-connect "127.0.0.1" port)])
(let loop ()
(debug-printf tcp "about to read~n")
(let ([sexp (read in)])
(debug-printf tcp "got something~n")
(if (eof-object? sexp)
(begin
(close-input-port in)
(close-output-port out)
(exit))
(begin
(write
(let ([these-errs (protect (lambda () (begin0 errs (set! errs null))))])
(if (null? these-errs)
(with-handlers ([(lambda (x) #t)
(lambda (x) (list 'error (exception->string x)))])
(list 'normal (print-convert (eval sexp))))
(list 'error
(apply string-append
(map (lambda (x) (string-append (exception->string x) (string #\newline)))
these-errs)))))
out)
(loop)))))))))
(with-handlers ([(lambda (x) #t)
(lambda (x)
(printf "test suite thread died: ~a~n"
(if (exn? x)
(exn-message x)
(format "~s" x))))])
(let ([port (load
(build-path
(collection-path "tests" "framework")
"receive-sexps-port.ss"))])
(debug-printf mr-tcp "about to connect to ~a~n" port)
(let*-values ([(in out) (tcp-connect "127.0.0.1" port)])
(let loop ()
(debug-printf mr-tcp "about to read~n")
(let ([sexp (read in)])
(if (eof-object? sexp)
(begin
(debug-printf mr-tcp "got eof~n")
(close-input-port in)
(close-output-port out)
(exit))
(begin
(debug-printf mr-tcp "got expression to evaluate~n")
(write
(let ([these-errs (protect (lambda () (begin0 errs (set! errs null))))])
(if (null? these-errs)
(with-handlers ([not-break-exn?
(lambda (x) (list 'error (exception->string x)))])
(list 'normal (print-convert (eval sexp))))
(list 'last-error
(apply string-append
(map (lambda (x) (string-append (exception->string x) (string #\newline)))
these-errs)))))
out)
(loop))))))))))
(let ([od (event-dispatch-handler)]
[port (current-output-port)])
(event-dispatch-handler

View File

@ -1,3 +1,6 @@
(module group-test mzscheme
(require "test-suite-utils.ss")
(test
'exit-off
(lambda (x) (not (equal? x "test")))
@ -140,3 +143,5 @@
(for-each (lambda (x) (send x close)) frames))))))
)

View File

@ -1,3 +1,6 @@
(module handler-test mzscheme
(require "test-suite-utils.ss")
(let* ([filename "framework-group-test.ss"]
[tmp-filename (build-path (find-system-path 'temp-dir) filename)])
@ -39,4 +42,6 @@
(wait-for-frame filename)
(send-sexp-to-mred
`(let ([f (car (get-top-level-windows))])
(send (send f get-editor) get-filename))))))
(send (send f get-editor) get-filename))))))
)

View File

@ -1,3 +1,6 @@
(module keys mzscheme
(require "test-suite-utils.ss")
(test
'keymap:aug-keymap%/get-table
(lambda (x)
@ -121,3 +124,5 @@
(scheme:text-mixin text:basic%))])
(sequence (super-init name)))
scheme-specs)
)

View File

@ -1,4 +1,7 @@
;; mem-boxes : (list-of (list string (list-of (weak-box TST))))
(module mem mzscheme
(require "test-suite-utils.ss")
; mem-boxes : (list-of (list string (list-of (weak-box TST))))
(send-sexp-to-mred '(define mem-boxes null))
(define mem-count 10)
@ -32,13 +35,17 @@
[anything? #f])
(for-each
(lambda (boxl)
(let* ([tag (first boxl)]
[boxes (second boxl)]
(let* ([tag (car boxl)]
[boxes (cadr boxl)]
[calc-results
(lambda ()
(foldl (lambda (b n) (if (weak-box-value b) (+ n 1) n))
0
boxes))])
(let loop ([boxes boxes]
[n 0])
(cond
[(null? boxes) n]
[else (if (weak-box-value (car boxes))
(loop (cdr boxes) (+ n 1))
(loop (cdr boxes) n))])))])
(let loop ([tries 16])
(unless (zero? tries)
(when (> (calc-results) 0)
@ -117,3 +124,4 @@
;(test-frame-allocate 'frame:pasteboard%)
;(test-frame-allocate 'frame:pasteboard-info-file%)
(done)
)

View File

@ -1,61 +1,66 @@
(module panel mzscheme
(require "test-suite-utils.ss")
(test
'single-panel
(lambda (x) (eq? x 'passed))
`(let* ([semaphore (make-semaphore 0)]
[semaphore-frame%
(class frame% args
(override
[on-close (lambda () (semaphore-post semaphore))])
(sequence
(apply super-init args)))]
(class frame%
(override on-close)
[define on-close (lambda () (semaphore-post semaphore))]
(super-instantiate ()))]
[f (make-object semaphore-frame% "Single Panel Test")]
[blue-brush (send the-brush-list find-or-create-brush "BLUE" 'solid)]
[green-brush (send the-brush-list find-or-create-brush "FOREST GREEN" 'solid)]
[black-pen (send the-pen-list find-or-create-pen "BLACK" 1 'solid)]
[grid-canvas%
(class canvas% (lines parent label stretchable-width? stretchable-height?)
(class canvas%
(init-field lines)
(init label)
(inherit get-dc get-client-size)
(override
[on-paint
(lambda ()
(let-values ([(width height) (get-client-size)])
(let ([dc (get-dc)]
[single-width (/ width lines)]
[single-height (/ height lines)])
(send dc set-pen black-pen)
(let loop ([i lines])
(cond
[(zero? i) (void)]
[else
(let loop ([j lines])
(cond
[(zero? j) (void)]
[else
(send dc set-brush
(if (= 0 (modulo (+ i j) 2))
blue-brush green-brush))
(send dc draw-rectangle
(* single-width (- i 1))
(* single-height (- j 1))
single-width
single-height)
(loop (- j 1))]))
(loop (- i 1))])))))])
(inherit set-label min-width min-height stretchable-height stretchable-width)
(sequence
(super-init parent)
(stretchable-width stretchable-width?)
(stretchable-height stretchable-height?)
(min-width 50)
(min-height 50)
(set-label label)))]
(override on-paint)
(define (on-paint)
(let-values ([(width height) (get-client-size)])
(let ([dc (get-dc)]
[single-width (/ width lines)]
[single-height (/ height lines)])
(send dc set-pen black-pen)
(let loop ([i lines])
(cond
[(zero? i) (void)]
[else
(let loop ([j lines])
(cond
[(zero? j) (void)]
[else
(send dc set-brush
(if (= 0 (modulo (+ i j) 2))
blue-brush green-brush))
(send dc draw-rectangle
(* single-width (- i 1))
(* single-height (- j 1))
single-width
single-height)
(loop (- j 1))]))
(loop (- i 1))])))))
(super-instantiate ())
;; soon to be obsolete, hopefully.
(inherit set-label)
(set-label label)
(inherit min-width min-height)
(min-width 50)
(min-height 50))]
[border-panel (make-object horizontal-panel% f '(border))]
[single-panel (make-object panel:single% border-panel)]
[children (list (make-object grid-canvas% 3 single-panel "Small" #f #f)
(make-object grid-canvas% 3 single-panel "Wide" #f #t)
(make-object grid-canvas% 3 single-panel "Tall" #t #f)
(make-object grid-canvas% 3 single-panel "Wide and Tall" #t #t))]
[children
(list
(instantiate grid-canvas% () (lines 3) (parent single-panel) (label "Small") (stretchable-width #f) (stretchable-height #f))
(instantiate grid-canvas% () (lines 3) (parent single-panel) (label "Wide") (stretchable-width #f) (stretchable-height #t))
(instantiate grid-canvas% () (lines 3) (parent single-panel) (label "Tall") (stretchable-width #t) (stretchable-height #f))
(instantiate grid-canvas% () (lines 3) (parent single-panel) (label "Wide and Tall") (stretchable-width #t) (stretchable-height #t)))]
[active-child (car children)]
[radios (make-object horizontal-panel% f)]
[make-radio
@ -128,3 +133,4 @@
(yield semaphore)
(send f show #f)
result))
)

View File

@ -1,20 +1,24 @@
(module pasteboard mzscheme
(require "test-suite-utils.ss")
(define (test-creation frame class name)
(test
name
(lambda (x) #t)
(lambda ()
(send-sexp-to-mred
`(let* ([% (class-asi ,frame
(override
[get-editor%
(lambda ()
,class)]))]
[f (make-object % "test pasteboard")])
(preferences:set 'framework:exit-when-no-frames #f)
(send f show #t)))
(wait-for-frame "test pasteboard")
(queue-sexp-to-mred
`(send (get-top-level-focus-window) close)))))
(let ([frame-label
(send-sexp-to-mred
`(let* ([% (class ,frame
(override get-editor%)
[define (get-editor%)
,class])]
[f (instantiate % ())])
(preferences:set 'framework:exit-when-no-frames #f)
(send f show #t)
(send f get-label)))])
(wait-for-frame frame-label)
(queue-sexp-to-mred
`(send (get-top-level-focus-window) close))))))
(test-creation 'frame:editor%
'(editor:basic-mixin pasteboard%)
@ -43,3 +47,4 @@
(test-creation 'frame:pasteboard%
'pasteboard:info%
'pasteboard:info-creation)
)

View File

@ -1,3 +1,9 @@
(module prefs mzscheme
(require "test-suite-utils.ss"
(lib "etc.ss")
(lib "list.ss"))
(local [(define pref-file (build-path (find-system-path 'pref-dir)
(case (system-type)
[(macos) "MrEd Preferences"]
@ -34,7 +40,14 @@
(preferences:get ',pref-sym)))
(with-handlers ([eof-result? (lambda (x) (void))])
(send-sexp-to-mred '(begin (preferences:set 'framework:verify-exit #f) (exit:exit))))
(send-sexp-to-mred '(begin (preferences:set 'framework:verify-exit #f)
(exit:exit)
;; do this yield here so that exit:exit
;; actually exits on this interaction.
;; right now, exit:exit queue's a new event to exit
;; instead of just exiting immediately.
(yield (make-semaphore 0)))))
(test 'preference-get-after-restart
(check-eq? 'new-pref)
@ -45,7 +58,8 @@
(test 'dialog-appears
(lambda (x) (eq? 'passed x))
(lambda ()
(send-sexp-to-mred '(preferences:show-dialog))
(send-sexp-to-mred '(begin (send (make-object frame:basic% "frame") show #t)
(preferences:show-dialog)))
(wait-for-frame "Preferences")
(send-sexp-to-mred '(begin (preferences:hide-dialog)
(let ([f (get-top-level-focus-window)])
@ -54,3 +68,5 @@
'failed
'passed)
'passed))))))
)

View File

@ -63,39 +63,37 @@
(define listener
(let loop ()
(let ([port (load port-filename)])
(with-handlers ([(lambda (x) #t)
(with-handlers ([not-break-exn?
(lambda (x)
(let ([next (+ port 1)])
(call-with-output-file port-filename
(lambda (p)
(write next p))
'truncate)
(debug-printf tcp " tcp-listen failed for port ~a, attempting ~a~n"
(debug-printf mz-tcp " tcp-listen failed for port ~a, attempting ~a~n"
port
next)
(loop)))])
(debug-printf tcp "listening to ~a~n" port)
(debug-printf mz-tcp "listening to ~a~n" port)
(tcp-listen port)))))
(define in-port #f)
(define out-port #f)
(define restart-mred
(lambda ()
(shutdown-mred)
((case (system-type)
[(macos) system*]
[else (lambda (x) (thread (lambda () (system* x))))])
(mred-program-launcher-path "Framework Test Engine"))
(debug-printf tcp "accepting listener~n")
(let-values ([(in out) (tcp-accept listener)])
(set! in-port in)
(set! out-port out))
(when load-framework-automatically?
(queue-sexp-to-mred
`(begin
(require (lib "framework.ss" "framework")
(lib "gui.ss" "tests" "utils")))))))
(define (restart-mred)
(shutdown-mred)
((case (system-type)
[(macos) system*]
[else (lambda (x) (thread (lambda () (system* x))))])
(mred-program-launcher-path "Framework Test Engine"))
(debug-printf mz-tcp "accepting listener~n")
(let-values ([(in out) (tcp-accept listener)])
(set! in-port in)
(set! out-port out))
(when load-framework-automatically?
(queue-sexp-to-mred
'(begin (eval '(require (lib "framework.ss" "framework")))
(eval '(require (lib "gui.ss" "tests" "utils")))))))
(define load-framework-automatically
(case-lambda
@ -109,16 +107,16 @@
(define shutdown-listener
(lambda ()
(shutdown-mred)
(debug-printf tcp "closing listener~n")
(debug-printf mz-tcp "closing listener~n")
(tcp-close listener)))
(define shutdown-mred
(lambda ()
(when (and in-port
out-port)
(with-handlers ([(lambda (x) #t) (lambda (x) (void))])
(with-handlers ([not-break-exn? (lambda (x) (void))])
(close-output-port out-port))
(with-handlers ([(lambda (x) #t) (lambda (x) (void))])
(with-handlers ([not-break-exn? (lambda (x) (void))])
(close-input-port in-port))
(set! in-port #f)
(set! in-port #f))))
@ -145,83 +143,84 @@
(or (regexp-match re:tcp-read-error (exn-message exn))
(regexp-match re:tcp-write-error (exn-message exn))))
(define send-sexp-to-mred
(let ([failed-last-time? #f])
(lambda (sexp)
(let/ec k
(let ([show-text
(lambda (sexp)
(debug-when messages
(parameterize ([pretty-print-print-line
(let ([prompt " "]
[old-liner (pretty-print-print-line)])
(lambda (ln port ol cols)
(let ([ov (old-liner ln port ol cols)])
(if ln
(begin (display prompt port)
(+ (string-length prompt) ov))
ov))))])
(pretty-print sexp)
(newline))))])
(unless (and in-port
out-port
(with-handlers ([tcp-error?
(lambda (x) #f)])
(or (not (char-ready? in-port))
(not (eof-object? (peek-char in-port))))))
(restart-mred))
(debug-printf messages " ~a // ~a: sending to mred:~n" section-name test-name)
(show-text sexp)
(with-handlers ([(lambda (x) #t)
(lambda (x)
(cond
;; this means that mred was closed
;; so we can restart it and try again.
[(tcp-error? x)
(restart-mred)
(write sexp out-port)
(newline out-port)]
[else (raise x)]))])
(write sexp out-port)
(newline out-port))
(let ([answer
(with-handlers ([(lambda (x) #t)
(lambda (x)
(if (tcp-error? x);; assume tcp-error means app closed
eof
(list 'cant-read
(string-append
(exn-message x)
"; rest of string: "
(format
"~s"
(apply
string
(let loop ()
(if (char-ready? in-port)
(let ([char (read-char in-port)])
(if (eof-object? char)
null
(cons char (loop))))
null))))))))])
(read in-port))])
(unless (or (eof-object? answer)
(and (list? answer)
(= 2 (length answer))))
(error 'send-sexp-to-mred "unpected result from mred: ~s~n" answer))
(if (eof-object? answer)
(raise (make-eof-result))
(case (car answer)
[(error)
(error 'send-sexp-to-mred "mred raised \"~a\"" (second answer))]
[(cant-read) (error 'mred/cant-parse (second answer))]
[(normal)
(debug-printf messages " ~a // ~a: received from mred:~n" section-name test-name)
(show-text (second answer))
(eval (second answer))]))))))))
(define (send-sexp-to-mred sexp)
(let/ec k
(let ([show-text
(lambda (sexp)
(debug-when messages
(parameterize ([pretty-print-print-line
(let ([prompt " "]
[old-liner (pretty-print-print-line)])
(lambda (ln port ol cols)
(let ([ov (old-liner ln port ol cols)])
(if ln
(begin (display prompt port)
(+ (string-length prompt) ov))
ov))))])
(pretty-print sexp)
(newline))))])
(unless (and in-port
out-port
(with-handlers ([tcp-error?
(lambda (x) #f)])
(or (not (char-ready? in-port))
(not (eof-object? (peek-char in-port))))))
(restart-mred))
(debug-printf messages " ~a // ~a: sending to mred:~n" section-name test-name)
(show-text sexp)
(with-handlers ([not-break-exn?
(lambda (x)
(cond
;; this means that mred was closed
;; so we can restart it and try again.
[(tcp-error? x)
(restart-mred)
(write sexp out-port)
(newline out-port)]
[else (raise x)]))])
(write sexp out-port)
(newline out-port))
(let ([answer
(with-handlers ([not-break-exn?
(lambda (x)
(if (tcp-error? x);; assume tcp-error means app closed
eof
(list 'cant-read
(string-append
(exn-message x)
"; rest of string: "
(format
"~s"
(apply
string
(let loop ()
(if (char-ready? in-port)
(let ([char (read-char in-port)])
(if (eof-object? char)
null
(cons char (loop))))
null))))))))])
(read in-port))])
(debug-printf messages " ~a // ~a: received from mred:~n" section-name test-name)
(show-text answer)
(unless (or (eof-object? answer)
(and (list? answer)
(= 2 (length answer))
(memq (car answer)
'(error last-error cant-read normal))))
(error 'send-sexp-to-mred "unpected result from mred: ~s~n" answer))
(if (eof-object? answer)
(raise (make-eof-result))
(case (car answer)
[(error)
(error 'send-sexp-to-mred "mred raised \"~a\"" (second answer))]
[(last-error)
(error 'send-sexp-to-mred "mred (last time) raised \"~a\"" (second answer))]
[(cant-read) (error 'mred/cant-parse (second answer))]
[(normal)
(eval (second answer))]))))))
(define test
(case-lambda
[(in-test-name passed? sexp/proc) (test in-test-name passed? sexp/proc 'section)]
@ -230,7 +229,7 @@
(when (or (not only-these-tests)
(memq test-name only-these-tests))
(let* ([result
(with-handlers ([(lambda (x) #t)
(with-handlers ([not-break-exn?
(lambda (x)
(if (exn? x)
(exn-message x)
@ -239,7 +238,14 @@
(sexp/proc)
(begin0 (send-sexp-to-mred sexp/proc)
(send-sexp-to-mred ''check-for-errors))))]
[failed (not (passed? result))])
[failed (with-handlers ([not-break-exn?
(lambda (x)
(string-append
"passed? test raised exn: "
(if (exn? x)
(exn-message x)
(format "~s" x))))])
(not (passed? result)))])
(when failed
(debug-printf schedule "FAILED ~a:~n ~s~n" test-name result)
(set! failed-tests (cons (cons section-name test-name) failed-tests))

View File

@ -1,23 +1,30 @@
(module text mzscheme
(require "test-suite-utils.ss")
(define (test-creation frame% class name)
(test
name
(lambda (x) #t)
(lambda (x) (eq? x 'passed))
(lambda ()
(send-sexp-to-mred
`(let* ([% (class-asi ,frame%
(override
[get-editor% (lambda () ,class)]))]
[f (make-object % "test text")])
(preferences:set 'framework:exit-when-no-frames #f)
(send f show #t)))
(wait-for-frame "test text")
(send-sexp-to-mred `(test:keystroke #\a))
(wait-for `(string=? "a" (send (send (get-top-level-focus-window) get-editor) get-text)))
(send-sexp-to-mred
`(begin (send (send (get-top-level-focus-window) get-editor) lock #t)
(send (send (get-top-level-focus-window) get-editor) lock #f)))
(queue-sexp-to-mred
`(send (get-top-level-focus-window) close)))))
(let ([label
(send-sexp-to-mred
`(let ([f (instantiate (class ,frame%
(override get-editor%)
[define (get-editor%) ,class]
(super-instantiate ()))
())])
(preferences:set 'framework:exit-when-no-frames #f)
(send f show #t)
(send f get-label)))])
(wait-for-frame label)
(send-sexp-to-mred `(test:keystroke #\a))
(wait-for `(string=? "a" (send (send (get-top-level-focus-window) get-editor) get-text)))
(send-sexp-to-mred
`(begin (send (send (get-top-level-focus-window) get-editor) lock #t)
(send (send (get-top-level-focus-window) get-editor) lock #f)))
(queue-sexp-to-mred
`(send (get-top-level-focus-window) close))
'passed))))
(test-creation 'frame:text%
@ -27,17 +34,6 @@
'text:basic%
'text:basic-creation)
(define (return-args class)
`(class ,class ()
(sequence
(super-init void))))
(test-creation 'frame:text%
(return-args '(text:return-mixin text:basic%))
'text:return-mixin-creation)
(test-creation 'frame:text%
(return-args 'text:return%)
'text:return-creation)
(test-creation 'frame:text%
'(editor:file-mixin text:keymap%)
'editor:file-mixin-creation)
@ -67,4 +63,6 @@
'text:info-mixin-creation)
(test-creation '(frame:searchable-mixin frame:text%)
'text:info%
'text:info-creation)
'text:info-creation)
)