#!/usr/local/bin/python
#
# File:        testexceptions
# Copyright:   (c) 2001 Lawrence Livermore National Security, LLC
# Revision:    @(#) $Revision: 6192 $
# Date:        $Date: 2007-10-22 16:12:59 -0700 (Mon, 22 Oct 2007) $
# Description: Exercise exceptions
#
# Try to exercise everything possible in Python.

import Inherit.A
import Inherit.B
import Inherit.C
import Inherit.D
import Inherit.E
import Inherit.E2
import Inherit.F
import Inherit.F2
import Inherit.G
import Inherit.G2
import Inherit.H
import Inherit.I
import Inherit.J
import Inherit.K
import Inherit.L

from synch.ResultType import *
from synch import RegOut

class TestCounter:

  def __init__(self, numparts = -1):
    self.tracker = RegOut.RegOut()
    self.partno = 0
    self.tracker.setExpectations(numparts)

  def describeTest(self, description):
    self.partno = self.partno + 1
    self.tracker.startPart(self.partno)
    self.tracker.writeComment(description)

  def fail(self):
    self.tracker.forceFailure()

  def evalTest(self, result, expected = 1):
    if (result):
      if (expected):
        self.tracker.endPart(self.partno, PASS)
      else:
        self.tracker.endPart(self.partno, XPASS)
    else:
      if (expected):
        self.tracker.endPart(self.partno, FAIL)
      else:
        self.tracker.endPart(self.partno, XFAIL)
        
  def finish(self):
    self.tracker.close()
      
def driver(counter):
  counter.describeTest('c.c() = "C.c"')
  c = Inherit.C.C()
  counter.evalTest(c.c() == "C.c")

  counter.describeTest('d.a() == "D.a" : inheritance of interface A')
  d = Inherit.D.D()
  counter.evalTest(d.a() == "D.a")

  counter.describeTest('d.d() == "D.d"')
  counter.evalTest(d.d() == "D.d")

  counter.describeTest("a = Inherit.A.A(d)")
  a = Inherit.A.A(d)
  counter.evalTest(a != None)

  if (a):
    counter.describeTest('a.a() = "D.a"')
    counter.evalTest(a.a() == "D.a")

  e = Inherit.E.E()
  counter.describeTest('e.c() == "C.c"')
  counter.evalTest(e.c() == "C.c")

  counter.describeTest('e.e() == "E.e"')
  counter.evalTest(e.e() == 'E.e')

  counter.describeTest("c = Inherit.C.C(e)")
  c = Inherit.C.C(e)
  counter.evalTest(c != None)

  if (c):
    counter.describeTest('c.c() == "C.c"')
    counter.evalTest(c.c() == "C.c")

  e2 = Inherit.E2.E2()
  counter.describeTest('e2.c() == "E2.c"')
  counter.evalTest(e2.c() == "E2.c")

  counter.describeTest('e2.e() == "E2.c"')
  counter.evalTest(e2.e() == "E2.e")

  counter.describeTest('c = Inherit.C.C(e2)')
  c = Inherit.C.C(e2)
  counter.evalTest(c != None)
  
  if (c):
    counter.describeTest('c.c() == "E2.c"')
    counter.evalTest(c.c() == "E2.c")

  f = Inherit.F.F()
  counter.describeTest('f.a() == "F.a"')
  counter.evalTest(f.a() == "F.a")
  counter.describeTest('f.b() == "F.b"')
  counter.evalTest(f.b() == "F.b")
  counter.describeTest('f.c() == "C.c"')
  counter.evalTest(f.c() == "C.c")
  counter.describeTest('f.f() == "F.f"')
  counter.evalTest(f.f() == "F.f")

  counter.describeTest('a = Inherit.A.A(f)')
  a = Inherit.A.A(f)
  counter.evalTest(a != None)

  counter.describeTest('a.a() == "F.a"')
  counter.evalTest(a.a() == "F.a")

  counter.describeTest('b = Inherit.B.B(f)')
  b = Inherit.B.B(f)
  counter.evalTest(b != None)

  counter.describeTest('b.b() == "F.b"')
  counter.evalTest(b.b() == "F.b")

  counter.describeTest('c = Inherit.C.C(f)')
  c = Inherit.C.C(f)
  counter.evalTest(c != None)

  counter.describeTest('c.c() == "C.c"')
  counter.evalTest(c.c() == "C.c")

  f2 = Inherit.F2.F2()
  counter.describeTest('f2.a() == "F2.a"')
  counter.evalTest(f2.a() == "F2.a")
  counter.describeTest('f2.b() == "F2.b"')
  counter.evalTest(f2.b() == "F2.b")
  counter.describeTest('f2.c() == "F2.c"')
  counter.evalTest(f2.c() == "F2.c")
  counter.describeTest('f2.f() == "F2.f"')
  counter.evalTest(f2.f() == "F2.f")

  counter.describeTest('a = Inherit.A.A(f2)')
  a = Inherit.A.A(f2)
  counter.evalTest(a != None)

  counter.describeTest('a.a() == "F2.a"')
  counter.evalTest(a.a() == "F2.a")

  counter.describeTest('b = Inherit.B.B(f2)')
  b = Inherit.B.B(f2)
  counter.evalTest(b != None)

  counter.describeTest('b.b() == "F2.b"')
  counter.evalTest(b.b() == "F2.b")

  counter.describeTest('c = Inherit.C.C(f2)')
  c = Inherit.C.C(f2)
  counter.evalTest(c != None)

  counter.describeTest('c.c() == "F2.c"')
  counter.evalTest(c.c() == "F2.c")

  g = Inherit.G.G()
  counter.describeTest('g.a() == "D.a"')
  counter.evalTest(g.a() == "D.a")
  counter.describeTest('g.d() == "D.d"')
  counter.evalTest(g.d() == "D.d")
  counter.describeTest('g.g() == "G.g"')
  counter.evalTest(g.g() == "G.g")
  
  counter.describeTest('a = Inherit.A.A(g)')
  a = Inherit.A.A(g)
  counter.evalTest(a != None)

  counter.describeTest('a.a() == "D.a"')
  counter.evalTest(a.a() == "D.a")

  counter.describeTest('d = Inherit.D.D(g)')
  d = Inherit.D.D(g)
  counter.evalTest(d != None)

  counter.describeTest('d.a() == "D.a"')
  counter.evalTest(d.a() == "D.a")
  counter.describeTest('d.d() == "D.d"')
  counter.evalTest(d.d() == "D.d")
  
  g2 = Inherit.G2.G2()
  counter.describeTest('g2.a() == "G2.a"')
  counter.evalTest(g2.a() == "G2.a")
  counter.describeTest('g2.d() == "G2.d"')
  counter.evalTest(g2.d() == "G2.d")
  counter.describeTest('g2.g() == "G2.g"')
  counter.evalTest(g2.g() == "G2.g")
  
  counter.describeTest('a = Inherit.A.A(g2)')
  a = Inherit.A.A(g2)
  counter.evalTest(a != None)

  counter.describeTest('a.a() == "G2.a"')
  counter.evalTest(a.a() == "G2.a")

  counter.describeTest('d = Inherit.D.D(g2)')
  d = Inherit.D.D(g2)
  counter.evalTest(d != None)

  counter.describeTest('d.a() == "G2.a"')
  counter.evalTest(d.a() == "G2.a")
  counter.describeTest('d.d() == "G2.d"')
  counter.evalTest(d.d() == "G2.d")

  counter.describeTest('i = Inherit.I.I()')
  i = Inherit.I.I()
  counter.evalTest(i != None)
  counter.describeTest('i.a() == "I.a"')
  counter.evalTest(i.a() == "I.a")
  counter.describeTest('i.h() == "I.h"')
  counter.evalTest(i.h() == "I.h")

  counter.describeTest('h = Inherit.H.H(i)')
  h = Inherit.H.H(i)
  counter.evalTest(h != None)
  counter.describeTest('h.a() == "I.a"')
  counter.evalTest(h.a() == "I.a")
  counter.describeTest('h.h() == "I.h"')
  counter.evalTest(h.h() == "I.h")

  #test supers with J
  counter.describeTest('j = Inherit.J.J()')
  j = Inherit.J.J()
  counter.evalTest(j != None)
  counter.describeTest('j.a() == "J.a"')
  counter.evalTest(j.a() == "J.a")
  counter.describeTest('j.b() == "J.b"')
  counter.evalTest(j.b() == "J.b")
  counter.describeTest('j.j() == "J.j"')
  counter.evalTest(j.j() == "J.j")
  
  counter.describeTest('j.c() == "J.E2.c"')
  counter.evalTest(j.c() == "J.E2.c")
  counter.describeTest('j.e() == "J.E2.e"')
  counter.evalTest(j.e() == "J.E2.e")

