From 7a918baccaa367c067aa8f6c0489081ebfa46e50 Mon Sep 17 00:00:00 2001 From: Manolis Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Thu, 4 Feb 2021 19:38:41 +0200 Subject: [PATCH] Add a test suite for the Image class --- tests/data/images/icon.bmp | Bin 0 -> 262282 bytes tests/data/images/icon.jpg | Bin 0 -> 14866 bytes tests/data/images/icon.png | Bin 0 -> 29261 bytes tests/data/images/icon.tga | Bin 0 -> 262162 bytes tests/data/images/icon.webp | Bin 0 -> 4522 bytes tests/test_image.h | 259 ++++++++++++++++++++++++++++++++++++ tests/test_main.cpp | 1 + 7 files changed, 260 insertions(+) create mode 100644 tests/data/images/icon.bmp create mode 100644 tests/data/images/icon.jpg create mode 100644 tests/data/images/icon.png create mode 100644 tests/data/images/icon.tga create mode 100644 tests/data/images/icon.webp create mode 100644 tests/test_image.h diff --git a/tests/data/images/icon.bmp b/tests/data/images/icon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e006f7ebddcef7b782c20ec33c62762068fde880 GIT binary patch literal 262282 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 literal 0 HcmV?d00001 diff --git a/tests/data/images/icon.jpg b/tests/data/images/icon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b45bfa8d9b5c6605d5150a6948295f28f1a843b6 GIT binary patch literal 14866 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 literal 0 HcmV?d00001 diff --git a/tests/data/images/icon.tga b/tests/data/images/icon.tga new file mode 100644 index 0000000000000000000000000000000000000000..dcacdc5c67577402f0315ee94b6545179cf5cc92 GIT binary patch literal 262162 zcmeHQ33OD~dA74Od$TW1v$e@-(yv4?jmw3Sj%TA0z zGb3y^o5hZ8h-1JQFpJrwk%RyNLLh`dNQgx&601Of1PFBde{VEsczW~Z&0FuA`R_S% zX6DVj_x}6+-*@kQclqxnmwfD!3+d8JF8#r$FMQ(|Howi*`$1kl1QkLUXzNW!P`osf$utT zU%n@N%47s?0Hh#NBLNkA}@(@4ey&#<`oz8{~utY zz6O711hNHz`T2uCi#i_lAMw7~fHsnKB4UNXkYBJUj)n$goWDr$Fr70KZG&Z_`hC$a zd1X5pfm8^rczNKLW6{uk#OuZMI&DG|7s>#oosi$>6RGYc%kj!dmwhr84sNlM*KVv9 z7e@m30z+By#&$3Q=@5vKMybDRAnA1m@wmgH4ld|lxlT0rV7mKz{d-9yFx1vO6NbPN zm;zg`^T+pR1hf!X9?AR1?*6;X+x9(ueHZIpeLNgISU&p7FKFFghGVe_eLhcGJz%r` zFJMB~K7!|`qJrSR$&g>RA-55re*4c6*YBrSl~bHoU$-P094;&Bv1s6VwY?60ufnqx zd>|_xY*%(7uyl0)Z^y!+eBw6xtS;0~E`4spc%f{_#v+5iM)mV?moT`1Iqq2!4ZIo~ z6Z(N{n6N$Bg#gCkX>9%-;&`XqJXhT>A{(;Bkx-$^#tRyC<9PR+iTV6&AR9CMZ%^r% ze*ZumoI^Uyb@H4XEL*tN- zdW{X=KRXbh{-pz(4M4cC3eE40b>@iy4+P`^pwIf<&he822O0CP$-IVMS)K$&+prq7q$LVwZNyuTzoj>(J(J^%mAEj;)>*^NL^ zLEaB#<~nSnc`r}8<%N=P=o#7Z;Q7FAu_62KgSqX}^Bplo^80++X>U;7|0%*^zwCH$ z+yJMUkUQ5`Vp>Sj*4NctICQt#D?(gyDf;S43kUoY#nZTqVsrFU;uAzeLyDt;yYMQ( zXRNQsZ}cDh7w6zy_4Vkv|889ywBl<%ml04SK+niaSpUA!|01>j_&XzD1%d9kA5Pa>e0_WR7XE0(*L*G` zphke|{s`Cq{;2=Gm=CGu3xCfp1Tepb_3sb;lb;^XF7|P5yhecf|8Hmg`$PX!|KI90 zU-Sp_f2`NaF7|P5yhdPobim)S{{5kU+AHx#Uh{?TpIr!GZawK=miWIs zPLO(>pv#SQ5ZT3U&W#ZSNdGO|29UlD&}_t){2xXjQv^u+Ygzwt>!14m)@15e{y!sN z1c6v2G>i2wxBlTHBfjMSFant%5G(Be@1*@Y*1z2Pr}}>z?TzvunfR9f%Lt@GAVzVu zl>H?m!E>yAxwW6y3Gv*$;#pBN@ZZF-SU1m3Q+;!}SGIV0-&i>CQ^KHCLvPF6^bej5$%aRg${`c~JmLa8&xut>P!r)JcXEW(_(Hv6Z-SJpK|9^4I4jJx)eXA+o`!uw#Xpj1C z&nxjZM(2IUNqZL;2ERgW!Vgo~!N(ofp{Hdnac~|u;3UW5d!&Y@gVU+_1TDz0m%EcV zB(9Ay8Ny*}DlC$ZQ`_iNEE*hz{bmy9+x3n%28|OpCf|=gXSd!{__rw*&HFFAc$K)$ zl5pU2)UWjv-Sb3>`>M;nhO)7FUr(H$jqj@phkSwmWMd=ex2#foj#DlM$y*gvxYWo)RU%b$AruU4`bLP1<%wugHGcKla=|G=jrh0Vq z|LA|Cc2YI_*tCybe_mo=`N~(DF^ASoO=og18nc|leDW2axV-V8kIIThXgqsDCYp5X zztl%@t(AQ7xm<2A2Mlr`8o0qNT^qR%);LnT{|Nifp#OYU=dfR;^J}Xt>xJo={}X1` z^f9NT;}ky&_^Diu2Fr}heK%5nTlo)-iH=|`vzD0y9&jKUc-D$`t)7eV2x|8`J`a+) z(~b=e8BBdekSpd1N2OOjh$N8x)#MWc6I$Tmo;40Fb52BfV8Ql zSv!xBFCJlk81#pSbpiV*_k2Wa1BTkEb**b577}r574s|i_{Bb#*XJ}BV2xYz0Ws%* zxNw&FATJ--H#y~-PPg|EquY~V70%K+wp zcN`$?Z%dAQ?WE?_*Y4iSoMY=tS}(9Jz0;)|*drckQ6%txYF)bdo%Zw_<3?Wj9@))h z_OB`bM%>i8*1fu8{&Bo*ZUb=tfV&*1lO+})%{%%zmEZgv;I98!Z#jy0d>?|)FSP1o zua3pSp)j}MOts-y$2qEF(|V!3?!3}@s{3M(BFfK3(|KYJa5=ynFv0<8V}SGCA6)-) z`R^zPq~8OiI2?MIIp8P*V`p_P>q(&&K+U^JJ)|S5E2D&Ff-~5K0#c+sp~iXuE7at z#p`u_c9##-2H3>qe@5j$YePdDxxt~pCcE|L_4Qc)to_{3t{r}6{d>ig72~cIHFNXD zu8McX!EI%tt$CYhKe|_R9B&cr$M%c1mU?lxu|hPhn39sTIa8O`+jly#9L)-8R-R6lH{e$o0r`hvg} zD_paFF6-YqhCOv1>V3QV__R1<>{yrB`ccGVUiDyNC%$%GYsr2Q^qkUI3Q&NHV( z<+KMq^cCyhE>2;*=*+334lyOO%cAeP>b=K3 zCDA-_boU0+bUJh9j3_TJ7vsl{6OTRmsJP{(o5fXwuM|VBy-wVH=UpOy#Pee2j2U9r zu3d)jf&Pc`3D>8~9%<$5#*Dxo?OgeGmgqSjUvbb{4U~xsC%MHDLbN>Tk?OJ2w3Ye2- zNB*+u8VBoF7;;rbMTL0azWWXN1inL=Fm=jQaq{FzL)TaTX?w{O4}8V?x619+lW(Q| z;|{eub-&}ebN1}n;_54}GR!Y^`S8SJkBi*~+5^?^5A%Rm+U2BGtgW73J^MLbzu?E6 zJ9jGex*Bhz->edqn$~?X z4+jkxs600$Utj(C#KA`5luUC@yeb<)X~+22RICw$2M)5uH!tSDAWomoY+P|)^+MLa z#RY_JuKz>bpUFH?v<)+9QzmOY)#rX!^c5e@`%o?Wi@tCAV1&!Oifg=b+EAK9|EAbm zHBWirbLF&$Jh27qa`e*NxpPI|%dfCS`w3s+S?$!RQ+l_(=r?f5-8KN%|5oaM%;`6p zy3TirVb2V+m0t;-p$u5PdUZ-uj?g?rEBVay-1XBR7RUE*O=%B)tDHX6Rhy3NtW0SS z`cr^m0#7^NpL+5sasIsVwO*KmoGISs|Ihk2k6lP~9BWR=DfJJNUVq&YekHhyKE%Cy z_o{EJe8;??m9M!o=d^bIONQD+sOvU=_yn-=}*<)LqKj91Y`_w5@H2tD= z5NnFvdtPJxo7F$&Z5U0vckdSc`}T8G|KQwn!=6oP66U&@&8yM#*1hu^L)uRmiM2L3 z$LRIV{%_l|v58yudVl7rrychT+7_9N-MWEE981=}Sx#*)HD0DW)$Ui^+O-5FW2;) z`e1#1y=xo;*PeL%3AG8z_m1NS9Ocx?*KW*s%nOELEEMM&)v}rYVZDu3di>GHT=h+3 zW22TCy^gszZ-eW9Gkn51ClBxL-s?1KfB=ANHX`T72)KI008Vrn8MRpVG>{ zp<^3nJn5KS$TO8Pz3ez};DGJ@{ptLRJ|H6rF^A0ZGPCno|C!;{(`Go|X>7jd9k<=? zs{X;j#UIfYjvC3y7y*c7Xg1Z%b#C1<)?{g=MGF_Y?w4QRb+?u&y^eufW_g*}d944; z@QUjnv0{uQjQ!d@rkt*h!S7=V3pLGia=odn`o~%ytyCC^x~_k4p`*jtT+z}o16?Qs zSpR19kJvs&lH1SziLwE6gS8UoznaOfk#l6#|E3gkezA5ZftQ=_M*9H3F(bHJ`w#2i z41O!d{ZdO_y^gJ~tn`Fq_uX@EFI#Y6TjvSKQaxv4US7Jqnf+Z>{jY!bx0-tmdUZyyS^*jvr57ZyeiG!}>S54$!UjfBQBr=%q2O1K0iXTGx3tYv!z8 zrnI$ebCgrk>YwInw6!$!!UOS?5^Zv~-fy`6hF*4P9oV~JzN5bCsq?u0@4>=&-H&r> z7mU<$U9V$a)H6FY=9x9Eo#iN}WY&LEwsJ9qEJ_wtY)P> z&8_-><-{9Ot|?3Q>FQOhT;aIKPbj3GD>V6nlJAb6(zUuKO>%Rw!i?wa!cuCwndxTQp-6tX;Fl@j2SVp4Og&q%M%!kL`E7otE%d{GIiGF&>$h0f?(%B(=4* ziCb^J#j!HrPt&Jsnt^c&t9dkXzU=x(9`h$K{~jzd*S>NtjV~W>PCusu;zVreOk({TeP+NIgVtVF*n8fsJwW`RfArY`6LkW1 zzkl)fwwD3e6TnD}cG%O_Qt#57zhs`X{w?dD>J`MfHM*bFUWzwoXTLM{4AOe$2dC;5 z7rIuT_(A{hHTFl)#Ij;~Ln%#c0B_!0_jWTjCn( zmSszqro82Wx>DD)kNo>Z|FE@XOHoSPmMmGK?B!#$?WOfU?AM09os6c2*z2zPs)zHe z{~j!o+eKzRhXi8mWs+()*NTUSKAcfG5a`!m*(XqsUzqP!Huh>)Iprt)V{P4u1KU%& z3gt7}0(rquM!rG3|BV|rro67!4=9V=i}$PMHS6C#{RahNHW--`pyt8m&6~x9@#6)? z@3i6sqpn9EGWMuQ*O%1Zx?ilE=uWKfWbFK;f7p$9=)g)ZwYIj3IUmdsh!G4QsOx%^ z#TeJ0IAMaoTCYqKxPmdHWE|c7%=)(*@6s`YM5=hRM)=X$*(sWvo5l9++eK4TlK=;e zrjv(vxx9Z&PkrJy{U^!*y>@^aclZK6fp1z`S_FJ$HXUkMB@jo-ZvJIxi@Xj+FgIO*qmndOiAyhGbp3&bVSv&+ff{HTB6v0~h{;&5Yy8cqklcZuC=XL_{X zx0=7Ke)w7qqIx8re>3gq!}Q$ZmJf{H2m5aUV_+tZaZj*US~VnlzM5~(pSZb@z+YqrJz{z=C7#@Z7jYuGJfuCyIAwaUDD>K zeEf9+n4?XgHE&SMdGINGyLsO4CFtKvS1+;t-PXVQei(<^FynUubH5vkCyK_hH|TkO zlEAtGtl3AK6fvyS=gIoL`u%4WU2AD0`53hCbW8$UF(MxzmLP0~Z{Q=vSL8GJ4nA~i zk7fJv#rn4o%XDRJ?);8+z~RO<$#PHn+@P5cGVqXX@P>!1e{XPSzBBGJaDesCJd}ZlY=bvEWc_=CJM*1! zmw^MUf99bKJY*ZZ;UVka8{C=ijJpgRVEr=>W#A#(;1LfuO1qJdNyFUQ|HmVL@whq9 z9k7!FRVHO7?P;uku1mRWHq3#n(|_66Yj(2#4g25Dx`eOgv$hGXC2N$nA~$Im?elV! z_0Rfe4y5M*t!FxFQfAVgMscvV@2g%&^UbG;ZOg`qnmNyl^?!PV;^N&x@i_-^9p$q+ ziglb`$9fon^WZ)-fEaDi1hlcgdJ)!P)k`a6lZMekv&~71&3b)2-+4x0pS5FqH!E>E z5uX9;IJYb+px8_!Xdi}$XdUN`R8IJ3&8?pQ`8R9&krhA0k*Jt*hp77VV+wB(r(oyG zX##a0Vya+2q0=W0Ywin`B#Nx-|EIidNy?w;k0>XAA8-VoN}Gc4#TtFY?*Q(=-|2m| zW#u2+uIG<0^fG8nIW2Mmx-ghssv&@cb-0Jn%AlmH<_$vr9F-E zw^fx#N53NG9pXA7jx^T1H`go?yH>v|>Wd~&444;_$_X#yygS2HE(46=iWvWix*D7S zH^32a1)KqQz#%j76D^W^v$R4sX&B+L%_1g_oQ`-m*dNG?y*XH?#&l{oPVhB+4&O_f zYE8;a+S3T<21&72%<4Ga;%S_IyE)F+(=J=E7Xy4PdD<$ikWCs!c&FajO%i9I?Z>*& z)=jqHva8}OYr0I{adBhf7z>7DbK5TW|j2?8)Ysl;A0=8 z25E(C(lCm<{82;6g`S7iklxpq? z=J;TanvHW$vTpt#`Ek3QzSO%`+1RUTKCJgCzR9sl%@s5 z!XIF}o}b+Q4Zcm6z!7i-d$)o+;1Kpr0H@rtwB&vbjCgBz0gKI`WH5w2Th!1lyJ{b9(Oxi84V0kLJ_C_hMC*G9CVW$-&} zsG0YIuC3sP9JXd({6DJyYh}Q;wW(T{1K2ZC20LK`){W_<^XEF1F;w(5d-Z}1dI@=u z1<$(0g?gqc2EBwe@iO=wHtgHDK+jZV+)ol)mz$KCw5JiSi)FyJamAau z95_%{A_ZTuMm1fcIb@#O3LDa;l@o99+)i-sKwYV>sf}fCN?|8G|7YF&-{MH{T^aPB zuDyD6*Lo>9Q1#y9x?GLVRhA(ZT8P%scj(%Rd2urM9&vi~k_^vNahyVLNn4SdG>qc* zy(|Luu%#-ffa1gOXzo(0n@gY20b&CIps3g84HKSjW+}Le^&)x+Yolbq6E?sWy|jDHds5h%F7Ag6{VBk+Bpkd`S|OV> ztT-C#D+6EGz4IGAs#2fZ2`RXmZk!T**)re>8`8zpI9R_z3R}~~=L9!oz_g?w_`fD) zChcj=VBB3d|p~1TQH3BU6&^Bj^n>#>@|86$mqAkdQilEMw|k~Bga~A_1*>O|3d6& z>|cPGvuQDih6Jvym)5`g+w|8VZKl1K4gY~HdI@=nQJ#$0f;GCp33vfFtgA)89Oe-M zSKterfj4khV(Fhhr+0h9zqz@_FBKNqIQK76WKf>}m@41y9S^w@OGJ-!i09GXx=$Q$ zt`kRguA{oCnChr`7up;3MHBT-SAL7PLEO=II^V#SbP0LtsgLI=c}CuW0kH5o#tGuf zINhd8ha-M3iG(I4^pb7wvuXeXsRv)nR8&9hCyp zl5k*fw&^~RpG9Ny{*u}^XENoM-T%kF4t`ED#wqnlT+Nhj2Pf?2nThLlEC~lbm(WW# zzEkBRd~%+Oqrq#{+;RJR`Go5Q z+IxOYJIdddPXDmUujy?2G3s;tmG_uN1A~&al8v7$CtdbQ(tC^BnpfWsV?{@IZ}4Jo zH_I}?UUlmHc>NtV`7L2zKX9O8>YXy+xo76gAs^31&8zc7eE=_b&DX^J5uXk*s;b`~ zM)4j;iu&c_1?sXrl^?{%ni?y_v3<4T)R87?Gqlp!fjwhQX0?L3_GPcS7mG51Q@VGI zouwPIG@ECm=fOAd5qt%o9VXu?z9v{p{~-jVcW8CMzfLjf5~$zux=+Y zuLAP`lsQ?1cOvHYg}D{cJWab~Rl^ev2gGYN%{Ay-!ifrbB|U}zK!ah zhmzVGd!Se3y81l(}S? zOWa=ZSDDsI?f&nj(?>4+PHV$%Vg0lIbBY7uz^`&a+eY(9^8zR5l>hxzS8?0IMt_w= z0uzktB3J&`Juk4B%K&Z%WHSfQ-!(IT$Y11&t~1GJEHe0Ohs!tG*LTIs z1HYV!CUWh+-Ti?(StmKH6C2ywvhb)R8r)qJ8SwpF)3cfU#tMT!qIS|gS$xNKa9L!L z1A9utfxj`MgB3iaxJmBKDIb017jj*{cH|%PglWCtQ!?xyV3G^D zz<17L{8_Dw;&_e9&(Hsu9o*+@^dLa%g{~(39cB%3TR=(otI25KbfcpsL(UITEw6@|%pa6ABDxUFixe@4&GmPhgCTKPNE*F4R4X~rKbQtZI(?2$*&zEHMHQU4p7)3x?uN)5cLtCLF8hDjB zzN~xQVpooq4cPa!QW<}x{uPYJp)ECY=8%sY#gzZY2>2ZVCB`YuKcRXquQ(dGi`os( zQ@JpSw6TDmC#tC)Jm|afA#U@=cpgHNNaG`vyiwl?G>$y`-EV9^Bj6SSn4f_CV@jiW z|4Mycmt*~TNjP{Xl^Ksx8Sz5AJrR0~=CaKt%`Kxov32xbNv|rjF}m9sSObANmtM*o znC^Z{<#YG(U{lintCVZRueB_GZMsJ!_zL>im3zYm*g`hJHrNPT-NJ?M!w4_}i~u9R z2rvSS03*N%FanGKBftnS0*nA7zz8q`i~u9R2rvSS03*N%FanGKBftnS0*nA7zz8q` zi~u9R2rvSS03*N%FanGKBftnS0*nA7zz8q`i~u9R2rvSS03*N%FanGKBftnS0*nA7 Uzz8q`i~u9R2rvSSfZq`KfA9c?4FCWD literal 0 HcmV?d00001 diff --git a/tests/data/images/icon.webp b/tests/data/images/icon.webp new file mode 100644 index 0000000000000000000000000000000000000000..6c4707e85824517efb288abbc3b7a2b3312f0010 GIT binary patch literal 4522 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 I000000A6UM@Bjb+ literal 0 HcmV?d00001 diff --git a/tests/test_image.h b/tests/test_image.h new file mode 100644 index 0000000000..d73717f5b7 --- /dev/null +++ b/tests/test_image.h @@ -0,0 +1,259 @@ +/*************************************************************************/ +/* test_image.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef TEST_IMAGE_H +#define TEST_IMAGE_H + +#include "core/io/file_access_pack.h" +#include "core/io/image.h" +#include "test_utils.h" + +#include "thirdparty/doctest/doctest.h" + +namespace TestImage { + +TEST_CASE("[Image] Instantiation") { + Ref image = memnew(Image(8, 4, false, Image::FORMAT_RGBA8)); + CHECK_MESSAGE( + !image->is_empty(), + "An image created with specified size and format should not be empty at first."); + CHECK_MESSAGE( + image->is_invisible(), + "A newly created image should be invisible."); + CHECK_MESSAGE( + !image->is_compressed(), + "A newly created image should not be compressed."); + CHECK(!image->has_mipmaps()); + + Ref image_copy = memnew(Image()); + CHECK_MESSAGE( + image_copy->is_empty(), + "An image created without any specified size and format be empty at first."); + image_copy->copy_internals_from(image); + + CHECK_MESSAGE( + image->get_data() == image_copy->get_data(), + "Duplicated images should have the same data."); + + PackedByteArray image_data = image->get_data(); + Ref image_from_data = memnew(Image(8, 4, false, Image::FORMAT_RGBA8, image_data)); + CHECK_MESSAGE( + image->get_data() == image_from_data->get_data(), + "An image created from data of another image should have the same data of the original image."); +} + +TEST_CASE("[Image] Saving and loading") { + Ref image = memnew(Image(4, 4, false, Image::FORMAT_RGBA8)); + const String save_path_png = OS::get_singleton()->get_cache_path().plus_file("image.png"); + const String save_path_exr = OS::get_singleton()->get_cache_path().plus_file("image.exr"); + + // Save PNG + Error err; + err = image->save_png(save_path_png); + CHECK_MESSAGE( + err == OK, + "The image should be saved successfully as a .png file."); + + // Save EXR + err = image->save_exr(save_path_exr, false); + CHECK_MESSAGE( + err == OK, + "The image should be saved successfully as an .exr file."); + + // Load using load() + Ref image_load = memnew(Image()); + err = image_load->load(save_path_png); + CHECK_MESSAGE( + err == OK, + "The image should load successfully using load()."); + CHECK_MESSAGE( + image->get_data() == image_load->get_data(), + "The loaded image should have the same data as the one that got saved."); + + // Load BMP + Ref image_bmp = memnew(Image()); + FileAccessRef f_bmp = FileAccess::open(TestUtils::get_data_path("images/icon.bmp"), FileAccess::READ, &err); + PackedByteArray data_bmp; + data_bmp.resize(f_bmp->get_len() + 1); + f_bmp->get_buffer(data_bmp.ptrw(), f_bmp->get_len()); + CHECK_MESSAGE( + image_bmp->load_bmp_from_buffer(data_bmp) == OK, + "The BMP image should load successfully."); + + // Load JPG + Ref image_jpg = memnew(Image()); + FileAccessRef f_jpg = FileAccess::open(TestUtils::get_data_path("images/icon.jpg"), FileAccess::READ, &err); + PackedByteArray data_jpg; + data_jpg.resize(f_jpg->get_len() + 1); + f_jpg->get_buffer(data_jpg.ptrw(), f_jpg->get_len()); + CHECK_MESSAGE( + image_jpg->load_jpg_from_buffer(data_jpg) == OK, + "The JPG image should load successfully."); + + // Load WEBP + Ref image_webp = memnew(Image()); + FileAccessRef f_webp = FileAccess::open(TestUtils::get_data_path("images/icon.webp"), FileAccess::READ, &err); + PackedByteArray data_webp; + data_webp.resize(f_webp->get_len() + 1); + f_webp->get_buffer(data_webp.ptrw(), f_webp->get_len()); + CHECK_MESSAGE( + image_webp->load_webp_from_buffer(data_webp) == OK, + "The WEBP image should load successfully."); + + // Load PNG + Ref image_png = memnew(Image()); + FileAccessRef f_png = FileAccess::open(TestUtils::get_data_path("images/icon.png"), FileAccess::READ, &err); + PackedByteArray data_png; + data_png.resize(f_png->get_len() + 1); + f_png->get_buffer(data_png.ptrw(), f_png->get_len()); + CHECK_MESSAGE( + image_png->load_png_from_buffer(data_png) == OK, + "The PNG image should load successfully."); + + // Load TGA + Ref image_tga = memnew(Image()); + FileAccessRef f_tga = FileAccess::open(TestUtils::get_data_path("images/icon.tga"), FileAccess::READ, &err); + PackedByteArray data_tga; + data_tga.resize(f_tga->get_len() + 1); + f_tga->get_buffer(data_tga.ptrw(), f_tga->get_len()); + CHECK_MESSAGE( + image_tga->load_tga_from_buffer(data_tga) == OK, + "The TGA image should load successfully."); +} + +TEST_CASE("[Image] Basic getters") { + Ref image = memnew(Image(8, 4, false, Image::FORMAT_LA8)); + CHECK(image->get_width() == 8); + CHECK(image->get_height() == 4); + CHECK(image->get_size() == Vector2(8, 4)); + CHECK(image->get_format() == Image::FORMAT_LA8); + CHECK(image->get_used_rect() == Rect2(0, 0, 0, 0)); + Ref image_get_rect = image->get_rect(Rect2(0, 0, 2, 1)); + CHECK(image_get_rect->get_size() == Vector2(2, 1)); +} + +TEST_CASE("[Image] Resizing") { + Ref image = memnew(Image(8, 8, false, Image::FORMAT_RGBA8)); + // Crop + image->crop(4, 4); + CHECK_MESSAGE( + image->get_size() == Vector2(4, 4), + "get_size() should return the correct size after cropping."); + image->set_pixel(0, 0, Color(1, 1, 1, 1)); + + // Resize + for (int i = 0; i < 5; i++) { + Ref image_resized = memnew(Image()); + image_resized->copy_internals_from(image); + Image::Interpolation interpolation = static_cast(i); + image_resized->resize(8, 8, interpolation); + CHECK_MESSAGE( + image_resized->get_size() == Vector2(8, 8), + "get_size() should return the correct size after resizing."); + CHECK_MESSAGE( + image_resized->get_pixel(1, 1).a > 0, + "Resizing an image should also affect its content."); + } + + // shrink_x2() + image->shrink_x2(); + CHECK_MESSAGE( + image->get_size() == Vector2(2, 2), + "get_size() should return the correct size after shrink_x2()."); + + // resize_to_po2() + Ref image_po_2 = memnew(Image(14, 28, false, Image::FORMAT_RGBA8)); + image_po_2->resize_to_po2(); + CHECK_MESSAGE( + image_po_2->get_size() == Vector2(16, 32), + "get_size() should return the correct size after resize_to_po2()."); +} + +TEST_CASE("[Image] Modifying pixels of an image") { + Ref image = memnew(Image(3, 3, false, Image::FORMAT_RGBA8)); + image->set_pixel(0, 0, Color(1, 1, 1, 1)); + CHECK_MESSAGE( + !image->is_invisible(), + "Image should not be invisible after drawing on it."); + CHECK_MESSAGE( + image->get_pixelv(Vector2(0, 0)).is_equal_approx(Color(1, 1, 1, 1)), + "Image's get_pixel() should return the same color value as the one being set with set_pixel() in the same position."); + CHECK_MESSAGE( + image->get_used_rect() == Rect2(0, 0, 1, 1), + "Image's get_used_rect should return the expected value, larger than Rect2(0, 0, 0, 0) if it's visible."); + + image->set_pixelv(Vector2(0, 0), Color(0.5, 0.5, 0.5, 0.5)); + Ref image2 = memnew(Image(3, 3, false, Image::FORMAT_RGBA8)); + + // Fill image with color + image2->fill(Color(0.5, 0.5, 0.5, 0.5)); + for (int x = 0; x < image2->get_width(); x++) { + for (int y = 0; y < image2->get_height(); y++) { + CHECK_MESSAGE( + image2->get_pixel(x, y).r > 0.49, + "fill() should colorize all pixels of the image."); + } + } + + // Blend two images together + image->blend_rect(image2, Rect2(Vector2(0, 0), image2->get_size()), Vector2(0, 0)); + CHECK_MESSAGE( + image->get_pixel(0, 0).a > 0.7, + "blend_rect() should blend the alpha values of the two images."); + CHECK_MESSAGE( + image->get_used_rect().size == image->get_size(), + "get_used_rect() should return the expected value, its Rect size should be the same as get_size() if there are no transparent pixels."); + + Ref image3 = memnew(Image(2, 2, false, Image::FORMAT_RGBA8)); + image3->set_pixel(0, 0, Color(0, 1, 0, 1)); + + //blit_rect() two images together + image->blit_rect(image3, Rect2(Vector2(0, 0), image3->get_size()), Vector2(0, 0)); + CHECK_MESSAGE( + image->get_pixel(0, 0).is_equal_approx(Color(0, 1, 0, 1)), + "blit_rect() should replace old colors and not blend them."); + CHECK_MESSAGE( + !image->get_pixel(2, 2).is_equal_approx(Color(0, 1, 0, 1)), + "blit_rect() should not affect the area of the image that is outside src_rect."); + + // Flip image + image3->flip_x(); + CHECK(image3->get_pixel(1, 0).is_equal_approx(Color(0, 1, 0, 1))); + CHECK_MESSAGE( + image3->get_pixel(0, 0).is_equal_approx(Color(0, 0, 0, 0)), + "flip_x() should not leave old pixels behind."); + image3->flip_y(); + CHECK(image3->get_pixel(1, 1).is_equal_approx(Color(0, 1, 0, 1))); + CHECK_MESSAGE( + image3->get_pixel(1, 0).is_equal_approx(Color(0, 0, 0, 0)), + "flip_y() should not leave old pixels behind."); +} +} // namespace TestImage +#endif // TEST_IMAGE_H diff --git a/tests/test_main.cpp b/tests/test_main.cpp index 5c635de25c..2697eb6399 100644 --- a/tests/test_main.cpp +++ b/tests/test_main.cpp @@ -46,6 +46,7 @@ #include "test_geometry_2d.h" #include "test_gradient.h" #include "test_gui.h" +#include "test_image.h" #include "test_json.h" #include "test_list.h" #include "test_local_vector.h"