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