import 'package:desktop_plugin/agent.dart'; import 'package:desktop_plugin/print/pavo/pavo_backend.dart'; import 'package:flutter_test/flutter_test.dart'; /// 守护:Pavo 后端的 isolate 闭包不得捕获实例状态。 /// /// 曾经的 bug:Isolate.run(_statusSync) 的方法 tear-off 经 this._log → /// AgentLog → StreamController → UI 订阅链一路拽到 Timer(unsendable), /// isolate 消息序列化直接抛 "Illegal argument in isolate message"。 /// Windows 真实 App(UI 监听日志流)必炸;本测试在有活跃日志订阅的环境下调 /// getStatus,若回归捕获 this 会立刻复现 unsendable。 void main() { test('PavoPrintBackend.getStatus 在活跃日志订阅下 isolate 闭包可发送', () async { final agent = Agent(AgentOptions(mock: true, port: 38296)); await agent.start(); final sub = agent.log.stream.listen((_) {}); addTearDown(() async { await sub.cancel(); await agent.stop(); }); final backend = PavoPrintBackend(onLog: agent.log.write); // mac 上无 PavoApiW_x64.dll:期望走 offline 分支(DLL 加载失败被内部 // catch 转友好文案),而绝不是抛 "unsendable" isolate 消息错误 final status = await backend.getStatus(); expect(status.online, isFalse); expect(status.statusText, isNot(contains('unsendable'))); }); }