def test_execute(statements): executor = ThreadExecutor() for s, expected_state, expected_results in statements: statement = Statement(s, worksheet) statement._expected_state = expected_state statement._expected_results = expected_results statement._got_executing = False executor.add_statement(statement) loop = gobject.MainLoop() def on_statement_executing(executor, statement): if hasattr(statement, '_got_state'): statement._out_of_order = True statement._got_executing = True def on_statement_complete(executor, statement): statement._got_state = statement.state statement._got_results = statement.results statement._out_of_order = False def on_complete(executor): loop.quit() def interrupt(): executor.interrupt() global timed_out timed_out = False def timeout(): global timed_out timed_out = True loop.quit() executor.connect('statement-executing', on_statement_executing) executor.connect('statement-complete', on_statement_complete) executor.connect('complete', on_complete) if executor.compile(): executor.execute() interrupt_source = gobject.timeout_add(500, interrupt) timeout_source = gobject.timeout_add(1000, timeout) loop.run() if timed_out: raise AssertionError("Interrupting ThreadExecutor failed") gobject.source_remove(interrupt_source) gobject.source_remove(timeout_source) for s in executor.statements: assert_equals(s._got_state, s._expected_state) assert_equals(s._got_results, s._expected_results) if s._out_of_order: raise AssertionError("ThreadExecutor sent 'statement-executing' after 'statement-complete'") if s._expected_state == Statement.INTERRUPTED and not s._got_executing: raise AssertionError("ThreadExecutor did not send 'statement-executing' within timeout")
def test_execute(statements): executor = ThreadExecutor() for s, expected_state, expected_results in statements: statement = Statement(s, worksheet) statement._expected_state = expected_state statement._expected_results = expected_results executor.add_statement(statement) loop = gobject.MainLoop() def on_statement_complete(executor, statement): statement._got_state = statement.state statement._got_results = statement.results def on_complete(executor): loop.quit() def interrupt(): executor.interrupt() global timed_out timed_out = False def timeout(): global timed_out timed_out = True loop.quit() executor.connect('statement-complete', on_statement_complete) executor.connect('complete', on_complete) if executor.compile(): executor.execute() interrupt_source = gobject.timeout_add(500, interrupt) timeout_source = gobject.timeout_add(1000, timeout) loop.run() if timed_out: raise AssertionError("Interrupting ThreadExecutor failed") gobject.source_remove(interrupt_source) gobject.source_remove(timeout_source) for s in executor.statements: assert_equals(s._got_state, s._expected_state) assert_equals(s._got_results, s._expected_results)