From ded11af5fb85f528ee510891b7abd8b5676568c2 Mon Sep 17 00:00:00 2001 From: tastytea Date: Sat, 29 May 2021 23:35:39 +0200 Subject: [PATCH] Add tests for EPUB files. --- tests/CMakeLists.txt | 2 + tests/test.epub2 | Bin 0 -> 1855 bytes tests/test.epub3 | Bin 0 -> 1861 bytes tests/test_search_epub.cpp | 166 +++++++++++++++++++++++++++++++++++++ tests/test_search_zip.cpp | 2 +- 5 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 tests/test.epub2 create mode 100644 tests/test.epub3 create mode 100644 tests/test_search_epub.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1f897e9..febd11f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -2,6 +2,8 @@ include(CTest) file(GLOB sources_tests test_*.cpp) file(COPY "test.zip" DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +file(COPY "test.epub2" DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +file(COPY "test.epub3" DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) find_package(Catch2 CONFIG) diff --git a/tests/test.epub2 b/tests/test.epub2 new file mode 100644 index 0000000000000000000000000000000000000000..2b3d73492348e06b3e6f024380e3017705ac3880 GIT binary patch literal 1855 zcmWIWW@Zs#VBlb2$lkm+C_izv4v@zH!ayO0+|1n6lFEYA#DapH%;dz9%=|q4)Pm9^ z?W)Xz0H{t5hNGMI2AvR-)Qx0hV3^Frz`zdFS(2ZumzP{oI>|TxkO5EI`#)V8;@h01 zqu7|I97?=i>-pHuviG;*R?n%s0=~Vz&Xk%VZGOD&-t|7=otdYb-d?!6)AXXn2leDO zwQW}BnI?G}AH^P@ty1y5v#HOd^oa4IEY%}*`@fq$`Fe1>o@o5#r%8H;PNt|?g?#8% zeP0}Rp!(~ohI3Q1pS%`KHgdjDd!bcT$beb3EHr4f+Vwd{uL(%KGBRE|jj`q4pTb=q zj;~wf7xHj{h*rjdJrWDS1^X?h`XLSYj-rmy| zRJ4oC&q;o9Dxt_b(CPN)^}Z`F{1x>ueB+iSonNf=;f?c+OI6*b8;@AEg)Rz+K$Py^wrIh z<$h$YbAEf`)^6pv??U^}uF%mtEpS+6d1t#~>i^Pfi}Mko4~n;(_&vdYfuTMT7z5lu zy0|2A^m(tm3JRaWbJOZM>xNoB4+$NM>nCr2kJ+9z zebM9zeecC<_nl|7GZ3Gj6mI@$CtHuRRPCP9uU?m5Znc~3Wt}A9ocyvyIqKe&Tibl| z^o^d*&bqZN^t-IGLPQ!@&!G?>XX{y94wIKRJnL#r@RBTu{2hJFb@k(gmtHl5?ec%z zod0acGldtMZgAASaVaw7Jj@jJ*7~!1`@u60cUr|a9A`58Y4Wone%g}{H>O+_cADi7 zT_Cx9alk{j)B?q`-6?MwMQ=LsJFTwsY5BQzv)iHHrylAYnUXG@U|!X9vyWr8`gZr9 z?_+X4)Vl3tzxHakLHL9J#`6)OWCRSQ$ODE|M!@trjfH`M2b8)~OA=EOOA__+3({Jr z+|IiVN~pg@n)KRuTWhjzsmyzP?=9!9)rlM>3xpN7Ejjh+R?>~#{S$?69|#jM$dNtq zUS0Fl)yLV_C&fRg&OO`r%+rmNQF-m9XB!sZpTBP-Z|$0Vt>aHSibse1R+zS#DN7@gO*U%9{000=HqL91K60>m^`*>w zqp5Ng4$>@B?rqz!xQ4^TPx>y?fR%wWRy?nOWTef2%8x*c_`0SadaJ zX4GBojb|$l%3Uj$-WJ4bP#Dgk#=SGpa)sN6z+^W)r)_E#x^3Avg6B-y9#yfRJLSm9 zi@!Gc+1*$F={%`k(f(ZNn~f8u%d#E16|9u|z4%N{*o@SVcNU!cq?7)!^3*0HyX_xk z|1LWDO(eU%YF6g_&P0LBs$&oU|96VwA-TMIi=f!ZkyiMIwAir zep&Hi!NcNPgwB7>_`C1wvn}s;EPgUab=TV$@BPm=^Tw}lw?5}(RCoNl{H%TceY#uU zujS`{VSm?LXw{c0_G8=!d-E=QV!F;~RrIA{?LGE)&Y!AyVy(^mV-_r7UTVpm|L)GJ zb6cZ6HB8s(owmIqe3^&%hJ@6lC$BlWn#&D+SR2KRIhEsBBER}cD{#m-a_fdT{ge4~ z)wb%$L&o3o1zWxJ|IhgKOdpZ9K;@r)|MFuqfobX;5Q_n^uWN{-uBV@yesX?ZNn&PR zYLQ+=Zcb?5LB2x@0xs|Wavi$5<;7Ho-@4j&wFD!Wq8HceXHH%wS6-HOZ^ldE=8EK% z^CnH*{!nZAM&mxAX8(wP@rz~#Z!OaG6b^|mZR!Z!e0hrD*(cXJI=`k}cJGw2R&3F9 z+4G~J)cSl^#5I9mJb$(rDIMnFVSeh`)v>vK-hRooEpwX759IbK?RkDn=p8Hn9+PBzp6~~FGct)VdE`m4FUo2lD_XcLpH< literal 0 HcmV?d00001 diff --git a/tests/test.epub3 b/tests/test.epub3 new file mode 100644 index 0000000000000000000000000000000000000000..f2df1dbe264e5bb44a6e54e270b50d9a17bcaa9f GIT binary patch literal 1861 zcmWIWW@Zs#VBlb2n6!CsP=4ZS9UzYZgn>c~xtY1CC6xuKi3J5YnaPPInfZD8sRgA; z+Etka0Z^SBV4e3QEBizk85nj0F*i_WaYt%av zKYXq0!r?sY@2nY*MO2tL<}9oIZFzQCZo8tl$FtA>f4j@(EpFF-_9*GatK7@i8Xn42 zi|fVOUffW*ntxZ&G>K%BDSi=)woEUY_dKmGGil$6w|UzqZ*LXU-g4Yz?!O7^{0}$R z=G_jL3>JLATg}1a6rR(t?7C=!lDphjLGFVB#yU>Zdpu8mT^Lm4s$JUkcW(Z?jkil3 zrlv6M*e86kO~Zs+W9OGI`m$}6ZLc$88TFWt9G-o!vL<5E(XGL1?i_^-sRzvv1m!^c)f z_-)R3%UIN$SH&c>;p`NKW>M>%wW*U&Zb?<%_pJ7%_ndd(=hJ4Zi#M;~D-AZ3*1NdF z;KZx8zyB6nt(+?{(ZK1j%Fm7&Rt>3hvdH+si<9{qsy%Wwa*m#BS}{(a5l zy};!oGp}!HzP+Jx*YqH3H~*fn*`MyJSbYhreRY#pN^^C?B~1g7T^+?H{pt2EX08pi zs!`FlJa*bF&gDPLo?xfVhPUHBah4w2HD}?zFhvJ##v^OwB7B)LRHoK9Ywp?k>W^=D z?>Px+m3rM@xgr6F0uyd6s$)O|1}F_qV>f##YkW3bGx z=KsTo2PZE&x7X|aUk#3={i}+5qEz2UDFihb8BJdhd}mwG9k0gaAr&uKEp|I(L^myL zlDbu_-sJzKbTzlT?hby|Dbv<{bk_g!v0>}YxQmxkH(0Xx_n5FMXa?n^rdVh2oYL-H zkasiAdGA;EGct!v1CkAE1vm@SGLq-<1hmU-OaBwIfm<^B+%8w8brQE*Oq8yFEb;Ls%Yf_tM{?#i=x6!Gd@pADo;9M zbG2dfBrok1&HGi2rkhPLOJDmzzkQMFk_w&HZO;N;-ga8`IM*|~XV9 z%<_w>f1{gzrPu%O{rmh%Wb@n?mqQsPO#d*%zMGUaFGIuXaOByrL#Li74f z4_=&gy7AFx_q^w`T6p&Uu`fHumFF(+R8ZT`sd@ zMN}?YMIO7K{;ck*?~J-T0jkB-Pn?4?7r3ymwm90m@K!}Xd$8Dzzp3w--BdX|=N=F8 zdA)1G94YHVHSK%0OwO`k9lL$(5I--J9`JxVa*E<-AE# zw?EWczR|c(sM$Z_U;Lt(!CQ-TJ%vN!OPe}EH(#D&c=pM)j?S-Xm)$#MtQA`{UH1HF zD78M{6>&}A7tfz9MoNcyc$lBMc6DrSpSNFfZOfeI@&mbjN_(E)5_-qVzsF==h_%aH z4L4cgvM2lj-i%Bl%(yE9ppU>{Nh64YRSgJT*ee2v9tMUbjaEP=Qni4r5nCaM&{z&E w7U4xAvNmkR1wva3un<8mJdkx_i!OvtJ7Cd+J@Nv)S=m79Sb + +#include +#include +#include +#include + +SCENARIO("Searching EPUB files works") +{ + GIVEN("Our test EPUB2 file") + { + fs::path epubfile{"test.epub2"}; + std::setlocale(LC_CTYPE, + ""); // Needed for utf-8 support in libarchive. + bool exception{false}; + + REQUIRE(fs::exists(epubfile)); + + SECTION("search() doesn't fail and returns the right lines") + { + std::vector matches; + epubgrep::search::settings opts; + + WHEN(R"(We search for ‘test-\w+’ using perl regular expressions)") + { + try + { + opts.regex = epubgrep::options::regex_kind::perl; + matches = epubgrep::search::search(epubfile, R"(test-\w+)", + opts); + } + catch (const std::exception &) + { + exception = true; + } + + THEN("No exception is thrown") + AND_THEN("It returns the match correctly") + { + REQUIRE_FALSE(exception); + REQUIRE(matches.at(0).filepath == "start.xhtml"); + REQUIRE(matches.at(0).text == "test-file"); + REQUIRE(matches.at(1).text == "test-suite"); + REQUIRE(matches.at(1).headline == "Test for epubgrep"); + } + } + + WHEN("We search for ‘href’ with raw = 1 and context = 1.") + { + try + { + opts.raw = 1; + opts.context = 1; + matches = epubgrep::search::search(epubfile, "href", opts); + } + catch (const std::exception &) + { + exception = true; + } + + THEN("No exception is thrown") + AND_THEN("It returns the match correctly") + { + REQUIRE_FALSE(exception); + REQUIRE(matches.at(0).filepath == "start.xhtml"); + REQUIRE(matches.at(0).context.first == "epubgrep. Just)"); + REQUIRE(matches.at(1).filepath == "metadata.opf"); + REQUIRE(matches.at(1).context.first == " matches; + epubgrep::search::settings opts; + + WHEN(R"(We search for ‘test-\w+’ using perl regular expressions)") + { + try + { + opts.regex = epubgrep::options::regex_kind::perl; + matches = epubgrep::search::search(epubfile, R"(test-\w+)", + opts); + } + catch (const std::exception &) + { + exception = true; + } + + THEN("No exception is thrown") + AND_THEN("It returns the match correctly") + { + REQUIRE_FALSE(exception); + REQUIRE(matches.at(0).filepath == "start.xhtml"); + REQUIRE(matches.at(0).text == "test-file"); + REQUIRE(matches.at(1).text == "test-suite"); + REQUIRE(matches.at(1).headline == "Test for epubgrep"); + } + } + + WHEN("We search for ‘href’ with raw = 1 and context = 1.") + { + try + { + opts.raw = 1; + opts.context = 1; + matches = epubgrep::search::search(epubfile, "href", opts); + } + catch (const std::exception &) + { + exception = true; + } + + THEN("No exception is thrown") + AND_THEN("It returns the match correctly") + { + REQUIRE_FALSE(exception); + REQUIRE(matches.at(0).filepath == "start.xhtml"); + REQUIRE(matches.at(0).context.first == "epubgrep. Just)"); + REQUIRE(matches.at(1).filepath == "nav.xhtml"); + REQUIRE(matches.at(1).context.first == "
  • Start
  • )") + + "\n "); + REQUIRE(matches.at(2).filepath == "metadata.opf"); + REQUIRE(matches.at(2).context.first == " #include -SCENARIO("Searching works") +SCENARIO("Searching ZIP files works") { GIVEN("Our test zip file") {