#/usr/bin/python -Qwarnall -tt import unittest from test import test_support import Serializer, os class AbstractSerializerTest(unittest.TestCase): ser_file = 'test.ser' def setUp(self): if os.path.exists(self.ser_file): os.unlink(self.ser_file) def tearDown(self): if os.path.exists(self.ser_file): os.unlink(self.ser_file) def _create_sm(self, defaults = None): sm = Serializer.SerializerMaster(self.ser_file, defaults) self.assert_(os.path.exists(self.ser_file), 'did not create ser_file') return sm class TestSerializerMaster(AbstractSerializerTest): def test_empty(self): sm1 = Serializer.SerializerMaster(self.ser_file) self.assertEqual(len(sm1.keys()), 1, 'added value from nowhere') self.failIfEqual(sm1.value(sm1.LAST_WRITE), None, 'did not add last write') def test_create_state(self): sm1 = Serializer.SerializerMaster(self.ser_file, {'a': 1, 'b': [1,2] }) self.assert_(os.path.exists(self.ser_file), 'did not create ser_file') sm2 = Serializer.SerializerMaster(self.ser_file) self.assertEqual(sm2.value('a'), 1, 'did not restore "a"') self.assertEqual(sm2.value('b'), [1,2], 'did not restore "b"') def test_add_default_1(self): sm1 = Serializer.SerializerMaster(self.ser_file, {'a': 1, 'b': {1: 2} }) self.assert_(os.path.exists(self.ser_file), 'did not create ser_file') sm2 = Serializer.SerializerMaster(self.ser_file, {'a': 2, 'c': [1,2] }) self.assertEqual(sm2.value('a'), 1, 'did not restore "a" with original value') self.assertEqual(sm2.value('b'), {1: 2}, 'did not restore "b"') self.assertEqual(sm2.value('c'), [1,2], 'did add default value for "c"') class TestDictList(AbstractSerializerTest): def test_one(self): sm1 = self._create_sm() dl = Serializer.DictList() sm1.set('a', dl) dl.add('xyz', 1) self.assertEqual(dl.get_list('xyz'), [1], 'Did not set/get list (found %s)' % str(dl.get_list('xyz'))) sm2 = self._create_sm() depickled = sm2.value('a') self.failIfEqual(depickled, None, 'did not restore a') self.assertEqual(depickled.get_list('xyz'), [1], 'Did not auto-save on add (loaded %s)' % str(depickled.get_list('xyz'))) class TestPendingQueue(AbstractSerializerTest): def test_len_1(self): sm = self._create_sm({'a': Serializer.PendingQueue()}) pq = sm.value('a') self.assertEqual(len(pq), 0, 'did not set length correctly') def test_len_2(self): sm = self._create_sm({'a': Serializer.PendingQueue()}) pq = sm.value('a') pq.add('xyz') self.assertEqual(len(pq), 1, 'did not set length correctly (1)') pq.add(Serializer.PendingQueue()) pq.add(14) pq.add(-2.6) pq.add( {1: 'b'} ) self.assertEqual(len(pq), 5, 'did not set length correctly (5)') def test_serialize_1(self): sm = self._create_sm({'a': Serializer.PendingQueue()}) pq = sm.value('a') values = [-2.1,['a',1,'c'], 14, 'xyz', {1:'b'}] for v in values: pq.add(v) sm2 = self._create_sm() pq_2 = sm2.value('a') self.assertEqual(len(pq_2), 5, 'did not restore with right length') res = [] while pq_2.has_contents(): res.append(pq_2.next()) self.assertEqual(res, values, 'did not restore queue as expected (expected %s, found %s)' % ( str(res), str(values))) if __name__ == '__main__': unittest.main()