blob: e94744e9e3b6b4b3ac5b10d269164c93af3b8a5d [file] [log] [blame]
#!/usr/bin/env python
# ---
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ---
import os
import re
import sys
import shutil
import datetime
import subprocess
PROGRAM = sys.argv[0]
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
def main():
# all work done in directory of this program
baseDir = os.path.dirname(PROGRAM)
os.chdir(baseDir)
testsDir = os.path.abspath("../../thirdparty/commonjs-tests")
outDir = os.path.abspath("out")
# validate testsDir
if not os.path.exists(testsDir):
error("tests dir does not exist: %s" % testsDir)
if not os.path.isdir(testsDir):
error("tests dir is not a directory: %s" % testsDir)
# validate and reset outDir
if os.path.exists(outDir):
if not os.path.isdir(outDir):
error("out dir is not a directory: %s" % outDir)
shutil.rmtree(outDir)
os.makedirs(outDir)
tests = getTests(testsDir)
# now all work done in outDir
os.chdir("out")
# build the individual tests
iframes = []
for test in tests:
testName = test.replace('/', '-')
htmlFile = buildTest(os.path.join(testsDir, test), testName)
iframes.append("<iframe width='100%%' height='30' src='%s'></iframe>" % htmlFile)
iframesLines = "\n".join(iframes)
# build the browser launcher
html = fileContents("../launcher-main.template.html")
html = html.replace("@iframes@", iframesLines)
html = html.replace("@date@", getDate())
oFileName = "launcher-all.html"
oFile = file(oFileName, "w")
oFile.write(html)
oFile.close()
print
print "Generated browser test: %s" % os.path.abspath(oFileName)
print
print "You can run the test as a local file under Safari but not Chrome."
print "To test under Chrome, access the files via http://"
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
def buildTest(testDir, testName):
log("generating tests for %s" % (testName))
html = fileContents("../launcher-in-iframe.template.html")
# get the list of modules
modules = getModules(testDir)
modulesSource = []
modulesSource.append("try {")
for module in modules:
source = fileContents("%s.js" % os.path.join(testDir, module))
modulesSource.append("//----------------------------------------------")
modulesSource.append("define('%s', function(require,exports,module) {" % module)
modulesSource.append(source.strip())
modulesSource.append("});")
modulesSource.append("")
modulesSource.append("}")
modulesSource.append("catch(e) {")
modulesSource.append(" console.log('exception thrown loading modules: ' + e)")
modulesSource.append("}")
modulesLines = "\n".join(modulesSource)
html = html.replace("@modules@", modulesLines)
html = html.replace("@title@", testName)
html = html.replace("@date@", getDate())
# build HTML launcher for iframe
oFileName = "%s.html" % testName
oFile = file(oFileName, "w")
oFile.write(html)
oFile.close()
return oFileName
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
def getModules(testDir):
modules = []
for root, dirs, files in os.walk(testDir):
for file in files:
if not file.endswith(".js"): continue
moduleSource = os.path.relpath(os.path.join(root, file), testDir)
moduleName = os.path.splitext(moduleSource)[0]
modules.append(moduleName)
return modules
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
def getTests(testDir):
tests = []
for root, dirs, files in os.walk(testDir):
if "program.js" in files:
tests.append(os.path.relpath(root, testDir))
return tests
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
def run(cmdArgs):
result = subprocess.Popen(cmdArgs, stdout=subprocess.PIPE).communicate()[0]
if not re.match(r"\s*", result):
print result
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
def fileContents(iFileName):
iFile = file(iFileName)
contents = iFile.read()
iFile.close()
return contents
def getDate():
return datetime.datetime.today().isoformat(" ")
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
def log(message):
print "%s: %s" % (PROGRAM, message)
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
def error(message):
log(message)
exit(1)
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
main()