class Checker(object): def __init__(self, testcase): self.testcase = testcase self.called = [] def __enter__(self): self.ctxt = JSContext() self.ctxt.enter() return self def __exit__(self, exc_type, exc_value, traceback): self.ctxt.leave() def __getattr__(self, name): return getattr(self.testcase, name) def test(self, script): JSEngine().compile(script).visit(self) return self.called def onProgram(self, prog): self.ast = prog.toAST() self.json = json.loads(prog.toJSON()) for decl in prog.scope.declarations: decl.visit(self) for stmt in prog.body: stmt.visit(self) def onBlock(self, block): for stmt in block.statements: stmt.visit(self) def onExpressionStatement(self, stmt): stmt.expression.visit(self)
def __enter__(self): self.ctxt = JSContext() self.ctxt.enter() return self