Merged revisions 2302-2362,2364-2452 via svnmerge from
[scons.git] / src / engine / SCons / SConsignTests.py
index e292aedaaa477399a3874fea90230b429d2a512e..2a04c897e603cb6293a4d5233d21e2351c4f5ed7 100644 (file)
@@ -33,30 +33,33 @@ import SCons.dblite
 import SCons.SConsign
 
 class BuildInfo:
+    def merge(self, object):
+        pass
+
+class DummySConsignEntry:
     def __init__(self, name):
         self.name = name
+        self.binfo = BuildInfo()
     def convert_to_sconsign(self):
         self.c_to_s = 1
     def convert_from_sconsign(self, dir, name):
         self.c_from_s = 1
 
-class DummyModule:
-    def to_string(self, sig):
-        return str(sig)
-
-    def from_string(self, sig):
-        return int(sig)
-
 class FS:
     def __init__(self, top):
         self.Top = top
         self.Top.repositories = []
 
 class DummyNode:
-    def __init__(self, path='not_a_valid_path'):
+    def __init__(self, path='not_a_valid_path', binfo=None):
         self.path = path
         self.tpath = path
         self.fs = FS(self)
+        self.binfo = binfo
+    def get_stored_info(self):
+        return self.binfo
+    def get_binfo(self):
+        return self.binfo
 
 class SConsignTestCase(unittest.TestCase):
     def setUp(self):
@@ -70,17 +73,19 @@ class SConsignTestCase(unittest.TestCase):
 
 class BaseTestCase(SConsignTestCase):
 
-    def runTest(self):
-        aaa = BuildInfo('aaa')
-        bbb = BuildInfo('bbb')
+    def test_Base(self):
+        aaa = DummySConsignEntry('aaa')
+        bbb = DummySConsignEntry('bbb')
         bbb.arg1 = 'bbb arg1'
-        ccc = BuildInfo('ccc')
+        ccc = DummySConsignEntry('ccc')
         ccc.arg2 = 'ccc arg2'
 
         f = SCons.SConsign.Base()
         f.set_entry('aaa', aaa)
         f.set_entry('bbb', bbb)
 
+        #f.merge()
+
         e = f.get_entry('aaa')
         assert e == aaa, e
         assert e.name == 'aaa', e.name
@@ -92,17 +97,18 @@ class BaseTestCase(SConsignTestCase):
         assert not hasattr(e, 'arg2'), e
 
         f.set_entry('bbb', ccc)
+
         e = f.get_entry('bbb')
         assert e.name == 'ccc', e.name
         assert not hasattr(e, 'arg1'), e
         assert e.arg2 == 'ccc arg2', e.arg1
 
-        ddd = BuildInfo('ddd')
-        eee = BuildInfo('eee')
-        fff = BuildInfo('fff')
+        ddd = DummySConsignEntry('ddd')
+        eee = DummySConsignEntry('eee')
+        fff = DummySConsignEntry('fff')
         fff.arg = 'fff arg'
 
-        f = SCons.SConsign.Base(DummyModule())
+        f = SCons.SConsign.Base()
         f.set_entry('ddd', ddd)
         f.set_entry('eee', eee)
 
@@ -116,57 +122,149 @@ class BaseTestCase(SConsignTestCase):
         assert not hasattr(e, 'arg'), e
 
         f.set_entry('eee', fff)
