cow.py 3.4 KB

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