#test from clauses with K and L
  counter.describeTest('k = Inherit.K.K()')
  k = Inherit.K.K()
  counter.evalTest(k != None)
  counter.describeTest('k.a() == "K.a"')
  counter.evalTest(k.a() == "K.a")
  counter.describeTest('k.a2(0) == "K.a2"')
  counter.evalTest(k.a2(0) == "K.a2")
  
  counter.describeTest('k.() == "K.h"')
  counter.evalTest(k.h() == "K.h")
  counter.describeTest('k.k() == "K.k"')
  counter.evalTest(k.k() == "K.k")

  counter.describeTest('h = Inherit.H.H(k)')
  h = Inherit.H.H(k)
  counter.evalTest(h != None)
  counter.describeTest('h.a() == "K.a"')
  counter.evalTest(h.a() == "K.a")
  counter.describeTest('h.h() == "K.h"')
  counter.evalTest(h.h() == "K.h")

  counter.describeTest('l = Inherit.L.L()')
  l = Inherit.L.L()
  counter.evalTest(l != None)
  counter.describeTest('l.a() == "L.a"')
  counter.evalTest(l.aa() == "L.a")
  counter.describeTest('l.a(0) == "L.a2"')
  counter.evalTest(l.a2(0) == "L.a2")

  counter.describeTest('l.l() == "L.l"')
  counter.evalTest(l.l() == "L.l")

  counter.describeTest('a = Inherit.A.A(l)')
  a = Inherit.A.A(l)
  counter.evalTest(a != None)
  counter.describeTest('a.a() == "L.a"')
  counter.evalTest(a.a() == "L.a")

if __name__ == '__main__':
  import sys
  counter = TestCounter(75)
  try:
    driver(counter)
  except:
    (type, value, trace) = sys.exc_info()
    counter.fail()
    import traceback
    traceback.print_exception(type, value, trace)
  counter.finish()
0
