# Copyright (c) 2012 Ecma International. All rights reserved. # This code is governed by the BSD license found in the LICENSE file. #--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