From 915de5b4db06ad3853d58e2fab5035efbdf6dccc Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 8 Mar 2024 15:14:44 +0100 Subject: [PATCH] Tests: add tests for ProjectFile --- data/tests/ProjectTest.FCStd | Bin 0 -> 8092 bytes tests/src/App/CMakeLists.txt | 3 + tests/src/App/ProjectFile.cpp | 107 ++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 data/tests/ProjectTest.FCStd create mode 100644 tests/src/App/ProjectFile.cpp diff --git a/data/tests/ProjectTest.FCStd b/data/tests/ProjectTest.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..b526d955e755a4b083a2e05ecfa646cd3caeefe1 GIT binary patch literal 8092 zcmZ{Jbxa)4*X7_&aVt`wXmNLn6ff>FIK>7i0~Bv@C=5OncXxL!?(XhR(P1dI{dTk2 z@B1bDB=_aMoaFs+UUJU8>dHvSL;wH)9pGVRtFMi&GMI}80Pv*)0NDSsvd)(7AZsT# z4o{Hdxrq;WRe<1CG7GV2g6}wrI={Hc;c%dFPp*Rfflc)DOv}|2fmKb80yO{WXxy(T zt<8B#%>(O4A{_8h)4y+c$_|7v*>6#^L_=bH@$&3sp8NK!ITUo>p<6cM5L^)<&R>4o zvG~DR_qhG#aaFJFdzm&chaPRW_nG=+Ibj~r2uR*Sme+E~zMf%t4uds{1Q8JW88&1% z@YPY(S5rk{V@Ythz40#AEvsTBw&k=%gfM~Ir#2sv6Db(nPL>vB=IX58tZhwD~@R_*)Ao=zpy4wAAbgcsS~334XRStXsCV zO>HkRdoSL*oY}n;{^lG7KUU=&<)(p}Z5O?DdYqWc!L}E>X5lww35s}VbK-l85~KSV zslG|r8e+}hk&j=^6aI6#5n0Bvkl-iW1#vNPPwmu3I>ZHwHwwc8X}WFem1XC#;b9AU zTx#wG8^z3qpN`YZMpU&{r{~nX6yK^?BZF*GXZncZNlz@<;#(DK8kCb~)g8+A(9e)r2^P zz{Ob7NBL7XLnSoq1m?rMM@t|k2X<$CM>E;2G(G9jQzVodhivMEZ^gb&xI%@Auwo|J zqGP5)tred?28(x{e&Y0@16Rc8QPt}c9`*f7 zHHMzpgEh9htIj_PV^D=%tmO%Y>c}1Fc*_T&Bv(~GO%tg_p*)Qn-p2_E^12&bH#di1N6Qx4p7{WCXF=a=cXsg-tGVlIC@y!T9;4XzXaYO*V~Dc5MyC zOA+(OPT4?&PUu>7Ih^^zDbMY5xfKWhYi+|2CAfsJ_Jv;QPE z-}HfHDrZFhiX!uXNgcPXOLgkFi$F8sCJ_qP{^K9*{lPzosyX*}r9a)iS&;Er-Z(@_ zrMjCj{#|6m&#Ccq6B=NwCe>a|0r~g~9OI11fKPHar{LlCcwu9;;9|9dYN1i76XG9Q zwT5rb+B}m?&8<_nF_kT^AGneZP~S&&_z>oO*CfEeiIbRq>3?8W5x4M6?ta2sNB4R^ zpMOH3Lj>DwRkWQ$9aFw0f)~*dO@NtNBVukbwiA_JLQbaJ<7Bp)swI+bt*GLY4C+q* zz5>6C)PvCUQDJc;v_5uklhB?Dp`$s`7);C+>Do{u63v7V#c8WvKB!UhA|EJOIlTBd ziXJ~!s!f@%r+5o2!$(AYBMZ6|8IuWhDMe0*k2w&dA7gBGJ^lYmwFaxMLHh zl#~F9-JYo(=P_1oX9-pA@2CC5OpuGe>YUe0up~KLgEmNl&p^ys$XU5W+m2y_D1;gK zN@&qif<6eUgGL6i+BX%{i{jwe3y5a4F3c&=uSe&)pV}+WM7Q-NKubjZWgJB5g$d#V zNkdO51f`l-3QVfcu(8@W$YX+0S>?^t0>{5+&8=uC!RwSpkkci&iV;|>g~Su(^X{MP zo_8%fQPEq8zX>tI((2QyKlb(&n_SP*f)k&b*@@)^$h^kT4<}O`o+30lR@NGW!YdPC zL^B>L>5O~#qC)q)!^<=^S2D*A>D7(TCKeS{UE@LCE{*MqCTXyAZ7~MuGq|AS&pQ1_ z?nFneOHySwJv~1{!b6oOf?PQBq%+qz7TY8iH(gmBko-D4F zxk9~yQdUP=87+3*E-acL?d3Tw_^c#()L_v4^XSIb(UHa4FP-de47F(&H;D_H`!|!1 z;wc1}S7d&#gCj8i_Gr-Uf zZYW&O@?;!;RyUrp-w+`O_=>)aInw?Kj|I;MyT%8UqdXi}V^9P!<@wz}xl;O;d!#QfenPiZkv?)zMQM<}+` zM2wb@?+~2<`ovDe6IB#PXh+Xw(P+?g7$3g!sZSQ=X!>s3t({8>Q))%U8)ETM5qit6 z0tYE8x}sIX^5CeT$0TCPOxcMz_)qRr5!Fg7f1mfz@&~Q;AQ=*&u9h^GpL1u*H2Bil z=H?I11){R$J4H8|UUn$@w6jSx<=ScIjSJc*>=xBuB?2`H+};{CvDAXF#I&|j>ctDY zdAZk(x5zIcT#5e@$&Os~C#T)KG+pdsc_g0yZgckG7MEj#h?Bt$dxYC5)te%?g?)@F z0bhQ%j~wh-@WV;*e^-bjPikX+th2G+&Ss(HyY*K6-%+W-WeT3ky`BAV3qnZsMzF>F zcte0NUW7O$hLjz*F3$phd3N!B{!!lc+uqG$m6!%D~g|%Qq!1dY|pS8R7IqkyID|_+)3K_?4xiIZ=*go0Gcsil*a1m%8@h z7SfX|hY(q7I!McarJqJgEJ>O$yHTrh-T!Vrz~3M zC;dP=ww^`}BushDZH2!il!`Q6{C#t5cv=C;)JH~-nE11Uh}@t0Un1}l*s8~GHp(LJ zNuH^nlc?#o_hns2VPtV<2)VcNVKelN1#NLNx%K^r^3;g(6k~~s0+N@uv4dEbE#5qqDk@M$TP?@DovjXDH zJNDu&s$|K>dAe90+Pq_e3L9b8T9x|ZZr)jo({=0mS=!;LuB|KJV5_a0 zI&f^yFt*+7o?NioZt^8YH_M)3Yqk(RTYBT5if$TjT3uJdz{G&l zTJ5Z27?q`@`tQ!YTp1pMYRl`lUi@Hi+9igXmHn5U8+(JCRK4F&oaYq zxyad^z@I9R17BK;L&F$t`XXh6A|Q1PY0rV73JkmC zn6Wh@URTBpn!}#Kh+a()vk>c9i=yW`<#6Ti8?P?HWU#+9*HvF^zIQ8!0SljNxGjgU zruE&9C>bN1O=2q~xK!SUBA(qi_yi`?JMhYAqOoCFX#9XkMPb5aI`KtiIQIGq0jEKR zv~v`+n;0n{KPr8$_SK&GQ0H@G`Zpu)9c=^d^L&K$K(WlND0dGtj&!5knf%n*@4z(j zzmR12xYuirpgoc-m7K}kdO{@siv(I})S6A<^dcfg(_&gOrCPJl;!C>?{!mwr(4wGT zQ`np65MAQQ!Vy?}lnN}d+$(?^zb1d^bP8@>n>V1@@X0i7`uwL0SxoG$=U;M4OgmMS zBu)u1@Gx@1YL*iF^eGW_@BPr5k{~IiDDsq9TCAA-i7+;mL=oCrR|D7I83AZ^H|Ya; z*fMx+jb_zwU1aAeh;lVbR;^9S4qW%D7ML-#l#Ys%8?#qxYx+V^GFuW^``8ss;m(z+jjCYlt`#7i`R5p+I_>? z#ua@g{P^HN?9};3{eVAeJ&y>E^{~SU!!J~PO;|=u&&x)Gqkz4U!G95Nd=QS04S&9> zHNI$d_)U+v(I77|NOXC(L)1^EMo&k;V38}?x8?95(YtV#!OUkav~{hsI171WUwvs$ zs?Y^#D|T=*D2?eVQ`|dgOcBQCCGEzBFtKVA5x~`xMHl-ND~7NK?Ov}hcWjbKAu6hX zIaad2=(2cx@vEuedF$v8u$n;o1(w+dnOzIu2@8r%yn)mO08iR9dL_b&LV5z;4%<{l zZVeDK2J_V!Q=!rN25s^+?kL@p=Zp#Pa|s@%RS zV%Y0(&*+$Wac!w1O#DoOxV2ZY)}dKe!J463rlACrEna~v1~&n!*qp2K!&&Ec_^Acj z>3jS3_&3(fYkmbqGGCcese%$ZW@H|G%T3L-tbNq6Q`>itpRw)%AFCX4XGQS_Sljv=9$0c_eWd7n14s_Fr1(N1FyhEV$hCTGlBVPa4`Y2KKfW{hkAL?LCUbwvuK0NMjl)7DH&7)1H z*2H_jngHtx#lXvR_{bfF|N7G(kdHe^K zSY=5MX6E6YG3k{Edh#KI(X6O)H!ZGj;az`6ZmxB3=q&XXuRRC_`)pEl!o##-?K<$7 zoS&%Bm3~aiHw{dN99X%$B>by?17RVs#^MZ4(iPzh#?$5o36+TsEd_))!MB)JStsjo zdG8x%q83YY9~}(1(8hq~R}q>_OpVAzgRF^~w|a(etR z9yy_@Y{WRdm_NetIiDBsbt-}1(J_h2tJUuW!|f>KCt+J(X)U;K_j*<%%r+D(T^- zQUe$zvNANZ6e^i>so0oyj+06jCY(mDMnE)b561IlPCl9MpqV3bTqy`e^_rum{OTW$ zwTgozwNB^iige%42#q1eGkRi&zK{6L)on>8hg?SoAi8rSEAV%$L&>A)A6Ad!#eQ!< z&?iNp|L3|}ksyC7Ay}WLf|z3uq(vsOs(DcF9jx3T1Pfw5OHPWaQbI!K!+si?G|YzG z75NGF@=>_Gq84>@{ZCqQ1as8A!vX+U{%x{i%{0j9xh*mO{oJ-5|ck*>dwt&*0ROg&T80@ zRHiY?aohbh_&y9QG3hlSoOP3aC_E|5v@&o)AQ{8_?<+hV*bL~!#9e2(1jID#SD4mY zZo&B5{AmEl8?Q{+M4tk90o}ajPL8&36^w=@TG34LUd^gq)Z{NZeiXJ8;%|Pb=WHTI zo+LYhy4@q*KxK=c3{GV3Ujo0Ggpo5rlYK7Q{*V%e0hfJNpfN#%zv){rv2sr2)L6E+ zl&RMKSjXc;yzsd15az4JAdwqsT%uT9Ah1g$ukI~6OG+)8r~jm-7%DTMC#1>q6T+zwhY}B1uxM26H?jW%#jW-aB?gS$c)S^Ki=$& zn6>Y6_qM1hv+X*v@|yEmYWg=Kk`NByOLd=OT(CVJM5Vh6iYqFIjW8*uQDcQ(Ex|sF zB;oO$WyfiYr_PN>bwV&q4_(t*nuuo}hl=I-%wm$d7;C6Zp&vO=VAs4jl=*A}Lm5pd zbe2HT7L|1OWMe+dL>*6IaEzsp^z|9_qTj_ZfY?|b{Trp>R|%;%d-bh84fa}7Gc0m* z*KOn>UxdbOyYC}pNKK6?V_m}p8P8I-}fr^F0dl)S4wRrJ?8Oa0gtxV0Xk zejRKa$=2o%ozFo}qdCsqwL%eHA?gye44X-> zs;96JW8JeT;{Ic!QBevB@;JR#4}7er@d^y}v@KXtB4xRbk$y$H-Qpzgmx8Ygs!1R@ zYn%OfGjUSG53*5`JhhVSP+5gOg2H!>0t1v@FUhov)-e<~#zIFl{&I)8`fx z4H84>7Eat8vLQ6dg0R>6T`HEWbd za&mBw$Yt-JO-)`Oc#y{*>r3Sa-sv5YiQe+N5QIdthOlQOs`PbtjK?BVQx`pQ zjCgTdM^nzFiP%)RbiSW~YQm0xQn~x$SCFedkwy12y;SbfeR?uVEzu5_h4EU7K&m|P zg?ap^&=kfGvO+6bo}I7LC-V>;JXXA=BF%Fod}oW zzjEaA7aUq|x3VXoj$^%|+s9H-)GG%WcQGsGypEC{y!%OR!z&>viN~X}>LHO*S8m4`6?_Mvl&!-u=O10ZP}5jRnpg2tWkg#F%#=SBuwd9#41S0^3wO$vG+zJ?Sq(w)@=;T{cf~m#+x8@$s>)M8<-EhK642xc>3H@XO^ddK2>QAF&0<3}3|{ z>w4DG$X_u`PyJrFF5ZAaEu)1Eq?27{LC44;qA zf5!*~qhoLp2MYTI%}z6uTe^nfRC<(q zVSnpCPfI*fVW^sIF?^+M)LoZ`xJ-lK&jk7w=phpf{3X{p*{VkUsLfQXGTJwhf*Ehw ze2!0CRf%A0k}5o2e2qzkt2-A9MCxdetD6CZ;gDq7;?v#CL;Cz}6B9<+nIi5}I07FD zejS2M?fu1Vf^6JZb+7PH!>ZV7*IZXtsoo@-&q5rF!qvAoUqT15g|(IqLi|n#am`<$ zZQZ=I-E(uyj|y3Drny?vGbZ}m4=Z}9qb@Z4XAgl!pSpm4s~jy;VnL~q^KT>yP78k! zL`sE+ThW|x`P0^TzJKSd`f_S?tuI|9bTjdbYJ#6VcQSO6zoHx3aW=x4rLfBG?pz++ zJ@5i7wrHFy|4QryDy<0N6A->!S!F*iI6a$)u8Hz@lOiyYZ+X9=)>az1L5=4Ac1^Jc z{(E#ZUWdG-1$H?7JH*d82z^@swXdObVfP}!f?5q(hiwMaS;()iHgi@o)u1!cOgHh@ zqN+CGe(%ynEEPg#_tc6*W3=D_5^0?Bqw}NKJj({9MpE)F(tELyFixdzLnj2bLVE^Y zvx}|c6L_;@5FOBS+YDwKrJHVA$T(DxK*cS8=CVN28x`4M`#K=*#Ms$X>)|95J-kOH zTuOkNIoRJ1rE!(p7BY|oKfSV^8~NE)L?#ic#p~XY!adtpLr#B!oQzc;gyKiyMz{$S z=icip&;%ds@fqru_jh~@kzwhGh*R7GCR zWaQQ2>jbjL>-e_V#m2^&L;9lO*wy9*`JJ7!NS}Y_XKl2k38c6k0QC-E#DC!mZ|&XW zt4;hn+*|MfyAN0)xcagq0$#JEviQ{61sXd5pM-JO@zKO8P#A&|F`Q*E^Dxz#1ri4T92*B3j+&5i>N zL870$^b5>C)TfW`**J-#gxMxXLF~Kxd0?&lg5yrCT3a}hz}e{Bkwy~r-cI(P`-_mZ zq>5GC>+pT+j=T~P!MnEI&mn^0P)|I2d2V1jt=yszuW>KAdxf`zQ57AvUG@#K4;PT$ z%7P9%odC44WS?c_WEUF<)0$*C^y#@WNJ%Nt!F3)(E(x&z(TW+%`w;ZQl{y;Vo7}=d znarV>Z=T%=_rz>rO|NxP`O?J-h0$^mk_^NuUOZk&i}R8 zbOM`_5S4?^;U*8#NZFIh+tKr&_v~(xatYS(RC2rGKGLWwBOnqX{r_9n|D^T*9`ynL z75=;P`%mP58pZ#E0|4p+#{RX!|HC%^C-^_*{Qm=668`_iy}B~WKUWF>ApM&i|6&U@ U0DuRObG5dXk&=D)e;@n50Q6XXm;e9( literal 0 HcmV?d00001 diff --git a/tests/src/App/CMakeLists.txt b/tests/src/App/CMakeLists.txt index 05b489ba92..0bc121285f 100644 --- a/tests/src/App/CMakeLists.txt +++ b/tests/src/App/CMakeLists.txt @@ -1,3 +1,5 @@ +target_compile_definitions(Tests_run PRIVATE DATADIR="${CMAKE_SOURCE_DIR}/data") + target_sources( Tests_run PRIVATE @@ -13,6 +15,7 @@ target_sources( ${CMAKE_CURRENT_SOURCE_DIR}/MappedElement.cpp ${CMAKE_CURRENT_SOURCE_DIR}/MappedName.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Metadata.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/ProjectFile.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Property.cpp ${CMAKE_CURRENT_SOURCE_DIR}/PropertyExpressionEngine.cpp ${CMAKE_CURRENT_SOURCE_DIR}/StringHasher.cpp diff --git a/tests/src/App/ProjectFile.cpp b/tests/src/App/ProjectFile.cpp new file mode 100644 index 0000000000..aa5865c84e --- /dev/null +++ b/tests/src/App/ProjectFile.cpp @@ -0,0 +1,107 @@ +#include "gtest/gtest.h" + +#include "InitApplication.h" +#include +#include +#include + +// NOLINTBEGIN +class ProjectFileTest: public ::testing::Test +{ +protected: + static void SetUpTestSuite() + { + tests::initApplication(); + } + void SetUp() override + {} + void TearDown() override + {} + std::string fileName() const + { + std::string resDir(DATADIR); + resDir.append("/tests/ProjectTest.FCStd"); + return resDir; + } + std::list getInventorObjects() const + { + return {"Body"}; + } + Base::Type getInventorId() const + { + return App::InventorObject::getClassTypeId(); + } +}; + +TEST_F(ProjectFileTest, loadInvalid) +{ + App::ProjectFile proj("non-existing.FCStd"); + EXPECT_FALSE(proj.loadDocument()); +} + +TEST_F(ProjectFileTest, loadDocument) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); +} + +TEST_F(ProjectFileTest, getObjects) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); + std::list objs = proj.getObjects(); + EXPECT_EQ(objs.size(), 1); +} + +TEST_F(ProjectFileTest, getPropertyFiles) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); + std::list files = proj.getPropertyFiles("Body"); + EXPECT_EQ(files.size(), 0); +} + +TEST_F(ProjectFileTest, getMetadata) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); + auto metadata = proj.getMetadata(); + EXPECT_EQ(std::string("No comment"), metadata.comment); + EXPECT_EQ(std::string("John Doe & Jane Roe"), metadata.company); + EXPECT_EQ(std::string("John Doe"), metadata.createdBy); + EXPECT_EQ(std::string("2024-03-08T10:53:31Z"), metadata.creationDate); + EXPECT_EQ(std::string("ProjectTest"), metadata.label); + EXPECT_EQ(std::string("John Doe"), metadata.lastModifiedBy); + EXPECT_EQ(std::string("2024-03-08T11:03:44Z"), metadata.lastModifiedDate); + EXPECT_EQ(std::string("All rights reserved"), metadata.license); + EXPECT_EQ(std::string("https://en.wikipedia.org/wiki/All_rights_reserved"), + metadata.licenseURL); + EXPECT_EQ(std::string("0.22R36329 (Git)"), metadata.programVersion); + EXPECT_EQ(std::string("6847155d-dcc3-4dea-92c9-c4d32d6a3055"), metadata.uuid); +} + +TEST_F(ProjectFileTest, getObjectsOfType) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); + std::list objs = proj.getObjectsOfType(getInventorId()); + EXPECT_EQ(objs, getInventorObjects()); +} + +TEST_F(ProjectFileTest, restoreObject) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); + App::InventorObject obj; + EXPECT_TRUE(proj.restoreObject("Body", &obj, false)); + EXPECT_EQ(obj.Label.getStrValue(), std::string("Body")); +} + +TEST_F(ProjectFileTest, getTypeId) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); + Base::Type id = proj.getTypeId("Body"); + EXPECT_EQ(id, getInventorId()); +} +// NOLINTEND