scribble-enhanced/collects/tests/drscheme/check-syntax-test.ss
Robby Findler 9e5d391dfb ...
original commit: 66a62c2f50bd2b8c85867be3e415c6a0b3881f20
2000-05-25 15:55:50 +00:00

52 lines
1.6 KiB
Scheme

;;; check-syntax.ss
;;; Author: Paul Steckler, modifying code by Robby Findler
(load-relative "drscheme-test-util.ss")
(let* ([drs-frame (wait-for-drscheme-frame)]
[interactions-edit (ivar drs-frame interactions-edit)]
[get-int-pos (lambda () (get-text-pos interactions-edit))]
[check-check-syntax ; type in term, call check-syntax
(lambda (str expected)
(clear-definitions drs-frame)
(type-in-definitions drs-frame str)
(let ([answer-begin (get-int-pos)])
(mred:test:button-push (ivar drs-frame check-syntax-button))
(let ([answer-end (- (get-int-pos) 1)])
(let ([actual (send interactions-edit get-text
answer-begin answer-end)])
(unless (string=? actual expected)
(printf "Expected: ~a~n Actual: ~a~n~n"
expected actual)))
(let ([frame (mred:test:get-active-frame)])
(unless (eq? frame drs-frame)
(error 'check-syntax "Unexpected window ~a" frame))))))]
; question: should we test for errors at different syntax levels?
[terms-and-msgs ; terms and expected error message, if any
; why are some of these messages init-capped, others not?
'(("x" "")
("." "can't use `.' outside list")
("(" "missing close paren")
("begin" "Invalid use of keyword begin")
("(begin)" "Malformed begin")
("1" "")
("add1" "")
("(lambda (x) x)" ""))])
(set-language-level! "R4RS+" drs-frame)
(printf "Starting check-syntax tests~n")
(for-each
(lambda (p) (check-check-syntax (car p) (cadr p)))
terms-and-msgs))
(printf "Finished check-syntax tests~n")