racket/collects/tests/syntax/location.rkt
Matthew Flatt 603e920538 syntax/location: fix and change `quote-submodule-{name,path}'
Paths are left as paths, instead of trying to convert them to strings
or byte strings. Submodule path elements should be unquoted -- in the
same form as a `submod' form. All extra parts are submodule path elements,
never module paths or ".".
2012-07-10 11:42:42 -06:00

55 lines
1.8 KiB
Racket

#lang racket/base
(require syntax/location)
(require tests/eli-tester)
(define-syntax-rule (module-source)
(variable-reference->module-source
(#%variable-reference)))
(test
(quote-module-name) => (module-source)
(quote-module-name "..") => (list (module-source) "..")
(quote-module-name ".." A) => (list (module-source) ".." 'A)
(quote-module-name A B) => (list (module-source) 'A 'B))
(module A racket
(require syntax/location)
(define-syntax-rule (name) (quote-module-name))
(define a-name (name))
(define a-path (quote-module-path))
(module+ C
(require syntax/location)
(define c-name (quote-module-name))
(define c-name2 (quote-module-name ".."))
(define c-path (quote-module-path))
(define c-path2 (quote-module-path ".."))
(provide c-name c-name2 c-path c-path2))
(provide (all-defined-out)))
(module B racket
(require syntax/location)
(require (submod ".." A))
(define b-name (name))
(define b-path (quote-module-path))
(provide (all-defined-out)))
(require 'B)
(require 'A)
(require (submod 'A C))
(test
a-name => (list (module-source) 'A)
c-name => (list (module-source) 'A 'C)
c-name2 => (list (module-source) 'A 'C "..")
b-name => (list (module-source) 'B))
(test
(quote-module-path) => (module-source)
(quote-module-path "..") => (list 'submod (module-source) "..")
(quote-module-path ".." A) => (list 'submod (module-source) ".." 'A)
(quote-module-path A B) => (list 'submod (module-source) 'A 'B))
(test
a-path => (list 'submod (module-source) 'A)
c-path => (list 'submod (module-source) 'A 'C)
c-path2 => (list 'submod (module-source) 'A 'C "..")
b-path => (list 'submod (module-source) 'B))