From 82a331175fb93279ed8f25b89597ca28189a3a8c Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Tue, 13 Oct 2015 09:49:24 -0700 Subject: [PATCH] make sure `get-template-for` notices template sources --- file.rkt | 11 +++++++---- render.rkt | 2 +- test/data/pathup/subdir/template.html.p | 3 +++ test/test-pathup.rkt | 7 +++++-- 4 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 test/data/pathup/subdir/template.html.p diff --git a/file.rkt b/file.rkt index d1cbbff..19a2dd1 100644 --- a/file.rkt +++ b/file.rkt @@ -11,13 +11,16 @@ dir) -(define+provide/contract (find-upward-from source-path filename-to-find) - (coerce/path? coerce/path? . -> . (or/c #f path?)) - (parameterize ([current-directory (dirname (->complete-path source-path))]) +(define+provide/contract (find-upward-from starting-path filename-to-find + [exists-proc file-exists?]) + ;; use exists-proc to permit less strict matching. + ;; for instance, maybe it's ok to find the source for the path. + ((coerce/path? coerce/path?)((path? . -> . any/c)) . ->* . (or/c #f path?)) + (parameterize ([current-directory (dirname (->complete-path starting-path))]) (let loop ([dir (current-directory)][path filename-to-find]) (and dir ; dir is #f when it hits the top of the filesystem (let ([completed-path (path->complete-path path)]) - (if (file-exists? completed-path) + (if (exists-proc completed-path) (simplify-path completed-path) (loop (dirname dir) (build-path 'up path)))))))) diff --git a/render.rkt b/render.rkt index f4a7c1c..7135f0a 100644 --- a/render.rkt +++ b/render.rkt @@ -230,7 +230,7 @@ (define (get-default-template) (and output-path-ext (let ([default-template-filename (add-ext (world:current-default-template-prefix) output-path-ext)]) - (find-upward-from source-path default-template-filename)))) + (find-upward-from source-path default-template-filename file-exists-or-has-source?)))) (define (get-fallback-template) (and output-path-ext diff --git a/test/data/pathup/subdir/template.html.p b/test/data/pathup/subdir/template.html.p new file mode 100644 index 0000000..0fb7399 --- /dev/null +++ b/test/data/pathup/subdir/template.html.p @@ -0,0 +1,3 @@ +#pollen + +42 \ No newline at end of file diff --git a/test/test-pathup.rkt b/test/test-pathup.rkt index 9e1301b..39382f7 100644 --- a/test/test-pathup.rkt +++ b/test/test-pathup.rkt @@ -1,11 +1,14 @@ #lang at-exp racket/base -(require rackunit racket/runtime-path pollen/project) +(require rackunit racket/runtime-path pollen/project pollen/render) (define-runtime-path pathup-one "data/pathup/subdir/test-pathup-one.html.pm") (define-runtime-path dr-top "data/pathup/pollen.rkt") (define-runtime-path pathup-two "data/pathup/subdir/subdir/test-pathup-two.html.pm") (define-runtime-path dr-sub "data/pathup/subdir/subdir/pollen.rkt") +(define-runtime-path template "data/pathup/subdir/template.html") (check-false (get-directory-require-files "test-pathup.rkt")) (check-equal? (get-directory-require-files pathup-one) (list dr-top)) -(check-equal? (get-directory-require-files pathup-two) (list dr-sub)) \ No newline at end of file +(check-equal? (get-directory-require-files pathup-two) (list dr-sub)) +(check-equal? (get-template-for pathup-one) template) +(check-equal? (get-template-for pathup-two) template) \ No newline at end of file