You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
import argparse
|
|
import TestScripts.NewParser as parse
|
|
import TestScripts.CodeGen
|
|
from collections import deque
|
|
|
|
# When deprecation is forced on some nodes
|
|
# we ensure that a parent of a valid node is also valid
|
|
def correctDeprecation(node):
|
|
current = node.data["deprecated"]
|
|
for c in node.children:
|
|
if not correctDeprecation(c):
|
|
current = False
|
|
node.data["deprecated"] = current
|
|
return(current)
|
|
|
|
def deprecateRec(root,others,deprecated):
|
|
if others:
|
|
newOthers=others.copy()
|
|
newOthers.popleft()
|
|
if root.kind == TestScripts.Parser.TreeElem.TEST:
|
|
if others[0].isdigit() and int(root.id) == int(others[0]):
|
|
root.data["deprecated"]=False
|
|
for c in root.children:
|
|
deprecateRec(c,newOthers,False)
|
|
else:
|
|
root.data["deprecated"]=True
|
|
for c in root.children:
|
|
deprecateRec(c,others,deprecated)
|
|
else:
|
|
if root.data["class"] == others[0]:
|
|
root.data["deprecated"]=False
|
|
for c in root.children:
|
|
deprecateRec(c,newOthers,False)
|
|
else:
|
|
root.data["deprecated"]=deprecated
|
|
for c in root.children:
|
|
deprecateRec(c,others,deprecated)
|
|
|
|
def deprecate(root,others):
|
|
if others:
|
|
deprecateRec(root,deque(others),True)
|
|
correctDeprecation(root)
|
|
|
|
parser = argparse.ArgumentParser(description='Parse test description')
|
|
parser.add_argument('-f', nargs='?',type = str, default="test.txt", help="File path")
|
|
|
|
parser.add_argument('-p', nargs='?',type = str, default="Patterns", help="Pattern dir path")
|
|
parser.add_argument('-d', nargs='?',type = str, default="Parameters", help="Parameter dir path")
|
|
|
|
# -e true when no semihosting
|
|
# Input is include files
|
|
# Output is only one stdout
|
|
# So the .h for include files need to be generated.
|
|
parser.add_argument('-e', action='store_true', help="Embedded test")
|
|
|
|
parser.add_argument('others', nargs=argparse.REMAINDER)
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
if args.f is not None:
|
|
# Create a treeelemt object
|
|
p = parse.Parser()
|
|
# Create a codegen object
|
|
c = TestScripts.CodeGen.CodeGen(args.p,args.d, args.e)
|
|
# Parse the test description.
|
|
root = p.parse(args.f)
|
|
deprecate(root,args.others)
|
|
print(root)
|
|
# Generate code with the tree of tests
|
|
c.genCodeForTree(root)
|
|
else:
|
|
parser.print_help() |