diff options
Diffstat (limited to 'tools/misc/FixTestCasePlacement.py')
-rw-r--r-- | tools/misc/FixTestCasePlacement.py | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/tools/misc/FixTestCasePlacement.py b/tools/misc/FixTestCasePlacement.py new file mode 100644 index 000000000..4132eef86 --- /dev/null +++ b/tools/misc/FixTestCasePlacement.py @@ -0,0 +1,104 @@ +#--Imports--------------------------------------------------------------------- +import argparse +import os +import sys +import re + +#--Globals--------------------------------------------------------------------- +PRE_PATH = "TestCases/" + +#------------------------------------------------------------------------------ +def getAllJSFiles(dirName): + ''' + Returns all JS files under dirName + ''' + retVal = [] + if os.path.isfile(dirName) and dirName.endswith(".js"): + retVal = [dirName] + elif os.path.isdir(dirName): + tempList = [os.path.join(dirName, x) for x in os.listdir(dirName)] + for x in tempList: + retVal += getAllJSFiles(x) + #else: + # raise Exception("getAllJSFiles: encountered a non-file/non-dir:" + dirName) + return retVal + +#------------------------------------------------------------------------------ +def handleFile(filePath, partialPath): + global PRE_PATH + + tempPath = filePath.replace(partialPath + os.path.sep, "", 1) + tempPath = tempPath.replace(os.path.sep, "/") + tempId = tempPath.rsplit("/", 1)[1][:-3] + + with open(filePath, "r") as f: + origLines = f.readlines() + + with open(filePath, "w") as f: + pathHit = False + idHit = False + testHit = False + descriptHit = False + + for line in origLines: + if (not testHit) and re.match("^$", line)!=None: + #Throw away empty lines until we hit the first test function + continue + elif (not testHit) and re.search("test\s*:\s*function\s+testcase\(\)", line)!=None: + testHit = True + line = line.rstrip() + os.linesep + elif (not pathHit) and re.search("path\s*:\s*\"", line)!=None: + pathHit = True + line = "path: \"%s\",%s" % (PRE_PATH + tempPath, os.linesep) + elif (not idHit) and re.search("id\s*:\s*\"", line)!=None: + idHit = True + line = "id: \"%s\",%s" % (tempId, os.linesep) + elif (not descriptHit) and re.search("description\s*:\s*\"", line)!=None: + descriptHit = True + line = line.strip() + os.linesep + f.write(line) + +def getPartialPath(tc): + tc = os.path.splitext(os.path.basename(tc))[0] + if not ("-" in tc): + print "'-' not detected in '%s'; cannot continue!" % tc + sys.exit(1) + elif not ("." in tc): + tc = tc.replace("-", ".0-", 1) + + #Generate the partial path of the test case + tempList = tc.split("-",1)[0].split(".") + partialPath = "" + for i in xrange(1, len(tempList)+1): + partialPath += ".".join(tempList[0:i]) + os.path.sep + partialPath = os.path.join(partialPath, tc + ".js") + if partialPath.index(os.path.sep)==1: + partialPath = "chapter0" + partialPath + elif partialPath.index(os.path.sep)==2: + partialPath = "chapter" + partialPath + return partialPath + + +#--Main------------------------------------------------------------------------ +if __name__=="__main__": + __parser = argparse.ArgumentParser(description='Tool used to fix the id and path properties of test case objects') + __parser.add_argument('path', action='store', + help='Full path to test cases. E.g., C:\repos\test262-msft\test\suite\ietestcenter') + __parser.add_argument('add', action='store', + help='Command used to add a test file to source control') + __parser.add_argument('del', action='store', + help='Command used to remove a test file from source control') + __parser.add_argument('tc', action='store', + help='test case to move') + + ARGS = __parser.parse_args() + if not os.path.exists(ARGS.path): + print "Cannot fix tests in '%s' when it doesn't exist!" % ARGS.path + sys.exit(1) + elif not os.path.isfile(ARGS.tc): + print "Cannot move '%s' when it doesn't exist!" % ARGS.tc + + partialPath = getPartialPath(ARGS.tc) + + + print "Done!", partialPath
\ No newline at end of file |