mirror of
https://github.com/penpot/penpot.git
synced 2026-04-25 11:18:36 +00:00
* 🎉 Add tests for app.common.geom.bounds-map * 🎉 Add tests for app.common.geom and descendant namespaces * 📎 Fix linting issues --------- Co-authored-by: Luis de Dios <luis.dedios@kaleidos.net>
77 lines
3.0 KiB
Clojure
77 lines
3.0 KiB
Clojure
;; 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 common-tests.geom-shapes-text-test
|
|
(:require
|
|
[app.common.geom.matrix :as gmt]
|
|
[app.common.geom.point :as gpt]
|
|
[app.common.geom.rect :as grc]
|
|
[app.common.geom.shapes.text :as gte]
|
|
[app.common.math :as mth]
|
|
[clojure.test :as t]))
|
|
|
|
(t/deftest position-data->rect-test
|
|
(t/testing "Converts position data to a rect"
|
|
(let [pd {:x 100 :y 200 :width 80 :height 20}
|
|
result (gte/position-data->rect pd)]
|
|
(t/is (grc/rect? result))
|
|
(t/is (mth/close? 100.0 (:x result)))
|
|
(t/is (mth/close? 180.0 (:y result)))
|
|
(t/is (mth/close? 80.0 (:width result)))
|
|
(t/is (mth/close? 20.0 (:height result)))))
|
|
|
|
(t/testing "Negative y still works"
|
|
(let [pd {:x 10 :y 5 :width 20 :height 10}
|
|
result (gte/position-data->rect pd)]
|
|
(t/is (mth/close? 10.0 (:x result)))
|
|
(t/is (mth/close? -5.0 (:y result))))))
|
|
|
|
(t/deftest shape->rect-test
|
|
(t/testing "Shape with position data returns bounding rect"
|
|
(let [shape {:position-data [{:x 10 :y 50 :width 40 :height 10}
|
|
{:x 10 :y 60 :width 30 :height 10}]}
|
|
result (gte/shape->rect shape)]
|
|
(t/is (grc/rect? result))
|
|
(t/is (pos? (:width result)))
|
|
(t/is (pos? (:height result)))))
|
|
|
|
(t/testing "Shape without position data returns selrect"
|
|
(let [selrect (grc/make-rect 10 20 100 50)
|
|
shape {:position-data nil :selrect selrect}
|
|
result (gte/shape->rect shape)]
|
|
(t/is (= selrect result))))
|
|
|
|
(t/testing "Shape with empty position data returns selrect"
|
|
(let [selrect (grc/make-rect 10 20 100 50)
|
|
shape {:position-data [] :selrect selrect}
|
|
result (gte/shape->rect shape)]
|
|
(t/is (= selrect result)))))
|
|
|
|
(t/deftest shape->bounds-test
|
|
(t/testing "Shape with position data and identity transform"
|
|
(let [shape {:position-data [{:x 10 :y 50 :width 40 :height 10}]
|
|
:selrect (grc/make-rect 10 40 40 10)
|
|
:transform (gmt/matrix)
|
|
:flip-x false :flip-y false}
|
|
result (gte/shape->bounds shape)]
|
|
(t/is (grc/rect? result))
|
|
(t/is (pos? (:width result))))))
|
|
|
|
(t/deftest overlaps-position-data?-test
|
|
(t/testing "Overlapping position data"
|
|
(let [shape-points [(gpt/point 0 0) (gpt/point 100 0)
|
|
(gpt/point 100 100) (gpt/point 0 100)]
|
|
shape {:points shape-points}
|
|
pd [{:x 10 :y 30 :width 20 :height 10}]]
|
|
(t/is (true? (gte/overlaps-position-data? shape pd)))))
|
|
|
|
(t/testing "Non-overlapping position data"
|
|
(let [shape-points [(gpt/point 0 0) (gpt/point 10 0)
|
|
(gpt/point 10 10) (gpt/point 0 10)]
|
|
shape {:points shape-points}
|
|
pd [{:x 200 :y 200 :width 20 :height 10}]]
|
|
(t/is (false? (gte/overlaps-position-data? shape pd))))))
|