Added get-message function, with simpler parameters.
Also brought up to date, and fixed some stylistic errors noted by Kondo, and set the default locale to the runtime default locale.
This commit is contained in:
parent
47396aa261
commit
e2e06d0244
21 changed files with 2073 additions and 239 deletions
|
|
@ -1,7 +1,12 @@
|
|||
(ns ^{:doc "Tests for Internationalisation."
|
||||
:author "Simon Brooke"} scot.weft.i18n.test.core
|
||||
(:require [clojure.test :refer :all]
|
||||
[scot.weft.i18n.core :refer :all]))
|
||||
(:require [clojure.test :refer [deftest is testing]]
|
||||
[scot.weft.i18n.core :refer [*default-language*
|
||||
acceptable-languages
|
||||
generate-accept-languages
|
||||
get-message
|
||||
get-messages
|
||||
parse-accept-language-header]]))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;
|
||||
|
|
@ -14,174 +19,173 @@
|
|||
;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
(deftest test-generator
|
||||
(testing "Generating normalised maps from parse trees"
|
||||
(is
|
||||
(=
|
||||
0.6
|
||||
(generate-accept-languages
|
||||
[:Q-VALUE "0.6"])))
|
||||
(=
|
||||
0.6
|
||||
(generate-accept-languages
|
||||
[:Q-VALUE "0.6"])))
|
||||
(is
|
||||
(=
|
||||
{:language "en", :qualifier "*"}
|
||||
(generate-accept-languages
|
||||
[:PRIMARY-TAG "en"])))
|
||||
(=
|
||||
{:language "en", :qualifier "*"}
|
||||
(generate-accept-languages
|
||||
[:PRIMARY-TAG "en"])))
|
||||
(is
|
||||
(=
|
||||
{:language "en", :qualifier "*"}
|
||||
(generate-accept-languages
|
||||
(=
|
||||
{:language "en", :qualifier "*"}
|
||||
(generate-accept-languages
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]])))
|
||||
(is
|
||||
(=
|
||||
{:language "en", :qualifier "*", :preference 1}
|
||||
(generate-accept-languages
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]]])))
|
||||
(is
|
||||
(=
|
||||
{:language "en", :qualifier "GB", :preference 1}
|
||||
(generate-accept-languages
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS
|
||||
[:SUB-TAG "GB"]]]])))
|
||||
(is
|
||||
(=
|
||||
'({:language "en", :qualifier "GB", :preference 1})
|
||||
(generate-accept-languages
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS
|
||||
[:SUB-TAG "GB"]]]]])))
|
||||
(is
|
||||
(=
|
||||
'({:language "en", :qualifier "US", :preference 0.8}
|
||||
{:language "en", :qualifier "*", :preference 0.6})
|
||||
(generate-accept-languages
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS
|
||||
[:SUB-TAG "US"]]]
|
||||
";q="
|
||||
[:Q-VALUE "0.8"]]
|
||||
[:SPEC-SEP ","]
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]])))
|
||||
[:PRIMARY-TAG "en"]]
|
||||
";q="
|
||||
[:Q-VALUE "0.6"]]]])))
|
||||
(is
|
||||
(=
|
||||
{:language "en", :qualifier "*", :preference 1}
|
||||
(generate-accept-languages
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]]])))
|
||||
(is
|
||||
(=
|
||||
{:language "en", :qualifier "GB", :preference 1}
|
||||
(generate-accept-languages
|
||||
(=
|
||||
'({:language "en", :qualifier "GB", :preference 1}
|
||||
{:language "en", :qualifier "US", :preference 0.8}
|
||||
{:language "en", :qualifier "*", :preference 0.6})
|
||||
(generate-accept-languages
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS
|
||||
[:SUB-TAG "GB"]]]]
|
||||
[:SPEC-SEP ","]
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS
|
||||
[:SUB-TAG "GB"]]]])))
|
||||
(is
|
||||
(=
|
||||
'({:language "en", :qualifier "GB", :preference 1})
|
||||
(generate-accept-languages
|
||||
[:SUB-TAG "US"]]]
|
||||
";q="
|
||||
[:Q-VALUE "0.8"]]
|
||||
[:SPEC-SEP ","]
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS
|
||||
[:SUB-TAG "GB"]]]]])))
|
||||
(is
|
||||
(=
|
||||
'({:language "en", :qualifier "US", :preference 0.8}
|
||||
{:language "en", :qualifier "*", :preference 0.6})
|
||||
(generate-accept-languages
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS
|
||||
[:SUB-TAG "US"]]]
|
||||
[:PRIMARY-TAG "en"]]
|
||||
";q="
|
||||
[:Q-VALUE "0.8"]]
|
||||
[:SPEC-SEP ","]
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]]
|
||||
";q="
|
||||
[:Q-VALUE "0.6"]]]])))
|
||||
(is
|
||||
(=
|
||||
'({:language "en", :qualifier "GB", :preference 1}
|
||||
{:language "en", :qualifier "US", :preference 0.8}
|
||||
{:language "en", :qualifier "*", :preference 0.6})
|
||||
(generate-accept-languages
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS
|
||||
[:SUB-TAG "GB"]]]]
|
||||
[:SPEC-SEP ","]
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS
|
||||
[:SUB-TAG "US"]]]
|
||||
";q="
|
||||
[:Q-VALUE "0.8"]]
|
||||
[:SPEC-SEP ","]
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]]
|
||||
";q="
|
||||
[:Q-VALUE "0.6"]]]]]])))))
|
||||
[:Q-VALUE "0.6"]]]]]])))))
|
||||
|
||||
(deftest test-parser
|
||||
(testing "Generating parse trees from `Accept-Language` headers"
|
||||
(is
|
||||
(=
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "dk"]]]]]
|
||||
(parse-accept-language-header "dk"))
|
||||
"Should accept a basic language specifier.")
|
||||
(=
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "dk"]]]]]
|
||||
(parse-accept-language-header "dk"))
|
||||
"Should accept a basic language specifier.")
|
||||
(is
|
||||
(=
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS [:SUB-TAG "GB"]]]]]]
|
||||
(parse-accept-language-header "en-GB"))
|
||||
"Should accept a basic locale.")
|
||||
(=
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS [:SUB-TAG "GB"]]]]]]
|
||||
(parse-accept-language-header "en-GB"))
|
||||
"Should accept a basic locale.")
|
||||
(is
|
||||
(=
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS [:SUB-TAG "GB"]]]
|
||||
[:Q-SEP ";q="]
|
||||
[:Q-VALUE "0.6"]]]]
|
||||
(parse-accept-language-header "en-GB;q=0.6"))
|
||||
"Should accept a q value.")
|
||||
(=
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS [:SUB-TAG "GB"]]]
|
||||
[:Q-SEP ";q="]
|
||||
[:Q-VALUE "0.6"]]]]
|
||||
(parse-accept-language-header "en-GB;q=0.6"))
|
||||
"Should accept a q value.")
|
||||
(is
|
||||
(=
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS [:SUB-TAG "GB"]]]
|
||||
[:Q-SEP "; q="]
|
||||
[:Q-VALUE "0.6"]]]]
|
||||
(parse-accept-language-header "en-GB; q=0.6"))
|
||||
"Space after semi-colon should be tolerated.")
|
||||
(=
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER
|
||||
[:LANGUAGE-TAG
|
||||
[:PRIMARY-TAG "en"]
|
||||
"-"
|
||||
[:SUB-TAGS [:SUB-TAG "GB"]]]
|
||||
[:Q-SEP "; q="]
|
||||
[:Q-VALUE "0.6"]]]]
|
||||
(parse-accept-language-header "en-GB; q=0.6"))
|
||||
"Space after semi-colon should be tolerated.")
|
||||
(is
|
||||
(=
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER [:LANGUAGE-TAG [:PRIMARY-TAG "en"]]]
|
||||
[:SPEC-SEP ","]
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER [:LANGUAGE-TAG [:PRIMARY-TAG "fr"]]]]]]
|
||||
(parse-accept-language-header "en,fr"))
|
||||
"Should accept multiple specifications.")
|
||||
(=
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER [:LANGUAGE-TAG [:PRIMARY-TAG "en"]]]
|
||||
[:SPEC-SEP ","]
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER [:LANGUAGE-TAG [:PRIMARY-TAG "fr"]]]]]]
|
||||
(parse-accept-language-header "en,fr"))
|
||||
"Should accept multiple specifications.")
|
||||
(is
|
||||
(=
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER [:LANGUAGE-TAG [:PRIMARY-TAG "en"]]]
|
||||
[:SPEC-SEP ", "]
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER [:LANGUAGE-TAG [:PRIMARY-TAG "fr"]]]]]]
|
||||
(parse-accept-language-header "en, fr"))
|
||||
"Space after comma should be tolerated.")
|
||||
(=
|
||||
[:HEADER
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER [:LANGUAGE-TAG [:PRIMARY-TAG "en"]]]
|
||||
[:SPEC-SEP ", "]
|
||||
[:SPECIFIERS
|
||||
[:SPECIFIER [:LANGUAGE-TAG [:PRIMARY-TAG "fr"]]]]]]
|
||||
(parse-accept-language-header "en, fr"))
|
||||
"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 "")))
|
||||
|
|
@ -191,23 +195,29 @@
|
|||
(deftest test-ordering
|
||||
(testing "Languages specified are ordered correctly"
|
||||
(is
|
||||
(=
|
||||
'({:language "en", :qualifier "GB", :preference 1}
|
||||
{:language "en", :qualifier "AU", :preference 0.8}
|
||||
{:language "en", :qualifier "US", :preference 0.6})
|
||||
(acceptable-languages "en-AU;q=0.8, en-GB, en-US;q=0.6")))))
|
||||
(=
|
||||
'({:language "en", :qualifier "GB", :preference 1}
|
||||
{:language "en", :qualifier "AU", :preference 0.8}
|
||||
{:language "en", :qualifier "US", :preference 0.6})
|
||||
(acceptable-languages "en-AU;q=0.8, en-GB, en-US;q=0.6")))))
|
||||
|
||||
|
||||
(deftest test-pipe
|
||||
(testing "Top level functionality"
|
||||
(is
|
||||
(=
|
||||
"This is not a pipe"
|
||||
(:pipe (get-messages "en-GB, fr-FR;q=0.9" "i18n" "en-GB"))))
|
||||
(=
|
||||
"This is not a pipe"
|
||||
(:pipe (get-messages "en-GB, fr-FR;q=0.9" "i18n" "en-GB"))))
|
||||
(is
|
||||
(=
|
||||
"Ceci n'est pas une pipe."
|
||||
(:pipe (get-messages "en-GB;q=0.9, fr-FR" "i18n" "en-GB"))))
|
||||
(=
|
||||
"Ceci n'est pas une pipe."
|
||||
(:pipe (get-messages "en-GB;q=0.9, fr-FR" "i18n" "en-GB"))))
|
||||
(is
|
||||
(= nil (get-messages "xx-XX;q=0.5, yy-YY" "i18n" "zz-ZZ"))
|
||||
"If no usable file is found, an exception should not be thrown.")))
|
||||
(= nil (get-messages "xx-XX;q=0.5, yy-YY" "i18n" "zz-ZZ"))
|
||||
"If no usable file is found, an exception should not be thrown.")
|
||||
(binding [*default-language* "en-GB"]
|
||||
(is (= "This is not a pipe" (get-message :pipe)))
|
||||
(is
|
||||
(=
|
||||
"Ceci n'est pas une pipe." (get-message :pipe "en-GB;q=0.9, fr-FR")))
|
||||
(is (= "это не труба." (get-message :pipe "de-DE" "i18n" "ru"))))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue