Ejemplo n.º 1
0
def RunTestCases(lang, vdmApp, clientID):
    toolMediator = ToolMediator(vdmApp, clientID)

    total = 1

    # jobSize is used to give a low level of outputting
    jobSize = cmdline.LookUp('spec-job-size')

    # Initialize the extraction of test cases.
    gentestcases.StartSearch('api', lang, 'impl')
    name = gentestcases.NextTestCase()

    while (name != None):
        report.setTestCaseName(name)
        if (total % jobSize) == 1:
            report.Progress(
                2, "Handling test cases " + str(total) + "..." +
                str(total + jobSize - 1))
        report.Progress(3, "Running " + name)

        ok = RunApiTestCase(name, lang, toolMediator)

        if util.CleanFile(ok):
            bn = util.ExtractName(name)
            util.DeleteFiles([bn + ".vdm"])
        name = gentestcases.NextTestCase()
        total = total + 1

    return true
Ejemplo n.º 2
0
def executeImpl(lang):
    # counter to indicate progress
    total = 1

    # jobSize is used to give a low level of outputting
    jobSize = cmdline.LookUp('spec-job-size')

    # Initialize the extraction of test cases.
    gentestcases.StartSearch('java', lang, 'impl')
    name = gentestcases.NextTestCase()

    while (name != None):
        report.setTestCaseName(name)
        if (total % jobSize) == 1:
            report.Progress(
                2, "Handling test cases " + str(total) + "..." +
                str(total + jobSize - 1))
        report.Progress(3, "Running " + name)

        (ok, modules) = RunImplTestCase(name, lang)

        if util.CleanFile(ok):
            bn = util.ExtractName(name)
            util.DeleteFiles([
                bn + ".vdm", bn + ".res", "TMAIN.java", "compare.arg",
                "compare.vdm"
            ])
            if modules:
                for mod in modules:
                    util.DeleteFiles([
                        mod + ".java", "external_" + mod + ".java",
                        mod + ".class"
                    ])
        name = gentestcases.NextTestCase()
        total = total + 1
Ejemplo n.º 3
0
def executeImpl(lang, dtc):
  
  # counter to indicate progress
  total = 1

  # jobSize is used to give a low level of outputting
  jobSize = cmdline.LookUp('spec-job-size')

  # Initialize the extraction of test cases.
  gentestcases.StartSearch('ip', lang, 'impl')
  name = gentestcases.NextTestCase()
  
  while (name != None):
    report.setTestCaseName(name)
    if (total % jobSize) == 1:
      report.Progress(2, "Handling test cases " + str(total) + "..." + str(total + jobSize-1))
    report.Progress(3, "Running " + name)

    ok = PrepareImplCase(name, lang)

    if ok:
      ok = RunImplTestCase(name, lang,dtc)

    if util.CleanFile(ok):
      util.RemoveTestFiles(name,[".vdm",".res",".arg"])
    name = gentestcases.NextTestCase()
    total = total +1
    util.MoveProfile()
Ejemplo n.º 4
0
def RunCommand(cmd, okExit=None, diagnosis=None, giveMeOutput = false, expectErr = false):
  report.Progress(4,"Running command: " + cmd)
  stdout = ""
  stderr = None

  if IsWindowsOS():
    cmd = "(" + cmd + ")"
  else:
    cmd = cmd #+ " 2>&1"

  output = os.popen(cmd)
  stdout = output.read()
  exitCode = output.close()
  if exitCode == None:
    exitCode = 0

  if cmdline.LookUp('show-errors-in-progress'):
    if stdout != None and stdout != "":
      report.Progress(1, "*** Standard output\n" + stdout + "\n***")
    if stderr != None and stderr != "":
      report.Progress(1, "*** Standard error\n" + stderr + "\n***")

  if (exitCode != okExit and okExit != None):
    report.Error("Command '" + cmd + "' returned with exit code "+ str(exitCode) + " different from " + str(okExit), diagnosis, stdout, stderr)
  else:
    if stderr != None and stderr != "" and not expectErr:
      report.Error("Command '" + cmd + "' generated the following on standard error", None, None, stderr)

  return (exitCode, stdout, stderr)
Ejemplo n.º 5
0
def executeImpl(lang, posdef):

    # counter to indicate progress
    total = 1

    # jobSize is used to give a low level of outputting
    jobSize = cmdline.LookUp('spec-job-size')

    # Initialize the extraction of test cases.
    gentestcases.StartSearch('tc', lang, 'impl')
    name = gentestcases.NextTestCase()

    while (name != None):
        report.setTestCaseName(name)
        if (total % jobSize) == 1:
            report.Progress(
                2, "Handling test cases " + str(total) + "..." +
                str(total + jobSize - 1))
        report.Progress(3, "Running " + name)

        ok = RunImplTestCase(name, lang, posdef)

        if util.CleanFile(ok):
            bn = util.ExtractName(name)
            util.DeleteFiles([bn + ".vdm"])
        name = gentestcases.NextTestCase()
        total = total + 1
        util.MoveProfile()
Ejemplo n.º 6
0
def CompareResult(fullName, outputFile, resFile, interpreter, structTest=true):

  report.Progress(4, "Comparing result for '" + fullName + "' using diff method")
  # compare the results using normal "diff"
  actualResult = util.ReadFile(outputFile)
  expectedResult = util.ReadFile(resFile)
  
  # Remove duplicate white spaces and line breaks, spaces around commas and parenthesis.
  actualResult = re.sub("\s+", " ", actualResult).strip()
  expectedResult = re.sub("\s+", " ", expectedResult).strip()
  actualResult = re.sub("\s*,\s*", ",", actualResult).strip()
  expectedResult = re.sub("\s*,\s*", ",", expectedResult).strip()
  actualResult = re.sub("\s*\(\s*", "(", actualResult).strip()
  expectedResult = re.sub("\s*\(\s*", "(", expectedResult).strip()
  actualResult = re.sub("\s*\)\s*", ")", actualResult).strip()
  expectedResult = re.sub("\s*\)\s*", ")", expectedResult).strip()

  if actualResult == expectedResult:
    return true

  # Hmmm we need to try to compare using VDMDE then.
  if structTest and interpreter != None:
    report.Progress(4, "Comparing result for '" + fullName + "' by build VDM value")
#    template = util.ReadFile(setup.BaseDir+"/../pogtestcases/compare-pog.vdm")
    template = util.ReadFile(setup.BaseDir+"/templates/compare-pog.vdm")
    if template == None:
      return false

    data = util.SubString('<<EXPECTED_RESULT>>', expectedResult, template)
    data = util.SubString('<<ACTUAL_RESULT>>', actualResult, data)
    ok = util.WriteFile("compare.vdm", data)
    if not ok:
      return false

    ok = util.WriteFile(".vdmtest", "compare.arg")

#    util.CopyFile(setup.BaseDir+"/../pogtestcases/compare-pog.arg","compare.arg")
#    util.CopyFile(setup.BaseDir+"/general-files/compare.arg","compare.arg")
    util.CopyFile(setup.BaseDir+"/general-files/compare-pog.arg","compare.arg")
#    cmd = interpreter + " -a -b compare.vdm"
    cmd = interpreter + " -i compare.arg compare.vdm"
    (exitcode, dummy1, dummy2) = util.RunCommand(cmd)
    ok = (exitcode == 0)
  else:
    ok = false

  if not ok:
    report.Error("Actual result is different from expected result for '" + fullName + "'",
                 "expected result : " + expectedResult + "\n" +
                 "actual result   : " + actualResult)
    
  if util.CleanFile(ok):
    util.DeleteFiles(["comapre.arg"])
  return ok
Ejemplo n.º 7
0
def execute(lang, type):
  global ext, binext

  #counter to indicate progress
  total = 1
  
  #os type
  if util.IsWindowsOS() and os.environ.get('OSTYPE') == 'win32':
    ext = "cpp"
    binext = ".exe"
  else:
    ext = "cc"
  
  #main() file
  compiler = cmdline.LookUpWildCard('metaiv', lang, type, 'compiler')
  flags = cmdline.LookUpWildCard('metaiv', lang, type, 'cflags')
  MakeDriverAndObjectFiles("driver." + ext, compiler, flags)
  
  #Set expected results  
  expSet = resfile.MakeStdExpansionSet('metaiv', lang, 'impl')
  resfile.RegisterExpansionSet(expSet)
  
  #jobSize is used to give a low level of outputting
  jobSize = cmdline.LookUp('spec-job-size')
  
  #initialize the extraction of test cases
  gentestcases.StartSearch('metaiv', lang, type)
  name = gentestcases.NextTestCase()

  while (name != None):

    #setting report
    report.setTestCaseName(name)
    
    if (total % jobSize) == 1:
      report.Progress(2, "Handling test cases " + str(total) + "..." + str(total + jobSize - 1))
    report.Progress(3, "Running " + name)
    
    ok = RunTestCase(name, lang, type)

    #cleaning up
    if ok:  
      if util.CleanFile(ok):
        baseName = util.ExtractName(name)  
        util.DeleteFiles([baseName + ".res"])#, "driver" + binext]) 
    else:
      break

    #generates next test case
    name = gentestcases.NextTestCase()
    
    total = total + 1
Ejemplo n.º 8
0
def RunCommand(cmd,
               okExit=None,
               diagnosis=None,
               giveMeOutput=false,
               expectErr=false):
    report.Progress(4, "Running command: " + cmd)
    stdout = ""
    stderr = None

    if IsWindowsOS():
        # To ensure that environment variables given on the commandline works, we have to
        # call the sh commands explicit.
        #    cmd = "(" + cmd + ") > "+ stdoutFile + " 2> " + stderrFile + " < nul"
        cmd = "(" + cmd + ")"
    else:
        cmd = cmd  #+ " 2>&1"

#  p = popen2.Popen3(cmd, true)
#  p.tochild.close()
#  returnPid,exitCode = os.waitpid(p.pid, os.WNOHANG)
#  p.fromchild.close()
#  if p.childerr != None:
#    stderr = p.childerr.read()
#  else:
#  stdout = p.fromchild.read()

    output = os.popen(cmd)
    stdout = output.read()
    exitCode = output.close()
    if exitCode == None:
        exitCode = 0

    if cmdline.LookUp('show-errors-in-progress'):
        if stdout != None and stdout != "":
            report.Progress(1, "*** Standard output\n" + stdout + "\n***")
        if stderr != None and stderr != "":
            report.Progress(1, "*** Standard error\n" + stderr + "\n***")

    if (exitCode != okExit and okExit != None):
        report.Error(
            "Command " + ` cmd ` + " returned with exit code " + ` exitCode ` +
            " different from " + ` okExit `, diagnosis, stdout, stderr)
    else:
        if stderr != None and stderr != "" and not expectErr:
            report.Error(
                "Command " + ` cmd ` +
                " generated the following on standard error", None, None,
                stderr)

    return (exitCode, stdout, stderr)
Ejemplo n.º 9
0
def execute(lang, type):
  global ext, binext

  #counter to indicate progress
  total = 1
  
  #setting the coverage file
  coverageFile = "rtinfo.ast"
  
  #Set expected results  
  expSet = resfile.MakeStdExpansionSet('j2vtf', lang, type)
  resfile.RegisterExpansionSet(expSet)
  
  #jobSize is used to give a low level of outputting
  jobSize = cmdline.LookUp('spec-job-size')
  
  #initialize the extraction of test cases
  gentestcases.StartSearch('j2vtf', lang, type)
  name = gentestcases.NextTestCase()

  while (name != None):

    #setting report
    report.setTestCaseName(name)
    
    if (total % jobSize) == 1:
      report.Progress(2, "Handling test cases " + str(total) + "..." + str(total + jobSize - 1))
    report.Progress(3, "Running " + name)
    
    ok = convert.ConvertLanguage(lang, name)

    if ok:
      ok = PrepareSpecCase(name, lang)
    
    if ok:
      ok = RunTestCase(name, lang, type, coverageFile)

    #cleaning up
    if ok:  
      if util.CleanFile(ok):
        baseName = util.ExtractName(name)  
        util.DeleteFiles([baseName + ".vdm", baseName + ".ast", baseName + ".arg", baseName + ".debug", baseName + ".res",  baseName + ".arg.res",  baseName + ".arg.pt", "debug.arg" ]) 
    #else:
    #  break

    #generates next test case
    name = gentestcases.NextTestCase()

    total = total + 1
Ejemplo n.º 10
0
def CreateDebugFile(fileName, templateName, extra):
  base = util.ExtractName(fileName)
  astFile   = base + ".ast"
  debugFile = base + ".debug"  
  report.Progress(4, "Creating debug (" + debugFile +")")

  ast = util.ReadFile(astFile)
  if ast == None:
    return false

  template = util.GetTemplate(templateName)
  if template == None:
    return false
  
  data = util.SubString("<<AST>>", ast, template)
  for key in extra.keys():
    data = util.SubString(key, extra[key], data)

  ok = util.WriteFile(debugFile, data)
  if not ok:
    return false

  # Make a symlink from the debug file til debug.arg
  ok = util.SymLink(debugFile, "debug.arg")
  return ok
Ejemplo n.º 11
0
def RunImplTestCase(fullName, lang, posdef):

    ok = convert.ConvertLanguage(lang, fullName)

    # Remove the files we expect output in to
    if ok:
        util.RemoveTestFiles(fullName, [".arg.res"])

    # Run the test
    if ok:
        interpreter = cmdline.LookUpWildCard('tc', lang, 'impl', 'interpreter',
                                             posdef)
        if posdef == 'pos':
            defFlg = ""
        else:
            defFlg = " -d "
        localName = util.ExtractName(fullName) + ".vdm"
        resName = util.ExtractName(fullName) + ".arg.res"

        cmd = interpreter + defFlg + " -t -f " + localName + " 2>" + resName

        # Now run the interpreter
        (exitCode, stdout, stderr) = util.RunCommand(cmd, None, None, true,
                                                     true)

        # Ensure that the interpreter actually did type check anything.
        # That is in contract to if it stoped due to a syntax error or a core dump.
#    if re.search("Type checking [^\n]* done", stdout) == None:
#      report.Error("text 'type check ... done' not found on stdout while running the type checker",
#                   "This might be due to a core dump, a syntax error or the like\n" +
#                   "This does anyway indicate that the type checking was never done",
#                   stdout, stderr)
#      ok = false

    if ok:
        expResName = resfile.FindResFile(fullName)

        # read the result from the result file, and translate it to a list of numbers
        #    result = TranslateResultImpl(stdout)
        result = TranslateResultImpl(util.ReadFile(resName))
        if result == None:
            ok = false

    if ok:
        if expResName == None:
            print("Not validating result (2)")
            if util.KeepFile(false):
                WriteResult(fullName, result)
            ok = false

    if ok:
        # Validate the result.
        report.Progress(
            4, "Validating result with result file: '" + expResName + "'")
        ok = ValidateResult(fullName, expResName, result, stdout, stderr)

        if util.KeepFile(ok):
            WriteResult(fullName, result)

    return ok
Ejemplo n.º 12
0
def executeImpl(lang):
  global srcext, binext
  # counter to indicate progress
  total = 1

  # jobSize is used to give a low level of outputting
  jobSize = cmdline.LookUp('spec-job-size')

  # Initialize the extraction of test cases.
  gentestcases.StartSearch('cpp', lang, 'impl')
  name = gentestcases.NextTestCase()

  while (name != None):
    report.setTestCaseName(name)
    if (total % jobSize) == 1:
      report.Progress(2, "Handling test cases " + `total` + "..." + `total + jobSize-1`)
    report.Progress(3, "Running " + name)

    (ok, modules) = RunImplTestCase(name, lang)

    if util.CleanFile(ok):
      bn = util.ExtractName(name)
      util.DeleteFiles([bn+".vdm",bn+".res", "icode." + srcext, "icode" + binext,"CGBase." + srcext, "CGBase.h", "CGBase.obj", "icode.obj", "compare.arg", "compare.vdm"])
      if modules:
        for mod0 in modules:
          mod = string.replace(mod0, "_", "_u")
          util.DeleteFiles([mod+"." + srcext, mod+".h", mod+"_anonym." + srcext, mod+"_anonym.h",mod+"_userdef.h", mod + ".obj"])
    name = gentestcases.NextTestCase()
    total = total +1
Ejemplo n.º 13
0
def SymLink(src, dst, force = false):
  report.Progress(4,"Creating symlink from '" + src + "' to '" + dst + "'")
  # remove the destination file.
  if os.path.exists(dst) or os.path.islink(dst):
    try:
      os.remove(dst)
    except os.error:
      _, (_, msg), _ = sys.exc_info()
      report.Error("Error when removing file '" + dst + "': " + msg)
      return false

  # Normalize path
  # This is not allowed under windows.
  dst = os.path.expanduser(dst.strip())
  src = os.path.expanduser(src.strip())
  

  # Check if os contain the function symlink (it doesn't under windows!)
  if ('symlink' in os.__dict__) and (not IsWindowsOS() or force):
    try:
      os.symlink(src,dst)
    except os.error:
      _, (_, msg), _ = sys.exc_info()
      report.Error("Error when making a symlink from '" +  src + "' to '" + dst + "': " + msg)
      return false
  else:
    try:
      shutil.copy(src,dst)
    except os.error:
      _, (_, msg), _ = sys.exc_info()
      report.Error("Error when making a symlink from '" +  src + "' to '" + dst + "': " + msg)
      return false

  return true
Ejemplo n.º 14
0
def executeImpl(lang):
    # counter to indicate progress
    total = 1

    # jobSize is used to give a low level of outputting
    jobSize = cmdline.LookUp('spec-job-size')

    # Initialize the extraction of test cases from javacg-code and java2vdm.
    StartCollectionOfTests()

    AddTestsFromHierarchy(cmdline.GetTestCases('java2vdm'), lang)

    while (testCases != []):
        test = testCases[0]
        report.setTestCaseName(test)
        if (total % jobSize) == 1:
            report.Progress(
                2, "Handling test cases " + str(total) + "..." +
                str(total + jobSize - 1))
        ok = RunImplTestCase(test, lang)
        total = total + 1

        GetNextTest()

    return
Ejemplo n.º 15
0
def PrepareSpecCase(fullName, lang):
  report.Progress(3, "preparing " + fullName)
  report.setTestCaseName(fullName)

  ok = convert.ConvertLanguage(lang, fullName)

  if ok:
    parser = cmdline.LookUpWildCard('cpp', lang, 'spec', 'parser')
    ok = convert.VDM2AST(fullName, parser, true)

  if ok:
    ok = convert.CreateOptionsFile(fullName)

  if ok:
    convert.CreateDebugFile(fullName, "debug-file-cpp", {'<<CGKIND>>' : '<CPP>'} )

  if ok:
    ok = convert.CreateArgFile(fullName, "arg-file-cpp",  {'<<CGKIND>>' : '<CPP>'} )

  if ok:
    ok = convert.AppendToDotVdmtest(fullName)

  # Clean up if test case failed
  if not ok and util.CleanFile(ok):
    baseName = util.ExtractName(fullName)
    util.DeleteFiles([baseName+".vdm", baseName+".ast", baseName+".arg", baseName+".debug", "debug.arg"])
        
  return ok
Ejemplo n.º 16
0
def PrepareSpecCase(name, lang):

    report.Progress(3, "Preparing " + name)
    report.setTestCaseName(name)

    parser = cmdline.LookUpWildCard('j2vtf', lang, 'spec', 'parser')
    ok = convert.VDM2AST(name, parser, false)

    if ok:
        ok = convert.CreateOptionsFile(name)

    if ok:
        extra = GetIdSet()
        ok = convert.CreateDebugFile(name, "debug-file-j2vtf", extra)

    if ok:
        ok = convert.CreateArgFile(name, "arg-file-j2vtf", extra)

    util.DeleteFiles([".vdmtest"])

    if ok:
        ok = convert.AppendToDotVdmtest(name)

    # Clean up if preparation failed
    if not ok and util.CleanFile(ok):
        baseName = util.ExtractName(name)
        util.DeleteFiles([
            baseName + ".arg", baseName + ".ast", baseName + ".debug",
            "debug.arg"
        ])

    return ok
Ejemplo n.º 17
0
def HasIgnoreFile(fullName):
    (files, posList) = FindFile(fullName, "ignore")
    path = os.path.dirname(fullName)
    if files == []:
        return (false, false)
    else:
        report.Progress(4, "Ignore files found: " + path + "/" + files[0])
        silence = (files[0].find("-silently") != -1)
        return (true, silence)
Ejemplo n.º 18
0
def FindResFile(fullName):
    (files, posList) = resfile.FindFile(fullName, "res-pog")
    path = os.path.dirname(fullName)

    if len(files) == 1:
        report.Progress(4, "Expected result file is: " + path + "/" + files[0])
        return path + "/" + files[0]
    else:
        return resfile.FindResFile(fullName)
Ejemplo n.º 19
0
def RunSpecTestCases(names, lang, posdef, coverageFile):

    # remove files we expect output in to.
    for fullName in names:
        util.RemoveTestFiles(fullName, [".arg.pt", ".arg.res"])

    # run the test cases
    interpreter = cmdline.LookUpWildCard('tc', lang, 'spec', 'interpreter',
                                         posdef)
    cmd = interpreter + " -a -b -I -D -P -R " + coverageFile
    exitCode = util.RunCommand(
        cmd, 0, "Possible core dump while interpreting specification.", false,
        true)

    okNames = []
    # Now validate the results
    for fullName in names:
        bn = util.ExtractName(fullName)
        resName = bn + ".arg.res"
        report.setTestCaseName(fullName)

        # See if a result file was created
        if not os.path.exists(resName):
            report.Error(
                "No result generated for test case " + fullName,
                "Maybe the interpreting toolbox failed for one of the previous test cases"
            )
            continue

        # read the result from the result file, and translate it to a list of numbers
        result = TranslateResultSpec(fullName)
        if result == None:
            continue

        # Find the expected result file
        expResName = resfile.FindResFile(fullName)

        if expResName == None:
            if util.KeepFile(false):
                WriteResult(fullName, result)
            continue

        # Validate the result.
        report.Progress(
            4, "Validating result with result file: '" + expResName + "'")
        ok = ValidateResult(fullName, expResName, result, None, None)
        if ok:
            okNames.append(fullName)

        if util.KeepFile(ok):
            WriteResult(fullName, result)

    return okNames
Ejemplo n.º 20
0
def CreateOptionsFile(fileName):
  filestem = util.StripExt(fileName)
  optionsFileName = filestem + '.opt'
  if os.path.exists(optionsFileName):
    linkName = os.path.basename(optionsFileName)
  else:
    linkName = "nulloptions"
    optionsFileName = setup.BaseDir+"/general-files/nulloptions"
  report.Progress(3, "Linking options file " + optionsFileName);
  ok = util.SymLink(optionsFileName, linkName)

  return ok
Ejemplo n.º 21
0
def execute(lang, type):
  for dtc in ['dtcon','dtcoff']:
    if cmdline.LookUp('IP-Type')[dtc]:
      report.SetIPType(dtc)
      report.Progress(1, "Running interpreter with " + dtc)

      util.SetProfileBaseName("gmon-ip-"+lang+"-"+type+"-"+dtc+"-"+cmdline.StartDate())
      RegisterExpansionSet(lang, dtc, type)
      if (type == 'spec'):
        executeSpec(lang, dtc)
      else:
        executeImpl(lang, dtc)
