Index: test/preparser/testcfg.py |
diff --git a/test/preparser/testcfg.py b/test/preparser/testcfg.py |
index 88c06a31adcfe6a4737b8e28218c4bf1acda9975..61c14c9bd3ca80f71f4598a4c6b3e6f470fd3da8 100644 |
--- a/test/preparser/testcfg.py |
+++ b/test/preparser/testcfg.py |
@@ -25,13 +25,109 @@ |
# (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 os |
-from os.path import join, dirname, exists, isfile |
-import platform |
-import utils |
import re |
+from testrunner.local import testsuite |
+from testrunner.local import utils |
+from testrunner.objects import testcase |
+ |
+ |
+class PreparserTestSuite(testsuite.TestSuite): |
+ def __init__(self, name, root): |
+ super(PreparserTestSuite, self).__init__(name, root) |
+ |
+ def shell(self): |
+ return "preparser" |
+ |
+ def _GetExpectations(self): |
+ expects_file = join(self.root, "preparser.expectation") |
+ expectations_map = {} |
+ if not os.path.exists(expects_file): return expectations_map |
+ rule_regex = re.compile("^([\w\-]+)(?::([\w\-]+))?(?::(\d+),(\d+))?$") |
+ for line in utils.ReadLinesFrom(expects_file): |
+ rule_match = rule_regex.match(line) |
+ if not rule_match: continue |
+ expects = [] |
+ if (rule_match.group(2)): |
+ expects += [rule_match.group(2)] |
+ if (rule_match.group(3)): |
+ expects += [rule_match.group(3), rule_match.group(4)] |
+ expectations_map[rule_match.group(1)] = " ".join(expects) |
+ return expectations_map |
+ |
+ def _ParsePythonTestTemplates(self, result, filename): |
+ pathname = join(self.root, filename + ".pyt") |
+ def Test(name, source, expectation): |
+ source = source.replace("\n", " ") |
+ testname = os.path.join(filename, name) |
+ flags = ["-e", source] |
+ if expectation: |
+ flags += ["throws", expectation] |
+ test = testcase.TestCase(self, testname, flags=flags) |
+ result.append(test) |
+ def Template(name, source): |
+ def MkTest(replacement, expectation): |
+ testname = name |
+ testsource = source |
+ for key in replacement.keys(): |
+ testname = testname.replace("$" + key, replacement[key]); |
+ testsource = testsource.replace("$" + key, replacement[key]); |
+ Test(testname, testsource, expectation) |
+ return MkTest |
+ execfile(pathname, {"Test": Test, "Template": Template}) |
+ |
+ def ListTests(self, context): |
+ expectations = self._GetExpectations() |
+ result = [] |
+ |
+ # Find all .js files in this directory. |
+ filenames = [f[:-3] for f in os.listdir(self.root) if f.endswith(".js")] |
+ filenames.sort() |
+ for f in filenames: |
+ throws = expectations.get(f, None) |
+ flags = [f + ".js"] |
+ if throws: |
+ flags += ["throws", throws] |
+ test = testcase.TestCase(self, f, flags=flags) |
+ result.append(test) |
+ |
+ # Find all .pyt files in this directory. |
+ filenames = [f[:-4] for f in os.listdir(self.root) if f.endswith(".pyt")] |
+ filenames.sort() |
+ for f in filenames: |
+ self._ParsePythonTestTemplates(result, f) |
+ return result |
+ |
+ def GetFlagsForTestCase(self, testcase, context): |
+ first = testcase.flags[0] |
+ if first != "-e": |
+ testcase.flags[0] = os.path.join(self.root, first) |
+ return testcase.flags |
+ |
+ def GetSourceForTest(self, testcase): |
+ if testcase.flags[0] == "-e": |
+ return testcase.flags[1] |
+ with open(testcase.flags[0]) as f: |
+ return f.read() |
+ |
+ def VariantFlags(self): |
+ return [[]]; |
+ |
+ |
+def GetSuite(name, root): |
+ return PreparserTestSuite(name, root) |
+ |
+ |
+# Deprecated definitions below. |
+# TODO(jkummerow): Remove when SCons is no longer supported. |
+ |
+ |
+from os.path import join, exists, isfile |
+import test |
+ |
+ |
class PreparserTestCase(test.TestCase): |
def __init__(self, root, path, executable, mode, throws, context, source): |
@@ -50,7 +146,7 @@ class PreparserTestCase(test.TestCase): |
def HasSource(self): |
return self.source is not None |
- def GetSource(): |
+ def GetSource(self): |
return self.source |
def BuildCommand(self, path): |