import unittest
from _virtual import *

class VirtualTest(unittest.TestCase):

    def testIt(self):              
        
        class E(C):
            def f_abs(self):
                return 3
            def dummy(self):
                # override should not work
                return 100
            
        class F(C):
            def f(self):
                return 10
            def name(self):
                return 'F'
  
        class G(D):
            def dummy(self):
                # override should not work
                return 100

        e = E()
        f = F()

        self.assertEqual(e.f(), 3)
        self.assertEqual(call_f(e), 3)
        self.assertEqual(f.f(), 10)
        self.assertEqual(call_f(f), 10)
        self.assertEqual(e.get_name(), 'C')
        #self.assertEqual(e.get_name(), 'E') check this later

        c = C()
        c.bar(1)      # ok
        c.bar('a')    # ok
        self.assertRaises(TypeError, c.bar, 1.0)        

        # test no_overrides
        d = G()        
        self.assertEqual(e.dummy(), 100)
        self.assertEqual(call_dummy(e), 0)
        self.assertEqual(d.dummy(), 100)
        self.assertEqual(call_dummy(d), 0)     


        
if __name__ == '__main__':
    unittest.main()  
