view pydershell/test.py @ 26:b7037cd0f375

Added support for exposing object properties to JS.
author Atul Varma <varmaa@toolness.com>
date Mon, 07 Sep 2009 22:17:57 -0700
parents dace90a7f5e3
children
line wrap: on
line source

#! /usr/bin/env python

# Trivial embedding of pydershell.

import sys

import pydermonkey
from pydershell import JsSandbox, JsExposedObject, jsexposed

if __name__ == '__main__':
    sandbox = JsSandbox()

    class Baz(JsExposedObject):
        __jsprops__ = ['moose']

        def __init__(self):
            self._moose = 0

        def get_moose(self):
            self._moose += 1
            return self._moose

        def set_moose(self, value):
            self._moose = value

        moose = property(get_moose, set_moose)

        @jsexposed
        def woozle(self, blap):
            return blap + 5

    @jsexposed(on=sandbox.root)
    def baz():
        return Baz()

    @jsexposed(on=sandbox.root)
    def bar(obj):
        print obj.bar()

    @jsexposed(on=sandbox.root)
    def foo(callback):
        return callback()

    @jsexposed(on=sandbox.root)
    def ensureBaz(baz):
        if not isinstance(baz, Baz):
            print "Uhoh"
        else:
            print "ok"

    @jsexposed(name="print", on=sandbox.root)
    def jsprint(string):
        print string

    retval = sandbox.run_script('test.js')

    sandbox.finish()
    del sandbox

    import gc
    gc.collect()
    if pydermonkey.get_debug_info()['runtime_count']:
        print "WARNING: JS runtime was not destroyed."

    sys.exit(retval)