cow.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #
  2. # BitBake Tests for Copy-on-Write (cow.py)
  3. #
  4. # SPDX-License-Identifier: GPL-2.0-only
  5. #
  6. # Copyright 2006 Holger Freyther <freyther@handhelds.org>
  7. #
  8. import unittest
  9. class COWTestCase(unittest.TestCase):
  10. """
  11. Test case for the COW module from mithro
  12. """
  13. def testGetSet(self):
  14. """
  15. Test and set
  16. """
  17. from bb.COW import COWDictBase
  18. a = COWDictBase.copy()
  19. self.assertEqual(False, 'a' in a)
  20. a['a'] = 'a'
  21. a['b'] = 'b'
  22. self.assertEqual(True, 'a' in a)
  23. self.assertEqual(True, 'b' in a)
  24. self.assertEqual('a', a['a'] )
  25. self.assertEqual('b', a['b'] )
  26. def testCopyCopy(self):
  27. """
  28. Test the copy of copies
  29. """
  30. from bb.COW import COWDictBase
  31. # create two COW dict 'instances'
  32. b = COWDictBase.copy()
  33. c = COWDictBase.copy()
  34. # assign some keys to one instance, some keys to another
  35. b['a'] = 10
  36. b['c'] = 20
  37. c['a'] = 30
  38. # test separation of the two instances
  39. self.assertEqual(False, 'c' in c)
  40. self.assertEqual(30, c['a'])
  41. self.assertEqual(10, b['a'])
  42. # test copy
  43. b_2 = b.copy()
  44. c_2 = c.copy()
  45. self.assertEqual(False, 'c' in c_2)
  46. self.assertEqual(10, b_2['a'])
  47. b_2['d'] = 40
  48. self.assertEqual(False, 'd' in c_2)
  49. self.assertEqual(True, 'd' in b_2)
  50. self.assertEqual(40, b_2['d'])
  51. self.assertEqual(False, 'd' in b)
  52. self.assertEqual(False, 'd' in c)
  53. c_2['d'] = 30
  54. self.assertEqual(True, 'd' in c_2)
  55. self.assertEqual(True, 'd' in b_2)
  56. self.assertEqual(30, c_2['d'])
  57. self.assertEqual(40, b_2['d'])
  58. self.assertEqual(False, 'd' in b)
  59. self.assertEqual(False, 'd' in c)
  60. # test copy of the copy
  61. c_3 = c_2.copy()
  62. b_3 = b_2.copy()
  63. b_3_2 = b_2.copy()
  64. c_3['e'] = 4711
  65. self.assertEqual(4711, c_3['e'])
  66. self.assertEqual(False, 'e' in c_2)
  67. self.assertEqual(False, 'e' in b_3)
  68. self.assertEqual(False, 'e' in b_3_2)
  69. self.assertEqual(False, 'e' in b_2)
  70. b_3['e'] = 'viel'
  71. self.assertEqual('viel', b_3['e'])
  72. self.assertEqual(4711, c_3['e'])
  73. self.assertEqual(False, 'e' in c_2)
  74. self.assertEqual(True, 'e' in b_3)
  75. self.assertEqual(False, 'e' in b_3_2)
  76. self.assertEqual(False, 'e' in b_2)
  77. def testCow(self):
  78. from bb.COW import COWDictBase
  79. c = COWDictBase.copy()
  80. c['123'] = 1027
  81. c['other'] = 4711
  82. c['d'] = { 'abc' : 10, 'bcd' : 20 }
  83. copy = c.copy()
  84. self.assertEqual(1027, c['123'])
  85. self.assertEqual(4711, c['other'])
  86. self.assertEqual({'abc':10, 'bcd':20}, c['d'])
  87. self.assertEqual(1027, copy['123'])
  88. self.assertEqual(4711, copy['other'])
  89. self.assertEqual({'abc':10, 'bcd':20}, copy['d'])
  90. # cow it now
  91. copy['123'] = 1028
  92. copy['other'] = 4712
  93. copy['d']['abc'] = 20
  94. self.assertEqual(1027, c['123'])
  95. self.assertEqual(4711, c['other'])
  96. self.assertEqual({'abc':10, 'bcd':20}, c['d'])
  97. self.assertEqual(1028, copy['123'])
  98. self.assertEqual(4712, copy['other'])
  99. self.assertEqual({'abc':20, 'bcd':20}, copy['d'])