Testing for type A
A-virtual A.SayHi()='Hi '
A-interface Greeter.SayHi()='Hi '
A-virtual A.SayHiTwice()='Hi Hi '
A-interface Greeter.SayHiTwice()='Hi Hi '
End testing for type A
Testing for type B
B-virtual B.SayHi()='Hello '
B-interface Greeter.SayHi()='Hello '
B-interface Greeter2.SayHi()='Hello '
B-virtual B.SayHiTwice()='I say Hello Hello '
B-interface Greeter.SayHiTwice()='I say Hello Hello '
B-interface Greeter2.SayHiTwice()='I say Hello Hello '
End testing for type B
Testing for type C
C-virtual A.SayHi()='Hi '
C-virtual C.SayHi()='Hi '
C-interface Greeter.SayHi()='Hi '
C-virtual A.SayHiTwice()='You don't control me'
C-virtual C.SayHiTwice()='You don't control me'
C-interface Greeter.SayHiTwice()='You don't control me'
End testing for type C
Testing for type D
D-virtual D.GetName()='Alex '
D-interface Greeter3.GetName()='Alex '
D-virtual D.SayHi()='Hello Alex '
D-interface Greeter.SayHi()='Hello Alex '
D-interface Greeter3.SayHi()='Hello Alex '
D-virtual D.SayHiTwice()='Hello Alex Hello Alex '
D-interface Greeter.SayHiTwice()='Hello Alex Hello Alex '
D-interface Greeter3.SayHiTwice()='Hello Alex Hello Alex '
End testing for type D
Testing for type E
E-virtual A.SayHi()='Hi2 '
E-virtual E.SayHi()='Hi2 '
E-interface Greeter.SayHi()='Hi2 '
E-interface Greeter2.SayHi()='Hi2 '
E-virtual A.SayHiTwice()='I say Hi2 Hi2 '
E-virtual E.SayHiTwice()='I say Hi2 Hi2 '
E-interface Greeter.SayHiTwice()='I say Hi2 Hi2 '
E-interface Greeter2.SayHiTwice()='I say Hi2 Hi2 '
End testing for type E
Testing for type F
F-interface Attendant.GetPlace()='android'
F-virtual F.GetPlace()='android'
F-virtual A.SayHi()='Hi '
F-interface Attendant.SayHi()='Hi '
F-virtual F.SayHi()='Hi '
F-interface Greeter.SayHi()='Hi '
F-virtual A.SayHiTwice()='We can override both interfaces'
F-interface Attendant.SayHiTwice()='We can override both interfaces'
F-virtual F.SayHiTwice()='We can override both interfaces'
F-interface Greeter.SayHiTwice()='We can override both interfaces'
End testing for type F
Testing for type G
G-interface Attendant.GetPlace()='android'
G-virtual G.GetPlace()='android'
G-interface Attendant.SayHi()='welcome to android'
G-virtual G.SayHi()='welcome to android'
G-interface Attendant.SayHiTwice()='welcome to androidwelcome to android'
G-virtual G.SayHiTwice()='welcome to androidwelcome to android'
End testing for type G
Testing for type H
H-interface Extension.SayHi()='welcome '
H-virtual H.SayHi()='welcome '
End testing for type H
Testing for type I
I-virtual A.SayHi()='Hi '
I-interface Greeter.SayHi()='Hi '
I-interface Greeter2.SayHi()='Hi '
I-virtual I.SayHi()='Hi '
I-virtual A.SayHiTwice()='I say Hi Hi '
I-interface Greeter.SayHiTwice()='I say Hi Hi '
I-interface Greeter2.SayHiTwice()='I say Hi Hi '
I-virtual I.SayHiTwice()='I say Hi Hi '
End testing for type I
Testing for type J
J-virtual A.SayHi()='Hi '
J-interface Greeter.SayHi()='Hi '
J-virtual J.SayHi()='Hi '
J-virtual A.SayHiTwice()='Hi Hi '
J-interface Greeter.SayHiTwice()='Hi Hi '
J-virtual J.SayHiTwice()='Hi Hi '
End testing for type J
Testing for type K
K-interface Foo.bar()='foobar'
K-virtual K.bar()='foobar'
End testing for type K
Testing for type L
L-interface Foo.bar()='foobar'
L-virtual K.bar()='foobar'
L-virtual L.bar()='foobar'
End testing for type L
Testing for type M
M-interface Foo.bar()='BAZ!'
M-interface Fooer.bar()='BAZ!'
M-virtual K.bar()='BAZ!'
M-virtual L.bar()='BAZ!'
M-virtual M.bar()='BAZ!'
End testing for type M
Testing for type N
N-interface Foo.bar()='foobar'
N-virtual N.bar()='foobar'
End testing for type N
Testing for type O
O-interface Foo.bar()='foobar foobar'
O-interface Foo2.bar()='foobar foobar'
O-virtual N.bar()='foobar foobar'
O-virtual O.bar()='foobar foobar'
End testing for type O
Testing for type P
P-interface Foo.bar()='not foobar!'
P-interface Foo2.bar()='not foobar!'
P-virtual N.bar()='not foobar!'
P-virtual O.bar()='not foobar!'
P-virtual P.bar()='not foobar!'
End testing for type P
Testing for type Q
Q-interface on Foo: bar() threw exception!
Exception is of type java.lang.IncompatibleClassChangeError
Q-interface on Foo2: bar() threw exception!
Exception is of type java.lang.IncompatibleClassChangeError
Q-interface on Foo3: bar() threw exception!
Exception is of type java.lang.IncompatibleClassChangeError
Q-virtual on N: bar() threw exception!
Exception is of type java.lang.IncompatibleClassChangeError
Q-virtual on O: bar() threw exception!
Exception is of type java.lang.IncompatibleClassChangeError
Q-virtual on Q: bar() threw exception!
Exception is of type java.lang.IncompatibleClassChangeError
End testing for type Q