52 lines
1.6 KiB
Scheme
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")
|
|
|
|
|
|
|