From afcd800a2e779f6df7281d73c9d0bb801fb198bf Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Mon, 25 Jan 2010 10:24:33 +0200 Subject: [PATCH] * set up (unit) test framework using gtester --- Makefile.am | 22 +++++++++++----- configure.ac | 12 ++++++++- gtest.mk | 27 +++++++++++++++++++ man/Makefile.am | 3 +++ src/Makefile.am | 10 +++++++ src/tests/Makefile.am | 45 +++++++++++++++++++++++++++++++ src/tests/test-util | Bin 0 -> 19704 bytes src/tests/test-util.c | 60 ++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 172 insertions(+), 7 deletions(-) create mode 100644 gtest.mk create mode 100644 src/tests/Makefile.am create mode 100755 src/tests/test-util create mode 100644 src/tests/test-util.c diff --git a/Makefile.am b/Makefile.am index 5f8d85f1..1f643f82 100644 --- a/Makefile.am +++ b/Makefile.am @@ -14,12 +14,22 @@ ## along with this program; if not, write to the Free Software Foundation, ## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +include $(top_srcdir)/gtest.mk + SUBDIRS=src man -# calculate the cyclomatic-complexity, which should not go over 10 -cc10: - @pmccabe `find . -regex '.*\.\(c\|cc\|h\)$'` | sort -nr | awk '($$1 > 10)' -EXTRA_DIST= \ - TODO \ - HACKING +# so we can say 'make test' +check: test + +tags: + gtags + +cc10: + @pmccabe `find -name '*.c' -o -name '*.cc'` | sort -nr | awk '($$1 > 10)' + + +EXTRA_DIST= \ + TODO \ + HACKING \ + gtest.mk diff --git a/configure.ac b/configure.ac index 10bcde27..98d11f1b 100644 --- a/configure.ac +++ b/configure.ac @@ -71,11 +71,21 @@ PKG_CHECK_MODULES(GLIB,glib-2.0) AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) +# g_test was introduced in glib 2.16 +PKG_CHECK_MODULES(g_test,glib-2.0 >= 2.16, + [have_gtest=yes],[have_gtest=no]) +AM_CONDITIONAL(HAVE_GTEST, test "x$have_gtest" = "xyes") +if test "x$have_gtest" = "xno"; then + AC_MSG_WARN([You need GLIB version >= 2.16 to build the tests]) +fi + + # gmime2? PKG_CHECK_MODULES(GMIME,gmime-2.4) AC_SUBST(GMIME_CFLAGS) AC_SUBST(GMIME_LIBS) + # xapian? AC_CHECK_PROG(XAPIAN,xapian-config,xapian-config,no) AM_CONDITIONAL(HAVE_XAPIAN,test "x$XAPIAN" != "xno") @@ -93,10 +103,10 @@ AS_IF([test "x$XAPIAN" = "xno"],[ AC_SUBST(XAPIAN_CXXFLAGS) AC_SUBST(XAPIAN_LIBS) - AC_OUTPUT([ Makefile src/Makefile +src/tests/Makefile man/Makefile ]) diff --git a/gtest.mk b/gtest.mk new file mode 100644 index 00000000..218d1332 --- /dev/null +++ b/gtest.mk @@ -0,0 +1,27 @@ +## Copyright (C) 2010 Dirk-Jan C. Binnema +## +## This program is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by the +## Free Software Foundation; either version 3, or (at your option) any +## later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software Foundation, +## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +TEST_PROGS= + +test: all $(TEST_PROGS) + @ test -z "$(TEST_PROGS)" || gtester --verbose $(TEST_PROGS); \ + test -z "$(SUBDIRS)" || \ + for subdir in $(SUBDIRS); do \ + test "$$subdir" = "." || \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \ + done + +.PHONY: test diff --git a/man/Makefile.am b/man/Makefile.am index 6f858214..9dfaa94b 100644 --- a/man/Makefile.am +++ b/man/Makefile.am @@ -14,4 +14,7 @@ ## along with this program; if not, write to the Free Software Foundation, ## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +include $(top_srcdir)/gtest.mk + + dist_man_MANS = mu.1 diff --git a/src/Makefile.am b/src/Makefile.am index e87af3e8..de17e04b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -14,6 +14,16 @@ ## along with this program; if not, write to the Free Software Foundation, ## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +include $(top_srcdir)/gtest.mk + +# enforce compiling this dir first before decending into tests/ +SUBDIRS= . + +if HAVE_GTEST +SUBDIRS += tests +endif + + INCLUDES=$(XAPIAN_CXXFLAGS) $(GMIME_CFLAGS) $(GLIB_CFLAGS) bin_PROGRAMS= \ diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am new file mode 100644 index 00000000..fa595cb9 --- /dev/null +++ b/src/tests/Makefile.am @@ -0,0 +1,45 @@ +## Copyright (C) 2010 Dirk-Jan C. Binnema +## +## This program is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by the +## Free Software Foundation; either version 3, or (at your option) any +## later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software Foundation, +## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +include $(top_srcdir)/gtest.mk + +INCLUDES=$(XAPIAN_CXXFLAGS) \ + $(GMIME_CFLAGS) \ + $(GLIB_CFLAGS) \ + -I ${top_srcdir} \ + -DABS_SRCDIR=\"${abs_srcdir}\" + +noinst_PROGRAMS= $(TEST_PROGS) + +TEST_PROGS += test-util +test_util_SOURCES= test-util.c +test_util_LDADD= ${top_srcdir}/src/libmu.la + + +# note the question marks; make does not like files with ':'... +# 11 messages, the '.ignore' message should be ignored when indexing +# EXTRA_DIST= \ +# TestMaildir/tmp/1220863087.12663.ignore \ +# TestMaildir/new/1220863087.12663_9.mindcrime \ +# TestMaildir/new/1220863087.12663_25.mindcrime \ +# TestMaildir/new/1220863087.12663_21.mindcrime \ +# TestMaildir/new/1220863087.12663_23.mindcrime \ +# TestMaildir/cur/1220863087.12663_5.mindcrime?2,S \ +# TestMaildir/cur/1220863087.12663_7.mindcrime?2,RS \ +# TestMaildir/cur/1220863087.12663_15.mindcrime?2,PS \ +# TestMaildir/cur/1220863087.12663_19.mindcrime?2,S \ +# TestMaildir/cur/1220863042.12663_1.mindcrime?2,S \ +# TestMaildir/cur/1220863060.12663_3.mindcrime?2,S diff --git a/src/tests/test-util b/src/tests/test-util new file mode 100755 index 0000000000000000000000000000000000000000..3d17a81dfd9bda4f209dc8090c36fc2d14dc5c9e GIT binary patch literal 19704 zcmeHPdw5jUwclsvOgKp?rpL4TKl-xKD5?XqgbqcQvI&=YqiDtxS?Rh)>^Kpxxe4uXD5>p?Y;lq zKiKo_v-a9+?X}ik`!VP2z0bL^v3a3k7(xe^a0_C`cbQf_VAo7VsTY1>i78^Ts1gOp zBCUQqco1a)6!IX?M0Aq|ynYAhh~>Z;Nuz8=8CVu^YN-&6EH3~_e|a3@1E$5e9T~e2 zsh4yYz;V!zgT|uYxQ_mIn|u9qp|( z9pUPZ_IPGXAe9JAQ#6<+>5G=Fma=IlWe!JV*$PDZhV(CeSYNdN{T_Stp07W3%TMaY zp1iTXas+5+A(DR-A_HZX$dnKx0gDmGBA$szpPqp@3~@9f%hQL{^J#&$=sAL-h-e`eAyO9Y(DmLW{DydaP9gJHhIT*t+MUWOKN5^O_>uT8jQ~>!ki zcly5${Hh#$KJX82H!b#+5#V?rkNzt1H{7bqm!a2iK6n}Y0FaL!j4`q$*wr44bAZ%c zC~Q00nTXq|bTFB=ZDC)w$!>{6+f(UCa(+iJm5QW<-PRs&XTfM^duOD2TA*GHuBhFX zj6_5fg_Ge-*FeJVO18(-ZNQU}bS4?M+uQ86V0(wXIhc&M$D<&0B%%~}oiu`}c&cL{ z9Zj@e6A7iEsFr!PQZ;x6Gop6q#&CPm-rSy!*Y`K zx5w>FDiRi(6UlI7OP7SwAGRGyCgTZ62n8t{F5Uw7rl;47Xe1qpZxX>!23t;kw`e04ua5{N~wHg#lvDzbJM)}_Ow9VKx*1Rs+MicF|My_S>swYHuZXkrw zGYK)d%pt_Yv49X0@nS+uyv>A|s8(t5vyZl~+i_sm6d`th{)7Jh{+-XK zJ$+Xrx9`7EjlL?_xOUxh2l_8Ofg1Kt`~X*$>7U4&#+W>E7{&T0vc@sejvSIWYaXLJ zkMv5M9*A+8KJuW%>4})1_*JriS_9@#E&dMMUFyi4NrRBR6M4HBov zVvC8dkT^XTTS0t|#OcA`5rzc|@i2Ef@kH%P`Bc&3jXJcK&g~aLM*cRf)KSIVt zdOEh9_+g3D~7)@N}Meb+fRHy@Vd9I?tV4<`tcR3T4HlB zU&U77a`~EAZ?|dnoeh2O?imuC_S-(|Du@x8+4pP!e5~&Q)7o+LbzGl1>B=58X1tUd z*YhxRh-|O%HL~?B#T&v+@>chExtM)nzV-TDJP=}DsJ@yX?>7zfNJJ9okNz59wcMUqUAB=tqyA5Lx>GP28 zKG^rG52ZS*1_h8?!(2%2dk^{D^;O*mB(??E&fd&uspRn(l?YlEp-%`v6I}TJ#gh$^S ze)G>*iN?EO0i~KK#ru`MlNgLJX65e2`zMOyLd+6#a5qrflfB`OuuL&~sj8GJ9aUd| zs=D6nvF)^X51W%5yk}yaPAHL&Gp`qen|Z5{*ZuS(oW(Hmf6`Y4e78VT^<73vx+-4> zRG0Q-_c=x={~X(1*Gr8(n?z6cKO9m|)^k`|$|^y;=(`^hVVmMTS~9f%)b-|g=zO%^ zjst(4Ko6zYWVd;ZG0*?w`Rt#}?6y(^W{>Ip$D!KdmsA2cE4^YX?J=4y^a1uGH6L`ZKhbvwoUr4-nsZ=z=7XN>-)I=R%SN#33eY_EDCA@C zjmL1s)NvN8bRoU8{zUgdSeePSuP1xb5%j#82Bas33VI2>8-=qc47UIHK^eQpRt=qv z_R!z?^U-J4tn7QfzrTOSfiI57gm`Rh-#FC{R_S!9Hul~EfPp<4iW5!3xKV+X7yY6Zm!%PO~`}A- z&~7)fGVf;PBr9#p{qOa{n!c%U%oX^b<=8iHw^GxYsm`R^J2b4u?Oru*vv4<7U0Wx_ z4K)iQsg3DGmsq@fX``5!ni$dUe4 zs#u0HL4R^HHK9}@x%FcI#FXHTYb5MXC;XvgB$$pMPv&<8(=jnW7>~1(HxkM8(=?F_$N)kv2f1hNl)4XfdKmE_;){rHBEE-Mfc^hbh?5YfBQ8W-gV=_+3Go)hFCgBB_%Px@ z#1|3YMAQZ?nm_+y|CH6OnRq(mug7j)U3Gm%Vh!giTzoRi49%jXaqpNu)B8$1pMa&Y zfuQJb574=&eKsBC1Vw)hBG__59KwS5dNzg=#sj)UE3Q3=8N|HpH{>{*+f?!{L@!5_ zn`k5@5nY1vufk5wHgtziTwoc2J~BXzMM4|7_#*b?1eBwJFkJ2qNX(i0qPpAiA1?2h#k+m z+CW`RD3#&q1pnNX{%L_}wZhomEj6&0n#KjV8ryJTsDK*Abx6AmD?#8I<|ij} zxJ%ebImWz;p7htLgm#$d)&Vbg8!oSHJhSxb_O~j{vqC-aA3RURZAcxSM{7 zYl*@0Hok8m>7z`Q+7DE?z2?u6Gn@w$jB10PdI*uEQe!nUYYps>2yTF#0~bz3x*ORe zc;d#WCCRl{jQ9qiQA>hruZe0r4!rChvWzphxkT@?E&qb7ax9Aq!_WONwsOTqWRvK~ z5lE5+&C0DDdCH}NXDf_JPm?t}kc5}$S+N!az$N0yciOxGqxKbadXC^~bd3^_TyG=O ze4!TnPP?04_xaZV^_&F7Jylj?g78eo=yz9>;F@51z6UYxfTCGwa5hVUxrtI#%exkl zqvj&y4Ab38c7cKZBzwH>1x{acI@yrkPvq)MPRo4>RM?#_L z`ZEjME4glE{x`|x+5m|Ki!0#Eq8q`mVc67N)WPk&Vb!mY1K#^4D8p+0O=6bEPg?y) z67zc8uzA=;6yTar>e)|P11DhDgbGg!^bDKTCpjxUACY$H-y}BHbCR@qN`v1sh1de6 zVT$KmayDHkrA+nwjo6YE607(4$hmx-#2P&3(K4HdR$LS2cn*+r!@W|&0?*~71r=?v z$0V&)(V9I`Vj)Fa;W+CU!q37 zGp36+LC9T&)xU=;d^bRPQK=!VnIL?{XpW+hMi-5nVEVob&Z1EcYWeEOJla9MzImip zI%uh{i_|d=THy;pe9;*WTIu^dsb@OqSYIFfQ#95={l2%zJkCL@eE&-HYzLjNI1bl)T92Av)c-P@;={PZOPOsD9S$V=pgSY%G(KSNYf_ zi<%sCt?y=1FLThVe6JB*;-DLRHDqp<6RK-M*yn+UqGgWFG2d^g^E2S<|8) z6zxN{x9Cy2!Ba^Ak13A`PZtY3t{h@|E+E#cTA0(-pTJvSo{8L2b}LqA1iKV-*(YS~ z5}i9)lo=e_uAdmvAopfa%6Gz1$oVNixrs7JGanMJg`^7OQREph)T9=$KiMfrEI#GHmyX~ z$lsyD#>KRLKhfO-=u1Gy@F0;fvkggQ{48y}w5c9)mmnHVxi(c8_krK2lAZVv$hY;F zRw)$p52&xAH)kS_x`~!f+J>sQ_O2Ss+dN}3hvYsGrGtj!-wh5b+hba1y#-xk(I{Nkh2H+`9Jt1(sRM6)U2kOKO;+w`!si$TKGT%8T8;Gkv6#LY=Eh6c=BLEVQhXwD5PUlIXMb z!tJ}b_>$tL^4VS&9()QWi6%a`e2OTP*PoQl14TUJQL+ZlOa)pv&R!J*$DM-K z0sEOp4Mj>(v1t?+(*TO_P66lG63nh6jmci-_&m~_;Q>d)WG^c=2Nf#~7_+@f?qqLM zxyojd5uO2ctWa6N&|HH&<*2r$s_kN%40-__jYv~@y>!Q@Vq-NJPU()^YUMhlJf}vU zk^y5H=v`g=VS{a9X?IE2z%k`8c+e-s%1_>0Kb2@d`5f_{rgDlOu1$h_bhC`m%>qX_ z4)f4qe(7;^8|fVgfExxliif&%WR6SWjZuT{qK8N4I;^r7J*UiILyQ?@!%T6OQ70Q| zZSfW86K8rv9azSKC8r(EQiaj)2aC@3&gAp^XAoUt8k@p6iE88AJBBjso6 zB^&RPKgL#*NhNFAetIaYwO(e&1?NGcGcVNvHmse{r^-r~Eb z8Z&>f*Sgc1?W!7eg*)`uosXqztS4sFJ(ta1>zWDm-$Y@T;N8uqn}X*^k!zbmU|&r% z6sl>jZvY&g<} zG^Ri81k7$aiOM(ykvZTc%xXMFn@}QPxlZQ#j#D3e$NxBYpD?U-rpx_%*G;D3zJHt5 zw&YE>*HvY>Q;)uLx%Cy-g_Z8>X4bpoX?L0Rx;sA8T^4XZaibNeI?r0R^v#Pmp={Ru zI?CRJvdgU+_of%EA6r{5x*+IYXT5GcxzvhA(Jni!mF}%p+I_xjieX*zTdTTeueS@RY+^prYSCX7hO@E={5S?rY2bp8?lQOR6D8#LXo%j1uY&y2c! z(=Fz*tY^`!)T?FipNuzfn&64BO?2&P3a8QmnJvKXiX z9P?Y6RyEC^+bn8giOxt(_?l2_O)43}ks}E>x>Gn^orpF^HbpuXb_AoTAwyotTG%{y zk-c#4D#)?z6)lacR$XB)T)k}ms;1@3aG*X{VPi|n@)j|0Dk-OYOXK|2Eh|w%$d#*9 zER)88`rNXgncK3gY1twX?Mk4gIFN4JsXAV!v3j8)yh|HbuAIB5@e_|a<;q>qIB)eL zA>9~GWLi5SLnJjVTew^{Piv-49zeIFc55Qh5edfaO~Is%5o~v+@m4@Q6$uG@Q#uF< zcA~8fN9SoAkK-rElxn{&A_d_PRoHF~rhv8KWEH5+Okz9zAh;=_G})bra0Iz19ij?Z zd~>or9kIJ`MBi?c4PxW`KTcwSDID1}V5(Gryg1$k+9;xq$zrpzO<=JuxiOOD5qukG z^d0lHB3YMH_6hR0c5IZDK{DDN7Ch#^5mmi5gL<*fQYBNNOwtY|Ix?N{0X4$zN~ExE zsL!IYu8m0*{DQPTN4=qluQLiWm8XU=HLzDCEgfw+X*T5HeUnCyc zLd(z%rq@fKK*%&@>V>)}+RDxhdJWwKoRE>BPuXi!(E$fZlWn$@lnB{?n=zKa4dX&_ zyk8+H=mvx+*cuFN%yg;FCSTZa`pmQe|9;{jyU@V;FRW~r4GV!O_D$VVc&XyB zkdoOMi;!9zWp6mygu@{X*#!B5{m2_Hm8DHWuEEevg!rc&Vgz|-%DlZ2{tMC&OYlXR zov{dCR@nr9aIy(04cstC1_}#H@?MkhPMOYl36-?HCZS`5JgU!vIpwUJa-})tq!ms% zHmwS{cQO!Ve*ko=v_<&1Ob@m(n8bLQw^zc;kcR05TV-~}BIKGDvI+J&*@XL5HbK5% zN=PcQE(HOaGsioH@r|N(TP7H5W|ty4Bksi z2IEn@dFP;AnN|oG#M|R-2~7*Owk9zVIh^>rg9%EAV~;}kQk&*Uz!H_~s2T9}KTq)e zRR`@hXd%tSh$ZyECNtSar}zA#tS`eFy+*M z4lDV%kGvL2xPPpJPIAYOd%)Do{omqUPg1^&?=o-{Hezi>wFvZbPJemgj!?1}LmWS_jHwxD`?J z?E&8&@NLkQ1dV)*T=3R>d;mWVCCAu6PS8`_-M}>;_vc^6vJ#&wbkKUgj12Ozz9+zU z0({kZdRgW^M9nt^t8-JJNXsByryq3q*mm-Lb^KA$4?1YRA0mVD$j2AMUjGEXCv*7t z0@yL|X&E35qz@oXA5)%u4<39}!1iTe8QQ@qPV42nlgG~DNpwi@+}0e18IzZaiGq>-#^qo z?eh=w_^k0lJgf`l(702?r~Ps-maV4c^n2=JT#_g6MeJ3U)9Fqi55t-~z9X14{F0(B znr{TqoZ_PJ5_PAdSv4PFPW8mDd6;L=Atxb!79#6`AtUFETzMxJJ465mEl*)Xul#ld zbJQ0pg#4a^!j)#u;|fcrum#@4c*z@0@6aP2<>D{K5O_hbDG0R7x2S^(u6ynqJ$5d`FWzU*nl z6M)-u`1AFD7WBh8`gZ}>?Q7uq>kGhh^?w!kgSQXre+0M=tj{w*^tvDI`#EsEu1EYe z;5=c$mgMT;&^hLv{sKb?Zp-nz9HjG>n7dH)6Y&P%x_=n1(Sp07+JC}TChR;s30(I# z!!=TT7P#(Deo-lI0j>jk?^pBiZ{*=m=Hbr+=lj|m$z`bDpMdM}MEnSGXAP40$(-_j zlqphE22w)!5yt`N|3BN0-?x~UL#KT;dH4e0dVP}eugs%|^6(6BJ-+!pjL!n+ZsFsQ z&GNVB@qY_A4?1akxHYZ=?cw189f%(WuKimI|Gt$+|1b})%$bB)z7F_WXS|PaRfp=N?^6;E~%3MD2ci?*coA$mBT+h$^UWs1U4JFg5bf&Eh+YYupf7S99 zySZuQDt@5EUN8i^Y<>6~~Z&CB|d2^fX6^roKN{6%_n?I2Le+G=PNak zE(eG1s60Yy)A4fMLf7wOi=Me(nQ=a%6V#u}aTezXt5A1}Z{x_WmHYV}=kqn{J3kJA gU)(`|oZc`!fY0FAT_HOi%fvSZTDPb@4`t;40JZ +** +** This program is free software; you can redistribute it and/or modify it +** under the terms of the GNU General Public License as published by the +** Free Software Foundation; either version 3, or (at your option) any +** later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software Foundation, +** Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +** +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif /*HAVE_CONFIG_H*/ + +#include +#include + +#include "src/mu-util.h" + +static void +test_mu_util_dir_expand (void) +{ + gchar *got, *expected; + + got = mu_util_dir_expand ("~/Desktop"); + expected = g_strdup_printf ("%s%cDesktop", + getenv("HOME"), G_DIR_SEPARATOR); + + g_assert_cmpstr (got,==,expected); + g_free (got); + g_free (expected); +} + + +static void +shutup (void) {} + +int +main (int argc, char *argv[]) +{ + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/mu-util/mu-util-dir-expand-01", + test_mu_util_dir_expand); + + g_log_set_handler (NULL, + G_LOG_LEVEL_DEBUG|G_LOG_LEVEL_MESSAGE|G_LOG_LEVEL_INFO, + (GLogFunc)shutup, NULL); + + return g_test_run (); +}