blob: 938bcdc7b812be42af8f531c4b4c6b1acc8ec502 [file] [log] [blame]
# 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'))