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
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))
def JSLocker(self): return V8.JSLocker()