From 4bc4c0903b5076c34e2ab22d4477d860603a84e3 Mon Sep 17 00:00:00 2001 From: Philip Gutberlet <92990487+PhilipGutberlet@users.noreply.github.com> Date: Fri, 5 May 2023 12:21:32 +0200 Subject: [PATCH] test: snapshot tests for diagrams (#239) Closes #175. ### Summary of Changes Created tests to check if there are any graphic changes in the seaborn library by adding legacy graphics to compare to Co-authored-by: patrikguempel <128832338+patrikguempel@users.noreply.github.com> --------- Co-authored-by: megalinter-bot <129584137+megalinter-bot@users.noreply.github.com> Co-authored-by: Lars Reimann --- tests/resources/image/snapshot_boxplot.png | Bin 0 -> 10223 bytes tests/resources/image/snapshot_heatmap.png | Bin 0 -> 11831 bytes .../image/snapshot_histogram_numeric.png | Bin 0 -> 14107 bytes .../image/snapshot_histogram_str.png | Bin 0 -> 10148 bytes tests/resources/image/snapshot_lineplot.png | Bin 0 -> 21213 bytes .../resources/image/snapshot_scatterplot.png | Bin 0 -> 12316 bytes .../containers/_column/test_plot_boxplot.py | 29 ++++++------------ .../containers/_column/test_plot_histogram.py | 19 +++++++++--- .../_table/test_plot_correlation_heatmap.py | 18 +++++------ .../containers/_table/test_plot_lineplot.py | 14 +++++---- .../_table/test_plot_scatterplot.py | 14 +++++---- 11 files changed, 47 insertions(+), 47 deletions(-) create mode 100644 tests/resources/image/snapshot_boxplot.png create mode 100644 tests/resources/image/snapshot_heatmap.png create mode 100644 tests/resources/image/snapshot_histogram_numeric.png create mode 100644 tests/resources/image/snapshot_histogram_str.png create mode 100644 tests/resources/image/snapshot_lineplot.png create mode 100644 tests/resources/image/snapshot_scatterplot.png diff --git a/tests/resources/image/snapshot_boxplot.png b/tests/resources/image/snapshot_boxplot.png new file mode 100644 index 0000000000000000000000000000000000000000..05aa3fa8083ee5e9e5fe92124b0ed760dca756ca GIT binary patch literal 10223 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 Ip0T+7Z;9IgjsO4v literal 0 HcmV?d00001 diff --git a/tests/resources/image/snapshot_heatmap.png b/tests/resources/image/snapshot_heatmap.png new file mode 100644 index 0000000000000000000000000000000000000000..eedf2950c2e44e59527ed382a7f6900babc2dce4 GIT binary patch literal 11831 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 literal 0 HcmV?d00001 diff --git a/tests/resources/image/snapshot_histogram_str.png b/tests/resources/image/snapshot_histogram_str.png new file mode 100644 index 0000000000000000000000000000000000000000..00e5e11b0c67e1654bbdcf9cb587ff6a172ebbe6 GIT binary patch literal 10148 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 WYn|+zf@PrTJ_b)$KbLh*2~7a{vladT literal 0 HcmV?d00001 diff --git a/tests/resources/image/snapshot_scatterplot.png b/tests/resources/image/snapshot_scatterplot.png new file mode 100644 index 0000000000000000000000000000000000000000..8197729181a45d7fcc2da9bdfc62bf8eaa3fdec2 GIT binary patch literal 12316 zcmeHtbySq$_U?y;C%lvp&1bl1>f5F*_jHi$|yA_zz`fFs?Z2uSFVA`%1A z;1DC7zx{b)ts7^pbAGk%UHAIW$jldS?EUQLdG;Hup(cOm0P_I^K@KS@$Y>$Ru0RB# z7}~!NzPa4qKZ+m%BZ@NDbv)xq175B=7Oxu@GEQpjQJ_CVbK=a&o90LMG`%mPp*zY< zM?-Ve@ThB-B~6scK9NI88gxcFa!h;ZEKX1`nlruROS)MwmoIRg;ne+9T4|m~;=d`m zy18kKZA);2a})8Rsslc!33Wz(a{?Y-E$KKOc)g$;RrW#nytcrB>_U*^Pmuixa`X7E zlL!)cYkwg8^5oRN`~y{fdEm#G=xELi^~9L4u%mgswz}Be2%<5mgVEB`N>z&H(MtaG zCXsNk6!BbNv>)7{w#D?ZD=!re(f6jx>k_;O%BS09cR zQY$KaIjXl#@3aRSG4GsKZ%|y=ZL!9Zcregozzy58QCcdTg~^T)Uu?U0DiIM8sb)3)SNj`C?je1o<}Xjbg@l=jT2%MX=5h^#I$)fyC7DmK1kO@pnt+HXl7ZTjgdDuE9Q3c8&Gi?zB- zZ#_EhoqAclcju}tBJT9_QI0`@TtdM1TAck=%huzHYHG`sY6;>7D)bOFX2a*Sr_*O{ z*yjyilJueST>jOom8Hcw)s@w$T2jzQx?R#2k_FK=6!NhJ8}t3MqXD+jVhBE|1PEiq zcwaL0O(?dYG%1k4P{$ZPKBs}?GgpNAZMHpvH57KTVl48CqOS>aOot^67!N{SZo7UgozqRen zub<9GvrRgzd#~}_&-#!K9Ok@rXZnjA{XFT}@)>>+*U2!Q9R2pcCFR~)ZtZjh8JR~A zG<^j*axa(}bm5&x^?he)=SztG=T+mbM9&UXC_{js5fwGG{2K37M;fp%DK+NDGs3Iv zTPJo6wWr8iG(2abWn$va*3FH;n)w?%p=RQ6nfUs}WuqyQE2ML3v66#><5}5lxMknHDkoK z8yC$Y>{x5l`{5yF8eIDaJ79kN$l()LRQ$J=^t@(rOGf91>&V@DW=$E1{ye)W4;PkS z0vHV(a-k4BdsZ%n--PG)1OdD65cB6x!NgW&r$a^JP!39l#}Bm4$b% zmIwNv@QKKV{AUz^f4yY~y1%7U(u{CaUOOzkZ#ZA+^;sEd=|uD}rFMi-G1(eq?FM-usrrUFEY9v%0!^!hXiR zqJGTTs|qf2yd%ko#9g*I>oVRN4$;^Aoay4|_q;pgp@&D5;9o+YI)Hh+TE+xD4UJ|i zJrwIz#yA|VTee?CODjSLZ)!5=Gbh0$c=Ou3CHoSie*2P%s+O^cprHLw3K*W&X~w6) z_~;H|TR7D+E)u;Ox#lQZv!ov%aNgNkX&J72`rFu{q_5t-gwX{9n!TIFr1dt=ZYGSe))w zrag9S>|Modgw)O&fjon+X*Tf~uyC`6S5SO_41ciqU=BYpfs;vV{hT-9TROh~7`6GY zjnfAQW~8ECy*hX6)-4VWXW&AyA};C1)xHL70h>-<^B*V=&fsA-*C^;$sfPgG#$Z#T zp@b{G5p^?%at^C;x-(rhQeA3G=SQLS>6RG2^N+OP4vpgnSP=P_EZhKEQEoHe6lcEW zrUA}%WNCB32F8Ri3N(iZRG)Kla(b+J9@go=eN{}+$({T2^Nwo^jqIE}JW5*H+5l&t zQ8IL&lI_}0dX^6&94oZQ@5g40!;f3{xxub|gLq=L7`A9(F?z<1yL$HxcJkX4kC zX~qf&j5S9`KBGVH{Y@`NUlaJ?f%P7EV^SDhvv%#3I8yo?40uTFz!>+C|JHgi03%KK z;-ah9R2nwbxXhV@9;=mW4zZYk#Eurf;UiFYX}hr zy7n;>{zB>>IqZUm{*z4bzps3cbW#ZN^Q+ljiKAu}?V1KH&eT9fNo%}__F2`}=58WL zSVpHJ)}pJY!hGxP9zs5Ft>763PGCt!`b4_U={G&HOo?zmiA(v9Kz~}H-+2+Aok2M{Hnu;nMDyApjdA)b>j~+iB zGdzswI{$@>nlJWLR7&6cI~hfMU#suEhRk#Q1OAElCK4!X6aCklrfHF(C-D|kzQ|^% zy2Ks;%fMuL)e?_Gr<1rXcv3p;? zv(f*6eK*`t$jMIf;>z5AkLQve-ZZ*Cgs~+}8Jj8_!th54A3f?Tgv<_B85tJdJvB8o zrB&_gWl-*#)s?L$K(Ir3>VQ4L2it-%{%hHrvM*KgMg%u?9)73X&0Fv^l^qmjllWYOKnX=px31i~zC z?p>4!?9I>5uaq`bbFVP@!NI}dt*t6dV(vMG4n$LkI4&sR1?A$(Z`8_pQ>q6! zXO3`s#?;F_Q8q3)m!);;`^RR0H>tcVoT165FY!_VraTzj8JnJW(ciy+H?jwL^l8df z2~b>^<>l?n_nzn|lGggFz@>mf6+3wTPjN%ti*xpSzlceC?3?#)YHH%(pk-!$J>gx_ z$7f&C_j_>6nO@nXp6}G<(}ce|BWF@AQ8=u%TPX8ET$-DkBi`P4ss!3D_4>noUiKHg z$mUL>ZxZxmWMnSr8HgKC>DiY{jxo#tH^^UeML=*R{pu}{XW-R$tg{1UcpBcC(1R+$ zypKOe{$_HpK?21Qpn_hy8|Dl2Hs5|g6g905{mtvh6S8@P72wMYAI_iMw}L#uPLKr< zq*MYXqJgn!OS+!#I;Dlusx%O;y4cZUP|MM!3w}YpV#o%?NV{CtX@?zdv4dM2hidQt z(Rf#hzNb%}I_13l%YcRk=0VG1yR7rStvqJ0=P40nHi)3Q`%XbG*;vwN*>x^GZ(*GIu`NH9&_~I+e{Gu6 zo7`uNsHmvW(S(Ce2ssb$J!c5P1aL98IznugA}2(EHVCsE z&TiorI=iSCdjCG#?uS$o&tA1>P)VHS;!-ZU*DYQ)p|;l;;nn>4!|nyBjhmDbadpG{ zSJ`A+CnMQ*@0QrN@0d5;g%tH;-mPCHJT_e(8^dZKzAS&49|a>qa<8adXgC4BR4#wo z=T~hhK}>!fcWx#%*4~s3<*Z*5KvZ?-aM z?z-yBj)F0zCjK;tdc5$d47E4SE4Dq`4UZ@brY<aaQ~WJhHFtir4;Z9hD}rr!LL zRcsW9blB2NkCBN|xRSa$wy^LL4Gkzk4q8vjZzdJ)O{)tdvZF+aeay!iG|$X8l0ohZ z+5Nc0B;uTkS|i)5BS*58d0f+f88NlgI*v8d6A}w<*e8*URv<~){T4Ozw)`Yn5s%q^ zZg2^sfKMwD5+tg=?d_lFSohc8lB-bGW*T~d%k%StwD+X8&}c~%#%YW&YsuJd0$>AeW#;3I&U#xW0@2Q z#K;`nZQw;o==@|%ziO;fkBLVwf*)chd1zY)Ck0Ee@* zw45eL?c^xO@V3LWtt~Cn>**O@o|b=kxBeOZ(ql%`Hu%{%(QBN^4#=VVY`?(~R?$=( z4r*&rY4d~LygN^0&g-d}`H+fE*hfZ3W1iE~OTwC6o^KT5<5Ly$n9X@ed1U$59o-!L zx1_$3o^QEEGZCE1yzkx*sq~fz#oWITLwSTv=V{$rg5*X{Lw&t<+!eb*(43;4^EbD^ zIKgz+tcc)BO3e5UNHQS;X4N?a@!!uOf~P?cVK7U1jclFkOEWf}o~1Fo23qpZkH3`< zWh*M}c(5^FccjQ~W7)I?uFN*GKvWDXvXP zeLP9RXSoYh@jcMq^%w@@q|g)`)1BDZ*sS*Uc2Vn&Gx#wuoVps>1B}I7CzEQn*Ry52 z>5aX;%P(wvyT-1p{W5Z-F|-GWizlBC*hGb1zsF(010-C=pI?4VACV#-dT)(9wv>i7 z)xvZ?e@?vxK7cC-@Ac;M_{nO&jV_WqV-t}Si4AOt;y%55A9a{Ko0rU!BkcU);o%YB z>=#%OVqis^0WK}ZTVu)fjAlVW0g2;kii+XjLn$aJJ+m^H8>||02-t`V3i?!EAKWrV z?%T+Lz2jaP@JKv!<_u(hrR!9OY>a>zzoMd|^Wvl?lc;N^@8&{dnVQc=+%>ru}qNN2zbqVjqFmOql`^#K7PoJ*)c;KMrm)DnR+1U8u zN-RuG38LR(dvh({qJ?1%C}65~h8i09gozRjdc~a9j2ll6PepNSi_i7o&G4+Eu5E`| zMJK~g%U2e^2np#tK+kjc_U+qFSc7x<0+jq<&(HMW@iyObn%vy)PIqM)rpO(V@LhdR z&&lu_tc}SVMy95%S>I;oLsT2)Tmj(IKdlIXu-SNk#r)^AfJtWl`% zDZ76rdO7g1EZj=kMyS-b{tapAMVO9mwBEUI?@UgFZG1b($nRN|c;Sv*?Ta+-#-?9+ z-cYKFfI=p0O+aXg_fdm&Y15TCyrRdJt{RsPRJiT^dqGm$+lL8~em`8+wwt&TyIxADst^Nqwtk+=Rp2u&)iCoM-n#{=P-lra@+vwy4V_EuMJq#tLDs$! zhs4>w5`v8ZSQoqPSytwV_@(LYPFR)p0^9avS&EA>TIuNUwX=#(C zb~X!omO&zZ15jG;rdWc&EQbM_RCyPrr>1(wI1E;bBrWIm729>vaw<(0+x1mG82n9; zVi&w)-RvZk0k_^WH%~3L>G|ri**XicquqiPz?=E6rA2cxJo6azl27!W<{rqm2*GXp zPz#t=X2RBW;cK?b+ji6v_Xmo(|7rt68{!qOo2hXfT3@q8lK8lZr_@Zz>XK`z>1k3MaI)MWEk&1c>HB;og7kCVdV zFk9(!sLAS_>H_2FF5a}N(5|nTnSmi45*^cRW5oekngTvqcgdi)GM3LM{j}WkHuz_p zvErg9ZDFL*2AUF;Uxi2O6B~rMxfM@bzLyGk(w&-m1}!vhKR*Q<*7*C8`pXKeDtb(P zRBzn4QDj(j4-7r+LkACb!blDD*GOWX^GUkzj13xJoXCJm(+zH%4JbCZ$+ov%_H+1+ zZvzz`Hja+(w|fG%uvWd0L2sc9E|&ik@?CYTVO2i%GSX*dwi}GNdr+0p`J->O>o3jo zU#Mrqd6TqOz(Gm5aN&Yzz_zamlzf0E-MQ)wdkJu6>$`~wP^qWTOW@Y-h8HKY>xSE) zfjXBi^?Q8=Z=<5}Tu+0SH)dZgR2v+0QhYNp7^qY>Zo(`H%4#A3*=W@+wjVGA5PA#g zATaBE(ER)RTR)0y^avZrxYQ;=w{$~T897v?;d;J`QXdz*W>k3h?PZ&9T~JClz8s#0 zD-7|b68OCMi&ih8wrhs6ipAJ$%+>6eK0S0I9n2<&2J+B{hxZD47v}|Eq7NzK_NVTOS?!IVH0y#f&7lMS-TS|k)D^AXPO~hkZWAl zf&ZGCX)5-j5B7r8p7OMZ3>Kr`T-C~@bLSMK)<%yJ$fKj?D4hUK&ghY~2Alx(le=L- zr}FMJii@2FZjB;$!1nLNGJng($@U-6(;I;2UC@h@GB7Y$2eUToi)H89?+E}vu>Oji zMjE_{ek<0whDC*dL*KvnSFm0odt> zx#e7IYim)5LGdbx?ZsfOgf@A0KOOW9=%ywHY#TtD}vtwZ0p+_b2g!D5{po$=UGkz7^MMX zG`mTy0rtDi4}Czl&8~N*Stg<3+#7V=dmWLEgJMmo}%yZMtnJyR)=2aInHYvt{xX zZZqkWhgmebZC32jzDZx9^#~*On#0)&uI>OLvD9Tk4f4{IvLl}2Be6k9Lc#l2 z&-BJv+YB(SC*(~l=AHa0=@O{RoOPA`>Vs*0tiA+p@(1_$u|vDJexH^RoP!(pW6Q1eCFWztQedsS!2R;hg(TaMIz&aa zAigy+m+zqgA;!$gn!5wv&ls#gk92KoG#j?~9r(!)%NlH^I?@c&Rbn}|UgVw|_;q&S z(W5;8WVy>TJp>!00Le*nV!`@ir~1U}uEX@$^neHM9$FlxJNx@QK`E=2UT$%IO z=6L>AuKAo4y1pnSerHtjwZI;Dd3nIj_U){?iL(!?y_ay{TBCYz6GTG3+l(&gJvub0 z(m?y6pF!fhfwsyE3kKymFY zy!L9Pt1x+OuT5C2FHUv5zjcF#hT!pY&~IfxtH4s#Nti`9=9R}w>_RA-FLDm$4+*l6{*i6Y(KJP5DfldKs#OtjW36t>1 zCAd}e_NV=jR5)Tl+Lt9biBkxORt|Q}8)2tpU=}|7dV7*l3=Lu6+q5(c7K;XQg$hbW zQ_t(53T@p)JkHh+vO-19vuHsMD%=-+ZhZK^=D&VzwHb2?N!S)gh$ z!XK1Cg4@-N{AoCxRO9u?WNEx=bTg0;dr>~o^CuObX7VG5aSbRJvscxF2b-`VW&pZI z#kN^MiI%eGJu=Las)59@Ua@@zMYkQ#zcW4&@)P1j7JTz}X2#5_s;U@li(BW$ll+}S zz+B&=${sv8R5VqN;}LWNh<59Na!oLO zP7fHk5ep~7chcgk-&cFUld4vIcc_*94++eOi^=h)5y!=KtQ;Hbr;so{P zwj=vjSYcG=qo9Mq>9m97&cb=9i`0Dh#6F-H+6(L{9jZt<+Ym&y=|hQNnfGU}=jidPZOC%ygd3s^F{Gm3x9kmDfrW*| z6jaY5XaF-aGv8~vkgu>CJxGP}G-x?l6NIoWX_04DJAjUjpQ`jUuLQvy`I0hTnboIQ|_Bcl-wGdNnM^D$cC=8sO@*b zEpm&%65we!c*z5fYK4$_^lP2&k4b7io8xf~;)(5*>4z3Dd#5_hc4_&0FP4m$yN9B| z3XE14<>O4_REh!8 z(8|BjO?e8=3jqA%0s1>bCD#=|U zvFFn#89QQi)nO)~Pc~k_GSGsHn`X7I*_aip>6;rZX#~1*4-6;brjTKnBuIg2M!(nd zUJ?P@l?@FI)93M(KMmk4V;ZXR0bwVBZ&g_~tTsw*hudr`nPC&zb|wP08y_fD(f6LV z$MIZ=1AwyTczT#M0yRRwLzk5SvqNTmWljJpa2S*zHB-MO44jUOT%04C0m9DcsoO-K z)0AfO9HKzaMX^bED}ax*2$3rzBlnVJYU$I=PJtW7-E)Ln;b$P z?mH9#x;?wO`t;ewbF?sJAUFyjD8-k$v^ktf)|3K0F`>h$BjKgximgQ~*oUW5?A39TlKBp>1nggDoR-wr;sNT@QB!JThKCBRs zEw70;9;4vH=0gv>MmW-0!W))Kc2^DI^JfK`GWRQKI$2t<%+Ef-%8K`?z%iO%?iJvz zd=i*gzxY<3=HmLLw~cU;m5>P9^v6fa3OuVJKNlJc)qd3{L{NXsmivNK*~QuEVu zN!3YBnN*MvT2me^z?3>O_N)}HH&w(tL&dmbAV91;sxnH21`Oq zM|TDwI|^J11y@&Br)Uk{{2fKu7jg3E(|z=;;E20Y7H^aB8@pi!T&v2NfYGv>|B=zFV+@mU1a8Iy60Tp$0qPo-QnEs4;0@x}K z2givkwqZ~_42@OW1^>3Euv$$3zZQT-6dv?~arhPe9BiO!ipcE5ex1eR!n>*n%2<9c zwm>Q!NX*-EiDwr*QHTDa!2M>d&lv=c032_SvW$R!+qJj1&W_Lo^WZ$19@*%uK<_Au zN*=>$zqP`&PWV>NhG;p&1u*CBBJE% None: - with pytest.raises(NotImplementedError): # noqa: PT012 - table = Table.from_dict({"A": [1, 2, complex(1, -2)]}) - table.get_column("A").plot_boxplot() + +def test_should_match_snapshot() -> None: + table = Table.from_dict({"A": [1, 2, 3]}) + table.get_column("A").plot_boxplot() + current = table.get_column("A").plot_boxplot() + snapshot = Image.from_png_file(resolve_resource_path("./image/snapshot_boxplot.png")) + assert snapshot._image.tobytes() == current._image.tobytes() -def test_plot_boxplot_non_numeric() -> None: +def test_should_raise_if_column_contains_non_numerical_values() -> None: table = Table.from_dict({"A": [1, 2, "A"]}) with pytest.raises(NonNumericColumnError): table.get_column("A").plot_boxplot() - - -def test_plot_boxplot_float(monkeypatch: _pytest.monkeypatch) -> None: - monkeypatch.setattr(plt, "show", lambda: None) - table = Table.from_dict({"A": [1, 2, 3.5]}) - table.get_column("A").plot_boxplot() - - -def test_plot_boxplot_int(monkeypatch: _pytest.monkeypatch) -> None: - monkeypatch.setattr(plt, "show", lambda: None) - table = Table.from_dict({"A": [1, 2, 3]}) - table.get_column("A").plot_boxplot() diff --git a/tests/safeds/data/tabular/containers/_column/test_plot_histogram.py b/tests/safeds/data/tabular/containers/_column/test_plot_histogram.py index 24da311f1..c23391356 100644 --- a/tests/safeds/data/tabular/containers/_column/test_plot_histogram.py +++ b/tests/safeds/data/tabular/containers/_column/test_plot_histogram.py @@ -1,9 +1,18 @@ -import _pytest -import matplotlib.pyplot as plt +from safeds.data.image.containers import Image from safeds.data.tabular.containers import Table +from tests.helpers import resolve_resource_path -def test_plot_histogram(monkeypatch: _pytest.monkeypatch) -> None: - monkeypatch.setattr(plt, "show", lambda: None) + +def test_should_match_snapshot_numeric() -> None: table = Table.from_dict({"A": [1, 2, 3]}) - table.get_column("A").plot_histogram() + current = table.get_column("A").plot_histogram() + snapshot = Image.from_png_file(resolve_resource_path("./image/snapshot_histogram_numeric.png")) + assert snapshot._image.tobytes() == current._image.tobytes() + + +def test_should_match_snapshot_str() -> None: + table = Table.from_dict({"A": ["A", "B", "Apple"]}) + current = table.get_column("A").plot_histogram() + snapshot = Image.from_png_file(resolve_resource_path("./image/snapshot_histogram_str.png")) + assert snapshot._image.tobytes() == current._image.tobytes() diff --git a/tests/safeds/data/tabular/containers/_table/test_plot_correlation_heatmap.py b/tests/safeds/data/tabular/containers/_table/test_plot_correlation_heatmap.py index 7981acae0..f91c446e4 100644 --- a/tests/safeds/data/tabular/containers/_table/test_plot_correlation_heatmap.py +++ b/tests/safeds/data/tabular/containers/_table/test_plot_correlation_heatmap.py @@ -1,15 +1,11 @@ -import _pytest -import matplotlib.pyplot as plt +from safeds.data.image.containers import Image from safeds.data.tabular.containers import Table +from tests.helpers import resolve_resource_path -def test_plot_correlation_heatmap_non_numeric(monkeypatch: _pytest.monkeypatch) -> None: - monkeypatch.setattr(plt, "show", lambda: None) - table = Table.from_dict({"A": [1, 2, "A"], "B": [1, 2, 3]}) - table.plot_correlation_heatmap() - -def test_plot_correlation_heatmap(monkeypatch: _pytest.monkeypatch) -> None: - monkeypatch.setattr(plt, "show", lambda: None) - table = Table.from_dict({"A": [1, 2, 3.5], "B": [2, 4, 7]}) - table.plot_correlation_heatmap() +def test_should_match_snapshot() -> None: + table = Table.from_dict({"A": [1, 2, 3.5], "B": [0.2, 4, 77]}) + current = table.plot_correlation_heatmap() + legacy = Image.from_png_file(resolve_resource_path("./image/snapshot_heatmap.png")) + assert legacy._image.tobytes() == current._image.tobytes() diff --git a/tests/safeds/data/tabular/containers/_table/test_plot_lineplot.py b/tests/safeds/data/tabular/containers/_table/test_plot_lineplot.py index f1314c6c2..9d0dfdb1b 100644 --- a/tests/safeds/data/tabular/containers/_table/test_plot_lineplot.py +++ b/tests/safeds/data/tabular/containers/_table/test_plot_lineplot.py @@ -1,17 +1,19 @@ -import _pytest -import matplotlib.pyplot as plt import pytest +from safeds.data.image.containers import Image from safeds.data.tabular.containers import Table from safeds.data.tabular.exceptions import UnknownColumnNameError +from tests.helpers import resolve_resource_path -def test_plot_lineplot(monkeypatch: _pytest.monkeypatch) -> None: - monkeypatch.setattr(plt, "show", lambda: None) + +def test_should_match_snapshot() -> None: table = Table.from_dict({"A": [1, 2, 3], "B": [2, 4, 7]}) - table.plot_lineplot("A", "B") + current = table.plot_lineplot("A", "B") + snapshot = Image.from_png_file(resolve_resource_path("./image/snapshot_lineplot.png")) + assert snapshot._image.tobytes() == current._image.tobytes() -def test_plot_lineplot_wrong_column_name() -> None: +def test_should_raise_if_column_does_not_exist() -> None: table = Table.from_dict({"A": [1, 2, 3], "B": [2, 4, 7]}) with pytest.raises(UnknownColumnNameError): table.plot_lineplot("C", "A") diff --git a/tests/safeds/data/tabular/containers/_table/test_plot_scatterplot.py b/tests/safeds/data/tabular/containers/_table/test_plot_scatterplot.py index 21512f895..536d670eb 100644 --- a/tests/safeds/data/tabular/containers/_table/test_plot_scatterplot.py +++ b/tests/safeds/data/tabular/containers/_table/test_plot_scatterplot.py @@ -1,17 +1,19 @@ -import _pytest -import matplotlib.pyplot as plt import pytest +from safeds.data.image.containers import Image from safeds.data.tabular.containers import Table from safeds.data.tabular.exceptions import UnknownColumnNameError +from tests.helpers import resolve_resource_path -def test_plot_scatterplot(monkeypatch: _pytest.monkeypatch) -> None: - monkeypatch.setattr(plt, "show", lambda: None) + +def test_should_match_snapshot() -> None: table = Table.from_dict({"A": [1, 2, 3], "B": [2, 4, 7]}) - table.plot_scatterplot("A", "B") + current = table.plot_scatterplot("A", "B") + snapshot = Image.from_png_file(resolve_resource_path("./image/snapshot_scatterplot.png")) + assert snapshot._image.tobytes() == current._image.tobytes() -def test_plot_scatterplot_wrong_column_name() -> None: +def test_should_raise_if_column_does_not_exist() -> None: table = Table.from_dict({"A": [1, 2, 3], "B": [2, 4, 7]}) with pytest.raises(UnknownColumnNameError): table.plot_scatterplot("C", "A")