1# Copyright 2011 the V8 project authors. All rights reserved. 2# Redistribution and use in source and binary forms, with or without 3# modification, are permitted provided that the following conditions are 4# met: 5# 6# * Redistributions of source code must retain the above copyright 7# notice, this list of conditions and the following disclaimer. 8# * Redistributions in binary form must reproduce the above 9# copyright notice, this list of conditions and the following 10# disclaimer in the documentation and/or other materials provided 11# with the distribution. 12# * Neither the name of Google Inc. nor the names of its 13# contributors may be used to endorse or promote products derived 14# from this software without specific prior written permission. 15# 16# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 28 29import os 30 31from testrunner.local import testsuite 32from testrunner.objects import testcase 33 34 35class PreparserTestSuite(testsuite.TestSuite): 36 def __init__(self, name, root): 37 super(PreparserTestSuite, self).__init__(name, root) 38 39 def shell(self): 40 return "d8" 41 42 def _ParsePythonTestTemplates(self, result, filename): 43 pathname = os.path.join(self.root, filename + ".pyt") 44 def Test(name, source, expectation, extra_flags=[]): 45 source = source.replace("\n", " ") 46 testname = os.path.join(filename, name) 47 flags = ["-e", source] 48 if expectation: 49 flags += ["--throws"] 50 flags += extra_flags 51 test = testcase.TestCase(self, testname, flags=flags) 52 result.append(test) 53 def Template(name, source): 54 def MkTest(replacement, expectation): 55 testname = name 56 testsource = source 57 for key in replacement.keys(): 58 testname = testname.replace("$" + key, replacement[key]); 59 testsource = testsource.replace("$" + key, replacement[key]); 60 Test(testname, testsource, expectation) 61 return MkTest 62 execfile(pathname, {"Test": Test, "Template": Template}) 63 64 def ListTests(self, context): 65 result = [] 66 67 # Find all .pyt files in this directory. 68 filenames = [f[:-4] for f in os.listdir(self.root) if f.endswith(".pyt")] 69 filenames.sort() 70 for f in filenames: 71 self._ParsePythonTestTemplates(result, f) 72 return result 73 74 def GetFlagsForTestCase(self, testcase, context): 75 return testcase.flags 76 77 def GetSourceForTest(self, testcase): 78 assert testcase.flags[0] == "-e" 79 return testcase.flags[1] 80 81 def _VariantGeneratorFactory(self): 82 return testsuite.StandardVariantGenerator 83 84 85def GetSuite(name, root): 86 return PreparserTestSuite(name, root) 87