Ejemplo n.º 22
0
def GetPackage(fullName):
    data = util.ReadFile(fullName)
    if data == None:
        return ""

    regexp = re.compile("^package (.*)\s*;", re.M)
    match = regexp.search(data, 0)
    if match == None:
        return ""
    else:
        report.Progress(4,
                        "Found package " + match.group(1) + " in " + fullName)
        return match.group(1)
Ejemplo n.º 23
0
def VDM2AST(fileName, parser, typeCheck):
    base = util.ExtractName(fileName)
    vdmFile = base + ".vdm"
    astFile = base + ".ast"
    report.Progress(
        4, "Converting testcase from VDM to AST (creating " + astFile + ")")

    # First delete the m4pp file.
    if (os.path.exists("m4pp")):
        try:
            os.unlink("m4pp")
        except os.error, (no, msg):
            report.Error("Error while removing 'm4pp': " + msg)
            return false
Ejemplo n.º 24
0
def CompareRunTimeError(resFile):
    report.Progress(4, "Searching for runtime error")
    actualResult = util.ReadFile(resFile)
    if actualResult == None:
        return None
    if actualResult.find("Run-Time Error") != -1:
        expectedResult = util.ReadFile(resFile)
        actualResult = re.sub("\s+", " ", actualResult).strip()
        expectedResult = re.sub("Run-Time Error[ 0-9]*:", "Run-Time Error ",
                                expectedResult)
        expectedResult = re.sub("\s+", " ", expectedResult).strip()
        return actualResult == expectedResult
    else:
        return None
Ejemplo n.º 25
0
def VDM2AST(fileName,parser, typeCheck):
  base = util.ExtractName(fileName)
  vdmFile = base + ".vdm"
  astFile = base + ".ast" 
  report.Progress(4, "Converting testcase from VDM to AST (creating " + astFile + ")")

  # First delete the m4pp file.
  if (os.path.exists("m4pp")):
    try:
      os.unlink("m4pp")
    except os.error:
      _, (_, msg), _ = sys.exc_info()
      report.Error("Error while removing 'm4pp': " + msg)
      return false

  # run the parser
  if typeCheck:
    cmd = parser + " -ta " + vdmFile
  else:
    cmd = parser + " -pa " + vdmFile

  (exitCode, stdout, stderr) = util.RunCommand(cmd, 0, "Error in input file (" + vdmFile +"), possible syntax error")
  if exitCode != 0:
    return false

  # verify that a m4pp file has been created.
  if not os.path.exists("m4pp"):
    report.Error("command '" + cmd + "' didn't produce a m4pp file, though return code was 0",
          "Command may not be a vdmde command with -pa flag")
    return false

  # Finally move m4pp to 'astFile'
  if (os.path.exists(astFile)):
    try:
      os.unlink(astFile)
    except os.error:
      _, (_, msg), _ = sys.exc_info()
      report.Error("Error while removing " + astFile + ": " + msg)
      return false

  try:
    os.rename('m4pp', astFile)
  except os.error:
    _, (_, msg), _ = sys.exc_info()
    report.Error("Couldn't move file 'm4pp' to " + astFile + ": " + msg)
    return false

  return true
Ejemplo n.º 26
0
def FindResFile(fullName):
    (files, posList) = FindFile(fullName, "res")
    path = os.path.dirname(fullName)

    if files == []:
        report.Error("No expected result file found for " +
                     util.join(posList, ", "))
        return None
    elif len(files) > 1:
        report.Error("Several possible expected result files found: " +
                     util.join(files, ", "))
        return None
    else:
        report.Progress(4, "Expected result file is: " + path + "/" + files[0])

    return path + "/" + files[0]