+
+        e = f.get_entry('eee')
+        assert e.name == 'fff', e.name
+        assert e.arg == 'fff arg', e.arg
+
+    def test_store_info(self):
+        aaa = DummySConsignEntry('aaa')
+        bbb = DummySConsignEntry('bbb')
+        bbb.arg1 = 'bbb arg1'
+        ccc = DummySConsignEntry('ccc')
+        ccc.arg2 = 'ccc arg2'
+
+        f = SCons.SConsign.Base()
+        f.store_info('aaa', DummyNode('aaa', aaa))
+        f.store_info('bbb', DummyNode('bbb', bbb))
+
+        try:
+            e = f.get_entry('aaa')
+        except KeyError:
+            pass
+        else:
+            raise "unexpected entry %s" % e
+
+        try:
+            e = f.get_entry('bbb')
+        except KeyError:
+            pass
+        else:
+            raise "unexpected entry %s" % e
+
+        f.merge()
+
+        e = f.get_entry('aaa')
+        assert e == aaa, "aaa = %s, e = %s" % (aaa, e)
+        assert e.name == 'aaa', e.name
+
+        e = f.get_entry('bbb')
+        assert e == bbb, "bbb = %s, e = %s" % (bbb, e)
+        assert e.name == 'bbb', e.name
+        assert e.arg1 == 'bbb arg1', e.arg1
+        assert not hasattr(e, 'arg2'), e
+
+        f.store_info('bbb', DummyNode('bbb', ccc))
+
+        e = f.get_entry('bbb')
+        assert e == bbb, e
+        assert e.name == 'bbb', e.name
+        assert e.arg1 == 'bbb arg1', e.arg1
+        assert not hasattr(e, 'arg2'), e
+
+        f.merge()
+
+        e = f.get_entry('bbb')
+        assert e.name == 'ccc', e.name
+        assert not hasattr(e, 'arg1'), e
+        assert e.arg2 == 'ccc arg2', e.arg1
+
+        ddd = DummySConsignEntry('ddd')
+        eee = DummySConsignEntry('eee')
+        fff = DummySConsignEntry('fff')
+        fff.arg = 'fff arg'
+
+        f = SCons.SConsign.Base()
+        f.store_info('ddd', DummyNode('ddd', ddd))
+        f.store_info('eee', DummyNode('eee', eee))
+
+        f.merge()
+
+        e = f.get_entry('ddd')
+        assert e == ddd, e
+        assert e.name == 'ddd', e.name
+
+        e = f.get_entry('eee')
+        assert e == eee, e
+        assert e.name == 'eee', e.name
+        assert not hasattr(e, 'arg'), e
+
+        f.store_info('eee', DummyNode('eee', fff))
+
+        e = f.get_entry('eee')
+        assert e == eee, e
+        assert e.name == 'eee', e.name
+        assert not hasattr(e, 'arg'), e
+
+        f.merge()
+
         e = f.get_entry('eee')
         assert e.name == 'fff', e.name
         assert e.arg == 'fff arg', e.arg
 
 class SConsignDBTestCase(SConsignTestCase):
 
-    def runTest(self):
+    def test_SConsignDB(self):
         save_DataBase = SCons.SConsign.DataBase
         SCons.SConsign.DataBase = {}
         try:
             d1 = SCons.SConsign.DB(DummyNode('dir1'))
-            d1.set_entry('aaa', BuildInfo('aaa name'))
-            d1.set_entry('bbb', BuildInfo('bbb name'))
+            d1.set_entry('aaa', DummySConsignEntry('aaa name'))
+            d1.set_entry('bbb', DummySConsignEntry('bbb name'))
+
             aaa = d1.get_entry('aaa')
             assert aaa.name == 'aaa name'
             bbb = d1.get_entry('bbb')
             assert bbb.name == 'bbb name'
 
             d2 = SCons.SConsign.DB(DummyNode('dir2'))
-            d2.set_entry('ccc', BuildInfo('ccc name'))
-            d2.set_entry('ddd', BuildInfo('ddd name'))
+            d2.set_entry('ccc', DummySConsignEntry('ccc name'))
+            d2.set_entry('ddd', DummySConsignEntry('ddd name'))
+
             ccc = d2.get_entry('ccc')
             assert ccc.name == 'ccc name'
             ddd = d2.get_entry('ddd')
             assert ddd.name == 'ddd name'
 
             d31 = SCons.SConsign.DB(DummyNode('dir3/sub1'))
-            d31.set_entry('eee', BuildInfo('eee name'))
-            d31.set_entry('fff', BuildInfo('fff name'))
+            d31.set_entry('eee', DummySConsignEntry('eee name'))
+            d31.set_entry('fff', DummySConsignEntry('fff name'))
+
             eee = d31.get_entry('eee')
             assert eee.name == 'eee name'
             fff = d31.get_entry('fff')
             assert fff.name == 'fff name'
 
             d32 = SCons.SConsign.DB(DummyNode('dir3%ssub2' % os.sep))
