racket/collects/tests/drracket/teaching-lang-save-file.rkt

49 lines
2.0 KiB
Racket

#lang scheme/base
(require scheme/file
scheme/class
scheme/port
framework/test
framework/preferences)
(require tests/drracket/private/drracket-test-util)
(fire-up-drracket-and-run-tests
(λ ()
(let* ([drr-frame (wait-for-drracket-frame)]
[fn (make-temporary-file "save-teaching-lang-test~a")])
(test:menu-select "File" "New Tab")
(let ([definitions-text (send drr-frame get-definitions-text)]
[interactions-text (send drr-frame get-interactions-text)])
(set-language-level! (list #rx"How to Design Programs" #rx"Beginning Student$"))
(clear-definitions drr-frame)
(queue-callback/res
(λ ()
(send definitions-text set-filename fn)
(send definitions-text insert "(define (f x) x)\n(f 1)\n")))
(test:menu-select "File" "Save Definitions")
(unless (call-with-input-file fn
(λ (p) (regexp-match #rx";;[^\n]*metadata" p)))
(eprintf "---- saved file, cut here ----\n")
(call-with-input-file fn (λ (p) (copy-port p (current-error-port))))
(eprintf "---- saved file, cut here ----\n")
(error 'save-teaching-lang-file.rkt
"expected the saved file to contain the word 'metadata' in a comment"))
(do-execute drr-frame)
(test:menu-select "File" (if (eq? (system-type) 'unix) "Close" "Close Tab"))
(use-get/put-dialog
(λ ()
(test:menu-select "File" "Open..."))
fn)
(do-execute drr-frame)
(let ([result (fetch-output
drr-frame
(send interactions-text paragraph-start-position 2)
(send interactions-text last-position))])
(test:menu-select "File" (if (eq? (system-type) 'unix) "Close" "Close Tab"))
(delete-file fn)
(unless (equal? result "1\n> ")
(error 'save-teaching-lang-file.rkt "expected the program to produce 1 (followed by the prompt), got ~s" result)))))))