Ejemplo n.º 27
0
def PrepareSpecCase(fullName, lang, dtc):
    report.Progress(3, "preparing " + fullName)
    report.setTestCaseName(fullName)

    ok = convert.ConvertLanguage(lang, fullName)

    if ok:
        parser = cmdline.LookUpWildCard('ip', lang, 'spec', 'parser', dtc)
        ok = convert.VDM2AST(fullName, parser, false)

    if ok:
        ok = convert.CreateOptionsFile(fullName)

    argStr = CreateArgumentAst(fullName, lang)
    if argStr == None:
        ok = false

    if dtc == 'dtcon':
        dtcbool = 'true'
    else:
        dtcbool = 'false'

    if ok:
        convert.CreateDebugFile(fullName, "debug-file-ip", {
            '<<ARG>>': argStr,
            '<<DTC>>': dtcbool
        })

    if ok:
        ok = convert.CreateArgFile(fullName, "arg-file-ip", {
            '<<ARG>>': argStr,
            '<<DTC>>': dtcbool
        })

    if ok:
        ok = convert.AppendToDotVdmtest(fullName)

    # Clean up if test case failed
    if not ok and util.CleanFile(ok):
        baseName = util.ExtractName(fullName)
        util.DeleteFiles([
            baseName + ".vdm", baseName + ".ast", baseName + ".arg",
            baseName + ".debug"
        ])

    return ok
Ejemplo n.º 28
0
def execute():
    for env in setup.availableTestenv:
        if cmdline.RunTestEnv(env):

            report.SetTestEnvName(env)
            for lang in setup.availableLanguages:

                if cmdline.LookUp('Language')[lang]:

                    report.SetLanguage(lang)
                    for type in ['spec', 'impl']:

                        if cmdline.LookUp('Run-Type')[type]:

                            report.SetRunType(type)
                            report.Progress(
                                1, "Running " + env + " - " + type +
                                ". test case for " + lang)

                            if (env == 'tc'):
                                tcrun.execute(lang, type)
                            elif (env == 'ip'):
                                iprun.execute(lang, type)
                            elif (env == 'cpp'):
                                cpprun.execute(lang, type)
                            elif (env == 'java'):
                                javarun.execute(lang, type)
                            elif (env == 'api'):
                                apirun.execute(lang, type)
                            elif (env == 'debug'):
                                debugrun.execute(lang, type)
                            elif (env == 'parser'):
                                parserrun.execute(lang, type)
                            elif (env == 'rose'):
                                roserun.execute(lang, type)
                            elif (env == 'metaiv'):
                                metaivrun.execute(lang, type)
                            elif (env == 'rtf'):
                                rtfrun.execute(lang, type)
                            elif (env == 'java2vdm'):
                                java2vdmrun.execute(lang, type)
                            elif (env == 'j2vtf'):
                                j2vtfrun.execute(lang, type)
                            elif (env == 'pog'):
                                pogrun.execute(lang, type)
Ejemplo n.º 29
0
def execute(lang, type):
    #  if lang == 'rt':
    #    report.Progress(3,"Skipping rt for type checker - not applicable")
    #    return

    for posdef in ['pos', 'def']:
        if cmdline.LookUp('TC-Type')[posdef]:
            report.setTypeTestType(posdef)
            report.Progress(1, "Running " + posdef + " test cases")
            util.SetProfileBaseName("gmon-tc-" + lang + "-" + type + "-" +
                                    posdef + "-" + cmdline.StartDate())

            RegisterExpansionSet(lang, type, posdef)

            if (type == 'spec'):
                executeSpec(lang, posdef)
            else:
                executeImpl(lang, posdef)
Ejemplo n.º 30
0
def VerifyPresenceOfGeneratedFiles(fullName, modules):
    global srcext
    ok = true
    extensions = ["." + srcext, ".h", "_anonym." + srcext, "_anonym.h"]
    for mod0 in modules:
        mod = mod0.replace("_", "_u")
        for thisext in extensions:
            if not util.UsesVisualStudio() or mod != 'MATH' or thisext != '.h':
                if not os.path.exists(mod + thisext):
                    report.Error("file '" + mod + thisext +
                                 "' was not generated for testcase '" +
                                 fullName + "'")
                    report.Progress(
                        4, "file '" + mod + thisext +
                        "' was not generated for testcase '" + fullName + "'")
                    ok = false

    return ok