import 'package:flame_lua_runtime/runtime/diagnostics/runtime_diagnostics.dart'; import 'package:flame_lua_runtime/runtime/game/flame_lua_game.dart'; import 'package:flame_lua_runtime/runtime/models/game_diff.dart'; import 'package:flame_lua_runtime/runtime/models/runtime_event.dart'; import 'package:flame_lua_runtime/runtime/packages/game_package.dart'; import 'package:flame_lua_runtime/runtime/packages/game_package_manifest.dart'; import 'package:flame_lua_runtime/runtime/packages/game_package_repository.dart'; import 'package:flame_lua_runtime/runtime/scripting/runtime_script_services.dart'; import 'package:flame_lua_runtime/runtime/scripting/script_engine.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { group('FlameLuaGame diagnostics debug access', () { test('exposes diagnostics entries, dump text and debug json', () async { final diagnostics = RuntimeDiagnostics() ..record( type: RuntimeDiagnosticType.commandError, message: 'command failed', context: {'command': 'play_bgm'}, ); final game = FlameLuaGame( scriptEngine: _FakeScriptEngine(), packageRepository: _FakePackageRepository(), gameId: 'ludo', diagnostics: diagnostics, ); expect(game.diagnosticEntries, hasLength(1)); expect(game.diagnosticsDumpText(), contains('command failed')); expect(game.diagnosticsDebugJson()['count'], 1); expect(game.resourcesDebugJson(), {'initialized': false}); expect(game.notifyLua('host.ready'), isFalse); await expectLater(game.callLua('host.ready'), throwsA(isA())); }); }); } class _FakeScriptEngine implements ScriptEngine { @override Future loadPackage( GamePackage package, { RuntimeScriptServices services = const RuntimeScriptServices(), }) { throw UnimplementedError(); } @override Future loadPackages( List packages, { RuntimeScriptServices services = const RuntimeScriptServices(), }) { throw UnimplementedError(); } @override GameDiff dispatchEvent(RuntimeEvent event) { throw UnimplementedError(); } @override GameDiff init(Map context) { throw UnimplementedError(); } @override bool smokeTest(Map context) { throw UnimplementedError(); } } class _FakePackageRepository implements GamePackageRepository { @override Future load(String gameId) async { return GamePackage.asset( rootPath: 'example/assets/games/$gameId', manifest: GamePackageManifest( gameId: gameId, name: gameId, version: 'test', runtimeApiVersion: 1, entry: 'scripts/main.lua', assetsBase: 'assets', ), ); } }