diff --git a/src/scot/weft/i18n/core.clj b/src/scot/weft/i18n/core.clj index a7cbec7..aa31157 100644 --- a/src/scot/weft/i18n/core.clj +++ b/src/scot/weft/i18n/core.clj @@ -82,7 +82,8 @@ :Q-VALUE (read-string (second parse-tree)) ;; default (let [formatted-tree (with-out-str (pprint parse-tree))] - (throw (Exception. (str "Unexpected parse tree: " formatted-tree))))))) + (timbre/error "Unable to parse header.") + nil)))) (defn acceptable-languages @@ -94,11 +95,14 @@ of preference." {:doc/format :markdown} [accept-language-header] - (reverse - (sort-by - :preference - (generate-accept-languages - (parse-accept-language-header accept-language-header))))) + (let [parse-tree (parse-accept-language-header accept-language-header)] + (if (vector? parse-tree) + (reverse + (sort-by + :preference + (generate-accept-languages + parse-tree))) + (timbre/error "Failed to parse Accept-Language header '" accept-language-header "':\n" (str parse-tree))))) (defn slurp-resource diff --git a/test/scot/weft/i18n/test/core.clj b/test/scot/weft/i18n/test/core.clj index 8992988..e12a320 100644 --- a/test/scot/weft/i18n/test/core.clj +++ b/test/scot/weft/i18n/test/core.clj @@ -181,7 +181,11 @@ [:SPECIFIERS [:SPECIFIER [:LANGUAGE-TAG [:PRIMARY-TAG "fr"]]]]]] (parse-accept-language-header "en, fr")) - "Space after comma should be tolerated."))) + "Space after comma should be tolerated.") + (is (vector? (parse-accept-language-header "en, fr")) + "If the header is valid, we should get a (parse tree) vector") + (is (not (vector? (parse-accept-language-header ""))) + "If the header is invalid, we should get a failure object not a vector"))) (deftest test-ordering