test_container.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. # -*- coding: utf-8 -*-
  2. """
  3. Tests of the neo.core.container.Container class
  4. """
  5. try:
  6. import unittest2 as unittest
  7. except ImportError:
  8. import unittest
  9. import numpy as np
  10. try:
  11. from IPython.lib.pretty import pretty
  12. except ImportError as err:
  13. HAVE_IPYTHON = False
  14. else:
  15. HAVE_IPYTHON = True
  16. from neo.core.container import Container, unique_objs
  17. class Test_unique_objs(unittest.TestCase):
  18. '''
  19. TestCase for unique_objs
  20. '''
  21. def test_some(self):
  22. a = 1
  23. b = np.array([3.14159265, 3.1415])
  24. c = [1, '1', 2.3, '5 8']
  25. d = set([1, '2', 'spam'])
  26. objs = [a, b, b, b, c, b, a, d, b, b, a, d, d, d, c, d, b, d, c, a]
  27. targ = [a, b, c, d]
  28. res = unique_objs(objs)
  29. self.assertEqual(targ, res)
  30. class TestContainerNeo(unittest.TestCase):
  31. '''
  32. TestCase to make sure basic initialization and methods work
  33. '''
  34. def test_init(self):
  35. '''test to make sure initialization works properly'''
  36. container = Container(name='a container', description='this is a test')
  37. self.assertEqual(container.name, 'a container')
  38. self.assertEqual(container.description, 'this is a test')
  39. self.assertEqual(container.file_origin, None)
  40. def test__children(self):
  41. container = Container()
  42. self.assertEqual(container._single_parent_objects, ())
  43. self.assertEqual(container._multi_parent_objects, ())
  44. self.assertEqual(container._single_parent_containers, ())
  45. self.assertEqual(container._multi_parent_containers, ())
  46. self.assertEqual(container._parent_objects, ())
  47. self.assertEqual(container._parent_containers, ())
  48. self.assertEqual(container._container_child_objects, ())
  49. self.assertEqual(container._data_child_objects, ())
  50. self.assertEqual(container._multi_child_objects, ())
  51. self.assertEqual(container._child_properties, ())
  52. self.assertEqual(container._repr_pretty_containers, ())
  53. self.assertEqual(container._single_child_objects, ())
  54. self.assertEqual(container._container_child_containers, ())
  55. self.assertEqual(container._data_child_containers, ())
  56. self.assertEqual(container._single_child_containers, ())
  57. self.assertEqual(container._multi_child_containers, ())
  58. self.assertEqual(container._child_objects, ())
  59. self.assertEqual(container._child_containers, ())
  60. self.assertEqual(container._multi_children, ())
  61. self.assertEqual(container._single_children, ())
  62. self.assertEqual(container.data_children, ())
  63. self.assertEqual(container.container_children, ())
  64. self.assertEqual(container.children, ())
  65. self.assertEqual(container.parents, ())
  66. self.assertEqual(container.data_children_recur, ())
  67. self.assertEqual(container.container_children_recur, ())
  68. self.assertEqual(container.children_recur, ())
  69. self.assertEqual(container.filter(test=1), [])
  70. self.assertEqual(container.filter(data=True, container=False, test=1),
  71. [])
  72. self.assertEqual(container.filter(data=False, container=False, test=1),
  73. [])
  74. self.assertEqual(container.filter(data=True, container=True, test=1),
  75. [])
  76. self.assertEqual(container.filter(data=False, container=True, test=1),
  77. [])
  78. self.assertEqual(container.size, {})
  79. container.create_many_to_one_relationship()
  80. container.create_many_to_many_relationship()
  81. container.create_relationship()
  82. class Test_Container_merge(unittest.TestCase):
  83. '''
  84. TestCase to make sure merge method works
  85. '''
  86. def setUp(self):
  87. self.name1 = 'a container 1'
  88. self.name2 = 'a container 2'
  89. self.description1 = 'this is a test 1'
  90. self.description2 = 'this is a test 2'
  91. self.cont1 = Container(name=self.name1, description=self.description1)
  92. self.cont2 = Container(name=self.name2, description=self.description2)
  93. def test_merge__dict(self):
  94. self.cont1.annotations = {'val1': 1, 'val2': 2.2, 'val3': 'test1'}
  95. self.cont2.annotations = {'val2': 2.2, 'val3': 'test2',
  96. 'val4': [4, 4.4], 'val5': True}
  97. ann1 = self.cont1.annotations
  98. ann1c = self.cont1.annotations.copy()
  99. ann2c = self.cont2.annotations.copy()
  100. targ = {'val1': 1, 'val2': 2.2, 'val3': 'test1;test2',
  101. 'val4': [4, 4.4], 'val5': True}
  102. self.cont1.merge(self.cont2)
  103. self.assertEqual(ann1, self.cont1.annotations)
  104. self.assertNotEqual(ann1c, self.cont1.annotations)
  105. self.assertEqual(ann2c, self.cont2.annotations)
  106. self.assertEqual(targ, self.cont1.annotations)
  107. self.assertEqual(self.name1, self.cont1.name)
  108. self.assertEqual(self.name2, self.cont2.name)
  109. self.assertEqual(self.description1, self.cont1.description)
  110. self.assertEqual(self.description2, self.cont2.description)
  111. def test_merge__different_type_AssertionError(self):
  112. self.cont1.annotations = {'val1': 1, 'val2': 2.2, 'val3': 'tester'}
  113. self.cont2.annotations = {'val3': False, 'val4': [4, 4.4],
  114. 'val5': True}
  115. self.cont1.merge(self.cont2)
  116. self.assertEqual(self.cont1.annotations,
  117. {'val1': 1,
  118. 'val2': 2.2,
  119. 'val3': 'MERGE CONFLICT',
  120. 'val4': [4, 4.4],
  121. 'val5': True})
  122. def test_merge__unmergable_unequal_AssertionError(self):
  123. self.cont1.annotations = {'val1': 1, 'val2': 2.2, 'val3': True}
  124. self.cont2.annotations = {'val3': False, 'val4': [4, 4.4],
  125. 'val5': True}
  126. self.cont1.merge(self.cont2)
  127. self.assertEqual(self.cont1.annotations,
  128. {'val1': 1,
  129. 'val2': 2.2,
  130. 'val3': 'MERGE CONFLICT',
  131. 'val4': [4, 4.4],
  132. 'val5': True})
  133. @unittest.skipUnless(HAVE_IPYTHON, "requires IPython")
  134. class Test_pprint(unittest.TestCase):
  135. def test__pretty(self):
  136. name = 'an object'
  137. description = 'this is a test'
  138. obj = Container(name=name, description=description)
  139. res = pretty(obj)
  140. targ = "Container with name: '%s' description: '%s'" % (name,
  141. description)
  142. self.assertEqual(res, targ)
  143. if __name__ == "__main__":
  144. unittest.main()