def test_Worker_jobs__jobs_function(): print_title("Worker_jobs - jobs_function") def jobs_function(func, args): if func == "special command": dev.fake_query_2() else: # Default job handling where, e.g. # func = self.dev.write # args = ("toggle LED",) func(*args) app = create_QApplication() dev = FakeDevice() qdev = QDeviceIO(dev) qdev.create_worker_jobs( jobs_function=jobs_function, debug=DEBUG, ) qdev.signal_jobs_updated.connect(process_jobs_updated) assert qdev.start() == True # Immediately fire a call to test if the worker is ready for it qdev.send(dev.fake_query_2) # fmt: off # Simulate device runtime start_time = time.perf_counter() QtCore.QTimer.singleShot(100, lambda: qdev.send("special command")) QtCore.QTimer.singleShot( 200, lambda: qdev.send(dev.fake_command_with_argument, 0)) # fmt: on while time.perf_counter() - start_time < 0.5: app.processEvents() time.sleep(0.001) # Do not hog the CPU tprint("About to quit") app.processEvents() assert qdev.quit() == True app.quit() assert dev.count_commands == 3 assert dev.count_replies == 2 assert cnt_jobs_updated == 3
def test_Worker_jobs(start_alive=True): print_title("Worker_jobs" + ("" if start_alive else " - start dead")) app = create_QApplication() dev = FakeDevice(start_alive=start_alive) qdev = QDeviceIO(dev) qdev.create_worker_jobs(debug=DEBUG) qdev.signal_jobs_updated.connect(process_jobs_updated) assert qdev.start() == start_alive # Immediately fire a call to test if the worker is ready for it qdev.add_to_jobs_queue(dev.fake_query_2) # fmt: off # Simulate device runtime start_time = time.perf_counter() QtCore.QTimer.singleShot(100, qdev.process_jobs_queue) QtCore.QTimer.singleShot(200, lambda: qdev.send(dev.fake_query_2)) QtCore.QTimer.singleShot( 300, lambda: qdev.add_to_jobs_queue(dev.fake_command_with_argument, 0)) QtCore.QTimer.singleShot( 400, lambda: qdev.add_to_jobs_queue(dev.fake_command_with_argument, 0)) QtCore.QTimer.singleShot( 500, lambda: qdev.add_to_jobs_queue(dev.fake_command_with_argument, 0)) QtCore.QTimer.singleShot(600, qdev.process_jobs_queue) QtCore.QTimer.singleShot( 700, lambda: qdev.send("trigger_illegal_function_call_error")) # fmt: on while time.perf_counter() - start_time < 1: app.processEvents() time.sleep(0.001) # Do not hog the CPU tprint("About to quit") app.processEvents() assert qdev.quit() == True app.quit() if start_alive: assert dev.count_commands == 5 assert dev.count_replies == 2 assert cnt_jobs_updated == 4