From bb7e083745b52f74c79b4b6ecca36c25238f767e Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Tue, 24 May 2022 14:34:13 +0200 Subject: [PATCH] Add Hidden Worksheet unit tests for other Readers --- docs/references/features-cross-reference.md | 22 ++++++- .../Reader/Ods/HiddenWorksheetTest.php | 1 - .../Reader/Xls/HiddenWorksheetTest.php | 56 ++++++++++++++++++ .../Reader/Xlsx/HiddenWorksheetTest.php | 56 ++++++++++++++++++ tests/data/Reader/XLS/HiddenSheet.xls | Bin 0 -> 25600 bytes tests/data/Reader/XLSX/HiddenSheet.xlsx | Bin 0 -> 8650 bytes 6 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 tests/PhpSpreadsheetTests/Reader/Xls/HiddenWorksheetTest.php create mode 100644 tests/PhpSpreadsheetTests/Reader/Xlsx/HiddenWorksheetTest.php create mode 100644 tests/data/Reader/XLS/HiddenSheet.xls create mode 100644 tests/data/Reader/XLSX/HiddenSheet.xlsx diff --git a/docs/references/features-cross-reference.md b/docs/references/features-cross-reference.md index 399be82e..d18c0969 100644 --- a/docs/references/features-cross-reference.md +++ b/docs/references/features-cross-reference.md @@ -16,7 +16,7 @@ XLS XLSX - Excel2003XML + XML (Excel2003XML) Ods Gnumeric CSV @@ -732,12 +732,32 @@ + + Hidden Worksheets + ✔ + ✔ + + ✔ + ✔ + N/A + + + + + + + + + + + Coloured Tabs + N/A diff --git a/tests/PhpSpreadsheetTests/Reader/Ods/HiddenWorksheetTest.php b/tests/PhpSpreadsheetTests/Reader/Ods/HiddenWorksheetTest.php index 9edaa9b7..c02c8771 100644 --- a/tests/PhpSpreadsheetTests/Reader/Ods/HiddenWorksheetTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Ods/HiddenWorksheetTest.php @@ -32,7 +32,6 @@ class HiddenWorksheetTest extends TestCase $sheetAssertions = $assertions[$worksheet->getTitle()]; foreach ($sheetAssertions as $test => $expectedResult) { - $testMethodName = 'get' . ucfirst($test); $actualResult = $worksheet->getSheetState(); self::assertSame( $expectedResult, diff --git a/tests/PhpSpreadsheetTests/Reader/Xls/HiddenWorksheetTest.php b/tests/PhpSpreadsheetTests/Reader/Xls/HiddenWorksheetTest.php new file mode 100644 index 00000000..82fd6e12 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Reader/Xls/HiddenWorksheetTest.php @@ -0,0 +1,56 @@ +spreadsheet = $reader->load($filename); + } + + public function testPageSetup(): void + { + $assertions = $this->worksheetAssertions(); + + foreach ($this->spreadsheet->getAllSheets() as $worksheet) { + if (!array_key_exists($worksheet->getTitle(), $assertions)) { + continue; + } + + $sheetAssertions = $assertions[$worksheet->getTitle()]; + foreach ($sheetAssertions as $test => $expectedResult) { + $actualResult = $worksheet->getSheetState(); + self::assertSame( + $expectedResult, + $actualResult, + "Failed asserting sheet state {$expectedResult} for Worksheet '{$worksheet->getTitle()}' {$test}" + ); + } + } + } + + private function worksheetAssertions(): array + { + return [ + 'Sheet1' => [ + 'sheetState' => Worksheet::SHEETSTATE_VISIBLE, + ], + 'Sheet2' => [ + 'sheetState' => Worksheet::SHEETSTATE_HIDDEN, + ], + ]; + } +} diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/HiddenWorksheetTest.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/HiddenWorksheetTest.php new file mode 100644 index 00000000..130d76a6 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/HiddenWorksheetTest.php @@ -0,0 +1,56 @@ +spreadsheet = $reader->load($filename); + } + + public function testPageSetup(): void + { + $assertions = $this->worksheetAssertions(); + + foreach ($this->spreadsheet->getAllSheets() as $worksheet) { + if (!array_key_exists($worksheet->getTitle(), $assertions)) { + continue; + } + + $sheetAssertions = $assertions[$worksheet->getTitle()]; + foreach ($sheetAssertions as $test => $expectedResult) { + $actualResult = $worksheet->getSheetState(); + self::assertSame( + $expectedResult, + $actualResult, + "Failed asserting sheet state {$expectedResult} for Worksheet '{$worksheet->getTitle()}' {$test}" + ); + } + } + } + + private function worksheetAssertions(): array + { + return [ + 'Sheet1' => [ + 'sheetState' => Worksheet::SHEETSTATE_VISIBLE, + ], + 'Sheet2' => [ + 'sheetState' => Worksheet::SHEETSTATE_HIDDEN, + ], + ]; + } +} diff --git a/tests/data/Reader/XLS/HiddenSheet.xls b/tests/data/Reader/XLS/HiddenSheet.xls new file mode 100644 index 0000000000000000000000000000000000000000..39ced197d14fdf80347adf4c7b0a6b5fb4e1c12b GIT binary patch literal 25600 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 ahCex;1z$4Z7Wg)O`uq#^$6HJV^8X2WP4(;m literal 0 HcmV?d00001 diff --git a/tests/data/Reader/XLSX/HiddenSheet.xlsx b/tests/data/Reader/XLSX/HiddenSheet.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6d1d56a29c3b2f2dc0b1a2167062d1b3cb26b3a0 GIT binary patch literal 8650 zcmeHMWmH_rwr(K7Nr2!I2=3AZ2^t(4YusIfyF0-lKm)-E5InfMTOc?D_jGVguwbt< zbLVD;nfv?wxVL((Q|p{Md#~!Vzb*A`unfWj8~`E!82|u01CZSDlB>W00I?4MfF}TC zcx_QTTW3>SXMGh9ds8P}7IzzK@|*|obXfp+*!%w*|HWURM`g∈f%6eMgAAEKv?3 zs;cVXxV16+HP#mp>=G3SS4kyz+h%pbqhec37w5?i+#C7C!WUJL_PL5v?D?{)x5gtL zgn||>TgBs;ORM7!LYnQGnq}eMdVg=;##X}7dbn7{y6y;W`e4atV9qfRlMg_Wwl=0z z_B$~?g;Z?<8s_`XRXw^x>;{$GM?ngGqu`-Lxjj?S1wLvlCdacHw7muf7SRfck7A(S z`E4?$-puUWPb5LnDDINLhAq=Ad0*Pu%~oZrobe7bU_SR81ii9yeW)K=a6WYMTq*{n zKO+%vW;v~d1VYEk?L#E5t@~s(2ikblq;Rxpfa5`^rzxebk0_|zzxB?UDwPlO(#wMp z_=zmocwVc+O5YDrpjXz3BT|t31zp$W9#W+9oH#jo*vF1>DxYpw6RLAv9Tw-?&skm# z;=T$rD=-}0-5~(Le{sfIRW{1+uoYRDuc5)5QQy(j+KH9r=kln>GWBOB*=r#wKay}LqlP<%*Pc< ziOFNJO3YCfbt04}c_blt0x1DneR7)1Mi*sp(;~|Ir6Cpd+*v#EqiKFKZ}Yb?gu-6P z?oFiN4mcT^&y{%(SU)?xBvMtjc=4*jDASRb!b9K0y5pNzTKkh5Z)W-Q0VRs(*cZT2 z$$sjrQ$MYm=f^`C9zEPB-5&;yJ_bgT6)wZ_(%+qAJG+df0OlZv4*`J3urK3o&FW_7 zXk}z)XZ15%<*I1g&9mY7zN@)2xXkzp{~D81g&B-nv;f|o7ZgjCwGLCK9kE6#EWSM_ zMS{2S*!~>W(=Ygyul_K7vRaO1EP{U66wCOqr#B3@D7QtU?_zV`l(9#OSP4vF(rI+v z^IVYF`^K^9?T!NrloH-wq@RZ)KZ-=MfN&^WFpiq>WpykAEn=PJ_LdU6h)ZAc$KZ`- z+tn|x@!caai((80dIJlrsU{iBgXaS2Xu{ymUHW8}vY^|NtByHOKU5_Swmb-XfxpN< zokakB^;{EADX!7Kf?E&Y2Im^yT|i2S)a60Hq?uzTLlLwq9Z*v3azW=h>cW30cagSn zArvy@fTQi8-QKFsaG_8hD4=E!__nCFukq1gINip$9eU!MK@hqv7*D zf!RS$FQ=^Hlbm(<8sGZ;+DeYuYP(`gQ#2(MC$tu;)qnxvvGe9LnyF(Qf_zk?Suh@= zMK$BHIlYqcV-A$pV%&QQy|_Vw0MN^lBkEUTUp+yxAq><;{85l1NV}$`Gq5%FwlKvy zZ!Vh^dr(bw0LUH-mjO1Cazv2pRyna3@RHIyenax)nk-pTDUBEjQjKB2*sg%nlbsWy ztNb2wAby-P!Ae36%)f=uWYvqJLVJD6k2(_CdR#cObH;M5*58h={JSq zWw_uKK&OJ42T`F}!0IyUYe1M5Qu3iplh|lf?A`9Xt#0Z#8-5{qrHpZ zvWI7L;2{hpLZ00H&hF{itUEL4B`=4#xck5m|NZ_P?#2*0{~3Jwlg~xorrA#&42tv= z6~B3#^=BegPnB_Ll79#b%A%R7MwYCpY0ADWAAq>{piA@ zH7Fv+nn9C0UezhzZ^%-%Z$``RVHAnU~jWjji?E-6YCM>f& zYK%#b?q!;m2|~X+171p4VA}zBdD0MnB7|4$_LwJ0ii{7+oU;DT)YkSZG!xh}NxtcF zo2h)e9NgB>umdyi-*Iw2XU{YavppID06+kH<6p7Q$->ms*@^YHiT!5~jDpD7b^Xi| z@n>W?i?2|P(HT%vUyn7&UGW!$%TPiZKwbWRLiM;4R4mP64kSWnS2RPXbDC!e&xpQL zlbOFTU&XcDIH$h5o_+H*y_c%>EuKKaHGEvT`nlWClMqpB05)Y{47Ht-CEBwb%Z`u9 zhG>~UPDI)#!G^3x#4mT+1~l0}eoL{Ra2LdkI3h#*T&q|i?BcvS2|zJ0&ABu-o_EiC zaY~jRzh-YOiK;6THmDKLB9OpQ5V5pu9GghJw0W#j%-H+k_2YKqqJ&O|pqNkP{iuiIZVV)KpKx6b0re!LZm9 z>foB|Yiu3J4_B@q&`a^TUc#axYFC){e}I7qkNU_*7!0mp;o?8Q0Qd(Cy2*cs0p@u~ z%}^5;NK3A`_>@cTibvTVTcralHt*(~GMqtfCl9})>Spyk*vN}3^*Znys*UufGzdi_ zKxwWiSO4ABTm&{*L!!?6V2EDFS!n%7+BpCS>_&r#|OjPpgz z-NUj!q}Y+#zu+Pq#(ULd62d4$D{^pPXrM|D$A^;vM@$ojFf5wB!d-l-o{Dw8itbiW zmVxrzMvNp;Z4D?w&rTsUg-0s1Q+UNc+R#wdzlvy=V82y~D&150YD|0Bs?IE~hCVj} z6>%Xvs5rOWX^^YeVx&HB`HnBXbC+`cl@y7I^kjCz($s-u`3h+q_*g#l@!rbIX}Pe+ zY1BhJH{=vaNu=&rOOaVr#9(-r7S^(!!Zm!c<7@tdR!BDeHm@ds-kjskOnO$<1ywbl@d@wF7yJ8z+OJUXOw#wi6B3(q85cU_BauYD7qE(;!5i5 z%8l+Sk+9$`r32Du^CyOx?0iqxy(Z4-u(5qDE~#%e@#|Uf#?@%Vpop5Hwpn+;Mp*-I zjd7=w?M}-Ha^xT_uRMK(LY@B8-5ag;x`_ffi|2uf`E|3ryNR~3h8W-<)7j1HhpIz( z%VYYw)s3XZF~KugDt;9qWav$+;%Mc<^nyCwp&4cc=DRalIQrV%Gcx;n;QH@YU@>XO zh7gwET1&Uad0dmOtv64W(Sw9rA@rk)u^1orl$2#PD7c|oQ3pUlfIqwvmGt_@UUY>q z2C>qayHU?a*}7}S ztZ8m?)=UAf+oSDoq3r^G-?uKi^{X0d8DwmcsFjrurepN)Zf@|G_1kZcc8qNVo2u~NJx{9o`qK)m8}^c(nJ~tJi0oD z6Uyje6X}7x#M*K#JQx~)*V887>2j&q?^+d?`VeWvVE{I|yN=J2sNs{5rDzoC zhi1_*=!^hxUA7|p`vGQoP}n53sG|Y35=)J!QP@zIDf#R9li_8X^6o;bX#sB&N<-K_ z*nGo^pnXFYEQ)(dFT~h6N!ub#z5pHlIwfh!SgFK3Bj~^VFlKr!^OZOBlt{Q86@BB; z)l=ObE{Kfd)ufZb-)UYJGSK5o^XQp)oLi7IzIV(VpO}Cs3Al=Vu^y$a z>&A?t;o%p{)CAhFAEqOul`T;ztz`JlffbRa^Za$QwZq{Ye7xU^66c!)73Ovhf$n&8;aDrV zmqcPqAYC44x{7DUn@4i1obXVxFOies2*unM{g&OT^} z(KCOoHVl5l{cvf1F`xfifC`O9 zjl_-|JJFA^ti&m38vKpIco%*&^tkaYt;VoYKb6QEqT0l+Luh za5H>Mh+h>dmcXkMFF%OL9+&Ku(8H|H?3ak~e4Hf5hEd%gQ&4Lo^(7-&nggaY-+()? zlk!!_5`ki-JXye+a+&>YaqkLg3Dq1)S1Va`Oe+HKCO1~Dh6XDm(wlJq$RNj^VfKKu z3fws8rQ5o}pv6o}#Ken)HF_;4aRRmG5Jdn3>6SZ2l2_y~L21JtrM|9ehJy(iU15sr!p22{N8q@OR%jsOla|X%rd?3R#gD84fYUJ?6L)=8-ao@~umNQr4#tX%l-2))U%U2Wy-jD% z+u;z4Jmac%FiX?M)iT(uR)Fq7tNi=1z0bVCdZpTj7@kWN<0Sk?t&|v#=BI7JyWFU? zj`iBemei)c?==gN5H{^`Q22gq*lQzJ)Wpmx#KN1iq4csxQu*wS&5dgsW zJ^ea4dsv$~{Z2pVS}m~Q_>k=hA-6VHE%C?%?pHnM#HnMqK=M+xet|VD8T(~qZq{!l zalhwLuuY9eSlOE|PNO$Uo|B+}%#=!<59pHW&m?3Mo7OFp*6d=$D>?>viy0Vdj0gpR zk#;BNhf2F|0tNO6osj7ghL4sTyCX2Q4^nc^KxD~*@mj>vq}Ic4W`hiCs%|OirAR`Y zDCpH2%r!oq_(@T5DhxlPtK|px*X!83?KQALpgX<=HQCy5N(&YeGE)*xPu}r6kD<{* zk|eZsn;FTeo60;s>RIYSsI#F14{FMdBe1did{#ZQte{K`F7HWl$!1%(rsF4sRMukn zXIBQ5ubv1f!%4lC&U~w75%kG6Z7m16`CTY(VoAHJ%)=F;gU(bC%Nqd_FMs#;Zlkqy zGzT>-uTa1jda7CW_o%a3oxc1}$!k$PvkSHlZZ^(F#*A@j;~z_HvMJQhtBiRWU(?bl zJp4e4%;{Z!{$Ud7V#RVZOUy&dp=mM#l?z9bto4eeZeuJN#+EegqPpO62Y6x%Fkw7mC&~Ypl?AIEIrjnwA zaZ0^Dxs8e=ujX0y=f1w3x^&o{a5+P3EYgr8UVAzkO89htv}8T{btRFl4|H_i1qb#( zq0M!C@yej|$|QTuKs68G>~}71`1z#VeBaX@%p& zj?DzMSE$8-LN1fg4dz?tNzis`aY$pi-Grjhno36!S`u z3D?OZXs?YimD8<-s|JU!0bhqSiI4%x8{H~zFCwMI zj>=~O;?73VT7eFOgBdl4&Tsfk(FDWZUs-$@pRKc*%J)Hk_ilCg2eh=DNUeAQ7fHn= zP}$bMu@A?}>`^C#w8O+5c%Y`ivHRI~VF9)0#2MP6Do|a{<}ds}5QmgOCn4thcB4)< zMR+__)TSZiEmfY0#N!wf!@x+0@kDVhw#EGD5;(Qq&j&#SZN z8p*BPnU6CMo4+}g#a5hH>IQkGrJR31G3DPms5sX|L(xSKPL_9!6RxOqHq;Iq{;>%y z9f*~si;jUqb$Ec|_M<;oD}VMS1yZtuSck}z*su<$hI0=?UgJ@T3j02WLs}hBEwTCt zbHD#7{722q6)7If*VuzYUvcO{dOT$Ah_xgZj@Nd7%(7Leoy%=xaQ65W`MpS^=!>Z8 z4|-VsMMFil9{wthgw&<%OM@z-6+aV?hI$_*-K79n!JsLRIa;PrRpuKWQ*T1{)v#4s z_}&t^Gf%LEoFfgUu}fX{w$%zb^$p(SBP)Oi^&A`emE#`i%z@UZCj$OvABzFNaE-)a ze*mFPMJ9erzek|EgKxEjw{1K5P;6cXVT7P{1yS_+c+MQ(wc*w0<4#QP(o^q3wOVQL ziA?%uU!p?VWs4KtfgCPFG-%SMT{d6f%-Y21cQc4S^t$bR3S@=5ROsKy9}b=w@Si&7 zf0*iz`5*e{V41%v_-mK%55b>vG|V6V)bqP9c)#=UOSB4Birnji+!y{U#r#VY00=?( zP53_$&iD1)ryzf6DntACCjLf9-q&)U!TP187FJUI1FiWRpLJi$eIn$SmKs=R2&Uye zEplJM{Zj6i0uC762UGB?u)8n%*97`Y5CFI!1OWb)PVbBVH3a@y+=b*%;{OVWV3~(7 S3j+YCu-|J~#%3e?dG~*7g!9V) literal 0 HcmV?d00001