diff --git a/common/test/cases/swas-as-override.penpot b/common/test/cases/swas-as-override.penpot new file mode 100644 index 000000000..acffd9320 Binary files /dev/null and b/common/test/cases/swas-as-override.penpot differ diff --git a/common/test/common_tests/logic/swap_as_override_test.cljc b/common/test/common_tests/logic/swap_as_override_test.cljc new file mode 100644 index 000000000..1a0ed7af0 --- /dev/null +++ b/common/test/common_tests/logic/swap_as_override_test.cljc @@ -0,0 +1,141 @@ +;; 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.logic.swap-as-override-test + (:require + [app.common.files.changes :as ch] + [app.common.files.changes-builder :as pcb] + [app.common.logic.libraries :as cll] + [app.common.logic.shapes :as cls] + [app.common.pprint :as pp] + [app.common.test-helpers.components :as thc] + [app.common.test-helpers.compositions :as tho] + [app.common.test-helpers.files :as thf] + [app.common.test-helpers.ids-map :as thi] + [app.common.test-helpers.shapes :as ths] + [app.common.types.component :as ctk] + [app.common.types.container :as ctn] + [app.common.types.file :as ctf] + [app.common.uuid :as uuid] + [clojure.test :as t])) + +(t/use-fixtures :each thi/test-fixture) + +(defn- setup [] + (-> (thf/sample-file :file1) + + (tho/add-simple-component :component-1 :frame-component-1 :child-component-1 :child-params {:name "child-component-1" :type :rect :fills (ths/sample-fills-color :fill-color "#111111")}) + (tho/add-simple-component :component-2 :frame-component-2 :child-component-2 :child-params {:name "child-component-2" :type :rect :fills (ths/sample-fills-color :fill-color "#222222")}) + (tho/add-simple-component :component-3 :frame-component-3 :child-component-3 :child-params {:name "child-component-3" :type :rect :fills (ths/sample-fills-color :fill-color "#333333")}) + + (tho/add-frame :frame-icon-and-text) + (thc/instantiate-component :component-1 :copy-component-1 :parent-label :frame-icon-and-text :children-labels [:component-1-icon-and-text]) + (ths/add-sample-shape :text + {:type :text + :name "icon+text" + :parent-label :frame-icon-and-text}) + (thc/make-component :icon-and-text :frame-icon-and-text) + + (tho/add-frame :frame-panel) + (thc/instantiate-component :icon-and-text :copy-icon-and-text :parent-label :frame-panel :children-labels [:icon-and-text-panel]) + (thc/make-component :panel :frame-panel) + + (thc/instantiate-component :panel :copy-panel :children-labels [:copy-icon-and-text-panel]))) + +(defn- propagate-all-component-changes [file] + (-> file + (tho/propagate-component-changes :icon-and-text) + (tho/propagate-component-changes :panel))) + +(defn- fill-colors [file] + [(tho/bottom-fill-color file :frame-icon-and-text) + (tho/bottom-fill-color file :frame-panel) + (tho/bottom-fill-color file :copy-panel)]) + +(defn- validate [file validator] + (validator file) + file) + +;; Related .penpot file: common/test/cases/xxxxxx +(t/deftest swap-main-then-copy + (-> (setup) + ;; Swap icon in icon+text main. Check that it propagates to copies. + (tho/swap-component-in-shape :copy-component-1 :component-2 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#222222" "#222222" "#222222"]))) + + ;; Change color of icon in icon+text main. Check that it propagates to copies. + (tho/update-bottom-color :frame-icon-and-text "#333333" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#333333" "#333333" "#333333"]))) + + ;; Swap icon inside panel main. Check it propagates to panel copy. + (tho/swap-component-in-first-child :copy-icon-and-text :component-1 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#333333" "#111111" "#111111"]))) + + ;; Change color of icon in icon+text. Check that it does not propagate. + (tho/update-bottom-color :frame-icon-and-text "#444444" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#444444" "#111111" "#111111"]))) + + ;; Change color of icon in panel main. Check that it propagates. + (tho/update-bottom-color :frame-panel "#555555" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#444444" "#555555" "#555555"]))))) + +(t/deftest swap-copy-then-main + (-> (setup) + ;; Swap icon inside panel main. Check that it propagates to panel copy. + (tho/swap-component-in-first-child :copy-icon-and-text :component-2 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#111111" "#222222" "#222222"]))) + + ;; Change color of icon in icon+text. Check that it does not propagate. + (tho/update-bottom-color :frame-icon-and-text "#333333" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#333333" "#222222" "#222222"]))) + + ;;Change color of icon in panel main. Check that it propagates + (tho/update-bottom-color :frame-panel "#444444" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#333333" "#444444" "#444444"]))) + + ;; Swap icon in icon+text main. Check that it does not propagate. + (tho/swap-component-in-shape :copy-component-1 :component-2 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#222222" "#444444" "#444444"]))) + + ;; Change color of icon in icon+text. Check that it does not propagate. + (tho/update-bottom-color :frame-icon-and-text "#555555" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#555555" "#444444" "#444444"]))))) + +(t/deftest swap-copy-then-2nd-copy + (-> (setup) + ;; Swap icon inside panel main. Check that it propagates to panel copy. + (tho/swap-component-in-first-child :copy-icon-and-text :component-2 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#111111" "#222222" "#222222"]))) + + ;; Swap icon inside panel copy. + (tho/swap-component-in-first-child :copy-icon-and-text-panel :component-1 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#111111" "#222222" "#111111"]))) + + ;; Change color of icon in icon+text. Check that it does not propagate. + (tho/update-bottom-color :frame-icon-and-text "#333333" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#333333" "#222222" "#111111"]))) + + ;; Change color of icon in panel main. Check that it does not propagate. + (tho/update-bottom-color :frame-panel "#444444" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#333333" "#444444" "#111111"]))))) + +(t/deftest swap-2nd-copy-then-copy + (-> (setup) + ;; Swap icon inside panel copy + (tho/swap-component-in-first-child :copy-icon-and-text-panel :component-2 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#111111" "#111111" "#222222"]))) + + ;; Swap icon inside panel main. Check that it does not propagate. + (tho/swap-component-in-first-child :copy-icon-and-text :component-3 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#111111" "#333333" "#222222"]))) + + ;; Change color of icon in icon+text. Check that it does not propagate. + (tho/update-bottom-color :frame-icon-and-text "#444444" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#444444" "#333333" "#222222"]))) + + ;; Change color of icon in panel main. Check that it does not propagate. + (tho/update-bottom-color :frame-panel "#555555" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#444444" "#555555" "#222222"])))))