view test_pydertron.py @ 12:e4978bd08bfa

Factored out unit test suite
author Atul Varma <varmaa@toolness.com>
date Thu, 10 Sep 2009 13:53:03 -0700
parents
children 6c55f09ff31d
line wrap: on
line source

import os
import sys

import pydermonkey
from pydertron import JsSandbox, SandboxedFileSystem, jsexposed

def run_test(name, libpath):
    sandbox = JsSandbox(SandboxedFileSystem(libpath))

    stats = [0, 0]

    @jsexposed(name='print')
    def jsprint(message, label):
        if label == "pass":
            stats[0] += 1
        elif label == "fail":
            stats[1] += 1
        print "%s %s" % (message, label)

    sandbox.set_globals(
        sys = sandbox.new_object(**{'print': jsprint}),
        environment = sandbox.new_object()
        )

    retval = sandbox.run_script("require('program')")
    sandbox.finish()
    print

    if retval != 0:
        stats[1] += 1
    return stats

if __name__ == '__main__':
    base_libpath = os.path.join("interoperablejs-read-only",
                                "compliance")
    if not os.path.exists(base_libpath):
        print "Please run the following command and then re-run "
        print "this script:"
        print
        print ("svn checkout "
               "http://interoperablejs.googlecode.com/svn/trunk/ "
               "interoperablejs-read-only")
        sys.exit(1)

    dirs = [(os.path.join(base_libpath, name), name)
            for name in os.listdir(base_libpath)
            if name not in ['.svn', 'ORACLE']]

    totals = [0, 0]

    for libpath, name in dirs:
        passed, failed = run_test(name, libpath)
        totals[0] += passed
        totals[1] += failed

    print "passed: %d  failed: %d" % tuple(totals)

    import gc
    gc.collect()
    if pydermonkey.get_debug_info()['runtime_count']:
        sys.stderr.write("WARNING: JS runtime was not destroyed.\n")

    sys.exit(totals[1])