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