test_ro.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. ##############################################################################
  2. #
  3. # Copyright (c) 2014 Zope Foundation and Contributors.
  4. # All Rights Reserved.
  5. #
  6. # This software is subject to the provisions of the Zope Public License,
  7. # Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
  8. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
  9. # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  10. # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
  11. # FOR A PARTICULAR PURPOSE.
  12. #
  13. ##############################################################################
  14. """Resolution ordering utility tests"""
  15. import unittest
  16. class Test__mergeOrderings(unittest.TestCase):
  17. def _callFUT(self, orderings):
  18. from zope.interface.ro import _mergeOrderings
  19. return _mergeOrderings(orderings)
  20. def test_empty(self):
  21. self.assertEqual(self._callFUT([]), [])
  22. def test_single(self):
  23. self.assertEqual(self._callFUT(['a', 'b', 'c']), ['a', 'b', 'c'])
  24. def test_w_duplicates(self):
  25. self.assertEqual(self._callFUT([['a'], ['b', 'a']]), ['b', 'a'])
  26. def test_suffix_across_multiple_duplicats(self):
  27. O1 = ['x', 'y', 'z']
  28. O2 = ['q', 'z']
  29. O3 = [1, 3, 5]
  30. O4 = ['z']
  31. self.assertEqual(self._callFUT([O1, O2, O3, O4]),
  32. ['x', 'y', 'q', 1, 3, 5, 'z'])
  33. class Test__flatten(unittest.TestCase):
  34. def _callFUT(self, ob):
  35. from zope.interface.ro import _flatten
  36. return _flatten(ob)
  37. def test_w_empty_bases(self):
  38. class Foo(object):
  39. pass
  40. foo = Foo()
  41. foo.__bases__ = ()
  42. self.assertEqual(self._callFUT(foo), [foo])
  43. def test_w_single_base(self):
  44. class Foo(object):
  45. pass
  46. self.assertEqual(self._callFUT(Foo), [Foo, object])
  47. def test_w_bases(self):
  48. class Foo(object):
  49. pass
  50. class Bar(Foo):
  51. pass
  52. self.assertEqual(self._callFUT(Bar), [Bar, Foo, object])
  53. def test_w_diamond(self):
  54. class Foo(object):
  55. pass
  56. class Bar(Foo):
  57. pass
  58. class Baz(Foo):
  59. pass
  60. class Qux(Bar, Baz):
  61. pass
  62. self.assertEqual(self._callFUT(Qux),
  63. [Qux, Bar, Foo, object, Baz, Foo, object])
  64. class Test_ro(unittest.TestCase):
  65. def _callFUT(self, ob):
  66. from zope.interface.ro import ro
  67. return ro(ob)
  68. def test_w_empty_bases(self):
  69. class Foo(object):
  70. pass
  71. foo = Foo()
  72. foo.__bases__ = ()
  73. self.assertEqual(self._callFUT(foo), [foo])
  74. def test_w_single_base(self):
  75. class Foo(object):
  76. pass
  77. self.assertEqual(self._callFUT(Foo), [Foo, object])
  78. def test_w_bases(self):
  79. class Foo(object):
  80. pass
  81. class Bar(Foo):
  82. pass
  83. self.assertEqual(self._callFUT(Bar), [Bar, Foo, object])
  84. def test_w_diamond(self):
  85. class Foo(object):
  86. pass
  87. class Bar(Foo):
  88. pass
  89. class Baz(Foo):
  90. pass
  91. class Qux(Bar, Baz):
  92. pass
  93. self.assertEqual(self._callFUT(Qux),
  94. [Qux, Bar, Baz, Foo, object])