From 01e6c0498054b6db56262db3ad6b55b29bf389e7 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 9 Aug 2016 09:58:58 +1000 Subject: [PATCH] Labeling tests --- .../python/test_qgspallabeling_placement.py | 115 ++++++++ ...ment_around_obstacle_large_symbol_mask.png | Bin 1390 -> 1300 bytes .../sp_polygon_placement_perimeter.png | Bin 0 -> 1310 bytes ...gon_placement_with_hole_and_point_mask.png | Bin 886 -> 880 bytes .../sp_prefer_line_above_instead_of_below.png | Bin 0 -> 6902 bytes ...fer_line_curved_above_instead_of_below.png | Bin 0 -> 7989 bytes ...er_line_curved_above_instead_of_online.png | Bin 0 -> 7989 bytes ...er_line_curved_below_instead_of_online.png | Bin 0 -> 7822 bytes ...small_polygon_curvedperimeter_only_fit.png | Bin 0 -> 1257 bytes .../sp_small_polygon_over_point_only_fit.png | Bin 0 -> 1257 bytes .../sp_small_polygon_perimeter_only_fit.png | Bin 0 -> 1257 bytes .../sp_small_polygon_placement_perimeter.png | Bin 0 -> 1496 bytes .../testdata/labeling/pal_features_v3.sqlite | Bin 144384 -> 161792 bytes tests/testdata/labeling/polygon_perimeter.qml | 272 ++++++++++++++++++ tests/testdata/labeling/polygon_small.qml | 272 ++++++++++++++++++ 15 files changed, 659 insertions(+) create mode 100644 tests/testdata/control_images/expected_pal_placement/sp_polygon_placement_perimeter/sp_polygon_placement_perimeter.png create mode 100644 tests/testdata/control_images/expected_pal_placement/sp_prefer_line_above_instead_of_below/sp_prefer_line_above_instead_of_below.png create mode 100644 tests/testdata/control_images/expected_pal_placement/sp_prefer_line_curved_above_instead_of_below/sp_prefer_line_curved_above_instead_of_below.png create mode 100644 tests/testdata/control_images/expected_pal_placement/sp_prefer_line_curved_above_instead_of_online/sp_prefer_line_curved_above_instead_of_online.png create mode 100644 tests/testdata/control_images/expected_pal_placement/sp_prefer_line_curved_below_instead_of_online/sp_prefer_line_curved_below_instead_of_online.png create mode 100644 tests/testdata/control_images/expected_pal_placement/sp_small_polygon_curvedperimeter_only_fit/sp_small_polygon_curvedperimeter_only_fit.png create mode 100644 tests/testdata/control_images/expected_pal_placement/sp_small_polygon_over_point_only_fit/sp_small_polygon_over_point_only_fit.png create mode 100644 tests/testdata/control_images/expected_pal_placement/sp_small_polygon_perimeter_only_fit/sp_small_polygon_perimeter_only_fit.png create mode 100644 tests/testdata/control_images/expected_pal_placement/sp_small_polygon_placement_perimeter/sp_small_polygon_placement_perimeter.png create mode 100644 tests/testdata/labeling/polygon_perimeter.qml create mode 100644 tests/testdata/labeling/polygon_small.qml diff --git a/tests/src/python/test_qgspallabeling_placement.py b/tests/src/python/test_qgspallabeling_placement.py index e7c5c37f711..66c2ba4a11e 100644 --- a/tests/src/python/test_qgspallabeling_placement.py +++ b/tests/src/python/test_qgspallabeling_placement.py @@ -271,6 +271,121 @@ class TestPointPlacement(TestPlacementBase): self.removeMapLayer(self.layer) self.layer = None + def test_polygon_placement_perimeter(self): + # Default polygon perimeter placement + self.layer = TestQgsPalLabeling.loadFeatureLayer('polygon_perimeter') + self._TestMapSettings = self.cloneMapSettings(self._MapSettings) + self.lyr.placement = QgsPalLayerSettings.Line + self.checkTest() + self.removeMapLayer(self.layer) + self.layer = None + + def test_small_polygon_placement_perimeter(self): + # Default polygon perimeter placement for small polygon + self.layer = TestQgsPalLabeling.loadFeatureLayer('polygon_small') + self._TestMapSettings = self.cloneMapSettings(self._MapSettings) + self.lyr.placement = QgsPalLayerSettings.Line + self.checkTest() + self.removeMapLayer(self.layer) + self.layer = None + + def test_small_polygon_perimeter_only_fit(self): + # Polygon perimeter placement for small polygon when set to only show labels which fit in polygon + self.layer = TestQgsPalLabeling.loadFeatureLayer('polygon_small') + self._TestMapSettings = self.cloneMapSettings(self._MapSettings) + self.lyr.placement = QgsPalLayerSettings.Line + self.lyr.fitInPolygonOnly = True + self.checkTest() + self.removeMapLayer(self.layer) + self.layer = None + + def test_small_polygon_curvedperimeter_only_fit(self): + # Polygon perimeter placement for small polygon when set to only show labels which fit in polygon + self.layer = TestQgsPalLabeling.loadFeatureLayer('polygon_small') + self._TestMapSettings = self.cloneMapSettings(self._MapSettings) + self.lyr.placement = QgsPalLayerSettings.PerimeterCurved + self.lyr.fitInPolygonOnly = True + self.checkTest() + self.removeMapLayer(self.layer) + self.layer = None + + def test_small_polygon_over_point_only_fit(self): + # Polygon over point placement for small polygon when set to only show labels which fit in polygon + self.layer = TestQgsPalLabeling.loadFeatureLayer('polygon_small') + self._TestMapSettings = self.cloneMapSettings(self._MapSettings) + self.lyr.placement = QgsPalLayerSettings.OverPoint + self.lyr.fitInPolygonOnly = True + self.checkTest() + self.removeMapLayer(self.layer) + self.layer = None + + def test_prefer_line_curved_above_instead_of_below(self): + # Test that labeling a line using curved labels when both above and below placement are allowed that above + # is preferred + self.layer = TestQgsPalLabeling.loadFeatureLayer('line') + self._TestMapSettings = self.cloneMapSettings(self._MapSettings) + self.lyr.placement = QgsPalLayerSettings.Curved + self.lyr.placementFlags = QgsPalLayerSettings.AboveLine | QgsPalLayerSettings.BelowLine | QgsPalLayerSettings.MapOrientation + self.checkTest() + self.removeMapLayer(self.layer) + self.layer = None + + def test_prefer_line_curved_above_instead_of_online(self): + # Test that labeling a line using curved labels when both above and online placement are allowed that above + # is preferred + self.layer = TestQgsPalLabeling.loadFeatureLayer('line') + self._TestMapSettings = self.cloneMapSettings(self._MapSettings) + self.lyr.placement = QgsPalLayerSettings.Curved + self.lyr.placementFlags = QgsPalLayerSettings.AboveLine | QgsPalLayerSettings.OnLine | QgsPalLayerSettings.MapOrientation + self.checkTest() + self.removeMapLayer(self.layer) + self.layer = None + + def test_prefer_line_curved_below_instead_of_online(self): + # Test that labeling a line using curved labels when both below and online placement are allowed that below + # is preferred + self.layer = TestQgsPalLabeling.loadFeatureLayer('line') + self._TestMapSettings = self.cloneMapSettings(self._MapSettings) + self.lyr.placement = QgsPalLayerSettings.Curved + self.lyr.placementFlags = QgsPalLayerSettings.BelowLine | QgsPalLayerSettings.OnLine | QgsPalLayerSettings.MapOrientation + self.checkTest() + self.removeMapLayer(self.layer) + self.layer = None + + def test_prefer_line_above_instead_of_below(self): + # Test that labeling a line using parallel labels when both above and below placement are allowed that above + # is preferred + self.layer = TestQgsPalLabeling.loadFeatureLayer('line') + self._TestMapSettings = self.cloneMapSettings(self._MapSettings) + self.lyr.placement = QgsPalLayerSettings.Line + self.lyr.placementFlags = QgsPalLayerSettings.AboveLine | QgsPalLayerSettings.BelowLine | QgsPalLayerSettings.MapOrientation + self.checkTest() + self.removeMapLayer(self.layer) + self.layer = None + + def test_prefer_line_above_instead_of_online(self): + # Test that labeling a line using parallel labels when both above and online placement are allowed that above + # is preferred + self.layer = TestQgsPalLabeling.loadFeatureLayer('line') + self._TestMapSettings = self.cloneMapSettings(self._MapSettings) + self.lyr.placement = QgsPalLayerSettings.Line + self.lyr.placementFlags = QgsPalLayerSettings.AboveLine | QgsPalLayerSettings.OnLine | QgsPalLayerSettings.MapOrientation + #self.checkTest() + self.removeMapLayer(self.layer) + self.layer = None + + def test_prefer_line_below_instead_of_online(self): + # Test that labeling a line using parallel labels when both below and online placement are allowed that below + # is preferred + self.layer = TestQgsPalLabeling.loadFeatureLayer('line') + self._TestMapSettings = self.cloneMapSettings(self._MapSettings) + self.lyr.placement = QgsPalLayerSettings.Line + self.lyr.placementFlags = QgsPalLayerSettings.BelowLine | QgsPalLayerSettings.OnLine | QgsPalLayerSettings.MapOrientation + #self.checkTest() + self.removeMapLayer(self.layer) + self.layer = None + + if __name__ == '__main__': # NOTE: unless PAL_SUITE env var is set all test class methods will be run # SEE: test_qgspallabeling_tests.suiteTests() to define suite diff --git a/tests/testdata/control_images/expected_pal_placement/sp_point_placement_around_obstacle_large_symbol/sp_point_placement_around_obstacle_large_symbol_mask.png b/tests/testdata/control_images/expected_pal_placement/sp_point_placement_around_obstacle_large_symbol/sp_point_placement_around_obstacle_large_symbol_mask.png index 5c4759763d168a232c7e6dc4f2156837d2736665..45069242411775df2a901ba9e2479449c82b5598 100644 GIT binary patch delta 680 zcmaFIHHB+JkSzy?xG?tthX0Ql7+4m1x;TbZ+_pV^T}oop##SaZwXIRzVAAL;h(RSdy|q^6N^EpOVPPS zUzXaWvTxb@YOPHFl%R{ufUiR`xg`essmvOS4q19hqjRNlkml!pXqGIV1l4 z%A-?MJQ(u7?mGTBZju6Hg94+12g77f7Vi2D-s{Vo_cViL>&#E=_Gn^ZXks~Y{+n=( z&D%EFLnPc#&qIiW!|{IBZ&gi715Ywji&*|BnJ@C3XJVc-xl;lH?g zX}v}wlVj5}L#^KKr#1pA5>iTuO|^R@xO41hDREw{t8~O5WsuAV>hv;UXh!*#QlW{LGNgCz+4{?qBH+3Peh&>l-H! zB;bn)1cC&7glU>A0)hmXkPsvQ6B2?1n2-=8022~|1bn7Zzd@naDu99naNEcaslM}! zB?JjL082O83V@c>KivoGby*+Hw!c1NwNzpNPno0cdTW=SV4k#XQf=&)w_1 zY|EA%&{gZLwVbo(AnlaLPXI%rR7!a(B+F~XNRR-UOiHiZ`!N+AgDpE?%++s7=f{rc zoF8uG)mlZ!gakZ$)qnY)F6-BB3DhmqG+9qU0@em-%~Svg5)28^5}h^Q0|*i{i_zM+ z*vTOh~XNqqopTZxMnZ0e~O@ zAV>fpNbs6b_mSK`0zm>mkie8=Is!q0kBE{OfgnM%kZgGl5F|K5_>}Z+P_AEVI)d9y zmH_TYX$i{mb!||D2m}e5hv_md{|n8%DN2k$kf6)7bZ-(8A`m1P7N$qj5+F#hX`q1D zd6ylLu{Re$YbQ$pZPZ#V0+^6MjNsd)i1057027g|K9Rj11Ck{Glc5Axlm7z+lY|5n qlm7!dlfVQI9sofCK#&07AAbR#f_pw&R~df*0000BOod?j<+g1G&rdVyBnd z&Uc^2{c`TL?$a+h8PuQFT;g_^H9!sp1<(h!<@e;L`uH4p0xaMdJYD@<);T3K0RW3| BBKQCR literal 0 HcmV?d00001 diff --git a/tests/testdata/control_images/expected_pal_placement/sp_polygon_placement_with_hole_and_point/sp_polygon_placement_with_hole_and_point_mask.png b/tests/testdata/control_images/expected_pal_placement/sp_polygon_placement_with_hole_and_point/sp_polygon_placement_with_hole_and_point_mask.png index e44b218d5e82df5056842cd5c781c0b12f23bbca..e5883d43b099f791ac75970537c096abe6e900b4 100644 GIT binary patch delta 249 zcmeyy_JM6ekQWDsxUfztmsbY^1Jhqm7srr_TW@b)8<~Hwhx=PRpX$v#xghyu z+T;Kx8?A;Lj6mar+XM@|gq#ngu`84@B*BRMm0Hd~T`!)^oBNb6XYy`Fi^&a4tdql- l%vq)b?Vmi6>74kF6})EKMMN}mOCEw;?dj_0vd$@?2>^ZJU$y`M delta 248 zcmeys_Kj^qkT)wor|pKs@u5z zCZk<4_Ejy>>aWVHyAr)56qIWt!$XgB4cH< z@k!>!o0E?*YD_j_l2j|WXwX#W$-|ffQViE&xNsE@Bmbluj3veA&RI+5Og_&j4^$q? ka?0&|?&NN!bK((K*yDsmq@;S{w}PDP>FVdQ&MBb@01(1kKmY&$ diff --git a/tests/testdata/control_images/expected_pal_placement/sp_prefer_line_above_instead_of_below/sp_prefer_line_above_instead_of_below.png b/tests/testdata/control_images/expected_pal_placement/sp_prefer_line_above_instead_of_below/sp_prefer_line_above_instead_of_below.png new file mode 100644 index 0000000000000000000000000000000000000000..c10e33edd10779690e44988d9af31ef047544e5b GIT binary patch literal 6902 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�+StJW;Mtd>;BgF6az} literal 0 HcmV?d00001 diff --git a/tests/testdata/control_images/expected_pal_placement/sp_prefer_line_curved_above_instead_of_online/sp_prefer_line_curved_above_instead_of_online.png b/tests/testdata/control_images/expected_pal_placement/sp_prefer_line_curved_above_instead_of_online/sp_prefer_line_curved_above_instead_of_online.png new file mode 100644 index 0000000000000000000000000000000000000000..8edc79323f3433a294452b37fb03cf7cf1313788 GIT binary patch literal 7989 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�+StJW;Mtd>;BgF6az} literal 0 HcmV?d00001 diff --git a/tests/testdata/control_images/expected_pal_placement/sp_prefer_line_curved_below_instead_of_online/sp_prefer_line_curved_below_instead_of_online.png b/tests/testdata/control_images/expected_pal_placement/sp_prefer_line_curved_below_instead_of_online/sp_prefer_line_curved_below_instead_of_online.png new file mode 100644 index 0000000000000000000000000000000000000000..017f2ef912a12316c8e43ee88980b664de7b9e75 GIT binary patch literal 7822 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 Q-vR(kMN7Hjsb%p0076*BJ^%m! literal 0 HcmV?d00001 diff --git a/tests/testdata/control_images/expected_pal_placement/sp_small_polygon_curvedperimeter_only_fit/sp_small_polygon_curvedperimeter_only_fit.png b/tests/testdata/control_images/expected_pal_placement/sp_small_polygon_curvedperimeter_only_fit/sp_small_polygon_curvedperimeter_only_fit.png new file mode 100644 index 0000000000000000000000000000000000000000..448e3fd3b074be09ede5a7d7a74e9b942355ee16 GIT binary patch literal 1257 zcmeAS@N?(olHy`uVBq!ia0y~yU|a&k5*%zm5n-1mYaqo^?Bp530R%N1DIGvQXMsm# zF#`j)5C}6~x?A@LsHWS~#WAE}&f6OsJ(&|ETrb8?R=Ozb;^@Nty;LJx+FP4_1BcoX zxAY%+73Wyi@BW|{caQ%$E5l*EVG&V{=3m( zp3Pq$Tzr_ta3E#-Hv@-8^7=K(MRPSS}}f2N21nRH+Tz#Mzkp$ z{9kf&@vpzLt2e73@ctRZj4#rEBV;J-ivN5`=$S0OIbG-7m$%O!7ySRYGyV4adXqKm3eY^CHKeuet2i|(*Khl zz1w`(^*pTg-Tv>^|2?<&^>?xTj~4~n?)!UOV)f2+R9^7l=i~XuUOhSb zMlv{O|L=!4c5O4RW|KZ=tzxnH@4@51fOY$+JeA}5GJ6&nAT7P5p(ncmNw R1uU8wJYD@<);T3K0Ra2fD8oA@LAD|~&(%Ks6pgQAB`N@6X$_luj@y-%!Q_fz6Jc0VDm8TtZe1D{Cl zupxSFm`{Tdf}eK}{h6DW07aLR6D-6CD=D`;I{}(uB|}Yx$LvPVZq71deYm6jP@p5! z^vqMu?d<`7$5Z~U&O`Oy+QyAu&-TV{|FSgBsc{VZJA=&0-#LZz(8;_5c(D;@Bl3X! zp8S$zkPb3L&XVK!2L3S?aU*_!ONa|+lX}MEYbcwaU^l~*9E=MSoD)-VQPb=Rf*GX# zdoY*2P@6o|v!W+6Rn8`mF*y-GBx6IymG_AOooO?$@f;YTT)o)#a>Q`QJ-D6XG*f^Kl9f?j) zIWk}u{hMz!?4yo`YzR_MLt%FyUB_q2DF}wT+-kO4V~i_QqkoQ$H;sF$wx-!SKEn*{ z!H{1yJw8vzTg|YidGC{f&W`<|7Ik8$QOD0QLvu$^wd_biLwF0WCq{CNau>1_NIy9? zWK7#lQWFV=Zoe_|FYWN)#o@t=&|aC&qkKe;5+1*d)8G^s&^suTn<-J@ea2mKi}ahaJU_=X6c=~P+^dL zEV7Sl_}jZ+sNgZ|LU12;v0`q9ZZTC{!rqy3dVS<+L*Va5Xymg0M)Gl+khk;7-GNr0aMZYH!}&LD!Z($- z>BgW>c%I1HnSJDKJ)QG(i&cLW%&Z#J1rJjgDn``^=b~zAPj^E;S3E21aS8cX37I6KbxNgFuhj9>i*j!EZUf<*nq>Ps)d z)9bd0Ws`{oAB7m*{aLy(o^IIje=wtc|2W9w58*{LfKIUd9TCJfu|lEQ8&LBXYm5Aj^{1>@s{70)_emSH| zAD_^md&d??54EOv4w5klC2{q9_cAOeC89v@em;Luw4^iapErU`&C9-st-qK93nv3l zk%VapEK5%zv)L0=if{m~pogfGJckNdy}pwxt`RqKrfu7>xK&Y$V9UYyYDt%#fCX9c z3*>TF0&gJrZAALWJp49m6lbuht%yfiq+RYCNipY8rDtdia=*|RqP;>Ffsp&e z$}+KLGJ%OcF#`d)Kcr}Oq$KwSO~C)kpl=aAko+FPx8OZ=3#~>g*j76at9ossMnN(59QuFCholPeIJPXpvDi@oo+0+K zfj>Y+rhI&nFQ`htKC3GIpY7Fj?PxU>9Llr#YI|aGFCvTa%WwyZP%o3^uvK)44V=mA z#bRBYrj6H{NwP_sIaQ8-ps1OKE0bcYxJ2}Ern)*+iejZWf*FkcXA%Tnte6H-7U1!;%i zl)KlfK7TRi4=oApW{;jb#)0KC$2hQdmr-`spu7K-I#3C^Azc^n3D*$0#%g(mbeFd4 z*{hVEW0wY9JuV8iLF;JEScBjTTz%g;S}WMj=6N>XJT3V4<$k~n@_BSNDnaB= zjl_oU;H&ruUWGB-fYT6yO~9cK(F@E;bCtL0d8eQa9hKCH@W+#H_%DwLzSe=eS9azJ zwl~jjSY$jZ_<|eh?aFV;gEZtR#})f%X`-#P&I+wG+uYX=)aE`HjF6F-_fF5JyPOj7D^8OTRIo+f!yp^47-F2bd|=u%H9E_|Hc b@D^hGPI}gB$Ce$m)@z|()|Jsq9`kne3-|oapL00>dkcF?VMl)2 z>KZ46EQxazu(axr3K;lN%>>f$yIELTox5eU+iKC+!8VW?{b|zsW%(|Ap~f%CZG*_` z8k?6oVOf{_9-+Mn#&RHsC!IJ>=pOw{-%&SBQ-iM2C-?zh;sTE29u3hEA&w&R+4@xA zs}*R}OMx1r5Gk~rao{v@kqL&IutS^iEBfFKO~C@3#}qK~k#I6Wlk`1(u8SV*?4Tm| z@lRQ7Gg~;B(icn=uPB#aBsLDTIN#2qhrjv*3SZ1(EyPUF`JbxypDI)lDt`_g81Lq9 zGdKVmSF(5!qI@ok9eh2HvFZyEMfRzRBtl;ax;f_2E8#X_q`!w3GT6_*l_q!{QB*edyw{AwP3hp&_19eLCw zyC}QRtxF?n6?M>I8Wf)XhN?~`A2$^S_07=+zE%PG&}Rp#dM&@1xOQmB=Q z6~SB&BKrPlFLdj{F%R_U!(-Y5t%1ocD$J#4W;4<0sq~$x%>2EsV=!XDXg!mgj+7Sj z*D=|xLTYAq%0h`|Cbz3_ZSwl<>G^ba_J&nRx|m$A!en~JB0~;h;3XWPPFmEZb@Ru~ z(}%^4a&ZGv19cK95&D?QxQHiU1?;3GehBBKU5MMmfpFLxik=H=<%3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + generatedlayout + + + + + + 2 + diff --git a/tests/testdata/labeling/polygon_small.qml b/tests/testdata/labeling/polygon_small.qml new file mode 100644 index 00000000000..84c31bdc996 --- /dev/null +++ b/tests/testdata/labeling/polygon_small.qml @@ -0,0 +1,272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + generatedlayout + + + + + + 2 +