Unit tests for a #lang implementation
Konrad Hinsen <[email protected]>
| Newsgroups | gmane.comp.lang.racket.user,gmane.lisp.scheme.plt |
|---|---|
| Message-ID | <[email protected]> |
Hi all,
I have been trying for a while to write proper unit tests for a language
implementation I am working on. By "proper" tests I mean tests that are
run using raco test just like any other tests. Until now, I have a
separate shell-script based testing framework that runs scripts written
in my own #lang, but all too often I forgot to run those tests.
For a standard s-exp based language, this is not difficult:
(module+ test
(module demo lazy
(provide foo)
(define (foo x) (* 2 x)))
(require (only-in 'demo foo))
(check-equal? (force (foo 2)) 4))
But for a #lang that uses a different reader, I haven't found a working
solution yet. Even if I am willing to re-write my examples in s-exp
syntax, I run into problems:
(module+ test
(module example scribble/base
(section "Introduction"))
(require (only-in 'example doc))
(check-equal? (force (foo 2)) 4))
This yields the error message
module: no #%module-begin binding in the module's language
Anyway, what I really want is use the #lang's standard syntax. Reading
it isn't much of a problem:
(parameterize ([read-accept-lang #t]
[read-accept-reader #t])
(read-syntax "test-module"
(open-input-string "#lang
scribble/base\n@section[Introduction]")))
But then I get a syntax-object for my module, which I need to evaluate
somehow. I'd expect eval-syntax to do the job, but...
(eval-syntax
(parameterize ([read-accept-lang #t]
[read-accept-reader #t])
(read-syntax "test-module"
(open-input-string "#lang
scribble/base\n@section[Introduction]")))
(module->namespace 'racket/base))
only says
; test-module::1: module: unbound identifier;
; also, no #%app syntax transformer is bound
; at: module
although both module and %app are defined in racket/base.
Any ideas (or pointers to examples) for doing this correctly?
Thanks in advance,
Konrad.
--
You received this message because you are subscribed to the Google Groups "Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
For more options, visit https://groups.google.com/d/optout.