[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