From fcf14b5cab5ea09f30d4c17518b200a21c1e7abe Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 14 May 2024 13:29:52 +0200 Subject: [PATCH] :sparkles: Add duplicate page component tests --- common/test/cases/duplicated-pages.penpot | Bin 0 -> 25839 bytes .../logic/duplicated_pages_test.cljc | 117 ++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 common/test/cases/duplicated-pages.penpot create mode 100644 common/test/common_tests/logic/duplicated_pages_test.cljc diff --git a/common/test/cases/duplicated-pages.penpot b/common/test/cases/duplicated-pages.penpot new file mode 100644 index 0000000000000000000000000000000000000000..dccccbde44d5ef481488ca2fdd38a1634d733dfd GIT binary patch literal 25839 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%0A19gi#?pbCEMy~#KaXC%UU2E$}ybBEj z0w$u*Vt65O@lUscRV7%ek@9P4eH0Kn{&D$K?cdV5uRQx1(4{z+pRAFu@(cgk!FbN0 zB|pdqlYg?pOG-MXP+5o;AWy65sElcqzV=wHpfu%BQg`Th%19TxCYk;s@P9NFVfE}g z^Fj2=DdC3uUS2`gN_4b2Bgq+vkHOTQR4Y5nZ`(c!h(>g3NxLIAEKTuCV?<)tPxp-k z_dS*DHDGB*qCdsZH=ii<`n{u@q8jU~TG|+#q&jvvRH;EMzak5!p?)@^p+TV|w-t2s zt^cuR0nb_cVb+bLtOZTEKs-G@qfItRBvPnlqdRVblMt?<6V2G%8+*U@>R_^8k^^pJ z{=K>9?~f#759pi803Uv9SuSX6rs4jycgsw$qYXGq0jJZnN770)7V{BzHJb7W&7{v| zm(0#oKootfPkNtos5mT5YsQb@ND7hZ^rc%SHh17qQ1?S?7s38%oide{bY} zVDC^Cnqtu18IZ0deK0yU!&lp-EgVz|#BXz~Ll(%AVqRN47 z17u{bw){6aDa>kps+>-pA6F}{)x`YS-~poQ4iHx!_Zf4l&W5$Vww0n zrZuv);f{#ezh@{5#_3JFU7N1Y-Tl_8fy!tguy9Vg2Gc#>`!C;frXW#$4I3BZIggFu z^IBRTg)Pc(Q&1z>nBJv)6PB)O+pjGN$BCHpGAh10)F{Q(tVJ?rJQj+P8Hl~Z=r>#l z0`CB3_^aJKPfh*Gbw2_K;SEam3dD{Sm!1kmGoGNIKeU)Q5`pDmON&=Gx86AEb(v=8 zjrmh)=J438-%Mc*@LHe35e|-4{S*zVK&0*DaGd`^;opixq+fQ15vi2S4Q>w1o$AJj z&(v8w_AAS(EVBQXx*-R!-i^QFW9yBh)`;!#d3>$ za+U0zPLKYM72ex;XEa1Np@!kljp))5&Wx)$L}|yNpQ+5!0kgbqY5x;!JoT_jDA| z-h>I9>LK3HLTXW(k<@c~+KKo8ZY^b64LD-&v*y9Gt{~y{1g75(FobtXh1*riP1z_dGt5+*^vDDYslzZ0bb?$O> z5ua)`pUl#@IjbcT@=C5obGDoU2tYYDlz&PlxRqKk7H3B$4)ghoGo4x*hf9_2nN#dx z>mz)k-kX0t^>(-Z`ZM0z8jI9I7y;}P>?-;3r@LIqA#?4dxKXNur~qRJ_*gp%!m!BReL_XG<&9 zBk89xL&r`+8hqnKxcBk`AB+$?i^G6(X-PB~E(t*)WhH>S znPjhS14GC{kPrx38X_qPk(HJb2TMsvqh#N4{inmC%0f-SL@W2TJh7Bo6;*lT%ZmsY zl=Bj1uw|Du}-C5K^~Gi4KX!yJQnvn%CQS?wcGR)dMhlTlc_ z>3u;96w{={H6H+lv{Ay{a#$K`TxnghCzT2I<$KSc5nOinp7o2Ub#3VXy_uNv zGDWL$QN4b96$k#FIR#3gd$h{9;bGWlKG0L806E-0?e~DOkzr{reKoW02_8C?%Irrb z)`SJ+7+q%SRg+OP)A~LC8MtxkT5+D1zT;mfAG+BZ>-CreaqZf-G=@~fl5a4~ zoY+Tv%4VWEN!>6l`Wg4|zj-Qy3|98g&j?jDI}j~?$|$AwKK*CYyqp&osISZ)r(Zs< zu1KZi1gTSrWzQG_B{cK+7{6}R{!bx(FY7~+CRs^t?Kh8>naCT;63U~JrclTC_Qc`s zJr3(Esuar_!*{|>i}l}sSRGGL&b;=blA112H&$7+I=Ow1iS*>vuxRXM5`3soh~ObrUa!P-#tscj6-T zon^-=fs)xxZbr3{?$BdBTV~W^(OrbfWn<_D?egF+r6R$oaM+{ep~Sq|$aZeZYN~Nq zGx-;9oev7yj~6R}l3k+^;xaC(fD{fEldE zko(qDnNCf=p=+6v87QB6^let@-gmR_w*xdhw<|nhTQjM-YOIw#QC&eTCYZIyrqQ7g zZWHSa;2)Bbnmnn8QRL^r0cgYz4bJ;shHLc%zZz!CBa3IH0p&ui12O|vR!K41MA{cn zpi(9_RsvMYf-cU|q=#MW$+|7jKX?9gJh%sl_-qQ?jv^RRP;Z*RPE_7fSh?ktkNc4> zuJrZ(92>Xk%=Z+nItz1PkHm$b>kbNQGxrGfjdWV3GB2+($))%}J;>iAp>HBe$N3~( zx7M|g!AU&}m-^3iP3{Oi;+LnF?T}&?{oFaj>~)zhib}=9ym8;YnGS@xrO&? z(J>cw8@CI}=A5E|!cT2%^LNP{9sT@~cbT!+g}+9V#q}=PhiU1BQi5L_l6rXErF(zh zwxSy8^c=M?@oNO;^!tU8h6xo`jN3$+@8AA0?Vmv&lP_#$I%dACRsr4b^=v-z{%+@6 zTXI4E=A^fncKRsXxjA4jWzgm4PO0q<~w93-{O6K@vtGcjUa_bqg~UgPM?m1 zYn!`kZ8Rs_#P-iC$(QJYjQe9G^r`r>mdAnmn1j+)eaydiwW)L8{9f|EF8WtSKz(eV zw#sm!L%UpBZTFehKHou`E(ajW@?QttMEKuu_8Nx;_pHaRWlZtE57+ zIm#odC1aT(d1*lDY_TH*w#vb2!RF$(cS^&4BLP++$NZ!}qk|DWnu z2`wRfC9x77FOJO1k39soG;hTv8)Z0q;mNN7gw_F$jmhs3e*o@T|R(xTA* znCn57&pt9v!6yv@b@ynWjqVuf9Jhek%ciy;=!{nvGB%6;JQC=gDEn^8Pwjn=HnR!( z##6Ge3S(7Pd28hPX$5&OQ}MOnhMIU&#S$IlYs(N-2K){)sCIj-45t<(==}sk{O7pGMBn+ja6P`eEcF(D$scY{ z7u~F}+XGa`%7N+_`?kaXR>$g0K=A8Rso!rlu;8f-dqp3$2MvYDI1BQH{hs+`IHGfk zVS}m6^!YE(+#@+3w(_&*ZdatFZt(L~_-8j&daTo%ChPW*!)DmD7gO9^h0nwZ!W*)0$c7v;;?n8!wa7uwYH!mt-E;jr~u0rZQ-; zzh$|9xUcH@R{B=hOQzDyaUd;Q0BU2=+j`>H*G7(-HCsSg%W+feALLcoku`q}X&R7+ zlnXiolqtfpMz2N2{8Z{$@hWI7orG*HcPr>7g~hwEID>n`m*lwU_-FUp7_7v=;!OMrL<)_7AW^ciG6*SYS>T>?G(;9G2HdERl9mRpG?PUE7x2r9 zf#EVV99Q=b8I3=zn=n^`sPo{3)3{F{LzC2;dAk0PrE4Utp ztQ(A}k9qe3Brhb#e3du zM(>wjC1E8S#_aR#o%<}UtnWX=9Adf`^P<`B8_2a#UuB`|YR*FLs-=f%2Br4Z0g)Q2 z`rfJY0N41`Y&>z8%8dcP!w?Vf(u zC?3=`Qa;%upb3c{svkW}o_sd_uuWCM>;9MJTiE)69UXGp^jTFxiV~yRWA}uV+=G|V zgRzo}RO^rBg@dmzrxf4Yo&sBHKcM^g_@mg=OcpgkfMLkP$ZpwtmgqEs%HA=hJU_LX}VU zFWeu&0|MU{TJCcjJ_t{W6h*TJMaXO2RI#jITv+UkObej)&T?n^ww=G(~`Q+nMy2-uI-=3~z6%h5y&RRw0q%Lc`j8(w9{*E{#ZEB&}v5+h-RJBfL2m5AB=?GMd>fm^V5MggtYK_T*y0 zO_xCWIxma6I5u`to z*$$^8buR4|lLX)twj&!4ZW$esk<5z={~X37A;Z=A81^c!p+HxrO-gs-ifFVKpMTD#9EtM1d@T0UXWTVuOHGlg&Rd*}Tz)5VxtIf2k2U z01_=O4O;{T$s0)@#}<$ZtaOV-0+?i8BCnoGB0S<&i!$71Ab{|gC-JVG`6)Jax41;C z6Ts%~c6ay3I=@RTi@QH1XVO>|ZbL}+FwS{}GZ3QR^oNI?l=h{da z!{kAP6TQibEa$f2e-Ib0SE+I?J5lK=<)!QT{+JmR#PIzIU-tbeJ||soG&2at>Q41W zYl)_U9@d`13s1WhiOy?7rwSz355~e7WxMOKYjp&a^Vn7LikShJ_uJ%-aW;BpJ)-A-fxF%vmD7$2K8Gv{AI&F% zm`^U3=_9|Qi2PzV@@ra-gvhU$fyl4oQm8X^1Hy}Y)TJYCRpUnH5N_O!aO3ADH*uq5 zjYCw69COjJO7_wXsbx(C?IG-*uQ%1#0rOlics*hzG2NyS7y!e1)`9 z!tcq)L(dzr$1q4G3~thE;ctb6A-urPcL;Gu5=))%0V5Dq9aA8SF!l5Y&F*N*> z?EZJ=tw6N&jGV3`mGv3QY{9MmE~|>nMLUe5KVlGUpYyEGT;qfbcVG8cf1 z^+}InAK?+B%bQ9vZQa^agl}Yz_hSET*ciqR`+Qw*VtvTkuKc3FF0qG{|9n+SbwQR? z@^9$(iV?XOoM8noTny#dS5!gADW0&=V~Z)dNcG*1+xQ@vW=Se2jN zypU({xJj@q#PZ3GVrrRMl$wGZQ#i0X^9F9FTbL!jWy7oC(GjSHF_&aA<8v!?m`FQB z=lM|o;o!e(+8>0^3dr$BEW7p8(gtc+g%3`wMCa-YODYw&-8dg4XcotC`yR)KH;#_* z$dS`ewx6jryz%m99pq%=d>_hoa6v9d@O^mnn_nttCEll%HVy7|MIP*^`oW?^DuV`DU9G-708WHe=C zHZwUgFl9DoGh<^gI5}Z3VqrF8GG=2kHDWb4Gc_|aH8^BAGcjagWH|{a(tU8$#Tm!< z*-KDFMrRzQ6_R^TuxOGaT17i(RYXNa|L~#m5BX-pb0UrN?}Kk&tXYEN&h&^cm99c;+N5b~7jTUe9+&zdy63rPH_w zVbsY*_Qh+QnHPcgm}yQMY`QKsY3+i1*Gb}tVCSLq`Ve` zTW!9SHzZfG21fKc>*cTIqubjGQr6a%wu!HPNs_KdBhNF`(6P(>u_XCQ_YYHEp0#IB zw_VlR1~L}$&H=!ipje$<%H>(kS^!-Wj;6NSQI9Pk;}PEyxF$=PWT)Ao)R@U2_5}c} z4n~vDS*_C&$Uav_EQkMhI~4I)Rc4&ZXW)-MEqnM%D`Tf=knu?1bjieBu)=G{34p!T z5__E(e=-V2CVn4`rav^QqhXM35$`2T(*3CD zY@?MGNdC_l$=`;esdtU&YY1el+J6xz`5R0uKQ&TGq2&dX?LyK6;ikmQi%cxQF7y;Wkic? ztMNULjA}{DeTEZQ6KYHj^I(R7jMsQC6^!cf2W|JxeU2o6NvDf5c}=h}_0ExA(hySd z8sAIET;~GJP5?%>HrSY4oE2nSmG^w?FK6eF^Qy&fFI-+aCZ+r^> zvD}52n*e(4O8Av`3tm7{-ojllsTS;6#$ZTplf?~V4++ctaKmK1msS< zB6>GsP3*xRRqpDKd47jV_O1SC!K826AJAOny*KDYgzSk8&9Y zpOMblEWqjcR}nPeTIC34fnb16+@kOcoU_?9DoAYxcTawe*0c1T{8AEP5#PBuJ+HdB z&nbOXXFHR)MWHSnO@1;o|A=Q1`z9XubnGx#Mo-6TR#`QD2IrHW!|M40ou5`wXTvJ^ zCLy|)gq!#88>yjLEwZnRYeA^$?9Gphno{n@{R6?IOTy8_hHP0!1=&AduE2Qd>^m(8 zcUnX(+-adecFdVE`Gir!+*@hdcAHrQf>a?(~#}G)(GH3fPW`aG4v@7{% zBdQw)sg0SD@(a1}tibhv7Z|B*!snIrq2QUvDx&ERjOuC%WS?c0*D}F>jik2JUIb4) z^9UQtj4f zNeIM}r`_wdvOJhhv-UdTc}sd^KAL(jSKl0+XEXiQocE}|7scIB663= zE6Bmgs5WpM2{}(lIS*ayLR1>at(y59sG}Wqe87n|OHP}E4ekFmFHK*`F#&nFDlOGB zrkC)Nxl%~H8POT=8`M?YR?qne1afbO*RX>)ZS57kTPmCO?bnCEo?K%Na;VzssvIHY zEIe1TCMtCC8qGqi&?K9-S42yg=^{KYDmRg7SSfm)iB9ABZ>&_Fm@`ajP!`3BXf&IcO;ymY z#->y%*e1F35y^BZNxB%dufnI*W-E#)f0P6r5sF?B%JZjCC_Q9Trm5l$0U3`+7K_$5 zuPsSh2P;~ON`0nUX+CpKDYf4t=owkO;Mr(2amKs|b0z8uaxmW>P$Oc4V!9s9`lz|4 z)hzcPSW!POkWX}Y3z?cpJx@?wKQkt1WxX12Qtqo5Xdi7M@!NWI`=FdXOD@`iesO*1~O8r`mEPAB7dtjtimDUVoEa|-rAs4F zcA)&d@(w7kUntFx9winJM1z^5R+O;>GLde-S}E~O zRCtw@O6PEy7ntP_BEiD*X4_~QWFqDLIHq&oMn$X5RyI%aAH=ltdy!E7X*2CL1u~ZO zUn_+AF6O)+HdD!b%ZoYwVJZ1Lo#E`WM%!)}WIWY=Ig$821YcoP_&m?|B9Z)7G*o!W zh#rPO#xwp1R%U(#7e`O^oRgUP;TwNF8kl)yX-1I8jxAZVaM6W72EALIL+~6;cfK|J z#_cOsoF1M|{~1BXlD=&iGwyRJ#Io9WC*0W?&fRYrWIXBH0MEY{0+u=%By>N8VQot^ zoO_}ghpHACFSLD-M?Am8O7(RPhgeo0pq^3-N?(k&5B+5-9#ugm(!RT3()YL!-zI<| z?(Rr1cducP1B3oGEYu^Q-0p&Wn*e%eK}r5xS4Z~1`CO*7$VAGw6NPSZAxQw3GQ>+rphC;2-RvH4%Ru^Qwiy96}I5`+l5f*f96G6Df! z!|VH94hLaNeYlVR))rZSlr~$E+`>Zu={)gN|Of2>nPNu^hRP9T`n!}PcbglhDUb~XL`VAaMQp|6K@)re5xVk+l{`z(dr+{3FQE756;^3Ow@G} z$icLCJhdcNL7T}_)6tKj>D9N8QWpE@~} zlG9$rFcyTW&)$5XX$cuq?60JFb2OaYTP^#vAjif__f8ADcUowW2Zxqj`0lq_wu87M z&u_!0-u2qT(XFf7PQEdn@y=+Gy72KqZ)dAueapxV#(F~27CnV}lyUnYH3?7h)Y?)PSzZW^Q(J}}sRjS!w~SlYbWOl5OF zFF!A3>He;c!gFTZY6)az%xquDB));i@-f>cNPUXr4?9BzT(fOHSq53Q%mKfbTj?vz z>dW}=d<~y2D#brnMfzD+S2k}RVWosEkmHqBZhdA1VyO>VZOH7D<3Hog+&k;HK2KC$ zyGNLhegS(vn`Q@!$y%9kEsy$@QTJvh={2#)@k-zpc@i1#MqGQfajyEC+CRi~WqTrl z{2sJX$IsU!)fD7-iv}`&uaNpBB=MOm(ZC8P+(e%g)YlcTJ{DG^UKfyO$IiIdFFkyt z;PTY+%9{M?%?rVAGtgd9QjbTYm8)gyk?IO^yunA)fp=cSYAs8(7G3Kayy61&Q0A;m zMHzJ4=ak_6uPffaDwz3CUF)mWTiZ+{6NzO@WlPH%p%i9Dd@)v6^c4_x&-vg7o9HmS zh9i>sWidK>AQCxw%1pcL=52^YPS;3%RgRRZTM&owYaRiFVYkDYmcVk~2M=H|ZhtA? z8i?CWhGEIrPo}@)yVD3aF5u^0GLlqM2tJ{&jIj&DPWk@>LC@U8)sDbv00000NkvXX zu0mjfgNmrKdLrbUG6oqD5g{27Nt&bsvI-Cg1u>8Ysf6_spulh-$e{?sKoABYMvNhZ z5JCtcgb*SlA|oYbhA{*(3IZx*?slOcW0J;xTp3@l2UTw6051rerem$C4D6U&80$ex z2~X-?%K&t=rn=0)OtN)~S7G~h$dt7nVJ4@{gbr+y`@8@tZnULA!!tKE8;@~E^$&*Y z4qW67q2(HBTO7 zL2^{H093VA3l!y~!lPhR010dWdlk@~gGZe?y_;?Uklye{`No(wCfjmaDuTjqZVW^(_yHD1{u88timspOjEbBQGmd#n&2F01taO=iA^!Ab^ zE}<O?C>1E6eMg0}Fs z+RCbub*9c?p7Nf#)~0;6Y&+VjgSK7Tfxb6%>y-6_EPI!20<|0LP~@=*rD)JD+`$iJOx^rw@ z2%*r!mBcF1PAs7kK(f6ksun%r5gblls+$70ZX;^}o9}e7Cu&pgCmLc^aowo8U`D>g zcv6sNpr@cjf9^-_tGK4t6D57WYWQ35o;2!uatr(379dr6QLWlvaMh09=k#cDyEmkizIQ+W!M&Mt-aJ&V9sr}DrHXZ%`02X5WlBNG>PVQZ zcFkTv=z21GG7%j5l16*Vgd3NkXv2DRgVPf?)_VOu3y%9lb?^(?t_0rAZ9~r?dTQE& zLx`>V8+Zqe1!~E33D(9wIDNAf5tu`tPJjdOv@(@iQA8UM2MoD?xVl2D3d}E`vm9tN z6(Wu>c_BsH?u|J>!BoLIC_;f6Jek<$OSa(9@e_grkRPKdMpv}~Kkf6wL?$H90^9&E zegN4hrd@~$`3Z#IXWr=ZzBGk0WrhO!g*dIH!~aTn0_bt6bA4($!3ako;5i|W;GarT z5I3$`{;+`KqQcem=@?POQRY1n)Jdlt9JqSdguVC78CWM>;5-skC_Uwfmk$8UlyH!p z4p+R<;%G?3u~W7n#4>rlCh(#CKlxsmoM1qc;>>GLbBU5G>Ubu-^|OIq(=PwqKbO4t zQCAk<4Ic?ZSmKI4JYjo&N5YP~6o>6tAj&2EN;_Pz?5*MWNAE>0(-I5|W+Ba|02n%# zkM4BAiYJukJD$hNZfx)?4gN;YI$Rfa34}PAh(kPLQIb#HQ=M}N^a^NowSuUjoy8-j zD3tH_05SvcvK zQ`hB<{=v*U{Y6%Sj$|0%R<|J02b?||y*e`RE=r+n(Q5WA7H6r4-`MPi@=28_uiX@0 zf0unCLCu5}p{5~}>U@0KC#7rPzfcfda-aC6DcsR#}feN zOFHP_@vKT6WB9x@+@1|_jJa2D22OQO{|E)U3UtOP%)ANOE|*mpZAc%A;AbEv#UkmJ=*J=8H~C z22p1+-ilh&L;;TFuvF#+c-rSPlRlBu%EMzxW&Hxa;mS+Pqlcu}E|z*CwyZpMXUifK zFj1<4YSF6u=znIuzLx$eGf$+x4xA&rTwkyoFv4erbd0o1%0pkC$Yg36EeVYYl5`Mc z=Bo&l5$wurlo{MnXvo+U0c@BWnKed*HXM@`j)sXW$I)bn#V;OY_jZy}dL$m7GWfL2 zm&Q9?{K#Ethk%oDrduhH%OI>82`Yh5h>TocR3})3>*uw^8Y;ztUX?4{Y9(ThnBf>E zTN3oaMuUm=3tbqY-MZ${D~__=UGqq(CH+e ztSxv|Navo6P7?c~8nh!DHROF#Hj z0r5W3ghXH^%c39&Dui;Zw5>$p2HLFi5Q&MUT`VCr$d-4Q!U{OWKFK(u0LV`x5<|w2^3{9?m+HpF*secxiC=Pj7Rny(f_Uhh#PMZm=jH` zH>km)My%x9vU?#b$7j;ij!hMPVpyk!>8o>JwT)FhPX)psems}nXsTHdh8n|%M3u<3 z@UojPP#|h(`PIKqM*?ozMVPyt1T2c;kwp-uj!#!jd zPOZ1mj78cJj%yaeBWVPbv@Qff!M?H$O@1SejaqS(A5s@#!`Xf{(5((TL{cdPO_>UFq>0Oa;;3EYA004*|AnyPG literal 0 HcmV?d00001 diff --git a/common/test/common_tests/logic/duplicated_pages_test.cljc b/common/test/common_tests/logic/duplicated_pages_test.cljc new file mode 100644 index 000000000..d1bafb88d --- /dev/null +++ b/common/test/common_tests/logic/duplicated_pages_test.cljc @@ -0,0 +1,117 @@ +;; 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.duplicated-pages-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) + +;; Related .penpot file: common/test/cases/duplicated-pages.penpot +(t/deftest test-propagation-with-anidated-components + (letfn [(setup [] + (-> (thf/sample-file :file1 :page-label :page-1) + (tho/add-frame :frame-ellipse-1 :fills []) + (ths/add-sample-shape :ellipse-shape-1 :parent-label :frame-ellipse-1 :fills (ths/sample-fills-color :fill-color "#204fdc")) + (thc/make-component :ellipse-1 :frame-ellipse-1) + + (tho/add-frame :frame-ellipse-2 :fills []) + (ths/add-sample-shape :ellipse-shape-2 :parent-label :frame-ellipse-2 :fills (ths/sample-fills-color :fill-color "#dc3020")) + (thc/make-component :ellipse-2 :frame-ellipse-2) + + (tho/add-frame :frame-ellipse-3 :fills []) + (ths/add-sample-shape :ellipse-shape-3 :parent-label :frame-ellipse-3 :fills (ths/sample-fills-color :fill-color "#d8dc20")) + (thc/make-component :ellipse-3 :frame-ellipse-3) + + (tho/add-frame :frame-board-1 :fills (ths/sample-fills-color :fill-color "#FFFFFF")) + (thc/instantiate-component :ellipse-1 :copy-ellipse-1 :parent-label :frame-board-1 :children-labels [:ellipse-shape-1-board-1]) + (thc/make-component :board-1 :frame-board-1) + + (thf/add-sample-page :page-2) + (tho/add-frame :frame-board-2 :fills (ths/sample-fills-color :fill-color "#FFFFFF")) + (thc/instantiate-component :board-1 :copy-board-1 :parent-label :frame-board-2 :children-labels [:board-1-board-2]) + (thc/make-component :board-2 :frame-board-2) + + (thf/add-sample-page :page-3) + (tho/add-frame :frame-board-3 :fills (ths/sample-fills-color :fill-color "#FFFFFF")) + (thc/instantiate-component :board-2 :copy-board-2 :parent-label :frame-board-3 :children-labels [:board-2-board-3]) + (thc/make-component :board-3 :frame-board-3))) + + (propagate-all-component-changes [file] + (-> file + (tho/propagate-component-changes :ellipse-1) + (tho/propagate-component-changes :ellipse-2) + (tho/propagate-component-changes :ellipse-3) + (tho/propagate-component-changes :board-1) + (tho/propagate-component-changes :board-2))) + + (reset-all-overrides [file] + (-> file + (tho/reset-overrides-in-first-child :frame-board-1 :page-label :page-1) + (tho/reset-overrides-in-first-child :copy-board-1 :page-label :page-2) + (propagate-all-component-changes))) + + (fill-colors [file] + [(tho/bottom-fill-color file :frame-ellipse-1 :page-label :page-1) + (tho/bottom-fill-color file :frame-ellipse-2 :page-label :page-1) + (tho/bottom-fill-color file :frame-ellipse-3 :page-label :page-1) + (tho/bottom-fill-color file :frame-board-1 :page-label :page-1) + (tho/bottom-fill-color file :frame-board-2 :page-label :page-2) + (tho/bottom-fill-color file :frame-board-3 :page-label :page-3) + (-> + (ths/get-shape file :frame-board-1 :page-label :page-1) + :fills + first + :fill-color) + (-> + (ths/get-shape file :copy-board-1 :page-label :page-2) + :fills + first + :fill-color)]) + + (validate [file validator] + (validator file) + file)] + + (-> (setup) + ;; Swap the copy inside main of Board1 to Ellipse2, and see that it propagates to copies in other pages. + (tho/swap-component-in-shape :copy-ellipse-1 :ellipse-2 :page-label :page-1 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#204fdc" "#dc3020" "#d8dc20" "#dc3020" "#dc3020" "#dc3020" "#FFFFFF" "#FFFFFF"]))) + + ;; Change color of Ellipse2 main, and see that it propagates to all copies. + (tho/update-bottom-color :frame-ellipse-2 "#abcdef" :page-label :page-1 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#204fdc" "#abcdef" "#d8dc20" "#abcdef" "#abcdef" "#abcdef" "#FFFFFF" "#FFFFFF"]))) + + ;;Change color of copies of Ellipse2 and see that the override works. + (tho/update-bottom-color :frame-board-1 "#efaade" :page-label :page-1 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#204fdc" "#abcdef" "#d8dc20" "#efaade" "#efaade" "#efaade" "#FFFFFF" "#FFFFFF"]))) + (tho/update-bottom-color :copy-board-1 "#aaefcb" :page-label :page-2 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#204fdc" "#abcdef" "#d8dc20" "#efaade" "#aaefcb" "#aaefcb" "#FFFFFF" "#FFFFFF"]))) + + ;; Reset all overrides. + (reset-all-overrides) + (validate #(t/is (= (fill-colors %) ["#204fdc" "#abcdef" "#d8dc20" "#abcdef" "#abcdef" "#abcdef" "#FFFFFF" "#FFFFFF"]))) + + ;; Swap the copy of Ellipse2 inside copies of Board1 to Ellipse 3. Then make + ;; changes in Board1 main and see that they are not propagated. + (tho/swap-component-in-first-child :copy-board-1 :ellipse-3 :page-label :page-2 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#204fdc" "#abcdef" "#d8dc20" "#abcdef" "#d8dc20" "#d8dc20" "#FFFFFF" "#FFFFFF"]))) + (tho/update-color :frame-board-1 "#fabada" :page-label :page-1 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#204fdc" "#abcdef" "#d8dc20" "#abcdef" "#d8dc20" "#d8dc20" "#fabada" "#fabada"]))))))