Move syntax/macro-testing docs from unstable-doc.
This commit is contained in:
parent
21c44635f6
commit
d4f25d8c72
75
pkgs/racket-doc/syntax/scribblings/macro-testing.scrbl
Normal file
75
pkgs/racket-doc/syntax/scribblings/macro-testing.scrbl
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
#lang scribble/manual
|
||||||
|
@(require scribble/eval
|
||||||
|
(for-label racket/base
|
||||||
|
racket/contract
|
||||||
|
racket/struct-info
|
||||||
|
rackunit
|
||||||
|
syntax/macro-testing))
|
||||||
|
|
||||||
|
@(define the-eval (make-base-eval))
|
||||||
|
@(the-eval '(require rackunit syntax/macro-testing (for-syntax racket/base racket/struct-info)))
|
||||||
|
|
||||||
|
@title[#:tag "macro-testing"]{Macro Testing}
|
||||||
|
|
||||||
|
@defmodule[syntax/macro-testing]
|
||||||
|
|
||||||
|
@defform/subs[(phase1-eval ct-expr maybe-quote maybe-catch?)
|
||||||
|
([maybe-quote (code:line)
|
||||||
|
(code:line #:quote quote-id)]
|
||||||
|
[maybe-catch? (code:line)
|
||||||
|
(code:line #:catch? catch?)])]{
|
||||||
|
|
||||||
|
Evaluates @racket[ct-expr] at compile time and quotes the result using
|
||||||
|
@racket[quote-id], which defaults to @racket[quote]. Another suitable
|
||||||
|
argument for @racket[quote-id] is @racket[quote-syntax].
|
||||||
|
|
||||||
|
If @racket[catch?] is @racket[#t], then if the evaluation of
|
||||||
|
@racket[ct-expr] raises a compile-time exception, it is caught and
|
||||||
|
converted to a run-time exception.
|
||||||
|
|
||||||
|
@examples[#:eval the-eval
|
||||||
|
(struct point (x y))
|
||||||
|
(phase1-eval (extract-struct-info (syntax-local-value #'point)))
|
||||||
|
(phase1-eval (extract-struct-info (syntax-local-value #'point))
|
||||||
|
#:quote quote-syntax)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
@defform[(convert-compile-time-error expr)]{
|
||||||
|
|
||||||
|
Equivalent to @racket[(#%expression expr)] except if expansion of
|
||||||
|
@racket[expr] causes a compile-time exception to be raised; in that
|
||||||
|
case, the compile-time exception is converted to a run-time exception
|
||||||
|
raised when the expression is evaluated.
|
||||||
|
|
||||||
|
Use @racket[convert-compile-time-error] to write tests for
|
||||||
|
compile-time error checking like syntax errors:
|
||||||
|
|
||||||
|
@examples[#:eval the-eval
|
||||||
|
(check-exn #rx"missing an \"else\" expression"
|
||||||
|
(lambda () (convert-compile-time-error (if 1 2))))
|
||||||
|
(check-exn #rx"missing formals and body"
|
||||||
|
(lambda () (convert-compile-time-error (lambda))))
|
||||||
|
]
|
||||||
|
|
||||||
|
Without the use of @racket[convert-compile-time-error], the checks
|
||||||
|
above would not be executed because the test program would not compile.
|
||||||
|
}
|
||||||
|
|
||||||
|
@defform[(convert-syntax-error expr)]{
|
||||||
|
|
||||||
|
Like @racket[convert-compile-time-error], but only catches compile-time
|
||||||
|
@racket[exn:fail:syntax?] exceptions and sets
|
||||||
|
@racket[error-print-source-location] to @racket[#f] around the
|
||||||
|
expansion of @racket[expr] to make the message easier to match
|
||||||
|
exactly.
|
||||||
|
|
||||||
|
@examples[#:eval the-eval
|
||||||
|
(check-exn #rx"^lambda: bad syntax$"
|
||||||
|
(lambda () (convert-syntax-error (lambda))))
|
||||||
|
]
|
||||||
|
|
||||||
|
@history[#:added "6.2.900.6"]{}
|
||||||
|
}
|
||||||
|
|
||||||
|
@(close-eval the-eval)
|
|
@ -33,4 +33,6 @@
|
||||||
|
|
||||||
@include-section["contract.scrbl"]
|
@include-section["contract.scrbl"]
|
||||||
|
|
||||||
|
@include-section["macro-testing.scrbl"]
|
||||||
|
|
||||||
@index-section[]
|
@index-section[]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user