[pypy-svn] r39394 - in pypy/dist/pypy/translator/js: . test
fijal at codespeak.net
fijal at codespeak.net
Sun Feb 25 21:46:51 CET 2007
Author: fijal
Date: Sun Feb 25 21:46:49 2007
New Revision: 39394
Modified:
pypy/dist/pypy/translator/js/main.py
pypy/dist/pypy/translator/js/test/test_main.py
Log:
Another patch from Daniel Nogardi which allows not to specify function list,
but instead just filename. And a test from myself :)
Modified: pypy/dist/pypy/translator/js/main.py
==============================================================================
--- pypy/dist/pypy/translator/js/main.py (original)
+++ pypy/dist/pypy/translator/js/main.py Sun Feb 25 21:46:49 2007
@@ -14,6 +14,7 @@
from pypy.config.config import OptionDescription, BoolOption, StrOption
from pypy.config.config import Config, to_optparse
import py
+import sys
js_optiondescr = OptionDescription("jscompile", "", [
BoolOption("view", "View flow graphs",
@@ -44,16 +45,29 @@
[:func_data.func_code.co_argcount])
def rpython2javascript_main(argv, jsconfig):
- if len(argv) < 2:
+ if len(argv) == 0:
print "usage: module <function_names>"
- import sys
sys.exit(0)
module_name = argv[0]
- if module_name.endswith('.py'):
- module_name = module_name[:-3]
- function_names = argv[1:]
- mod = __import__(module_name, None, None, ["Module"])
+ if not module_name.endswith('.py'):
+ module_name += ".py"
+ mod = py.path.local(module_name).pyimport()
+ if len(argv) == 1:
+ function_names = []
+ for function_name in dir(mod):
+ function = getattr(mod, function_name)
+ if callable(function) and getattr(function, '_client', False):
+ function_names.append( function_name )
+ if not function_names:
+ print "Cannot find any function with _client=True in %s"\
+ % module_name
+ sys.exit(1)
+ else:
+ function_names = argv[1:]
source = rpython2javascript(mod, function_names, jsconfig=jsconfig)
+ if not source:
+ print "Exiting, source not generated"
+ sys.exit(1)
open(jsconfig.output, "w").write(source)
print "Written file %s" % jsconfig.output
Modified: pypy/dist/pypy/translator/js/test/test_main.py
==============================================================================
--- pypy/dist/pypy/translator/js/test/test_main.py (original)
+++ pypy/dist/pypy/translator/js/test/test_main.py Sun Feb 25 21:46:49 2007
@@ -2,15 +2,22 @@
""" tests of rpython2javascript function
"""
-from pypy.translator.js.main import rpython2javascript
+from pypy.translator.js.main import rpython2javascript, rpython2javascript_main,\
+ js_optiondescr
from pypy.translator.js import conftest
from pypy.rpython.ootypesystem.bltregistry import BasicExternal, described
import py
import sys
+from pypy.tool.udir import udir
+from pypy.config.config import Config, to_optparse
+
#if not conftest.option.browser:
# py.test.skip("Works only in browser (right now?)")
+def setup_module(mod):
+ mod.jsconfig = Config(js_optiondescr)
+
class A(BasicExternal):
def method(self, a={'a':'a'}):
pass
@@ -31,3 +38,32 @@
def test_module_none():
assert rpython2javascript(None, "fff")
+
+class TestJsMain(object):
+ def _test_not_raises(self, mod_file, args_rest=[]):
+ try:
+ rpython2javascript_main([str(mod_file)] + args_rest,
+ jsconfig)
+ except SystemExit:
+ py.test.fail("Exited")
+
+ def _test_raises(self, mod_file, args_rest):
+ py.test.raises(SystemExit, rpython2javascript_main,
+ [str(mod_file)] + args_rest, jsconfig)
+
+ def test_main_one(self):
+ udir.ensure("js_one.py").write(py.code.Source("""
+ def f():
+ pass
+ f._client = True
+ """))
+ self._test_not_raises(udir.join("js_one.py"))
+
+ def test_main_two(self):
+ udir.ensure("js_two.py").write(py.code.Source("""
+ def f():
+ pass
+ """))
+ self._test_not_raises(udir.join("js_two.py"), ["f"])
+ self._test_raises(udir.join("js_two.py"), [])
+
More information about the Pypy-commit
mailing list