-            d32.set_entry('ggg', BuildInfo('ggg name'))
-            d32.set_entry('hhh', BuildInfo('hhh name'))
+            d32.set_entry('ggg', DummySConsignEntry('ggg name'))
+            d32.set_entry('hhh', DummySConsignEntry('hhh name'))
+
             ggg = d32.get_entry('ggg')
             assert ggg.name == 'ggg name'
             hhh = d32.get_entry('hhh')
             assert hhh.name == 'hhh name'
+
         finally:
+
             SCons.SConsign.DataBase = save_DataBase
 
 class SConsignDirFileTestCase(SConsignTestCase):
 
-    def runTest(self):
-        bi_foo = BuildInfo('foo')
-        bi_bar = BuildInfo('bar')
+    def test_SConsignDirFile(self):
+        bi_foo = DummySConsignEntry('foo')
+        bi_bar = DummySConsignEntry('bar')
 
-        f = SCons.SConsign.DirFile(DummyNode(), DummyModule())
+        f = SCons.SConsign.DirFile(DummyNode())
         f.set_entry('foo', bi_foo)
         f.set_entry('bar', bi_bar)
 
@@ -174,18 +272,16 @@ class SConsignDirFileTestCase(SConsignTestCase):
         assert e == bi_foo, e
         assert e.name == 'foo', e.name
 
-        assert bi_foo.c_from_s, bi_foo.c_from_s
-
         e = f.get_entry('bar')
         assert e == bi_bar, e
         assert e.name == 'bar', e.name
         assert not hasattr(e, 'arg'), e
 
-        assert bi_bar.c_from_s, bi_bar.c_from_s
-
-        bbb = BuildInfo('bbb')
+        bbb = DummySConsignEntry('bbb')
         bbb.arg = 'bbb arg'
+
         f.set_entry('bar', bbb)
+
         e = f.get_entry('bar')
         assert e.name == 'bbb', e.name
         assert e.arg == 'bbb arg', e.arg
@@ -193,7 +289,7 @@ class SConsignDirFileTestCase(SConsignTestCase):
 
 class SConsignFileTestCase(SConsignTestCase):
 
-    def runTest(self):
+    def test_SConsignFile(self):
         test = self.test
         file = test.workpath('sconsign_file')
 
@@ -242,7 +338,7 @@ class SConsignFileTestCase(SConsignTestCase):
 
 class writeTestCase(SConsignTestCase):
 
-    def runTest(self):
+    def test_write(self):
 
         test = self.test
         file = test.workpath('sconsign_file')
@@ -263,10 +359,10 @@ class writeTestCase(SConsignTestCase):
         SCons.SConsign.DataBase = {}
         SCons.SConsign.File(file, fake_dbm)
 
-        f = SCons.SConsign.DB(DummyNode(), DummyModule())
+        f = SCons.SConsign.DB(DummyNode())
 
-        bi_foo = BuildInfo('foo')
-        bi_bar = BuildInfo('bar')
+        bi_foo = DummySConsignEntry('foo')
+        bi_bar = DummySConsignEntry('bar')
         f.set_entry('foo', bi_foo)
         f.set_entry('bar', bi_bar)
 
@@ -278,18 +374,18 @@ class writeTestCase(SConsignTestCase):
         assert fake_dbm.sync_count == 1, fake_dbm.sync_count
 
 
-def suite():
-    suite = unittest.TestSuite()
-    suite.addTest(BaseTestCase())
-    suite.addTest(SConsignDBTestCase())
-    suite.addTest(SConsignDirFileTestCase())
-    suite.addTest(SConsignFileTestCase())
-    suite.addTest(writeTestCase())
-    return suite
 
 if __name__ == "__main__":
-    runner = unittest.TextTestRunner()
-    result = runner.run(suite())
-    if not result.wasSuccessful():
+    suite = unittest.TestSuite()
+    tclasses = [
+        BaseTestCase,
+        SConsignDBTestCase,
+        SConsignDirFileTestCase,
+        SConsignFileTestCase,
+        writeTestCase,
+    ]
+    for tclass in tclasses:
+        names = unittest.getTestCaseNames(tclass, 'test_')
+        suite.addTests(map(tclass, names))
+    if not unittest.TextTestRunner().run(suite).wasSuccessful():
         sys.exit(1)
-