;; This Source Code Form is subject to the terms of the Mozilla Public ;; License, v. 2.0. If a copy of the MPL was not distributed with this ;; file, You can obtain one at http://mozilla.org/MPL/2.0/. ;; ;; Copyright (c) KALEIDOS INC (ns frontend-tests.fonts-test (:require [app.main.fonts :as fonts] [cljs.test :as t :include-macros true])) (def sample-font {:id "sourcesanspro" :name "Source Sans Pro" :family "sourcesanspro" :variants [{:id "200" :name "200" :weight "200" :style "normal" :suffix "extralight" :ttf-url "sourcesanspro-extralight.ttf"} {:id "200italic" :name "200 Italic" :weight "200" :style "italic" :suffix "extralightitalic" :ttf-url "sourcesanspro-extralightitalic.ttf"} {:id "300" :name "300" :weight "300" :style "normal" :suffix "light" :ttf-url "sourcesanspro-light.ttf"} {:id "300italic" :name "300 Italic" :weight "300" :style "italic" :suffix "lightitalic" :ttf-url "sourcesanspro-lightitalic.ttf"} {:id "regular" :name "400" :weight "400" :style "normal" :ttf-url "sourcesanspro-regular.ttf"} {:id "italic" :name "400 Italic" :weight "400" :style "italic" :ttf-url "sourcesanspro-italic.ttf"} {:id "bold" :name "700" :weight "700" :style "normal" :ttf-url "sourcesanspro-bold.ttf"} {:id "bolditalic" :name "700 Italic" :weight "700" :style "italic" :ttf-url "sourcesanspro-bolditalic.ttf"} {:id "black" :name "900" :weight "900" :style "normal" :ttf-url "sourcesanspro-black.ttf"} {:id "blackitalic" :name "900 Italic" :weight "900" :style "italic" :ttf-url "sourcesanspro-blackitalic.ttf"}] :backend :builtin}) (t/deftest find-closest-weight-variant-test (t/testing "finds exact weight match" (let [result (fonts/find-closest-variant sample-font "400" nil)] (t/is (= "400" (:weight result))) (t/is (= "normal" (:style result))))) (t/testing "finds exact weight match with style" (let [result (fonts/find-closest-variant sample-font "400" "italic")] (t/is (= "400" (:weight result))) (t/is (= "italic" (:style result))))) (t/testing "chooses higher weight when exactly between two weights" (let [result (fonts/find-closest-variant sample-font "350" nil)] (t/is (= "400" (:weight result))))) (t/testing "finds exact weight match with style" (let [result (fonts/find-closest-variant sample-font "350" "italic")] (t/is (= "400" (:weight result))) (t/is (= "italic" (:style result))))) (t/testing "finds closest weight below minimum available" (let [result (fonts/find-closest-variant sample-font "0" nil)] (t/is (= "200" (:weight result))))) (t/testing "finds closest weight above maximum available" (let [result (fonts/find-closest-variant sample-font "1000" nil)] (t/is (= "900" (:weight result))))) (t/testing "keeps the closest weight match when style is not found" (let [font {:id "sourcesanspro" :name "Source Sans Pro" :family "sourcesanspro" :variants [{:id "200italic" :name "200 Italic" :weight "200" :style "italic" :suffix "extralightitalic" :ttf-url "sourcesanspro-extralightitalic.ttf"} {:id "300" :name "300" :weight "300" :style "normal" :suffix "light" :ttf-url "sourcesanspro-light.ttf"} {:id "300italic" :name "300 Italic" :weight "300" :style "italic" :suffix "lightitalic" :ttf-url "sourcesanspro-lightitalic.ttf"}]} result (fonts/find-closest-variant font "200" nil)] (t/is (= "200" (:weight result))) (t/is (= "italic" (:style result))))))