| Index: common/py_utils/py_utils/class_util_unittest.py
|
| diff --git a/common/py_utils/py_utils/class_util_unittest.py b/common/py_utils/py_utils/class_util_unittest.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..938bcdc7b812be42af8f531c4b4c6b1acc8ec502
|
| --- /dev/null
|
| +++ b/common/py_utils/py_utils/class_util_unittest.py
|
| @@ -0,0 +1,138 @@
|
| +# Copyright 2017 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import unittest
|
| +
|
| +from py_utils import class_util
|
| +
|
| +
|
| +class ClassUtilTest(unittest.TestCase):
|
| +
|
| + def testClassOverridden(self):
|
| + class Parent(object):
|
| + def MethodShouldBeOverridden(self):
|
| + pass
|
| +
|
| + class Child(Parent):
|
| + def MethodShouldBeOverridden(self):
|
| + pass
|
| +
|
| + self.assertTrue(class_util.IsMethodOverridden(
|
| + Parent, Child, 'MethodShouldBeOverridden'))
|
| +
|
| + def testGrandchildOverridden(self):
|
| + class Parent(object):
|
| + def MethodShouldBeOverridden(self):
|
| + pass
|
| +
|
| + class Child(Parent):
|
| + pass
|
| +
|
| + class Grandchild(Child):
|
| + def MethodShouldBeOverridden(self):
|
| + pass
|
| +
|
| + self.assertTrue(class_util.IsMethodOverridden(
|
| + Parent, Grandchild, 'MethodShouldBeOverridden'))
|
| +
|
| + def testClassNotOverridden(self):
|
| + class Parent(object):
|
| + def MethodShouldBeOverridden(self):
|
| + pass
|
| +
|
| + class Child(Parent):
|
| + def SomeOtherMethod(self):
|
| + pass
|
| +
|
| + self.assertFalse(class_util.IsMethodOverridden(
|
| + Parent, Child, 'MethodShouldBeOverridden'))
|
| +
|
| + def testGrandchildNotOverridden(self):
|
| + class Parent(object):
|
| + def MethodShouldBeOverridden(self):
|
| + pass
|
| +
|
| + class Child(Parent):
|
| + def MethodShouldBeOverridden(self):
|
| + pass
|
| +
|
| + class Grandchild(Child):
|
| + def SomeOtherMethod(self):
|
| + pass
|
| +
|
| + self.assertTrue(class_util.IsMethodOverridden(
|
| + Parent, Grandchild, 'MethodShouldBeOverridden'))
|
| +
|
| + def testClassNotPresentInParent(self):
|
| + class Parent(object):
|
| + def MethodShouldBeOverridden(self):
|
| + pass
|
| +
|
| + class Child(Parent):
|
| + def MethodShouldBeOverridden(self):
|
| + pass
|
| +
|
| + self.assertRaises(
|
| + AssertionError, class_util.IsMethodOverridden,
|
| + Parent, Child, 'WrongMethod')
|
| +
|
| + def testInvalidClass(self):
|
| + class Foo(object):
|
| + def Bar(self):
|
| + pass
|
| +
|
| + self.assertRaises(
|
| + AssertionError, class_util.IsMethodOverridden, 'invalid', Foo, 'Bar')
|
| +
|
| + self.assertRaises(
|
| + AssertionError, class_util.IsMethodOverridden, Foo, 'invalid', 'Bar')
|
| +
|
| + def testMultipleInheritance(self):
|
| + class Aaa(object):
|
| + def One(self):
|
| + pass
|
| +
|
| + class Bbb(object):
|
| + def Two(self):
|
| + pass
|
| +
|
| + class Ccc(Aaa, Bbb):
|
| + pass
|
| +
|
| + class Ddd(object):
|
| + def Three(self):
|
| + pass
|
| +
|
| + class Eee(Ddd):
|
| + def Three(self):
|
| + pass
|
| +
|
| + class Fff(Ccc, Eee):
|
| + def One(self):
|
| + pass
|
| +
|
| + class Ggg(object):
|
| + def Four(self):
|
| + pass
|
| +
|
| + class Hhh(Fff, Ggg):
|
| + def Two(self):
|
| + pass
|
| +
|
| + class Iii(Hhh):
|
| + pass
|
| +
|
| + class Jjj(Iii):
|
| + pass
|
| +
|
| + self.assertFalse(class_util.IsMethodOverridden(Aaa, Ccc, 'One'))
|
| + self.assertTrue(class_util.IsMethodOverridden(Aaa, Fff, 'One'))
|
| + self.assertTrue(class_util.IsMethodOverridden(Aaa, Hhh, 'One'))
|
| + self.assertTrue(class_util.IsMethodOverridden(Aaa, Jjj, 'One'))
|
| + self.assertFalse(class_util.IsMethodOverridden(Bbb, Ccc, 'Two'))
|
| + self.assertTrue(class_util.IsMethodOverridden(Bbb, Hhh, 'Two'))
|
| + self.assertTrue(class_util.IsMethodOverridden(Bbb, Jjj, 'Two'))
|
| + self.assertFalse(class_util.IsMethodOverridden(Eee, Fff, 'Three'))
|
| +
|
| +
|
|
|