From c346fb85892c7de53fee87cc1028128aaee10380 Mon Sep 17 00:00:00 2001 From: PgBiel <9021226+PgBiel@users.noreply.github.com> Date: Fri, 13 Jun 2025 03:01:48 -0300 Subject: [PATCH] initial proper subfooter unit tests --- ...ters-basic-non-consecutive-with-header.png | Bin 0 -> 279 bytes .../grid-subfooters-basic-non-consecutive.png | Bin 0 -> 258 bytes tests/ref/grid-subfooters-basic-replace.png | Bin 0 -> 319 bytes .../ref/grid-subfooters-basic-with-header.png | Bin 0 -> 256 bytes tests/ref/grid-subfooters-basic.png | Bin 0 -> 210 bytes tests/ref/grid-subfooters-repeat-gutter.png | Bin 0 -> 626 bytes ...grid-subfooters-repeat-non-consecutive.png | Bin 0 -> 622 bytes ...subfooters-repeat-replace-double-widow.png | Bin 0 -> 1033 bytes .../grid-subfooters-repeat-replace-gutter.png | Bin 0 -> 772 bytes .../grid-subfooters-repeat-replace-widow.png | Bin 0 -> 979 bytes tests/ref/grid-subfooters-repeat-replace.png | Bin 0 -> 975 bytes .../grid-subfooters-repeat-with-header.png | Bin 0 -> 596 bytes tests/ref/grid-subfooters-repeat.png | Bin 0 -> 549 bytes tests/suite/layout/grid/subfooters.typ | 141 ++++++++++++++++++ 14 files changed, 141 insertions(+) create mode 100644 tests/ref/grid-subfooters-basic-non-consecutive-with-header.png create mode 100644 tests/ref/grid-subfooters-basic-non-consecutive.png create mode 100644 tests/ref/grid-subfooters-basic-replace.png create mode 100644 tests/ref/grid-subfooters-basic-with-header.png create mode 100644 tests/ref/grid-subfooters-basic.png create mode 100644 tests/ref/grid-subfooters-repeat-gutter.png create mode 100644 tests/ref/grid-subfooters-repeat-non-consecutive.png create mode 100644 tests/ref/grid-subfooters-repeat-replace-double-widow.png create mode 100644 tests/ref/grid-subfooters-repeat-replace-gutter.png create mode 100644 tests/ref/grid-subfooters-repeat-replace-widow.png create mode 100644 tests/ref/grid-subfooters-repeat-replace.png create mode 100644 tests/ref/grid-subfooters-repeat-with-header.png create mode 100644 tests/ref/grid-subfooters-repeat.png diff --git a/tests/ref/grid-subfooters-basic-non-consecutive-with-header.png b/tests/ref/grid-subfooters-basic-non-consecutive-with-header.png new file mode 100644 index 0000000000000000000000000000000000000000..6f2a57beb3810ea4a91f861eee59c1ddd837d9b0 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^6+mpt0VEjKpDfq|r0#jTIEGZ*O8#N*(2#iLQDC>b zuH4p&D@jH=|8{M8_^2VG=G(EWQy4e?INQ>Ck2$IE?z`RZn3FzET{hR%+&yGfUDfyV zd#^Jmew11}|0A>T74F0HczjNlo_hJFA!3jD=hkam8#h>(zdOFw9jKPIr)2E^ijy?fIK#Nrk6-skTa zS=s5!rGc^dT<`Q517h))mve#!#Nxfpue}Gv;?}MOdUprH;y;)ET>m?wveWF^9|v0g z4S>bZ%>ExbKOjM!cx2ANlw9Y{cMpigvzE9IOyb&`y>wtKUaR(XU@Si2G$Z2EfLNUW zzh~9}Sv+&zKv;Y{~l$25ygNRbP!*K5B zIT(D>eZNoORqy%?UjqZ3fnb6OCYaza;H>}2O%br>>-I6J55@-s)_5rlfjh#D8|Z6J z@)`p#`CJ|X%jdES0!#6W0|F;gHS-<;t7~=p*43O!(bp)U0pO#BjaQJ=!D*R6;FWa< zfs0K$gTPXxg@L;!1q07*dCwgJb1YK?!36;U&)lcr4FR7f;#FUt#HP~jLEy%buVYeg zy_nRh~a7A002ovPDHLkV1iXvhdTfO literal 0 HcmV?d00001 diff --git a/tests/ref/grid-subfooters-basic-with-header.png b/tests/ref/grid-subfooters-basic-with-header.png new file mode 100644 index 0000000000000000000000000000000000000000..5216561464d16b3123ef947a8c3bb6017e1176c7 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^6+o=V0VEiX-Dr9Oq>g*KIEGZ*O8#N*(2#iLQDC>b zuH4p&D@jH=|8{M8_^2VG=G(EWQy4e?INQ>Ck2$IE?z`RZfK=!2bBks(Cw^S`htcb* z`ltDSN{ylpKG5-it0WtYvt0}*d6?Fc6d3I^PV3>98tnIZ9I(8TS z?XPyw(Yt5l;CMIw)BmRp5r2%=E4;eJu=LfL!_3Ja*G~f47kxBnF5|`>^>_b20#X$} z|2J~Jl8t*l_Y}KI;oLiAPyc0zr$OEOM~s=_W=GUd;ai98Kwk57^>bP0l+XkK)WLR} literal 0 HcmV?d00001 diff --git a/tests/ref/grid-subfooters-basic.png b/tests/ref/grid-subfooters-basic.png new file mode 100644 index 0000000000000000000000000000000000000000..5a64680757e4120bc89ebd153bf23a5593c53c8c GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^6+o=P0VEg%8WVp4shOTGjv*Ddl7HAcG$dYm6xi*q zE4Q`cN|KSzzg=4%K5B@l`F8B;6vmA|&bGAPV@@i(`)>C;Al3Q%+@jgci60mKVf4DH z{%QVSIf-uB>$~?#NXY-6f6v}Q%s;|ZKuo^aYRa!<1)YCio?Y567-pS2YkRGOj@^ZS z`>P#v^zIosINpu_^#5r?#2@4JN#`?WXTuyIVa~u{{%wZoLVd6IAjf*T`njxgN@xNA Dt|(dA literal 0 HcmV?d00001 diff --git a/tests/ref/grid-subfooters-repeat-gutter.png b/tests/ref/grid-subfooters-repeat-gutter.png new file mode 100644 index 0000000000000000000000000000000000000000..35842b5827baf02ab8906128f3f17131877d0188 GIT binary patch literal 626 zcmeAS@N?(olHy`uVBq!ia0vp^6+rxn14u9|R*Bodz`$hb>EaktaqI1^vtH7H677ZW z7YFQmw`k!Gt&-pvFK^8$WtW>S#AZ61>xyJCC$*YndV3oDkabITxwwE$P-L<6;-(Wn zSi88STzlmgbS`jlf2L$pUo!7ITU`NPx`pxQDVB>gnc3L(ITxrsIJc#;;>~jF;CZ(m z&%LP4Ij2|ku+WdB#UGclyyKS*^?GpO`?Pj#rV6Vd>6P6#o<02HUVhBBw2ylm+dSUu z$5jdv*T0;~BDeNr_PN5`4R0^bVuEc$NAp0Dpp)-{^{t9d>3z|NZc(VRKq=d;g! z>|gg!{W#Z;9ognnp9iyi;61Rr_?^s*_Sf(2Km4rmJQ%dxzWbZS>+pl37x~kLeoPJ) z7uPK<_F>wu9rl*{!Q`3C_6P55sOG!K zd2{KLYPkFZ=?3vh?=-ZI9)G&X%kc5^zdQ6g9;APK-oEJn@&C$77Przopr0F4F_RR910 literal 0 HcmV?d00001 diff --git a/tests/ref/grid-subfooters-repeat-non-consecutive.png b/tests/ref/grid-subfooters-repeat-non-consecutive.png new file mode 100644 index 0000000000000000000000000000000000000000..02f572f31d7260f1b049cd1f9e51e53ebda0d008 GIT binary patch literal 622 zcmV-!0+IcRP)My9gE~R+m~7QJ~qvjFcMA96AfKQj#qj zgUHz&QU*CX*!)RiZ6=xN*A2h#{(>$YdJ?`q|G)!2Z@zr_@O~BS$;ORXn2DX#Nz}e>vobcqc83OJqDa3sQY!%t=0s@D8J%+%W zJC_;QZW;ow-%T^Hzs7le!v)~QGJ7+D%-EagGz6X~k1?9}296zUZ*vKFtj-#T5xBv6ZXxhlYxqRK=}Y$_ z+iV$9m}B6{mX>Y=Ude?#2>kZymnsCl))6k5Ctzn}BjsqfC|Iyy!GDISqZtbpELgBY zGKFLc$rO?)BvVMHkW3-j{}GY}dZCakemcy+Pxt;};IYd4)vM4J#vg#-2VDf5^elN- z2zY6vKexSJ5<|g_P?CT%hrTs$5wMN#-!ue%(%6f@eHWJZMfEWM7x4GaiwOiy&%Ucg z;Dx4VRS0}}`2Ar7p7E!er}Q}q7A#n>V8Ma~3l=O`uwW4W4I)TLjy@5(rvLx|07*qo IM6N<$f+Z^#E&u=k literal 0 HcmV?d00001 diff --git a/tests/ref/grid-subfooters-repeat-replace-double-widow.png b/tests/ref/grid-subfooters-repeat-replace-double-widow.png new file mode 100644 index 0000000000000000000000000000000000000000..86d92a83201b0679d6283dad34f8d479611d567f GIT binary patch literal 1033 zcmeAS@N?(olHy`uVBq!ia0vp^6$}iF&Ky7n!y%lU3)Z!VnR^~pe%F<` zEICYQTIGQv+Z?r7FRM<;@>~Cpb2NAS*YWqP^bdpc#)pm18{dy*+Epf~<}<_K;r@ot zO>-}DFlbP2_Kb!-K%{njAK>bH2wp9*~{uy*2;NtCe|XR;Q~4H@tnr-^|VEeSacv z1PywR`4hXRPp*6!Y)D;HU(_2daj1n; z_@8mlE{o$phT544J&KafMr|oPCnY8ssw8_Ho6vJV28q+nf+mYl4i0!{qjQFdKr{c_ z7nH5IRTj;BK>N7KX_b@}k7xBTH6G{Rclbb&tHFmFS++2}{BySj3Qm4p`^|+#XZiEf z+Y|~a7kMgtI5v-!M<UyloYi%FM#nuv7xex-bML%Fgc1vL z|Mr9jZ2Qj|vND>_zfx5sxM9xkv?~e)zCVf^58P%CGu-fmgC)*q)`0^r8MA)J@)jPC zyY!9K=y>4T1+Ga~oDUv&q%KjhQ;PX^(=vk(NlUJZGuf}27Rs?kU##&!t@;|#*BlYg zX8DykB~09r$MI*^6=^2zOd+PmuVMjmnI2O+rgKzS8mK;!`#(cC&EuFQC}}66L=GhQ z|7)p4A3d=Dk?%nPi~T{%6bsgPvM`m;lic8tAZet(>$+dkg^YFW2bRrTlP(b9#>C2$ z|N0r5V!_R=O~x~PXYXLzWnl1Pev9_zE5c0EL%euc`qnb@mZqLKbyS@r;?$=#Ve^W? hkqe4gVXzw%{zwP460RGpA7t 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 literal 0 HcmV?d00001 diff --git a/tests/ref/grid-subfooters-repeat-with-header.png b/tests/ref/grid-subfooters-repeat-with-header.png new file mode 100644 index 0000000000000000000000000000000000000000..d2a80ff333d72ad86551a2287ee0a052769fa20d GIT binary patch literal 596 zcmV-a0;~OrP)9w$?S$%%rJ}D1;gM>Q^YhaDoTQgNNEvdC#p?hv?we}$|yV7$%xm4j*AXR zV5LEHlA;5I1<{$xq9_#azCnu?&qa7WU*Lzgw>-SQ|2P4iIKqSp6DIr)_;J|01%cQ0 zb_@{s+B)zL0@utRCPCoxq}kGa1nf0|wtB^M8pgo7vBY!CCzg&D5NvfJ;Q4s3@fiVE z8Uj%Pjao2pdbw)BG@Gn1;M{N_4lCVYU%>Pb_W9X zr=92BBH*Gl_q8BkAMBDajs!4p%FX`(XsZY7L9lrN0XP4&Sp)%VxJv>B|7|aMfxv}Q ztAR${-wJ_^5yJ@rE=#d*3j$ukJ(zFYVPKu_&k<;=dm2HoWdZ>&>$H*x0)CEM#oFJ- z1CAjGJZ+Ue2wXe~8nxXhK?oc*B^N+o$(DTx9QqX!2<-Vbhk>7T5@WFc^92Up_8;=y zB4NUW3BLuS4!>i#WxVbnwzm2#aOsuJpn7=b`&e$V=SNsM97+&p zo9K_#!-?W-6@5@StbH2I%DnvAs~mnP->te0-`y*RB^mT{n)>2m`Jx8Ci3h=2zK<_M i2ookum@r|&D$XlXMI)TETbEq`0000P&Lo6VlG ziDldE6F70;AJ6~(0>7^N?&|L9`o{^-i6cyyFk!+!fZyg@E+O#Qjjad*`v+zu2;98s zOohPLt(HoMvf3$R#lYviqhk;_XW6H$ zb~?}nA@J_To(5C#=2RvG9$5&aL*Rwd*+d5i^WT62x`urSY`Z@zfWVKPCJ6#JTFz4- zuuFT~b*rp)dN4;J@ZqGf2LgZIO=d&jrG8n0z?wpRyaNIE77H0t@sU~x3@i-~#vpKs zsIY*pdaefotAyH)fNh$gb)_vso-lBr%$yB@`xZqI0$1xmZ+x0)HbG$F-FfG3kuYJx zgvIwT>hO&T6DCZUK{5u(7$jqmj6pI6$rvPKknC>+$*Lq!kZenZ+QO(~AUJs}{}ofQ z&`yBhaXkV)%<~k=2-ve{^eb$HvCi5c@MUeJ90E72fv&o}LxdslOIE#+gE?Wsgb5QS nOqeiX!h{JECQO*{zkt60YD`rFfv73o00000NkvXXu0mjf%ewPI literal 0 HcmV?d00001 diff --git a/tests/suite/layout/grid/subfooters.typ b/tests/suite/layout/grid/subfooters.typ index 1e4c1a017..dbd9ced4a 100644 --- a/tests/suite/layout/grid/subfooters.typ +++ b/tests/suite/layout/grid/subfooters.typ @@ -22,6 +22,7 @@ [*Mode*], [2025], table.cell(colspan: 2)[*Totals*], ), + // TODO: Why does it overflow here? table.header( level: 2, table.cell(colspan: 2)[*United States*], @@ -39,3 +40,143 @@ table.cell(colspan: 2)[*Data Inc.*], ), ) + +--- grid-subfooters-basic --- +#grid( + [a], + grid.footer(level: 2, [b]), + grid.footer([c]), +) + +--- grid-subfooters-basic-non-consecutive --- +#grid( + [x], + grid.footer(level: 2, [a]), + [y], + grid.footer([b]), +) + +--- grid-subfooters-basic-replace --- +#grid( + [x], + grid.footer(level: 2, [a]), + [y], + grid.footer(level: 2, [b]), + [z], + grid.footer([c]), +) + +--- grid-subfooters-basic-with-header --- +#grid( + grid.header([a]), + [b], + grid.footer(level: 2, [c]), + grid.footer([d]), +) + +--- grid-subfooters-basic-non-consecutive-with-header --- +#grid( + grid.header([a]), + [x], + grid.footer(level: 2, [b]), + [y], + grid.footer([f]) +) + +--- grid-subfooters-repeat --- +#set page(height: 8em) +#grid( + ..([a],) * 10, + grid.footer(level: 2, [b]), + grid.footer([c]), +) + +--- grid-subfooters-repeat-non-consecutive --- +#set page(height: 8em) +#grid( + ..([y],) * 10, + grid.footer(level: 2, [b]), + [x], + grid.footer([a]), +) + +--- grid-subfooters-repeat-with-header --- +#set page(height: 8em) +#grid( + grid.header([a]), + ..([b],) * 10, + grid.footer(level: 2, [c]), + [m], + grid.footer([f]) +) + +--- grid-subfooters-repeat-gutter --- +// Gutter above the footer is also repeated +#set page(height: 8em) +#grid( + inset: (top: 0.5pt), + stroke: (top: 1pt), + gutter: (1pt,) * 9 + (6pt, 1pt), + ..([a],) * 10, + grid.footer(level: 2, [b]), + grid.footer([c]), +) + +--- grid-subfooters-repeat-replace --- +#set page(height: 8em) +#grid( + ..([x],) * 10, + grid.footer(level: 2, [a]), + ..([y],) * 10, + grid.footer(level: 2, [b]), + [z], + grid.footer([c]), +) + +--- grid-subfooters-repeat-replace-multiple-levels --- +// TODO: This is overflowing +#set page(height: 8em) +#grid( + ..([x],) * 6, + grid.footer(level: 2, [a]), + ..([y],) * 10, + grid.footer(level: 3, [b]), + grid.footer(level: 2, [c]), + [z], + grid.footer([d]), +) + +--- grid-subfooters-repeat-replace-gutter --- +#set page(height: 8em) +#grid( + gutter: 3pt, + ..([x],) * 3, + grid.footer(level: 2, [a]), + ..([y],) * 8, + grid.footer(level: 2, [b]), + [z], + grid.footer([c]), +) + +--- grid-subfooters-repeat-replace-widow --- +#set page(height: 8em) +#grid( + ..([x],) * 14, + grid.footer(level: 2, [a]), + ..([y],) * 8, + grid.footer(level: 2, [b]), + [z], + grid.footer([c]), +) + +--- grid-subfooters-repeat-replace-double-widow --- +#set page(height: 8em) +#grid( + ..([x],) * 12, + grid.footer(level: 3, [a]), + grid.footer(level: 2, [b]), + ..([y],) * 11, + grid.footer(level: 2, [c]), + [z], + grid.footer([d]), +)