autopep8 formatting
This commit is contained in:
parent
f8710cb984
commit
88447385c2
|
@ -130,7 +130,9 @@ _UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args'
|
||||||
# Utility functions and classes
|
# Utility functions and classes
|
||||||
# =============================
|
# =============================
|
||||||
|
|
||||||
|
|
||||||
class _AttributeHolder(object):
|
class _AttributeHolder(object):
|
||||||
|
|
||||||
"""Abstract base class that provides __repr__.
|
"""Abstract base class that provides __repr__.
|
||||||
|
|
||||||
The __repr__ method returns a string in the format::
|
The __repr__ method returns a string in the format::
|
||||||
|
@ -166,6 +168,7 @@ def _ensure_value(namespace, name, value):
|
||||||
# ===============
|
# ===============
|
||||||
|
|
||||||
class HelpFormatter(object):
|
class HelpFormatter(object):
|
||||||
|
|
||||||
"""Formatter for generating usage messages and argument help strings.
|
"""Formatter for generating usage messages and argument help strings.
|
||||||
|
|
||||||
Only the name of this class is considered a public API. All the methods
|
Only the name of this class is considered a public API. All the methods
|
||||||
|
@ -646,6 +649,7 @@ class HelpFormatter(object):
|
||||||
|
|
||||||
|
|
||||||
class RawDescriptionHelpFormatter(HelpFormatter):
|
class RawDescriptionHelpFormatter(HelpFormatter):
|
||||||
|
|
||||||
"""Help message formatter which retains any formatting in descriptions.
|
"""Help message formatter which retains any formatting in descriptions.
|
||||||
|
|
||||||
Only the name of this class is considered a public API. All the methods
|
Only the name of this class is considered a public API. All the methods
|
||||||
|
@ -657,6 +661,7 @@ class RawDescriptionHelpFormatter(HelpFormatter):
|
||||||
|
|
||||||
|
|
||||||
class RawTextHelpFormatter(RawDescriptionHelpFormatter):
|
class RawTextHelpFormatter(RawDescriptionHelpFormatter):
|
||||||
|
|
||||||
"""Help message formatter which retains formatting of all help text.
|
"""Help message formatter which retains formatting of all help text.
|
||||||
|
|
||||||
Only the name of this class is considered a public API. All the methods
|
Only the name of this class is considered a public API. All the methods
|
||||||
|
@ -668,6 +673,7 @@ class RawTextHelpFormatter(RawDescriptionHelpFormatter):
|
||||||
|
|
||||||
|
|
||||||
class ArgumentDefaultsHelpFormatter(HelpFormatter):
|
class ArgumentDefaultsHelpFormatter(HelpFormatter):
|
||||||
|
|
||||||
"""Help message formatter which adds default values to argument help.
|
"""Help message formatter which adds default values to argument help.
|
||||||
|
|
||||||
Only the name of this class is considered a public API. All the methods
|
Only the name of this class is considered a public API. All the methods
|
||||||
|
@ -702,6 +708,7 @@ def _get_action_name(argument):
|
||||||
|
|
||||||
|
|
||||||
class ArgumentError(Exception):
|
class ArgumentError(Exception):
|
||||||
|
|
||||||
"""An error from creating or using an argument (optional or positional).
|
"""An error from creating or using an argument (optional or positional).
|
||||||
|
|
||||||
The string value of this exception is the message, augmented with
|
The string value of this exception is the message, augmented with
|
||||||
|
@ -722,6 +729,7 @@ class ArgumentError(Exception):
|
||||||
|
|
||||||
|
|
||||||
class ArgumentTypeError(Exception):
|
class ArgumentTypeError(Exception):
|
||||||
|
|
||||||
"""An error from trying to convert a command line string to a type."""
|
"""An error from trying to convert a command line string to a type."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -731,6 +739,7 @@ class ArgumentTypeError(Exception):
|
||||||
# ==============
|
# ==============
|
||||||
|
|
||||||
class Action(_AttributeHolder):
|
class Action(_AttributeHolder):
|
||||||
|
|
||||||
"""Information about how to convert command line strings to Python objects.
|
"""Information about how to convert command line strings to Python objects.
|
||||||
|
|
||||||
Action objects are used by an ArgumentParser to represent the information
|
Action objects are used by an ArgumentParser to represent the information
|
||||||
|
@ -1108,7 +1117,8 @@ class _SubParsersAction(Action):
|
||||||
# parse all the remaining options into the namespace
|
# parse all the remaining options into the namespace
|
||||||
# store any unrecognized options on the object, so that the top
|
# store any unrecognized options on the object, so that the top
|
||||||
# level parser can decide what to do with them
|
# level parser can decide what to do with them
|
||||||
namespace, arg_strings = parser.parse_known_args(arg_strings, namespace)
|
namespace, arg_strings = parser.parse_known_args(
|
||||||
|
arg_strings, namespace)
|
||||||
if arg_strings:
|
if arg_strings:
|
||||||
vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR, [])
|
vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR, [])
|
||||||
getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).extend(arg_strings)
|
getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).extend(arg_strings)
|
||||||
|
@ -1119,6 +1129,7 @@ class _SubParsersAction(Action):
|
||||||
# ==============
|
# ==============
|
||||||
|
|
||||||
class FileType(object):
|
class FileType(object):
|
||||||
|
|
||||||
"""Factory for creating file object types
|
"""Factory for creating file object types
|
||||||
|
|
||||||
Instances of FileType are typically passed as type= arguments to the
|
Instances of FileType are typically passed as type= arguments to the
|
||||||
|
@ -1161,7 +1172,9 @@ class FileType(object):
|
||||||
# Optional and Positional Parsing
|
# Optional and Positional Parsing
|
||||||
# ===========================
|
# ===========================
|
||||||
|
|
||||||
|
|
||||||
class Namespace(_AttributeHolder):
|
class Namespace(_AttributeHolder):
|
||||||
|
|
||||||
"""Simple object for storing attributes.
|
"""Simple object for storing attributes.
|
||||||
|
|
||||||
Implements equality by attribute names and values, and provides a simple
|
Implements equality by attribute names and values, and provides a simple
|
||||||
|
@ -1263,7 +1276,6 @@ class _ActionsContainer(object):
|
||||||
return action.default
|
return action.default
|
||||||
return self._defaults.get(dest, None)
|
return self._defaults.get(dest, None)
|
||||||
|
|
||||||
|
|
||||||
# =======================
|
# =======================
|
||||||
# Adding argument actions
|
# Adding argument actions
|
||||||
# =======================
|
# =======================
|
||||||
|
@ -1535,6 +1547,7 @@ class _MutuallyExclusiveGroup(_ArgumentGroup):
|
||||||
|
|
||||||
|
|
||||||
class ArgumentParser(_AttributeHolder, _ActionsContainer):
|
class ArgumentParser(_AttributeHolder, _ActionsContainer):
|
||||||
|
|
||||||
"""Object for parsing command line strings into Python objects.
|
"""Object for parsing command line strings into Python objects.
|
||||||
|
|
||||||
Keyword Arguments:
|
Keyword Arguments:
|
||||||
|
@ -1610,12 +1623,12 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
|
||||||
default_prefix = prefix_chars[0]
|
default_prefix = prefix_chars[0]
|
||||||
if self.add_help:
|
if self.add_help:
|
||||||
self.add_argument(
|
self.add_argument(
|
||||||
default_prefix+'h', default_prefix*2+'help',
|
default_prefix + 'h', default_prefix * 2 + 'help',
|
||||||
action='help', default=SUPPRESS,
|
action='help', default=SUPPRESS,
|
||||||
help=_('show this help message and exit'))
|
help=_('show this help message and exit'))
|
||||||
if self.version:
|
if self.version:
|
||||||
self.add_argument(
|
self.add_argument(
|
||||||
default_prefix+'v', default_prefix*2+'version',
|
default_prefix + 'v', default_prefix * 2 + 'version',
|
||||||
action='version', default=SUPPRESS,
|
action='version', default=SUPPRESS,
|
||||||
version=self.version,
|
version=self.version,
|
||||||
help=_("show program's version number and exit"))
|
help=_("show program's version number and exit"))
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
def readdate(data):
|
def readdate(data):
|
||||||
datepos = -1
|
datepos = -1
|
||||||
if data[:5] == 'DATE ':
|
if data[:5] == 'DATE ':
|
||||||
|
@ -20,13 +21,13 @@ def readdate(data):
|
||||||
if datepos >= len(data):
|
if datepos >= len(data):
|
||||||
return None
|
return None
|
||||||
d = data[datepos]
|
d = data[datepos]
|
||||||
if d>='0' and d<='9':
|
if d >= '0' and d <= '9':
|
||||||
datestr = datestr + d
|
datestr = datestr + d
|
||||||
elif d=='\n':
|
elif d == '\n':
|
||||||
if len(datestr) == 8:
|
if len(datestr) == 8:
|
||||||
return datestr[:4] + '-' + datestr[4:6] + '-' + datestr[6:]
|
return datestr[:4] + '-' + datestr[4:6] + '-' + datestr[6:]
|
||||||
return None
|
return None
|
||||||
elif d!=' ' and d!='-':
|
elif d != ' ' and d != '-':
|
||||||
return None
|
return None
|
||||||
datepos = datepos + 1
|
datepos = datepos + 1
|
||||||
|
|
||||||
|
@ -62,7 +63,8 @@ for lib in range(2):
|
||||||
if datestr == lastupdate:
|
if datestr == lastupdate:
|
||||||
recent.append(a)
|
recent.append(a)
|
||||||
|
|
||||||
mainpage.write('<a href="daca2-'+a+'.html">'+a+'</a><br>\n')
|
mainpage.write(
|
||||||
|
'<a href="daca2-' + a + '.html">' + a + '</a><br>\n')
|
||||||
|
|
||||||
data = data.replace('&', ' ')
|
data = data.replace('&', ' ')
|
||||||
data = data.replace('<', '<')
|
data = data.replace('<', '<')
|
||||||
|
@ -71,7 +73,7 @@ for lib in range(2):
|
||||||
data = data.replace('"', '"')
|
data = data.replace('"', '"')
|
||||||
data = data.replace('\n', '\n')
|
data = data.replace('\n', '\n')
|
||||||
|
|
||||||
f = open(path+'/daca2-'+a+'.html', 'wt')
|
f = open(path + '/daca2-' + a + '.html', 'wt')
|
||||||
f.write('<html>\n')
|
f.write('<html>\n')
|
||||||
f.write('<head><title>DACA2 - ' + a + '</title></head>\n')
|
f.write('<head><title>DACA2 - ' + a + '</title></head>\n')
|
||||||
f.write('<body>\n')
|
f.write('<body>\n')
|
||||||
|
@ -85,7 +87,7 @@ if lastupdate:
|
||||||
mainpage.write('<p>Last update: ' + lastupdate + '</p>')
|
mainpage.write('<p>Last update: ' + lastupdate + '</p>')
|
||||||
allrecent = ''
|
allrecent = ''
|
||||||
for r in recent:
|
for r in recent:
|
||||||
allrecent = allrecent + ' <a href="daca2-'+r+'.html">' + r + '</a>'
|
allrecent = allrecent + ' <a href="daca2-' + r + '.html">' + r + '</a>'
|
||||||
mainpage.write('<p>Most recently updated: ' + allrecent + '</p>')
|
mainpage.write('<p>Most recently updated: ' + allrecent + '</p>')
|
||||||
|
|
||||||
mainpage.write('</body>\n')
|
mainpage.write('</body>\n')
|
||||||
|
|
|
@ -21,6 +21,7 @@ FTPSERVER = 'ftp.sunet.se'
|
||||||
FTPPATH = '/pub/Linux/distributions/Debian/debian/pool/main/'
|
FTPPATH = '/pub/Linux/distributions/Debian/debian/pool/main/'
|
||||||
FOLDER = 'b'
|
FOLDER = 'b'
|
||||||
|
|
||||||
|
|
||||||
def handleRemoveReadonly(func, path, exc):
|
def handleRemoveReadonly(func, path, exc):
|
||||||
import stat
|
import stat
|
||||||
if not os.access(path, os.W_OK):
|
if not os.access(path, os.W_OK):
|
||||||
|
@ -30,6 +31,7 @@ def handleRemoveReadonly(func, path, exc):
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def removeAllExceptResults():
|
def removeAllExceptResults():
|
||||||
count = 5
|
count = 5
|
||||||
while count > 0:
|
while count > 0:
|
||||||
|
@ -63,9 +65,10 @@ def removeAllExceptResults():
|
||||||
continue
|
continue
|
||||||
count = 0
|
count = 0
|
||||||
|
|
||||||
|
|
||||||
def removeLargeFiles(path):
|
def removeLargeFiles(path):
|
||||||
for g in glob.glob(path + '*'):
|
for g in glob.glob(path + '*'):
|
||||||
if g=='.' or g=='..':
|
if g == '.' or g == '..':
|
||||||
continue
|
continue
|
||||||
if os.path.isdir(g):
|
if os.path.isdir(g):
|
||||||
removeLargeFiles(g + '/')
|
removeLargeFiles(g + '/')
|
||||||
|
@ -74,6 +77,7 @@ def removeLargeFiles(path):
|
||||||
if statinfo.st_size > 100000:
|
if statinfo.st_size > 100000:
|
||||||
os.remove(g)
|
os.remove(g)
|
||||||
|
|
||||||
|
|
||||||
def scanarchive(fullpath):
|
def scanarchive(fullpath):
|
||||||
results = open('results.txt', 'at')
|
results = open('results.txt', 'at')
|
||||||
results.write(fullpath + '\n')
|
results.write(fullpath + '\n')
|
||||||
|
|
|
@ -27,6 +27,7 @@ import re
|
||||||
|
|
||||||
|
|
||||||
class Extract:
|
class Extract:
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Read Cppcheck test file and create data
|
Read Cppcheck test file and create data
|
||||||
representation
|
representation
|
||||||
|
@ -50,7 +51,7 @@ class Extract:
|
||||||
fin = open(filename, 'r')
|
fin = open(filename, 'r')
|
||||||
for line in fin:
|
for line in fin:
|
||||||
# testclass starts
|
# testclass starts
|
||||||
res = re.match('class ('+name+')', line)
|
res = re.match('class (' + name + ')', line)
|
||||||
if res is not None:
|
if res is not None:
|
||||||
testclass = res.group(1)
|
testclass = res.group(1)
|
||||||
|
|
||||||
|
@ -59,7 +60,7 @@ class Extract:
|
||||||
testclass = None
|
testclass = None
|
||||||
|
|
||||||
# function start
|
# function start
|
||||||
res = re.match('\\s+void ('+name+')\\(\\)', line)
|
res = re.match('\\s+void (' + name + ')\\(\\)', line)
|
||||||
if res is not None:
|
if res is not None:
|
||||||
functionName = res.group(1)
|
functionName = res.group(1)
|
||||||
|
|
||||||
|
@ -70,12 +71,12 @@ class Extract:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# check
|
# check
|
||||||
res = re.match('\s+check.*\('+string, line)
|
res = re.match('\s+check.*\(' + string, line)
|
||||||
if res is not None:
|
if res is not None:
|
||||||
code = res.group(1)
|
code = res.group(1)
|
||||||
|
|
||||||
# code..
|
# code..
|
||||||
res = re.match('\\s+'+string, line)
|
res = re.match('\\s+' + string, line)
|
||||||
if res is not None:
|
if res is not None:
|
||||||
code = code + res.group(1)
|
code = code + res.group(1)
|
||||||
|
|
||||||
|
@ -114,7 +115,8 @@ def writeHtmlFile(nodes, functionName, filename, errorsOnly):
|
||||||
fout.write('<head>\n')
|
fout.write('<head>\n')
|
||||||
fout.write(' <style type="text/css">\n')
|
fout.write(' <style type="text/css">\n')
|
||||||
fout.write(' body { font-size: 0.8em }\n')
|
fout.write(' body { font-size: 0.8em }\n')
|
||||||
fout.write(' th { background-color: #A3C159; text-transform: uppercase }\n')
|
fout.write(
|
||||||
|
' th { background-color: #A3C159; text-transform: uppercase }\n')
|
||||||
fout.write(' td { background-color: white; vertical-align: text-top }\n')
|
fout.write(' td { background-color: white; vertical-align: text-top }\n')
|
||||||
fout.write(' pre { background-color: #EEEEEE }\n')
|
fout.write(' pre { background-color: #EEEEEE }\n')
|
||||||
fout.write(' </style>\n')
|
fout.write(' </style>\n')
|
||||||
|
@ -123,9 +125,10 @@ def writeHtmlFile(nodes, functionName, filename, errorsOnly):
|
||||||
|
|
||||||
fout.write('<a href="index.htm">Home</a> -- ')
|
fout.write('<a href="index.htm">Home</a> -- ')
|
||||||
if errorsOnly:
|
if errorsOnly:
|
||||||
fout.write('<a href="all-'+functionName+'.htm">All test cases</a>')
|
fout.write('<a href="all-' + functionName + '.htm">All test cases</a>')
|
||||||
else:
|
else:
|
||||||
fout.write('<a href="errors-'+functionName+'.htm">Error test cases</a>')
|
fout.write(
|
||||||
|
'<a href="errors-' + functionName + '.htm">Error test cases</a>')
|
||||||
fout.write('<br><br>')
|
fout.write('<br><br>')
|
||||||
|
|
||||||
testclass = None
|
testclass = None
|
||||||
|
@ -138,13 +141,17 @@ def writeHtmlFile(nodes, functionName, filename, errorsOnly):
|
||||||
|
|
||||||
if not testclass:
|
if not testclass:
|
||||||
testclass = node['testclass']
|
testclass = node['testclass']
|
||||||
fout.write('<h1>' + node['testclass'] + '::' + functionName + '</h1>')
|
fout.write(
|
||||||
|
'<h1>' + node['testclass'] + '::' + functionName + '</h1>')
|
||||||
fout.write('<table border="0" cellspacing="0">\n')
|
fout.write('<table border="0" cellspacing="0">\n')
|
||||||
fout.write(' <tr><th>Nr</th><th>Code</th><th>Expected</th></tr>\n')
|
fout.write(
|
||||||
|
' <tr><th>Nr</th><th>Code</th><th>Expected</th></tr>\n')
|
||||||
|
|
||||||
fout.write(' <tr><td>' + str(num) + '</td>')
|
fout.write(' <tr><td>' + str(num) + '</td>')
|
||||||
fout.write('<td><pre>' + strtoxml(node['code']).replace('\\n', '\n') + '</pre></td>')
|
fout.write('<td><pre>' + strtoxml(
|
||||||
fout.write('<td>' + strtoxml(node['expected']).replace('\\n', '<br>') + '</td>')
|
node['code']).replace('\\n', '\n') + '</pre></td>')
|
||||||
|
fout.write(
|
||||||
|
'<td>' + strtoxml(node['expected']).replace('\\n', '<br>') + '</td>')
|
||||||
fout.write('</tr>\n')
|
fout.write('</tr>\n')
|
||||||
|
|
||||||
if testclass is not None:
|
if testclass is not None:
|
||||||
|
@ -155,7 +162,8 @@ def writeHtmlFile(nodes, functionName, filename, errorsOnly):
|
||||||
|
|
||||||
if len(sys.argv) <= 1 or '--help' in sys.argv:
|
if len(sys.argv) <= 1 or '--help' in sys.argv:
|
||||||
print ('Extract test cases from test file')
|
print ('Extract test cases from test file')
|
||||||
print ('Syntax: extracttests.py [--html=folder] [--xml] [--code=folder] path/testfile.cpp')
|
print (
|
||||||
|
'Syntax: extracttests.py [--html=folder] [--xml] [--code=folder] path/testfile.cpp')
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
# parse command line
|
# parse command line
|
||||||
|
@ -206,8 +214,10 @@ if filename is not None:
|
||||||
findex.write('<head>\n')
|
findex.write('<head>\n')
|
||||||
findex.write(' <style type="text/css">\n')
|
findex.write(' <style type="text/css">\n')
|
||||||
findex.write(' table { font-size: 0.8em }\n')
|
findex.write(' table { font-size: 0.8em }\n')
|
||||||
findex.write(' th { background-color: #A3C159; text-transform: uppercase }\n')
|
findex.write(
|
||||||
findex.write(' td { background-color: #F0FFE0; vertical-align: text-top }\n')
|
' th { background-color: #A3C159; text-transform: uppercase }\n')
|
||||||
|
findex.write(
|
||||||
|
' td { background-color: #F0FFE0; vertical-align: text-top }\n')
|
||||||
findex.write(' A:link { text-decoration: none }\n')
|
findex.write(' A:link { text-decoration: none }\n')
|
||||||
findex.write(' A:visited { text-decoration: none }\n')
|
findex.write(' A:visited { text-decoration: none }\n')
|
||||||
findex.write(' A:active { text-decoration: none }\n')
|
findex.write(' A:active { text-decoration: none }\n')
|
||||||
|
@ -227,7 +237,7 @@ if filename is not None:
|
||||||
findex.write('<table border="0" cellspacing="0">\n')
|
findex.write('<table border="0" cellspacing="0">\n')
|
||||||
findex.write(' <tr><th>Name</th><th>Errors</th><th>All</th></tr>\n')
|
findex.write(' <tr><th>Name</th><th>Errors</th><th>All</th></tr>\n')
|
||||||
for functionname in functionNames:
|
for functionname in functionNames:
|
||||||
findex.write(' <tr><td>'+functionname+'</td>')
|
findex.write(' <tr><td>' + functionname + '</td>')
|
||||||
numall = 0
|
numall = 0
|
||||||
numerr = 0
|
numerr = 0
|
||||||
for node in e.nodes:
|
for node in e.nodes:
|
||||||
|
@ -238,8 +248,10 @@ if filename is not None:
|
||||||
if numerr == 0:
|
if numerr == 0:
|
||||||
findex.write('<td><div align="right">0</div></td>')
|
findex.write('<td><div align="right">0</div></td>')
|
||||||
else:
|
else:
|
||||||
findex.write('<td><a href="errors-'+functionname+'.htm"><div align="right">' + str(numerr) + '</div></a></td>')
|
findex.write('<td><a href="errors-' + functionname +
|
||||||
findex.write('<td><a href="all-'+functionname+'.htm"><div align="right">' + str(numall) + '</div></a></td>')
|
'.htm"><div align="right">' + str(numerr) + '</div></a></td>')
|
||||||
|
findex.write('<td><a href="all-' + functionname +
|
||||||
|
'.htm"><div align="right">' + str(numall) + '</div></a></td>')
|
||||||
findex.write('</tr>\n')
|
findex.write('</tr>\n')
|
||||||
|
|
||||||
findex.write('</table>\n')
|
findex.write('</table>\n')
|
||||||
|
@ -267,7 +279,7 @@ if filename is not None:
|
||||||
if not os.path.exists(codedir):
|
if not os.path.exists(codedir):
|
||||||
os.mkdir(codedir)
|
os.mkdir(codedir)
|
||||||
|
|
||||||
errors = open(codedir+'errors.txt', 'w')
|
errors = open(codedir + 'errors.txt', 'w')
|
||||||
|
|
||||||
for node in e.nodes:
|
for node in e.nodes:
|
||||||
testnum = testnum + 1
|
testnum = testnum + 1
|
||||||
|
@ -291,7 +303,8 @@ if filename is not None:
|
||||||
if expected != '':
|
if expected != '':
|
||||||
expected = expected.replace('\\n', '\n')
|
expected = expected.replace('\\n', '\n')
|
||||||
expected = expected.replace('\\"', '"')
|
expected = expected.replace('\\"', '"')
|
||||||
expected = re.sub('\\[test.cp?p?:', '['+filename+':', expected)
|
expected = re.sub(
|
||||||
|
'\\[test.cp?p?:', '[' + filename + ':', expected)
|
||||||
errors.write(expected)
|
errors.write(expected)
|
||||||
errors.close()
|
errors.close()
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -21,13 +21,17 @@ import matchcompiler
|
||||||
|
|
||||||
|
|
||||||
class MatchCompilerTest(unittest.TestCase):
|
class MatchCompilerTest(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.mc = matchcompiler.MatchCompiler(verify_mode=False)
|
self.mc = matchcompiler.MatchCompiler(verify_mode=False)
|
||||||
|
|
||||||
def test_parseMatch(self):
|
def test_parseMatch(self):
|
||||||
self.assertEqual(self.mc.parseMatch(' Token::Match(tok, ";") ', 2), ['Token::Match(tok, ";")', 'tok', ' ";"'])
|
self.assertEqual(self.mc.parseMatch(' Token::Match(tok, ";") ', 2), [
|
||||||
self.assertEqual(self.mc.parseMatch(' Token::Match(tok,', 2), None) # multiline Token::Match is not supported yet
|
'Token::Match(tok, ";")', 'tok', ' ";"'])
|
||||||
self.assertEqual(self.mc.parseMatch(' Token::Match(Token::findsimplematch(tok,")"), ";")', 2), ['Token::Match(Token::findsimplematch(tok,")"), ";")', 'Token::findsimplematch(tok,")")', ' ";"']) # inner function call
|
self.assertEqual(self.mc.parseMatch(' Token::Match(tok,', 2), None)
|
||||||
|
# multiline Token::Match is not supported yet
|
||||||
|
self.assertEqual(self.mc.parseMatch(' Token::Match(Token::findsimplematch(tok,")"), ";")', 2), [
|
||||||
|
'Token::Match(Token::findsimplematch(tok,")"), ";")', 'Token::findsimplematch(tok,")")', ' ";"']) # inner function call
|
||||||
|
|
||||||
def test_replaceTokenMatch(self):
|
def test_replaceTokenMatch(self):
|
||||||
input = 'if (Token::Match(tok, "foobar")) {'
|
input = 'if (Token::Match(tok, "foobar")) {'
|
||||||
|
@ -44,7 +48,8 @@ class MatchCompilerTest(unittest.TestCase):
|
||||||
input = 'if (Token::Match(tok, "foo\"special\"bar %num%")) {'
|
input = 'if (Token::Match(tok, "foo\"special\"bar %num%")) {'
|
||||||
output = self.mc._replaceTokenMatch(input)
|
output = self.mc._replaceTokenMatch(input)
|
||||||
# FIXME: Currently detected as non-static pattern
|
# FIXME: Currently detected as non-static pattern
|
||||||
self.assertEqual(output, 'if (Token::Match(tok, "foo"special"bar %num%")) {')
|
self.assertEqual(
|
||||||
|
output, 'if (Token::Match(tok, "foo"special"bar %num%")) {')
|
||||||
# self.assertEqual(3, len(self.mc._matchStrs))
|
# self.assertEqual(3, len(self.mc._matchStrs))
|
||||||
|
|
||||||
def test_replaceTokenMatchWithVarId(self):
|
def test_replaceTokenMatchWithVarId(self):
|
||||||
|
@ -55,13 +60,15 @@ class MatchCompilerTest(unittest.TestCase):
|
||||||
|
|
||||||
input = 'if (Token::Match(tok->next()->next(), "%varid% foobar", tok->varId())) {'
|
input = 'if (Token::Match(tok->next()->next(), "%varid% foobar", tok->varId())) {'
|
||||||
output = self.mc._replaceTokenMatch(input)
|
output = self.mc._replaceTokenMatch(input)
|
||||||
self.assertEqual(output, 'if (match2(tok->next()->next(), tok->varId())) {')
|
self.assertEqual(
|
||||||
|
output, 'if (match2(tok->next()->next(), tok->varId())) {')
|
||||||
self.assertEqual(1, len(self.mc._matchStrs))
|
self.assertEqual(1, len(self.mc._matchStrs))
|
||||||
|
|
||||||
input = 'if (Token::Match(tok, "foo\"special\"bar %type% %varid%", my_varid_cache)) {'
|
input = 'if (Token::Match(tok, "foo\"special\"bar %type% %varid%", my_varid_cache)) {'
|
||||||
output = self.mc._replaceTokenMatch(input)
|
output = self.mc._replaceTokenMatch(input)
|
||||||
# FIXME: Currently detected as non-static pattern
|
# FIXME: Currently detected as non-static pattern
|
||||||
self.assertEqual(output, 'if (Token::Match(tok, "foo"special"bar %type% %varid%", my_varid_cache)) {')
|
self.assertEqual(
|
||||||
|
output, 'if (Token::Match(tok, "foo"special"bar %type% %varid%", my_varid_cache)) {')
|
||||||
# self.assertEqual(1, len(self.mc._matchStrs))
|
# self.assertEqual(1, len(self.mc._matchStrs))
|
||||||
|
|
||||||
# test caching: reuse existing matchX()
|
# test caching: reuse existing matchX()
|
||||||
|
@ -92,7 +99,8 @@ class MatchCompilerTest(unittest.TestCase):
|
||||||
input = 'if (Token::simpleMatch(tok, "foo\"special\"bar")) {'
|
input = 'if (Token::simpleMatch(tok, "foo\"special\"bar")) {'
|
||||||
output = self.mc._replaceTokenMatch(input)
|
output = self.mc._replaceTokenMatch(input)
|
||||||
# FIXME: Currently detected as non-static pattern
|
# FIXME: Currently detected as non-static pattern
|
||||||
self.assertEqual(output, 'if (Token::simpleMatch(tok, "foo\"special\"bar")) {')
|
self.assertEqual(
|
||||||
|
output, 'if (Token::simpleMatch(tok, "foo\"special\"bar")) {')
|
||||||
self.assertEqual(1, len(self.mc._matchStrs))
|
self.assertEqual(1, len(self.mc._matchStrs))
|
||||||
|
|
||||||
def test_replaceTokenFindSimpleMatch(self):
|
def test_replaceTokenFindSimpleMatch(self):
|
||||||
|
@ -104,14 +112,16 @@ class MatchCompilerTest(unittest.TestCase):
|
||||||
|
|
||||||
input = 'if (Token::findsimplematch(tok->next()->next(), "foobar", tok->link())) {'
|
input = 'if (Token::findsimplematch(tok->next()->next(), "foobar", tok->link())) {'
|
||||||
output = self.mc._replaceTokenFindMatch(input)
|
output = self.mc._replaceTokenFindMatch(input)
|
||||||
self.assertEqual(output, 'if (findmatch2(tok->next()->next(), tok->link())) {')
|
self.assertEqual(
|
||||||
|
output, 'if (findmatch2(tok->next()->next(), tok->link())) {')
|
||||||
self.assertEqual(1, len(self.mc._matchStrs))
|
self.assertEqual(1, len(self.mc._matchStrs))
|
||||||
self.assertEqual(1, self.mc._matchStrs['foobar'])
|
self.assertEqual(1, self.mc._matchStrs['foobar'])
|
||||||
|
|
||||||
input = 'if (Token::findsimplematch(tok, "foo\"special\"bar")) {'
|
input = 'if (Token::findsimplematch(tok, "foo\"special\"bar")) {'
|
||||||
output = self.mc._replaceTokenFindMatch(input)
|
output = self.mc._replaceTokenFindMatch(input)
|
||||||
# FIXME: Currently detected as non-static pattern
|
# FIXME: Currently detected as non-static pattern
|
||||||
self.assertEqual(output, 'if (Token::findsimplematch(tok, "foo\"special\"bar")) {')
|
self.assertEqual(
|
||||||
|
output, 'if (Token::findsimplematch(tok, "foo\"special\"bar")) {')
|
||||||
self.assertEqual(1, len(self.mc._matchStrs))
|
self.assertEqual(1, len(self.mc._matchStrs))
|
||||||
|
|
||||||
def test_replaceTokenFindMatch(self):
|
def test_replaceTokenFindMatch(self):
|
||||||
|
@ -131,14 +141,16 @@ class MatchCompilerTest(unittest.TestCase):
|
||||||
# findmatch with end token
|
# findmatch with end token
|
||||||
input = 'if (Token::findmatch(tok->next()->next(), "foobar %type%", tok->link())) {'
|
input = 'if (Token::findmatch(tok->next()->next(), "foobar %type%", tok->link())) {'
|
||||||
output = self.mc._replaceTokenFindMatch(input)
|
output = self.mc._replaceTokenFindMatch(input)
|
||||||
self.assertEqual(output, 'if (findmatch3(tok->next()->next(), tok->link())) {')
|
self.assertEqual(
|
||||||
|
output, 'if (findmatch3(tok->next()->next(), tok->link())) {')
|
||||||
self.assertEqual(2, len(self.mc._matchStrs))
|
self.assertEqual(2, len(self.mc._matchStrs))
|
||||||
self.assertEqual(1, self.mc._matchStrs['foobar'])
|
self.assertEqual(1, self.mc._matchStrs['foobar'])
|
||||||
|
|
||||||
# findmatch with end token and varid
|
# findmatch with end token and varid
|
||||||
input = 'if (Token::findmatch(tok->next()->next(), "foobar %type% %varid%", tok->link(), 123)) {'
|
input = 'if (Token::findmatch(tok->next()->next(), "foobar %type% %varid%", tok->link(), 123)) {'
|
||||||
output = self.mc._replaceTokenFindMatch(input)
|
output = self.mc._replaceTokenFindMatch(input)
|
||||||
self.assertEqual(output, 'if (findmatch4(tok->next()->next(), tok->link(), 123)) {')
|
self.assertEqual(
|
||||||
|
output, 'if (findmatch4(tok->next()->next(), tok->link(), 123)) {')
|
||||||
self.assertEqual(2, len(self.mc._matchStrs))
|
self.assertEqual(2, len(self.mc._matchStrs))
|
||||||
self.assertEqual(1, self.mc._matchStrs['foobar'])
|
self.assertEqual(1, self.mc._matchStrs['foobar'])
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue