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')) |
+ |
+ |