import unittest from pycs.observable import Observable class Wrapper: def __init__(self, init=0): self.value = init def inc(self): self.value += 1 def set(self, value): self.value = value class TestObservable(unittest.TestCase): settings = { 'dir1': { 'file11': 11, 'file12': ['one', 'two'], 'subdir1': { 'file111': 'oneoneone', 'file112': 112, 'subdir11': { 'file1111': 1111 } } }, 'dir2': { 'file21': 21, 'file22': 22 }, 'dir3': { 'subdir1': { 'file311': 311 } }, 'file1': 1 } def test_load(self): obs = Observable.create(source=self.settings) # root self.assertEqual(obs['file1'], self.settings['file1']) # dict self.assertEqual(obs['dir1']['file11'], self.settings['dir1']['file11']) # list self.assertEqual(obs['dir1']['file12'][0], self.settings['dir1']['file12'][0]) def test_update(self): obs = Observable.create(source=self.settings) # root obs['file1'] = 2 self.assertEqual(2, obs['file1']) del obs['file1'] self.assertFalse('file1' in obs) # dict obs['dir1']['file11'] = 12 self.assertEqual(12, obs['dir1']['file11']) del obs['dir1']['file11'] self.assertFalse('file11' in obs['dir1']) # list obs['dir1']['file12'][0] = 'three' self.assertEqual('three', obs['dir1']['file12'][0]) del obs['dir1']['file12'][0] self.assertEqual(1, len(obs['dir1']['file12'])) self.assertEqual('two', obs['dir1']['file12'][0]) def test_subscribe(self): obs = Observable.create(source=self.settings) # root counter1 = Wrapper() obs['dir1'].subscribe(lambda x: counter1.inc()) obs['dir1']['file11'] = 12 self.assertEqual(1, counter1.value) del obs['dir1']['file11'] self.assertEqual(2, counter1.value) # dict counter2 = Wrapper() obs['dir1'].subscribe(lambda x: counter2.inc()) obs['dir1']['file11'] = 12 self.assertEqual(1, counter2.value) del obs['dir1']['file11'] self.assertEqual(2, counter2.value) # list counter3 = Wrapper() obs['dir1']['file12'].subscribe(lambda x: counter3.inc()) obs['dir1']['file12'][0] = 'three' self.assertEqual(1, counter3.value) obs['dir1']['file12'].append(4) self.assertEqual(2, counter3.value) del obs['dir1']['file12'][1] self.assertEqual(3, counter3.value) # TODO test subscription value # TODO test complex append if __name__ == '__main__': unittest.main()