test262/tools/packaging/packagerConfig.py

130 lines
5.5 KiB
Python
Raw Normal View History

2011-09-24 19:35:50 +02:00
# Copyright (c) 2009 Microsoft Corporation
#
# Redistribution and use in source and binary forms, with or without modification, are permitted provided
# that the following conditions are met:
# * Redistributions of source code must retain the above copyright notice, this list of conditions and
# the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
# the following disclaimer in the documentation and/or other materials provided with the distribution.
# * Neither the name of Microsoft nor the names of its contributors may be used to
# endorse or promote products derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#--Imports---------------------------------------------------------------------
import os
import subprocess
import stat
import re
2011-09-24 19:35:50 +02:00
#--Globals---------------------------------------------------------------------
MAX_CASES_PER_JSON = 1000
WEBSITE_SHORT_NAME = "website"
CONSOLE_SHORT_NAME = "console"
DEFAULT_TESTCASE_TEMPLATE="test262"
ONE_JSON_PER_CHAPTER = False
TESTCASELIST_PER_JSON = False
2011-09-24 19:35:50 +02:00
#Path to the root of the Hg repository (relative to this file's location)
2011-09-30 09:59:50 +02:00
TEST262_ROOT = os.path.join(os.path.dirname(os.path.realpath(__file__)),
"..", "..")
2011-09-24 19:35:50 +02:00
TEST262_ROOT = os.path.abspath(TEST262_ROOT)
2011-09-30 09:59:50 +02:00
#Directory full of test cases we want to port to the website's test
#harness runner
2011-09-24 19:35:50 +02:00
TEST262_CASES_DIR = os.path.join(TEST262_ROOT, "test", "suite")
2011-09-30 09:59:50 +02:00
#Directory containing test harness files to be ported over to the
#website. Note that only *.js files will be migrated from this dir.
2011-09-24 19:35:50 +02:00
TEST262_HARNESS_DIR = os.path.join(TEST262_ROOT, "test", "harness")
#Directory full of website test cases (ported over from TEST262_CASES_DIR)
TEST262_WEB_CASES_DIR = os.path.join(TEST262_ROOT, WEBSITE_SHORT_NAME, "json")
TEST262_CONSOLE_CASES_DIR = os.path.join(TEST262_ROOT, CONSOLE_SHORT_NAME)
2011-09-24 19:35:50 +02:00
2011-09-30 09:59:50 +02:00
#Directory containing the website's test harness (ported over from
#TEST262_HARNESS_DIR)
TEST262_WEB_HARNESS_DIR = os.path.join(TEST262_ROOT, WEBSITE_SHORT_NAME,
"harness")
TEST262_CONSOLE_HARNESS_DIR = os.path.join(TEST262_ROOT, CONSOLE_SHORT_NAME,
"harness")
2011-09-24 19:35:50 +02:00
2011-09-30 09:59:50 +02:00
#Path to the ported test case files on the actual website as opposed
#to the Hg layout
WEBSITE_CASES_PATH = "json/"
2011-09-24 19:35:50 +02:00
2011-09-30 09:59:50 +02:00
#The name of a file which contains a list of tests which should be
#disabled in test262. These tests are either invalid as-per ES5 or
#have issues with the test262 web harness.
EXCLUDED_FILENAME = os.path.join(TEST262_ROOT, "test", "config",
"excludelist.xml")
2011-09-24 19:35:50 +02:00
WEBSITE_EXCLUDE_RE_LIST = ["bestPractice"]
WEBSITE_EXCLUDE_RE_LIST = [ re.compile(x) for x in WEBSITE_EXCLUDE_RE_LIST]
2011-09-24 19:35:50 +02:00
#------------------------------------------------------------------------------
TEMPLATE_LINES = None
__lastHarnessType = None
def generateHarness(harnessType, jsonName, title):
global TEMPLATE_LINES
global __lastHarnessType
if TEMPLATE_LINES==None or harnessType!=__lastHarnessType:
__lastHarnessType = harnessType
TEMPLATE_LINES = []
2011-09-30 09:59:50 +02:00
with open(os.path.join(os.getcwd(), "templates",
"runner." + harnessType + ".html"), "r") as f:
2011-09-24 19:35:50 +02:00
TEMPLATE_LINES = f.readlines()
2011-09-30 09:59:50 +02:00
fileName = os.path.join(TEST262_ROOT, WEBSITE_SHORT_NAME,
jsonName.replace(".json", ".html"))
2011-09-24 19:35:50 +02:00
fileNameExists = False
if os.path.exists(fileName):
SC_HELPER.edit(fileName)
fileNameExists = True
with open(fileName, "w") as f:
for line in TEMPLATE_LINES:
if "var TEST_LIST_PATH =" in line:
2011-09-30 09:59:50 +02:00
f.write(" var TEST_LIST_PATH = \"json/" + jsonName + \
"\";" + os.linesep)
2011-09-24 19:35:50 +02:00
#elif "ECMAScript 5" in line:
2011-09-30 09:59:50 +02:00
# f.write(line.replace("ECMAScript 5",
# "ECMAScript 5: %s" % title))
2011-09-24 19:35:50 +02:00
else:
f.write(line)
if not fileNameExists:
SC_HELPER.add(fileName)
#------------------------------------------------------------------------------
class SCAbstraction(object):
'''
A class which abstracts working with source control systems in relation to
generated test262 files. Useful when test262 is also used internally by
browser implementors.
'''
def edit(self, filename):
'''
Source control edit of a file. For Mercurial, just make sure it's
writable.
'''
if not(os.stat(filename).st_mode & stat.S_IWRITE):
os.chmod(filename, stat.S_IWRITE)
def add(self, filename):
'''
Source control add of a file.
'''
subprocess.call(["hg", "add", filename])
2011-09-30 09:59:50 +02:00
SC_HELPER = SCAbstraction()