summaryrefslogtreecommitdiff
path: root/src/3rdparty/v8/test/message/testcfg.py
diff options
context:
space:
mode:
authorSergio Ahumada <sergio.ahumada@digia.com>2013-03-19 09:25:14 +0100
committerSergio Ahumada <sergio.ahumada@digia.com>2013-03-19 09:56:31 +0100
commit6313e1fe4c27755adde87e62db1c2f9fac534ae4 (patch)
treec57bb29f65e02fbfcc07895a8cc2903fff9300ba /src/3rdparty/v8/test/message/testcfg.py
parentb5a49a260d03249c386f1b63c249089383dd81fa (diff)
parentcac65e7a222b848a735a974b0aeb43209b0cfa18 (diff)
downloadqtjsbackend-6313e1fe4c27755adde87e62db1c2f9fac534ae4.tar.gz
Merge branch 'dev' into stable
This starts Qt 5.1 release cycle Change-Id: I892bbc73c276842894a720f761ce31ad1b015672
Diffstat (limited to 'src/3rdparty/v8/test/message/testcfg.py')
-rw-r--r--src/3rdparty/v8/test/message/testcfg.py97
1 files changed, 89 insertions, 8 deletions
diff --git a/src/3rdparty/v8/test/message/testcfg.py b/src/3rdparty/v8/test/message/testcfg.py
index af467e6..1b788d5 100644
--- a/src/3rdparty/v8/test/message/testcfg.py
+++ b/src/3rdparty/v8/test/message/testcfg.py
@@ -25,13 +25,93 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-import test
+import itertools
import os
-from os.path import join, dirname, exists, basename, isdir
import re
+from testrunner.local import testsuite
+from testrunner.local import utils
+from testrunner.objects import testcase
+
+
FLAGS_PATTERN = re.compile(r"//\s+Flags:(.*)")
+
+class MessageTestSuite(testsuite.TestSuite):
+ def __init__(self, name, root):
+ super(MessageTestSuite, self).__init__(name, root)
+
+ def ListTests(self, context):
+ tests = []
+ for dirname, dirs, files in os.walk(self.root):
+ for dotted in [x for x in dirs if x.startswith('.')]:
+ dirs.remove(dotted)
+ dirs.sort()
+ files.sort()
+ for filename in files:
+ if filename.endswith(".js"):
+ testname = join(dirname[len(self.root) + 1:], filename[:-3])
+ test = testcase.TestCase(self, testname)
+ tests.append(test)
+ return tests
+
+ def GetFlagsForTestCase(self, testcase, context):
+ source = self.GetSourceForTest(testcase)
+ result = []
+ flags_match = re.findall(FLAGS_PATTERN, source)
+ for match in flags_match:
+ result += match.strip().split()
+ result += context.mode_flags
+ result.append(os.path.join(self.root, testcase.path + ".js"))
+ return testcase.flags + result
+
+ def GetSourceForTest(self, testcase):
+ filename = os.path.join(self.root, testcase.path + self.suffix())
+ with open(filename) as f:
+ return f.read()
+
+ def _IgnoreLine(self, string):
+ """Ignore empty lines, valgrind output and Android output."""
+ if not string: return True
+ return (string.startswith("==") or string.startswith("**") or
+ string.startswith("ANDROID"))
+
+ def IsFailureOutput(self, output, testpath):
+ expected_path = os.path.join(self.root, testpath + ".out")
+ expected_lines = []
+ # Can't use utils.ReadLinesFrom() here because it strips whitespace.
+ with open(expected_path) as f:
+ for line in f:
+ if line.startswith("#") or not line.strip(): continue
+ expected_lines.append(line)
+ raw_lines = output.stdout.splitlines()
+ actual_lines = [ s for s in raw_lines if not self._IgnoreLine(s) ]
+ env = { "basename": os.path.basename(testpath + ".js") }
+ if len(expected_lines) != len(actual_lines):
+ return True
+ for (expected, actual) in itertools.izip(expected_lines, actual_lines):
+ pattern = re.escape(expected.rstrip() % env)
+ pattern = pattern.replace("\\*", ".*")
+ pattern = "^%s$" % pattern
+ if not re.match(pattern, actual):
+ return True
+ return False
+
+ def StripOutputForTransmit(self, testcase):
+ pass
+
+
+def GetSuite(name, root):
+ return MessageTestSuite(name, root)
+
+
+# Deprecated definitions below.
+# TODO(jkummerow): Remove when SCons is no longer supported.
+
+
+import test
+from os.path import join, exists, basename, isdir
+
class MessageTestCase(test.TestCase):
def __init__(self, path, file, expected, mode, context, config):
@@ -41,9 +121,10 @@ class MessageTestCase(test.TestCase):
self.config = config
def IgnoreLine(self, str):
- """Ignore empty lines and valgrind output."""
+ """Ignore empty lines, valgrind output and Android output."""
if not str: return True
- else: return str.startswith('==') or str.startswith('**')
+ return (str.startswith('==') or str.startswith('**') or
+ str.startswith('ANDROID'))
def IsFailureOutput(self, output):
f = file(self.expected)
@@ -62,7 +143,7 @@ class MessageTestCase(test.TestCase):
pattern = '^%s$' % pattern
patterns.append(pattern)
# Compare actual output with the expected
- raw_lines = output.stdout.split('\n')
+ raw_lines = output.stdout.splitlines()
outlines = [ s for s in raw_lines if not self.IgnoreLine(s) ]
if len(outlines) != len(patterns):
return True
@@ -80,9 +161,9 @@ class MessageTestCase(test.TestCase):
def GetCommand(self):
result = self.config.context.GetVmCommand(self, self.mode)
source = open(self.file).read()
- flags_match = FLAGS_PATTERN.search(source)
- if flags_match:
- result += flags_match.group(1).strip().split()
+ flags_match = re.findall(FLAGS_PATTERN, source)
+ for match in flags_match:
+ result += match.strip().split()
result.append(self.file)
return result