コード例 #1
0
ファイル: test_Locker.py プロジェクト: area1/stpyv8
    def testLocker(self):
        with STPyV8.JSIsolate():
            self.assertFalse(STPyV8.JSLocker.active)
            self.assertFalse(STPyV8.JSLocker.locked)

            with STPyV8.JSLocker() as outter_locker:
                self.assertTrue(STPyV8.JSLocker.active)
                self.assertTrue(STPyV8.JSLocker.locked)

                self.assertTrue(outter_locker)

                with STPyV8.JSLocker() as inner_locker:
                    self.assertTrue(STPyV8.JSLocker.locked)

                    self.assertTrue(outter_locker)
                    self.assertTrue(inner_locker)

                    with STPyV8.JSUnlocker():
                        self.assertFalse(STPyV8.JSLocker.locked)

                        self.assertTrue(outter_locker)
                        self.assertTrue(inner_locker)

                    self.assertTrue(STPyV8.JSLocker.locked)

            self.assertTrue(STPyV8.JSLocker.active)
            self.assertFalse(STPyV8.JSLocker.locked)

            locker = STPyV8.JSLocker()

        with STPyV8.JSContext():
            self.assertRaises(RuntimeError, locker.__enter__)
            self.assertRaises(RuntimeError, locker.__exit__, None, None, None)

        del locker
コード例 #2
0
    def testMultiJavascriptThread(self):
        class Global(STPyV8.JSContext):
            result = []

            def add(self, value):
                with STPyV8.JSUnlocker():
                    self.result.append(value)

        g = Global()

        def run():
            with STPyV8.JSIsolate():
                with STPyV8.JSContext(g) as ctxt:
                    ctxt.eval("""
                        for (i=0; i<10; i++)
                            add(i);
                    """)

        threads = [threading.Thread(target=run), threading.Thread(target=run)]

        with STPyV8.JSLocker():
            for t in threads:
                t.start()

        for t in threads:
            t.join()

        self.assertEqual(20, len(g.result))
コード例 #3
0
ファイル: JSEngine.py プロジェクト: voidz0r/thug
 def JSLocker(self):
     return V8.JSLocker()