test_observables.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import sys
  2. from nicegui.observables import make_observable
  3. count = 0
  4. def reset_counter():
  5. global count
  6. count = 0
  7. def increment_counter():
  8. global count
  9. count += 1
  10. def test_observable_dict():
  11. reset_counter()
  12. data = make_observable({}, increment_counter)
  13. data['a'] = 1
  14. assert count == 1
  15. del data['a']
  16. assert count == 2
  17. data.update({'b': 2, 'c': 3})
  18. assert count == 3
  19. data.pop('b')
  20. assert count == 4
  21. data.popitem()
  22. assert count == 5
  23. data.clear()
  24. assert count == 6
  25. data.setdefault('a', 1)
  26. assert count == 7
  27. if sys.version_info >= (3, 9):
  28. data |= {'b': 2}
  29. assert count == 8
  30. def test_observable_list():
  31. reset_counter()
  32. data = make_observable([], increment_counter)
  33. data.append(1)
  34. assert count == 1
  35. data.extend([2, 3, 4])
  36. assert count == 2
  37. data.insert(0, 0)
  38. assert count == 3
  39. data.remove(1)
  40. assert count == 4
  41. data.pop()
  42. assert count == 5
  43. data.sort()
  44. assert count == 6
  45. data.reverse()
  46. assert count == 7
  47. data[0] = 1
  48. assert count == 8
  49. data[0:2] = [1, 2, 3]
  50. assert count == 9
  51. del data[0]
  52. assert count == 10
  53. del data[0:1]
  54. assert count == 11
  55. data.clear()
  56. assert count == 12
  57. data += [1, 2, 3]
  58. assert count == 13
  59. def test_observable_set():
  60. reset_counter()
  61. data = make_observable({1, 2, 3, 4, 5}, increment_counter)
  62. data.add(1)
  63. assert count == 1
  64. data.remove(1)
  65. assert count == 2
  66. data.discard(2)
  67. assert count == 3
  68. data.pop()
  69. assert count == 4
  70. data.clear()
  71. assert count == 5
  72. data.update({1, 2, 3})
  73. assert count == 6
  74. data.intersection_update({1, 2})
  75. assert count == 7
  76. data.difference_update({1})
  77. assert count == 8
  78. data.symmetric_difference_update({1, 2})
  79. assert count == 9
  80. data |= {1, 2, 3}
  81. assert count == 10
  82. data &= {1, 2}
  83. assert count == 11
  84. data -= {1}
  85. assert count == 12
  86. data ^= {1, 2}
  87. assert count == 13
  88. def test_nested_observables():
  89. reset_counter()
  90. data = make_observable({
  91. 'a': 1,
  92. 'b': [1, 2, 3, {'x': 1, 'y': 2, 'z': 3}],
  93. 'c': {'x': 1, 'y': 2, 'z': 3, 't': [1, 2, 3]},
  94. 'd': {1, 2, 3},
  95. }, increment_counter)
  96. data['a'] = 42
  97. assert count == 1
  98. data['b'].append(4)
  99. assert count == 2
  100. data['b'][3].update(t=4)
  101. assert count == 3
  102. data['c']['x'] = 2
  103. assert count == 4
  104. data['c']['t'].append(4)
  105. assert count == 5
  106. data['d'].add(4)
  107. assert count == 6