add dynamic-require/expose
original commit: cdc2aaa70c5cb908a16a546386fa2f064cdce6ad
This commit is contained in:
parent
3e34357795
commit
275b886005
|
@ -22,3 +22,13 @@ This example gets @racket[make-failure-test], which is defined in a RackUnit tes
|
||||||
@racketblock[
|
@racketblock[
|
||||||
(require/expose rackunit/private/check-test (make-failure-test))
|
(require/expose rackunit/private/check-test (make-failure-test))
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@defproc[(dynamic-require/expose [mod (or/c module-path?
|
||||||
|
module-path-index?
|
||||||
|
resolved-module-path?)]
|
||||||
|
[name symbol?])
|
||||||
|
any]{
|
||||||
|
|
||||||
|
Like @racket[dynamic-require], but gets internal bindings like
|
||||||
|
@racket[require/expose].
|
||||||
|
}
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
around
|
around
|
||||||
|
|
||||||
require/expose
|
require/expose
|
||||||
|
dynamic-require/expose
|
||||||
|
|
||||||
define-shortcut
|
define-shortcut
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
"test-case.rkt")
|
"test-case.rkt")
|
||||||
|
|
||||||
(provide require/expose
|
(provide require/expose
|
||||||
|
dynamic-require/expose
|
||||||
test-suite*
|
test-suite*
|
||||||
check-regexp-match)
|
check-regexp-match)
|
||||||
|
|
||||||
|
@ -54,11 +55,26 @@
|
||||||
;; Use the correct module-registry
|
;; Use the correct module-registry
|
||||||
(parameterize ((current-namespace
|
(parameterize ((current-namespace
|
||||||
(variable-reference->namespace (#%variable-reference))))
|
(variable-reference->namespace (#%variable-reference))))
|
||||||
|
(dynamic-require/expose* the-resolved-mod '(id ...)))))]))
|
||||||
|
|
||||||
|
(define (dynamic-require/expose mod name)
|
||||||
|
(unless (or (path? mod)
|
||||||
|
(module-path? mod)
|
||||||
|
(module-path-index? mod)
|
||||||
|
(resolved-module-path? mod))
|
||||||
|
(raise-argument-error 'dynamic-require/expose
|
||||||
|
"(or/c module-path? module-path-index? resolved-module-path?)"
|
||||||
|
0 mod name))
|
||||||
|
(unless (symbol? name)
|
||||||
|
(raise-argument-error 'dynamic-require/expose "symbol?" 1 mod name))
|
||||||
|
(dynamic-require/expose* mod (list name)))
|
||||||
|
|
||||||
|
(define (dynamic-require/expose* mod names)
|
||||||
;; Make sure module the module is instantiated
|
;; Make sure module the module is instantiated
|
||||||
(dynamic-require the-resolved-mod #f)
|
(dynamic-require mod #f)
|
||||||
;; Get the module namespace
|
;; Get the module namespace
|
||||||
(parameterize ((current-namespace (module->namespace the-resolved-mod)))
|
(parameterize ((current-namespace (module->namespace mod)))
|
||||||
(values (eval 'id) ...)))))]))
|
(apply values (map eval names))))
|
||||||
|
|
||||||
(define-syntax test-suite*
|
(define-syntax test-suite*
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
|
@ -70,4 +86,3 @@
|
||||||
(define-simple-check (check-regexp-match regex string)
|
(define-simple-check (check-regexp-match regex string)
|
||||||
(and (string? string)
|
(and (string? string)
|
||||||
(regexp-match regex string)))
|
(regexp-match regex string)))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user