#!/usr/bin/python

import re
import testmod
from parseerror import ParseError
from cleave import cleave

class Eventdef:
  def __init__(self, sEvType, sEvCode, sEvAlwa, sEvKind, sEvFmt):
    self.sEvType = sEvType
    self.sEvCode = sEvCode
    self.sEvAlwa = sEvAlwa
    self.sEvKind = sEvKind
    self.sEvFmt  = sEvFmt

def test_parseEventdefRelation():
  tests = [
    ( ( "RELATION(AMCGenCreate                    , 0x0001, TRUE, Pool, PP)",
        [        'sEvType',          'sEvCode','sEvAlwa','sEvKind','sEvFmt',],
      ),
      ([         "AMCGenCreate",                "0x0001","TRUE","Pool","PP"]
      ),
    ),
  ]
  def test_Helper(fn, *t):
    args = t[:-1]
    lAttrsTest = t[-1]
    b = fn(*args)
    vals = []
    for attr in lAttrsTest:
      #print b.__dict__[attr]
      vals.append(b.__dict__[attr])
    return vals
  testmod.test_fn(
    lambda *test: test_Helper(parseEventdefRelation, *test),
    tests,
    (ParseError,),
    nocatch=True,
    suite="parseEventdefRelation"
  )

sPattEventdefRelation = (
  r'\s*RELATION\s*'
  r'\(\s*'
  r'(?P<sEvType>\w+)\s*,\s*'
  r'(?P<sEvCode>\w+)\s*,\s*'
  r'(?P<sEvAlwa>\w+)\s*,\s*'
  r'(?P<sEvKind>\w+)\s*,\s*'
  r'(?P<sEvFmt>\w+)\s*'
  r'\)\s*'
)
pattEventdefRelation = re.compile(sPattEventdefRelation)
groupEventdefRelation = (
  'sEvType', 'sEvCode', 'sEvAlwa', 'sEvKind', 'sEvFmt', 
)

def parseEventdefRelation(l):
  m = re.match(pattEventdefRelation, l)
  if not m:
    raise ParseError(l, "parseEventdefRelation", "re non-match")
  ed = Eventdef(* m.group(* groupEventdefRelation) )
  #print `ed`
  return ed
  
def parseEventdefFile(file):
  eds = []
  for l in file.readlines():
    ws = l.split()
    if len(ws) == 0:
      continue
    w, rest = cleave(ws[0], "(")
    if w == "RELATION":
      ed = parseEventdefRelation(l)
      eds.append(ed)
  return eds
  
if __name__ == "__main__":
  test_parseEventdefRelation()
