From c35658050f4ed80c2b6dea77f135d76e86cb4ad5 Mon Sep 17 00:00:00 2001 From: Jordan Hollinger Date: Sun, 3 Aug 2014 07:32:41 -0400 Subject: [PATCH] Add test cases to demonstrate repeated labels with and without minimum-distance. --- tests/visual_tests/data/repeat-labels.csv | 10 +++ ...t-labels-1-750-250-1.0-grid-reference.json | 79 ++++++++++++++++++ ...t-labels-2-750-250-1.0-grid-reference.json | 79 ++++++++++++++++++ ...eat-labels-1-750-250-1.0-agg-reference.png | Bin 0 -> 9533 bytes ...t-labels-1-750-250-1.0-cairo-reference.png | Bin 0 -> 5150 bytes ...eat-labels-1-750-250-2.0-agg-reference.png | Bin 0 -> 13699 bytes ...t-labels-1-750-250-2.0-cairo-reference.png | Bin 0 -> 7109 bytes ...eat-labels-2-750-250-1.0-agg-reference.png | Bin 0 -> 5350 bytes ...t-labels-2-750-250-1.0-cairo-reference.png | Bin 0 -> 3415 bytes ...eat-labels-2-750-250-2.0-agg-reference.png | Bin 0 -> 3086 bytes ...t-labels-2-750-250-2.0-cairo-reference.png | Bin 0 -> 3215 bytes tests/visual_tests/styles/repeat-labels-1.xml | 43 ++++++++++ tests/visual_tests/styles/repeat-labels-2.xml | 43 ++++++++++ tests/visual_tests/test.py | 6 +- 14 files changed, 258 insertions(+), 2 deletions(-) create mode 100644 tests/visual_tests/data/repeat-labels.csv create mode 100644 tests/visual_tests/grids/repeat-labels-1-750-250-1.0-grid-reference.json create mode 100644 tests/visual_tests/grids/repeat-labels-2-750-250-1.0-grid-reference.json create mode 100644 tests/visual_tests/images/repeat-labels-1-750-250-1.0-agg-reference.png create mode 100644 tests/visual_tests/images/repeat-labels-1-750-250-1.0-cairo-reference.png create mode 100644 tests/visual_tests/images/repeat-labels-1-750-250-2.0-agg-reference.png create mode 100644 tests/visual_tests/images/repeat-labels-1-750-250-2.0-cairo-reference.png create mode 100644 tests/visual_tests/images/repeat-labels-2-750-250-1.0-agg-reference.png create mode 100644 tests/visual_tests/images/repeat-labels-2-750-250-1.0-cairo-reference.png create mode 100644 tests/visual_tests/images/repeat-labels-2-750-250-2.0-agg-reference.png create mode 100644 tests/visual_tests/images/repeat-labels-2-750-250-2.0-cairo-reference.png create mode 100644 tests/visual_tests/styles/repeat-labels-1.xml create mode 100644 tests/visual_tests/styles/repeat-labels-2.xml diff --git a/tests/visual_tests/data/repeat-labels.csv b/tests/visual_tests/data/repeat-labels.csv new file mode 100644 index 000000000..206294002 --- /dev/null +++ b/tests/visual_tests/data/repeat-labels.csv @@ -0,0 +1,10 @@ +wkt,type,name,ref +"POINT(-3 -0.40)",poi,, +"POINT(3 -0.40)",poi,, +"POINT(-3 -3.6)",poi,, +"POINT(3 -3.6)",poi,, +"LINESTRING(-12 2, 12 2)",motorway,First Hwy,1 +"LINESTRING(-12 1, 12 1)",motorway,First Hwy,1 +"LINESTRING(-12 3, 12 3)",motorway,Second Hwy,2 +"LINESTRING(-12 -1, 8 -1, 8 -2, -8 -2, -8 -3, 12 -3)",secondary,Main Street, + diff --git a/tests/visual_tests/grids/repeat-labels-1-750-250-1.0-grid-reference.json b/tests/visual_tests/grids/repeat-labels-1-750-250-1.0-grid-reference.json new file mode 100644 index 000000000..1ecbce60c --- /dev/null +++ b/tests/visual_tests/grids/repeat-labels-1-750-250-1.0-grid-reference.json @@ -0,0 +1,79 @@ +{ + "keys": [ + "", + "7", + "5", + "6", + "1", + "2", + "8", + "3", + "4" + ], + "data": {}, + "grid": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", + " !!!! ! !!!! ! !!!!! ! !!!! !!!! !!!!! ", + " ", + " ", + " ", + " ", + " #### #### ##### #### #### #### ", + "############################################################################################################################################################################################", + "############################################################################################################################################################################################", + " #### # #### # ##### # #### # #### #### ", + " ", + " ", + " ", + " ", + " $$$$ $$$$ $ $$$$$ $$$$ $ $$$$ $ $$$$ ", + "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", + "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", + " $ $ $ $ ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " % & ", + " %%% &&& ", + " %%% &&& ", + " ", + " ", + "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ", + "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ", + "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ", + " '' ", + " '' ", + " '' ", + " '' ", + " '' ", + " ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ", + " ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ", + " '' ", + " '' ", + " '' ", + " '' ", + " '' ", + " '' ", + " '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", + " '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", + " ", + " ", + " ( ) ", + " ((( ))) ", + " ((( ))) ", + " ", + " " + ] +} \ No newline at end of file diff --git a/tests/visual_tests/grids/repeat-labels-2-750-250-1.0-grid-reference.json b/tests/visual_tests/grids/repeat-labels-2-750-250-1.0-grid-reference.json new file mode 100644 index 000000000..792acf9be --- /dev/null +++ b/tests/visual_tests/grids/repeat-labels-2-750-250-1.0-grid-reference.json @@ -0,0 +1,79 @@ +{ + "keys": [ + "", + "7", + "5", + "6", + "1", + "2", + "8", + "3", + "4" + ], + "data": {}, + "grid": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", + " ", + " ", + " ", + " ", + " ", + " #### #### ##### #### #### #### ", + "############################################################################################################################################################################################", + "############################################################################################################################################################################################", + " #### #### ##### #### #### #### ", + " ", + " ", + " ", + " ", + " ", + "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", + "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " % & ", + " %%% &&& ", + " %%% &&& ", + " ", + " ", + "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ", + "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ", + "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ", + " '' ", + " '' ", + " '' ", + " '' ", + " '' ", + " ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ", + " ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ", + " '' ", + " '' ", + " '' ", + " '' ", + " '' ", + " '' ", + " '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", + " '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", + " ", + " ", + " ( ) ", + " ((( ))) ", + " ((( ))) ", + " ", + " " + ] +} \ No newline at end of file diff --git a/tests/visual_tests/images/repeat-labels-1-750-250-1.0-agg-reference.png b/tests/visual_tests/images/repeat-labels-1-750-250-1.0-agg-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..80367aa4597b356545b8d021bc6aae2fa84aa2d7 GIT binary patch literal 9533 zcmcI~cQjnzyZ1>XM3?A2i69801kodUucHK`lOXySj6o2hiyA#dl+lScI!Q#2GWw{| z8ANnrUccX6@49Q<}(YO0F* z0B{p~T|U1R)=>@)x~4G{}1(L;KGjqVN?Bfv~g!NUyjvH+aS z!~$#p6BFYDmb-%N01q3f@B=`U1K_?-BmM{wct|G61(1;F@I9gv;Ubsi0pxiB5I2K3 z4~4=LK$4GASpX2`WdZ=0DhSXN0^~qc&p}jte7yRifRe~vDIvDUkL8Rd05!3DQcoYt zi#;%xz8*v_6;+V69H1n@AtolKFGFkp0#KLXbXEdh$Ovma=QdZMcT)w}*n&LO0cPe1 z6?strX!q6t3>0}7854Z808UOgKmQv)ZGeEFOH*0GL4ygQ2i(5>Q%6;bgrvhvLx7aD zJroS+Ysf^H08yrZk&b+f84z!A-Sw`Hj*hPhnAR1c1X-Yar0#e!A^- z1AL|(kn0E#65{R5HS?W-FU|llF}}zJh<4z3ZKZ>B1^nz}baVnMJOFBHe6kCtjg5_~ zy+N%vz`%fSgaKi1UNrjwP-l}|=wk@vZFeA0=*QFZ7O=H_hw!xE=El3ZxebH?Z+)zj z{nbYz05`WFbQJK;&lU!QeGTIm6~)iS0q*Y6QGt#N2|#YBPIS<#-^oCJxL#a{Q)jH; zW*YF~1%5XjD2oO6B?}*B10SP3LqgK^_3`*GK<)<^I$N~qqq(Um{!1zxlP}(pV`XE5 zUn`dADX^``4M|BUto#&Ooge1rhR@B-t^4vmFE4Mr!l}75#@`>0ZZ?Q^!obxoi3l`Wc)~b)_7-5dwcuoK)_7T=kMRY<41!^ zO7P1=C4+;58{-v?jrgIV@tw))@$vD)`TE(}xxPO9=qMh)*}l5Eip65r*YVevD=sbw z03LFxDasrAX6bggTRi;ZG$(Q>N@APB_dmKev98M(g z84vY#A1)aUAxS|UiQX!Z%h1F&aFQ;4%+~DR6+o!A*X72>WO}S#aCo4BZ8O>8uewIM z9ivawpQcHyVo-C>in<$Sx(;V$Oq)El*>WfwJXuQlTL29-P6veCoFHtbB#mRx7cAEZ zdChSD_Knb6fuUsN+QB~Tr)GBhPBqQwO>fEO*aT#ffikP6_;XEeg%)`Tbm^?rup;YW z*R^-YVEUZldr&+s*T-&5p&}Ip{C%mAmmndC{#3Tg(2*I=b4)qsy204hKQZSj5g?mO z3VOM=-{@@n&5@u=^Lef_ZTPxDwPzG@rHMqTpmh9~&8uPjQINJOyI@G`XZFZ&^iUf4 z2|i(Z+f%PvBsT=$>u8AVp9DN!mS zoyNI&wUCQAPCp;A{wd7FCUP8708{D0jV*rFRIaxfc78UBA@FLZb=y}#(X~abz7z@8 zuKXHO*qCjiw{$kFemyNo5$oOMSzvkypjG%J$8^60KaYUTSM4&I?{6xYx%w@ua@C%s zW}Y|*v(FCFns!qgV61v#`|)logYfto_=Wp!tIIsIrDV-{S8lJ_ zit1{ggrBeMT%Rd)>GtCjGjt^m9T`wQ0BZ6)YnQt#+A`&t%G2U5QS`z$9mNipOS4^l zv!+N9v|3{-)Ey0SH0`42TQ|I8DIav#w7{*%%2(D<+rG;<0eegDwJPkz{eL2T;%~umc~5H6QI`3i<@=CA5uD@g1R25C6YCL_GRMOdRk`Ru={z{K3kf_>TH=b3`BB* zR3~1C(5CHsu1LHCd8m#L$8A>_ZWA_fOgX%RBzb(^DHnlh{@w}WAgqpirf8v0k9GC5 z6;i;`-5r{7Z~Ct`5CL6Hn-%QL%o=gf(6VYR?gp5er%5VVUb5#-mopdD*yCrdi|9A@ z1Ye+MfV7YH(o}dqon<1nrF8i-JRN*6+FItTy)@@-Y1=Scl$`yZAm-(=OZl0GA-}*^ zXO#!PZe({e=gHi9D+VCK44&05)qGDYklI6@Za^HsE#4r$z%QE>=K0Cl9cd+VMQ(p- zHa@696Co2C(8efPIu`*D{9tIn^IO_{`jQE4&yeOO*kgAfnW;S=s$%nlSa7xVhEVex zE2!E2hn_l*f|i}6ZAkCwALzO+__jBw4H>loak*6gg)_zGC~@>os877Lci3#(h`!GWx|`R)2WmT&u^Cyv%`#NF+_g zkHd4Lx|SmTGaZJ&llH6n7CW{jjmXO1mT_5Mk;u#GK65bmJd;th4HYC(Ye&&)`DKyz zZu=cW@RyZM%3$KR_c8xW9vht4?yY;qxPfW3muQJWC+!YFyOr9%oxSh|KJ_hw2gH`C zr{BBj-&um~!wyTM9DREavbsdmYkaw+`m|Cjpz^zY!{FJWGlQ5wEY*NSOR%SNNQ$$ZNx2}4Kho;sFCQTXC)hJq)rvG(7W z3JTvHPe+zP&rC3#<$HG0uPeaRoKhr^2i|dJ`G#iq-GVXY{6A2{QXB zn0u_g5n55Wlk|w0*PkYOuUpWvWBSXY(y;d5E1zP#2vM5#Tf0j)Woi@&HVk4t5%&th ze$T5Jq%VpFA>wTe7Djva@YU{7mPd;m%{@jF;C8t>o z1W%?!TV4-XqXPMm077pDen;3MAP~s8aaFs3A7+O<@%8Ds$PRo(DlkVJF;B|YO3JP! zT9GbrjeF_6WWCPQn@iDMtw{Z@Cgbm%EpyjP`rl`Qg~#~w$@VL5PQ*#*di6A=t9sEi z-JS{TdwBG55iGYUP&^a&n{ns3>%#r^;MgX&C_FhLvoBhJDsI-I{=eH?4J<`18sHb~ z+c`4_11)@ZevLHs944JHL)YxxQs^xnUmmVTgJ{|wx0LeoWWm4zUHviZG>}3p(Uou- z!57!X&$;GC5aIa!FWAGB-hqIeRhL+QJju2s6PsGszHt$}b=$DhW+uLn>DBBNLoF?@sNs#WDN;eX}>jcMgB-<`ab z1r7XP6D(82ynj%7+gI6wN9?lFaw{EXO?)g;?u+~D{aqsp>hlK<>A2nyQCa`(&#SLf zP3uf4Sn&=!ma=^oD;sYKSlYx4W-Txt&|1=~A)8}d0|lbZbEF`8QF#z?*ua}6n_Jse zcr@vXT*z%(spuMBK$r>fC>@kJ;4aJi5KVc_!&5DOm^Yj2!wxE_M-Tw{?2Cxijw8 z#cWELrsDUw_Dl`>;nC8dyUw+LcPC9A00^AzveeBtX%VxclLv#^pqjWGOp83){**uP6O&M`V5n- zH13ZhWph$%MXgNBsh6zuC#%&c`;C%J zwl;7Q+R9jPBnZ}L3^Z2GJbT8%KZxS7KdUlL4`ceuMZ|C(Gq^a}uz7HwdnO}ROrp@t zcI!!ngpRuTikDTXn+j(4hgdmf$4UrK=;x9=9aDix#pKteKkU@WOlLEH6!B|u@rnHj zZX2X}%a+ByW~eclpnWr*2ujI3LxvGnoyyp4y^gptUD`)rS^Y|JKRd1V5fVt*jWG_c z+BWf7^ME@Ua|#KglrO7;3&mvG0JyT%KuvX1prI*SsUBoi-!{AV76shPz#BO|xAE<` zhIxSBLvZq==9nc-g3_MIVj-^h!bhQbsMF{6r@V#nsS4CWUR%h86B$>K=AK}aoujR@ z0onauQ-$o|cC}(ZNlZ6Ult=Q84A8WLM{6F%sLV(EFH=_4EDYRKhjJ>&#DaOGCm%t_ zenm;nv<3`gYqTj$6_i)Kh00TCFrqh9CrTswO&3H$PLgXcbS+roI|PTkLl+(@6zHw_ z`>=b&g$TVxX*3?ngd(xUt(fvB@e>W?RcUlm&HYSS^n(3UPixBJgXh>5{e8s0XIK}z z{X{<1P^{d7NWBv+=JVcS37qp<-N6bLJpX}Q)s}1A1=`}4hp|g>RRu}9u$T|CAxP|L z&Fd4M{vPM%mK~a(Ls%hlYy(tutn0%I7+%lgZ9&gk{V>U%)t4}aqThQ*)H zIH=CTy?xaUpgjit9Y1s*kBg-i6NkSbU=4s0H80Rvp)@`t1l}l)SVU_KByBM*wbjq; znqta*?a{YhJaFT4@wQf*VX(w}ezQbjAHgkCF~kNw@z|L&MbjpB*NdL=UK^hLH27BZ zsj>oL)>L)?G-BeFm*xnfcoNJ};s`TOlp%fo3mt}&2EzhYmAp+t$0))(bsy_;&{sAu z$Zi?>IM{U99~YxOFS;JlQh2z*%4JI7tg@~LVJ|wFUYFipk&NgRE-b4Xg%UY8M{KeQ zo^wUSBC!g-bm9Y*9GMrjsFfk9CpgtdFNe9hv!Ij>TlV7?VyIB-m4cb{PR`xDvlQj6 z>qgMWM*U6zt`dx9?Pu7|vE=@8=m_m0eIAj5raBR?>3!yi zQJFED-iE&vXCRr>E_x@ylYOPB9(p<9y%6s}yA$ zRs;*oHqkOfvsMays;%ACz&VJeCp)9*7osL*>{P3|oqKXRRpl{xJ+~1ApSIe-GV}Ve zGm)%yw38o|f>8>yz$dKU6NL&;F}%Pi$DxR>u-Tm1cy0OuZC}@W8JkL6-}7G00oAZX zJP+1|3C0Jb)6kezeFvpFCl%w@0f5tg`cp2)S5LgQ_Yi8rn+#kqc?x& zq%M;3C>7iyJWFhhV=F>X3J3>*B-_n`4k3QH9&wHJm(pdGir9p1Q&uzab%-rCB_1cD`pN}&Yz#mTgP zT2|pC{`SoV6vEBi#y<~^VZssgnR*N*EEP{XhME zc6*uW9Fz-HhuJD3=@GI+J8+I9iPNf@#YIp(#{Fd0cRk$#E<(xvO)6LR>uRbcORwGW zn`Y~Ec;j0OO8O*&TkLy=TtVNMu8va8Ac*Defl^SZz4U=f-9)q7R6Tvt0^E1K$8E=8 z&5GP)E<(!V#>Dw!zW1b4Y%vjX0|BVR@QC@TOos2Hn;}Cx z-!g=WU_7FB$MZF-d7(~T2TQFgDZ~>A(+&2sQq8i1(uajF3FnpKq`lV3XHA@24t@;{ zv;~2Y3xzZ%Lm2V7GZNRuyli&*51|)*Q)jQ&7PG~r5Bm6~vYft^A|JZ#q0St&K*D~30hQel-XmqPnZ>gMN+_&Zh;j`FDG5eeSO+mc-Hmel9UQ*y0nkwB8PvYS4GM3fOJ-g`+ns zhX;K(=jO_`t4v)p(wo+g(nF;G+-rY%Yl78x?2Tu&b< zZuh=u#~ou{lHpyHh-GUflZ_C%B~&`H^SyiKZC|WeEXC2OWOkpOrt=mO*!#vUlQp8)8NdR>66Z7!;BIA9vEK zPEmq7g;5`9f?`wk*zi#O%3ul2v%0+Gxy{t&Lc!BPk7@geSBR+DpXK4bsSF#_dyI;< zo@B#IF78?uD$>?jx~cHG`8yYbL>Up?LCW zjI}W2?Mt1G+4x-ori>baC;5Sq;YK?xrxFjoYE!iZkBvwavlK zh91-TcG}A@?VhC5|yEmbVlzT7mD&ddCogPkLv!3-i1LdH7HlnjQ%^?{DsZ zrBYjzx_oqmNgJB0@Vd}FIqpg66$K5n_#Djivo|5uFr*F+uKv~zYZ6BWJ4F>Q;pg8Q zhqfmz0`LR3ce*#$1t9PtDEq+Wh1Pmm>*c$2m>cTjWDf>p{#lc)XBX3UJf~9Ok66p; zK?_&t%VGjg3cc_{r&?&L~^$Oivns7Oc7omp3I4^Yx6mpsax>XdLuAo zsD;|vhSc4>bMT*W@1Joq|FTnDk8OKv3oZ?&igVhYH-s%0kN1oH@jOy)8*;pjt_e{u z(c}kD$mqLWyx~fkzHkWlQ1p7_^{^dxY`-v<(%W)iU3h=5#lSc4D$4A5dAF0Fa&UP1 zI68}#Vji)YGCSWJaH+nu&OU8yr+aq}Au`(&QO}YE!tyoo?cmnz7Xlw9`K_*W4O^B8 z^)06Gm+dYXF{!NfEv%L8_q<87@LTU3h;X9|yy~g+Sm7V<*H%A>tojy)Ty#xVfAJcr>6_A#T?-g}WD$3d*r>PGz`K=W8_k>JkR=?jH=(^v!xz zRP|DqQ!`CVu;7kX{k zkmQxQFU0FOA1f5!9U8&8rovi?sVMtFc%->8)+loj2HGO)NS^)9^n%Tkte48AV~v-q z5Q(~owW8EwvZ<>`Xur!$RktlnuFcTER~NgXP=;A~6BqgT)eJ(ucaeCy{8WFBByNjZ ztrYsu+|W#$>899w6J_0#wn$w{*G{2Z^4a{0uk=#;k8pj{^JCA1ZU`VOtx%O5jTY?zU3ZVn#ZYJcAmgr&WCF`B z^@9yz{~mj1omW+QA;G=uub4t_bbq^5r2m{6y}}2ILdCo0{@t<{8_g@*WSY%j6>ciM zKI2z8Tqp_`)M+a!C(6@yGpb&ImWf%>mUCNi{TUgMLxYe0Mn$BDc)P!JHwd ztj8Wg@AB=pA?w1BX7Pd)`lh<0a;iB5d{TYJPWgf5s1Bo7Cqg~BSY7|-dwQMcd-OzY zwzFd)dG?3c;AkD(=Ukk6Or| zjWnHYQCM(rSvkVswr0(e!8@M_l2<+@{(UWDiaDTdN@)e7Mq zQ#K>9#VA|GxTai+4;&N9rs&p`l&MiC*OD8}Y#L7cl_Z!Ih>y`*lXCJsmpxr*?lV1D z3*cLWvUSUM)K%Vp^jTAV6oH(eD29J~KU^BSx*a!IHn=OsYSQeS~3`DVQT-* zpz1?iddIR6+6i6TEupb@2EEzEm$XPOe0OBjNm`B{&fbGY9NZd{d5__0cgVxugOmQ6 zCEW3^*bvy(Q&J6?<*kkM?pm_sExw>hjYo+qKX)1!L)?Q2L8NY{J~x8tH0UejKlmYV zXm#Sr_YOA`BKO^!edor;@R&>|s^3T|ruGAB+9TcdqrOvB%|ey>@&&2u7eP$--Rp!i zDMZmC2P@ygjQkK>7n0vRSTZhHqJrmSoC&dPJUjb{+|0>w#O261ntROGr4@{2c>9lq zZvM@QPCkQW`^+m9S!8O<`5m9nj%MJVt=Ef)TQs@`o%cfNU0*gx;V#dQCJUpjhb8Sj z7Ye=oyU)^GWDlqR*1<|1ILZyu?N|m)C~Z%yVEBe4L5LOBXY0L3AKfh_ThID4hkA}& zr4L&iqtzuPwoe{Y57us83^gua4vH7%LW)v7CS&_Tn02J^U1L>YM8oFo7tj6oR(uZaoYkj?i^xQO7L;vr+pzs!!KbYrp(7hC%Ns| zd#jBF?9$tb8pHER^Fh7mTI<$hZe453VQYRq7f%Qme2;0F1zP!Vi(GYN()uxc+OzIg zjLl=4QbW>vy)yL6F}O6O=p1ydFuLtBz+YU|fy7#M0xHm9e>?C$(NnxvX zdU~g9dT0264QD4N)jk#0)XS~1uI~^JI=!5l8@?R6jR-W1&5`lm`Nsbwn_6AM$i2u> z?##}|HDxYaHoye&vx&|g-k5niWA&BKUc7k!Qg>grEv-xH=ZH0@XVuBm3K8qZdh7Pi zADy%F)lG>})Zc{VQPem8-$K78elma2G2%q8$EL#Gcrw3W*!-TBWE1jUrviT!$0~O@ z6klqgB5`>tB{x^SaxodCzbk3<=$c!0s9ea~7jG}~;rw#g-)`jG9>|Fk-=-zFCaj5E z!70-R<>2*!oran(3+K=4G)yBCu(wa;jnY{cE{2`b^m*|ItxYpQy1V-S=DypciU!K% zDt&mq{5fnQ9gEvD`Va0KkZjIHUTc18yC}JK3OKi0GkoU_x`n_7MqLxz;n$Q3=Y#*x d_pnp^Ult~Q(z6xq>)&($H6?AuiWgQP{|EIbv^D?$ literal 0 HcmV?d00001 diff --git a/tests/visual_tests/images/repeat-labels-1-750-250-1.0-cairo-reference.png b/tests/visual_tests/images/repeat-labels-1-750-250-1.0-cairo-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..b36b8dea22315a5c850adbcdd0e9602b62e6360c GIT binary patch literal 5150 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 literal 0 HcmV?d00001 diff --git a/tests/visual_tests/images/repeat-labels-1-750-250-2.0-agg-reference.png b/tests/visual_tests/images/repeat-labels-1-750-250-2.0-agg-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..fabaa9b789067380219919659b0467e4d38688b2 GIT binary patch literal 13699 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 Cw3>qe literal 0 HcmV?d00001 diff --git a/tests/visual_tests/images/repeat-labels-2-750-250-1.0-agg-reference.png b/tests/visual_tests/images/repeat-labels-2-750-250-1.0-agg-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..84bfe88f7379db2e3ab9f43526f7dd399361544e GIT binary patch literal 5350 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 V*Owj!vZpq1=zzP^!~LhO{RWWSFrEMa literal 0 HcmV?d00001 diff --git a/tests/visual_tests/styles/repeat-labels-1.xml b/tests/visual_tests/styles/repeat-labels-1.xml new file mode 100644 index 000000000..e116f57a2 --- /dev/null +++ b/tests/visual_tests/styles/repeat-labels-1.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + line + marker + shield + text + + csv + ../data/repeat-labels.csv + + + + diff --git a/tests/visual_tests/styles/repeat-labels-2.xml b/tests/visual_tests/styles/repeat-labels-2.xml new file mode 100644 index 000000000..b78dca811 --- /dev/null +++ b/tests/visual_tests/styles/repeat-labels-2.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + line + marker + shield + text + + csv + ../data/repeat-labels.csv + + + + diff --git a/tests/visual_tests/test.py b/tests/visual_tests/test.py index dd5004fd1..b4c91e392 100755 --- a/tests/visual_tests/test.py +++ b/tests/visual_tests/test.py @@ -3,8 +3,8 @@ import sys import mapnik -mapnik.logger.set_severity(mapnik.severity_type.None) -#mapnik.logger.set_severity(mapnik.severity_type.Debug) +#mapnik.logger.set_severity(mapnik.severity_type.None) +mapnik.logger.set_severity(mapnik.severity_type.Debug) import shutil import sys import os.path @@ -159,6 +159,8 @@ files = { 'rtl-point': {'sizes': [(200, 200)],'bbox':default_text_box}, 'jalign-auto': {'sizes': [(200, 200)],'bbox':default_text_box}, 'line-offset': {'sizes':[(900, 250)],'bbox': mapnik.Box2d(-5.192, 50.189, -5.174, 50.195)}, + 'repeat-labels-1': {'sizes': [(750,250)],'bbox':mapnik.Box2d(-12, -4, 12, 4)}, + 'repeat-labels-2': {'sizes': [(750,250)],'bbox':mapnik.Box2d(-12, -4, 12, 4)}, 'text-bug1532': {'sizes': [(600, 165)]}, 'text-bug1533': {'sizes': [(600, 600)]}, 'text-bug1820-1': {'sizes': [(600, 300)], 'bbox': default_text_box},