From 6f8935f4f947e3de5ad56d21c20d32184a348319 Mon Sep 17 00:00:00 2001 From: Stefan Bienert <stefan.bienert@unibas.ch> Date: Thu, 12 Feb 2015 15:57:06 +0100 Subject: [PATCH] Unit testing around the compounds lib --- core/tests/CMakeLists.txt | 2 + core/tests/data/broken_on_purpose.chemlib | Bin 0 -> 13312 bytes core/tests/test_setcompoundschemlib.py | 93 ++++++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 core/tests/data/broken_on_purpose.chemlib create mode 100644 core/tests/test_setcompoundschemlib.py diff --git a/core/tests/CMakeLists.txt b/core/tests/CMakeLists.txt index 89e63b57..51736e2f 100644 --- a/core/tests/CMakeLists.txt +++ b/core/tests/CMakeLists.txt @@ -1,9 +1,11 @@ set(CORE_UNIT_TESTS + test_setcompoundschemlib.py test_argcheck.py ) set(CORE_TEST_DATA test_argcheck.py + data/broken_on_purpose.chemlib ) promod3_unittest(MODULE core diff --git a/core/tests/data/broken_on_purpose.chemlib b/core/tests/data/broken_on_purpose.chemlib new file mode 100644 index 0000000000000000000000000000000000000000..740c0e2c799a885d23a02f5be36cb76f92fb9b04 GIT binary patch literal 13312 zcmWFz^vNtqRY=P(%1ta$FlJz3U}R))P*7lCU=U_N1uP5<3?K{>WrQ&Z(X0#%49v_Q zLCUz8e=~oBFhSf=JQ@OnIRsc5;~3e+RaF_A>Pr%na#E8sQgd@Mlj1Y;((;knOwK{B zjv=lJA&yQyt_sL93K|MTg5;vq#FEVXy!e#Fl2ovs5Kmv%;1EaO039%wG$OyaB)%-Q zs2F5oX>n?bf<l;Mkh6y)0|NsGC>OIbfwD6rF9QPu6Y~uQ<~PhY26Ie|x@|NBMni!3 z5D;QwRunffFf`RQFw`|NG}JTEGZ13L6a(ddM&?rt%%_MqdsO9U2#kinU<(1`i|pJC z!u<UF{OXE|4DLRW?g0Ugp8lZ<iQv|KX-=Y{rKP2=fw``Mg^_`wp{{|Mu7L?8|I0Hl z%QH(4HXn_;XEX!`I0S}Y`#(s-%tTYc&p$-LFVx3J6P*7UY8V)57_=DF@Psx?05hAo zwl-rVxFb|tn3GwO8eg1RSelxboQlR}L+K8oNowRJ=BDZtrxt3qGcvJ@Yics~+Jeml zb(`Xo^K%RGOY>5SQF+WLCZfs_+r`RELGM9%`h~c<y9Ox)1bO;821P1(yGANFhKBfi z`Z))=`nvjs;Olsm<Rqh+2kBr1X&58I7oP#By7O@wXGo55DVd2msmUcscEDUmmT`~} z&q*vUhM9;kj(9)9^n!cH@g<c7kbW*mm?GmqqgSOli6C>J7-k%DS|{3_1u38&er8E# zVh+?eihAN8<8t#;GSf0ay>O6;6d4D~J|II780J|cQ!`D3C{ZkM{%2;s$iV!X`5yB{ zJo$fAYBU5!LtyZS05>zUICD~dUP>|VD@AT5W^v}klKk9a-m=@mjLe!$kb)dm$$A%o z>VH<|P6p;z%$JyVGcRH89Q<A!b>V0T47(5zpW9~6#lR#C?!hx^wEIVdfRKTKA&c<b zHZv{;CQ#R&pC2UU?{8pWz$`qs%@kSK+1c5^z<^0)Zkq`g1CyX2NIj=UyR)OSBS=DM zZksV&Ifq8OpP!$BfdMH0Gcj~CFmyBAWoRGBP^Cc!qfLQ@U0ht8u}2=<!2lP8V1gZ` zI{_9Vwif|wR$=xg6e#IV!1_J$2y<b^1-ZJp2D$n<y9Ptr%`m0K3L2RynhO4Y3NEfb zt|6`p&W^#(jxMgCb}nWk5jy=7q=D4?1F3}h2QQtNQxcD6B&^X%j&Z3usky0n$ek0o z>x{_g>|_?lCl=-BCYEHvdt@-zk<-~JE=es)&5uvc&r5>^3MIy67RTqLCYEL9rNc~v zdzKv6<rk%7=D|BAU?V;KLclZ`1i1ar!n__l|HpiodHq0^0Hbz~hQMeD;0*zRdEI*K z3{1?-octQ??9Qg_&gKS!^SX7xVvH~`GbRIpdEHuIL5M;Vc4t$Nm^zY}F}t$~xc+Bh zux4O9#i-73hrt@J?WmHCavbd9#+r<cxtVz>sTIljxsai|_>!FDc!*F&YA#|#j~80$ zhWdF1hPo<v`nkA9C}7bAs?kupDMS}+8YMZ&IttLSFHKK&HgQF9#!RqVKwTn;t3a$` z9;jm=t^f%^Bte#gc*P1DuzEH=GexsefsI{UTb!|p8*CV;#Q?4lA(}wkVr~=@K|)9> zK*oZE;KOG`dkI+~vXgWaKozo%0<3D*Y%yj9H+DK)!HpfTC%^<J)M1dtDPSQ5id#Fd z#tB(Nr=VB|kMhD>J22zOY3nE`fI>DtKMygQh{ZUN8hkA#q;Li)jV~$BhYL|=94N%& z^NUhai=YO2;vZOss=`HKG*7TJPH^eP5ZB~lU|?Wn-pRoHnfVFxb>>sdJ5e+FC~q_b zMnhl_hJXMoldv!|Y@C4I*_?-!iJu=N;Lq-C2IKhou{#^{u`&q?GDAiJ*qu#aa?Z}| z&ZeOJ&%%6%f%!Z0JLad%cLt$PN1Zep0;3^7MhI{)Gcjwlv$w8;G1kHut6+@fp#0Cs h{FQ<ED;XAyY8efI(GVDVA;85V%+KWR6B(e<4gfQgXG8!1 literal 0 HcmV?d00001 diff --git a/core/tests/test_setcompoundschemlib.py b/core/tests/test_setcompoundschemlib.py new file mode 100644 index 00000000..8f90d569 --- /dev/null +++ b/core/tests/test_setcompoundschemlib.py @@ -0,0 +1,93 @@ +import unittest +import os +from ost import conop +from ost import io + +class SetCompoundsChemlibTests(unittest.TestCase): + def testNoCompoundsLibOverwrite(self): + # Checking that we DO NOT automatically load a compounds library if we + # already got one. This is for the case that somebody loads her own lib + # for whatever purpose so promod3 should not overwrite it on import. + # For the test, we load a library here with a modified aa and check that + # its still modified after importing promod3. + + # load compounds lib like in __init__.py.in + compound_lib_path = os.path.join('data', 'broken_on_purpose.chemlib') + clib = conop.CompoundLib.Load(compound_lib_path) + self.assertIsNotNone(clib) + conop.SetDefaultLib(clib) + io.profiles['DEFAULT'].processor = conop.RuleBasedProcessor(clib) + clib = conop.GetDefaultLib() + + # check amino acid + fake_gly = ('GLY', 'IOU a formula') + cmpd = clib.FindCompound(fake_gly[0]) + self.assertIsNotNone(cmpd) + self.assertEqual(cmpd.formula, fake_gly[1]) + + # import promod3, fetch default lib again, rerun test + import promod3# pylint: disable=unused-variable + clib = conop.GetDefaultLib() + cmpd = clib.FindCompound(fake_gly[0]) + self.assertIsNotNone(cmpd) + self.assertEqual(cmpd.formula, fake_gly[1]) + + def testCompoundsLibLoadedOnImport(self): + # Check that importing promod3 loads the compounds library. First we + # test that we do not have a lib before importing, afterwards we import + # and check for Glycine. This test reads the systems/ installed lib + # which means an external data dependency. Lets assume this is OK: if + # we do not have a chemical components dictionary, we do not know amino + # acids, so ProMod3 would not work... We also check for essential + # compounds in the library. Of course, those are amino acids and... if + # there is something you really cannot live without, add it here. One + # drawback of going by the systems lib, which should be updated every + # week, is that things may change and then our compounds list here will + # have to be updated, too. + + # before importing, we do not want to see a lib + clib = conop.GetDefaultLib() + self.assertIsNone(clib) + + # now there should be one + import promod3# pylint: disable=unused-variable + clib = conop.GetDefaultLib() + self.assertIsNotNone(clib) + + # and it should feature Glycine + gly = ('GLY', 'C2 H5 N O2') + cmpd = clib.FindCompound(gly[0]) + self.assertIsNotNone(cmpd) + self.assertEqual(cmpd.formula, gly[1]) + + # checking selected compounds + cmpnds = [('ALA', 'C3 H7 N O2'), ('ASX', 'C4 H6 N O2 X2'), + ('CYS', 'C3 H7 N O2 S'), ('ASP', 'C4 H7 N O4'), + ('GLU', 'C5 H9 N O4'), ('PHE', 'C9 H11 N O2'), + ('GLY', 'C2 H5 N O2'), ('HIS', 'C6 H10 N3 O2'), + ('ILE', 'C6 H13 N O2'), ('LYS', 'C6 H15 N2 O2'), + ('LEU', 'C6 H13 N O2'), ('MET', 'C5 H11 N O2 S'), + ('ASN', 'C4 H8 N2 O3'), ('PRO', 'C5 H9 N O2'), + ('GLN', 'C5 H10 N2 O3'), ('ARG', 'C6 H15 N4 O2'), + ('SER', 'C3 H7 N O3'), ('THR', 'C4 H9 N O3'), + ('VAL', 'C5 H11 N O2'), ('TRP', 'C11 H12 N2 O2'), + ('TYR', 'C9 H11 N O3'), ('GLX', 'C5 H8 N O2 X2'), + ('ADE', 'C5 H5 N5'), ('GUN', 'C5 H5 N5 O'), + ('CYT', 'C4 H5 N3 O'), ('THM', 'C10 H14 N2 O5'), + ('URA', 'C4 H4 N2 O2')] + for cmpnd in cmpnds: + entry = clib.FindCompound(cmpnd[0]) + self.assertIsNotNone(entry, msg="Compound '%s' not " % cmpnd[0]+ + "found in default compounds library.") + self.assertEqual(entry.formula, cmpnd[1]) + +if __name__ == "__main__": + from ost import testutils + testutils.RunTests() + +# LocalWords: unittest sys os ost conop io clib SetCompoundsChemlibTests aa +# LocalWords: TestCase testNoCompoundsLibOverwrite promod chemlib gly GLY +# LocalWords: assertIsNotNone SetDefaultLib RuleBasedProcessor cmpd ProMod +# LocalWords: GetDefaultLib FindCompound testCompoundsLibLoadedOnImport ASX +# LocalWords: assertIsNone cmpnds CYS GLU PHE ILE LYS LEU ASN GLN ARG SER +# LocalWords: THR TRP TYR GLX CYT THM URA cmpnd msg testutils RunTests -- GitLab