def list_js_runtimes():
    # AttributeError: module 'execjs' has no attribute 'available_runtimes'
    try:
        ajsr = execjs.available_runtimes()
    except AttributeError:
        # Newer execjs does not have available_runtimes() method?
        ajsr = []
        supported_runtimes = execjs.runtimes()
        for sr in supported_runtimes:
            if supported_runtimes[sr].is_available():
                ajsr.append(sr)
    if len(ajsr) > 0:
        print('Detected {0} JavaScript runtimes:'.format(len(ajsr)))
        for js in ajsr:
            jsr = execjs.get(js)
            pref_str = ''
            if js == 'Node':
                pref_str = ' <== I prefer this one!'
            print('   {0}: {1}{2}'.format(js, jsr.name, pref_str))
    else:
        print('No JS runtimes detected! Install Node.js, spidermonkey or something!')
    sys.exit(0)
예제 #2
0
 def __call__(self, parser, namespace, values, option_string=None):
     buffer = io.StringIO()
     for name, runtime in sorted(execjs.runtimes().items()):
         if runtime.is_available():
             buffer.write(name + "\n")
     parser.exit(message=buffer.getvalue())
예제 #3
0
 def __call__(self, parser, namespace, values, option_string=None):
     buffer = io.StringIO()
     for name, runtime in sorted(execjs.runtimes().items()):
         if runtime.is_available():
             buffer.write(name + "\n")
     parser.exit(message=buffer.getvalue())
예제 #4
0
 def __call__(self, parser, namespace, values, option_string=None):
     message = "".join(name + "\n"
                       for name, runtime in list(execjs.runtimes().items())
                       if runtime.is_available())
     parser.exit(message=message)
예제 #5
0
    def test_thrown_exception(self):
        with self.assertRaises(execjs.ProgramError):
            self.runtime.exec_("throw 'hello'")

    def test_broken_substitutions(self):
        s = '#{source}#{encoded_source}#{json2_source}'
        self.assertEqual(s, self.runtime.eval('"' + s + '"'))


class DefaultRuntimeTest(unittest.TestCase, RuntimeTestBase):
    def setUp(self):
        self.runtime = execjs


for name, runtime in execjs.runtimes().items():
    if not runtime.is_available():
        continue
    class_name = name.capitalize() + "RuntimeTest"

    def f(runtime=runtime):
        class RuntimeTest(unittest.TestCase, RuntimeTestBase):
            def setUp(self):
                self.runtime = runtime
        RuntimeTest.__name__ = str(class_name)  # 2.x compatibility
        return RuntimeTest
    exec("{class_name} = f()".format(class_name=class_name))


class CommonTest(unittest.TestCase):
    def test_empty_path_environ(self):
예제 #6
0
 def __call__(self, parser, namespace, values, option_string=None):
     message = "".join(name + "\n" for name, runtime in execjs.runtimes().items() if runtime.is_available())
     parser.exit(message=message)
예제 #7
0
    def test_thrown_exception(self):
        with self.assertRaises(execjs.ProgramError):
            self.runtime.exec_("throw 'hello'")

    def test_broken_substitutions(self):
        s = '#{source}#{encoded_source}#{json2_source}'
        self.assertEqual(s, self.runtime.eval('"' + s + '"'))


class DefaultRuntimeTest(unittest.TestCase, RuntimeTestBase):
    def setUp(self):
        self.runtime = execjs


for name, runtime in list(execjs.runtimes().items()):
    if not runtime.is_available():
        continue
    class_name = name.capitalize() + "RuntimeTest"

    def f(runtime=runtime):
        class RuntimeTest(unittest.TestCase, RuntimeTestBase):
            def setUp(self):
                self.runtime = runtime

        RuntimeTest.__name__ = str(class_name)  # 2.x compatibility
        return RuntimeTest

    exec("{class_name} = f()".format(class_name=class_name))