1
1

test_observable.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import unittest
  2. from pycs.observable import Observable
  3. class Wrapper:
  4. def __init__(self, init=0):
  5. self.value = init
  6. def inc(self):
  7. self.value += 1
  8. def set(self, value):
  9. self.value = value
  10. class TestObservable(unittest.TestCase):
  11. settings = {
  12. 'dir1': {
  13. 'file11': 11,
  14. 'file12': ['one', 'two'],
  15. 'subdir1': {
  16. 'file111': 'oneoneone',
  17. 'file112': 112,
  18. 'subdir11': {
  19. 'file1111': 1111
  20. }
  21. }
  22. },
  23. 'dir2': {
  24. 'file21': 21,
  25. 'file22': 22
  26. },
  27. 'dir3': {
  28. 'subdir1': {
  29. 'file311': 311
  30. }
  31. },
  32. 'file1': 1
  33. }
  34. def test_load(self):
  35. obs = Observable.create(source=self.settings)
  36. # root
  37. self.assertEqual(obs['file1'], self.settings['file1'])
  38. # dict
  39. self.assertEqual(obs['dir1']['file11'], self.settings['dir1']['file11'])
  40. # list
  41. self.assertEqual(obs['dir1']['file12'][0], self.settings['dir1']['file12'][0])
  42. def test_update(self):
  43. obs = Observable.create(source=self.settings)
  44. # root
  45. obs['file1'] = 2
  46. self.assertEqual(2, obs['file1'])
  47. del obs['file1']
  48. self.assertFalse('file1' in obs)
  49. # dict
  50. obs['dir1']['file11'] = 12
  51. self.assertEqual(12, obs['dir1']['file11'])
  52. del obs['dir1']['file11']
  53. self.assertFalse('file11' in obs['dir1'])
  54. # list
  55. obs['dir1']['file12'][0] = 'three'
  56. self.assertEqual('three', obs['dir1']['file12'][0])
  57. del obs['dir1']['file12'][0]
  58. self.assertEqual(1, len(obs['dir1']['file12']))
  59. self.assertEqual('two', obs['dir1']['file12'][0])
  60. def test_subscribe(self):
  61. obs = Observable.create(source=self.settings)
  62. # root
  63. counter1 = Wrapper()
  64. obs['dir1'].subscribe(lambda x: counter1.inc())
  65. obs['dir1']['file11'] = 12
  66. self.assertEqual(1, counter1.value)
  67. del obs['dir1']['file11']
  68. self.assertEqual(2, counter1.value)
  69. # dict
  70. counter2 = Wrapper()
  71. obs['dir1'].subscribe(lambda x: counter2.inc())
  72. obs['dir1']['file11'] = 12
  73. self.assertEqual(1, counter2.value)
  74. del obs['dir1']['file11']
  75. self.assertEqual(2, counter2.value)
  76. # list
  77. counter3 = Wrapper()
  78. obs['dir1']['file12'].subscribe(lambda x: counter3.inc())
  79. obs['dir1']['file12'][0] = 'three'
  80. self.assertEqual(1, counter3.value)
  81. obs['dir1']['file12'].append(4)
  82. self.assertEqual(2, counter3.value)
  83. del obs['dir1']['file12'][1]
  84. self.assertEqual(3, counter3.value)
  85. # TODO test subscription value
  86. # TODO test complex append
  87. if __name__ == '__main__':
  88. unittest.main()