Home | History | Annotate | Download | only in py_utils
      1 # Copyright 2017 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import unittest
      6 
      7 from py_utils import class_util
      8 
      9 
     10 class ClassUtilTest(unittest.TestCase):
     11 
     12   def testClassOverridden(self):
     13     class Parent(object):
     14       def MethodShouldBeOverridden(self):
     15         pass
     16 
     17     class Child(Parent):
     18       def MethodShouldBeOverridden(self):
     19         pass
     20 
     21     self.assertTrue(class_util.IsMethodOverridden(
     22         Parent, Child, 'MethodShouldBeOverridden'))
     23 
     24   def testGrandchildOverridden(self):
     25     class Parent(object):
     26       def MethodShouldBeOverridden(self):
     27         pass
     28 
     29     class Child(Parent):
     30       pass
     31 
     32     class Grandchild(Child):
     33       def MethodShouldBeOverridden(self):
     34         pass
     35 
     36     self.assertTrue(class_util.IsMethodOverridden(
     37         Parent, Grandchild, 'MethodShouldBeOverridden'))
     38 
     39   def testClassNotOverridden(self):
     40     class Parent(object):
     41       def MethodShouldBeOverridden(self):
     42         pass
     43 
     44     class Child(Parent):
     45       def SomeOtherMethod(self):
     46         pass
     47 
     48     self.assertFalse(class_util.IsMethodOverridden(
     49         Parent, Child, 'MethodShouldBeOverridden'))
     50 
     51   def testGrandchildNotOverridden(self):
     52     class Parent(object):
     53       def MethodShouldBeOverridden(self):
     54         pass
     55 
     56     class Child(Parent):
     57       def MethodShouldBeOverridden(self):
     58         pass
     59 
     60     class Grandchild(Child):
     61       def SomeOtherMethod(self):
     62         pass
     63 
     64     self.assertTrue(class_util.IsMethodOverridden(
     65         Parent, Grandchild, 'MethodShouldBeOverridden'))
     66 
     67   def testClassNotPresentInParent(self):
     68     class Parent(object):
     69       def MethodShouldBeOverridden(self):
     70         pass
     71 
     72     class Child(Parent):
     73       def MethodShouldBeOverridden(self):
     74         pass
     75 
     76     self.assertRaises(
     77         AssertionError, class_util.IsMethodOverridden,
     78         Parent, Child, 'WrongMethod')
     79 
     80   def testInvalidClass(self):
     81     class Foo(object):
     82       def Bar(self):
     83         pass
     84 
     85     self.assertRaises(
     86         AssertionError, class_util.IsMethodOverridden, 'invalid', Foo, 'Bar')
     87 
     88     self.assertRaises(
     89         AssertionError, class_util.IsMethodOverridden, Foo, 'invalid', 'Bar')
     90 
     91   def testMultipleInheritance(self):
     92     class Aaa(object):
     93       def One(self):
     94         pass
     95 
     96     class Bbb(object):
     97       def Two(self):
     98         pass
     99 
    100     class Ccc(Aaa, Bbb):
    101       pass
    102 
    103     class Ddd(object):
    104       def Three(self):
    105         pass
    106 
    107     class Eee(Ddd):
    108       def Three(self):
    109         pass
    110 
    111     class Fff(Ccc, Eee):
    112       def One(self):
    113         pass
    114 
    115     class Ggg(object):
    116       def Four(self):
    117         pass
    118 
    119     class Hhh(Fff, Ggg):
    120       def Two(self):
    121         pass
    122 
    123     class Iii(Hhh):
    124       pass
    125 
    126     class Jjj(Iii):
    127       pass
    128 
    129     self.assertFalse(class_util.IsMethodOverridden(Aaa, Ccc, 'One'))
    130     self.assertTrue(class_util.IsMethodOverridden(Aaa, Fff, 'One'))
    131     self.assertTrue(class_util.IsMethodOverridden(Aaa, Hhh, 'One'))
    132     self.assertTrue(class_util.IsMethodOverridden(Aaa, Jjj, 'One'))
    133     self.assertFalse(class_util.IsMethodOverridden(Bbb, Ccc, 'Two'))
    134     self.assertTrue(class_util.IsMethodOverridden(Bbb, Hhh, 'Two'))
    135     self.assertTrue(class_util.IsMethodOverridden(Bbb, Jjj, 'Two'))
    136     self.assertFalse(class_util.IsMethodOverridden(Eee, Fff, 'Three'))
    137 
    138 
    139