import 'dart:io'; import 'package:flame_lua_runtime/runtime/packages/game_package.dart'; import 'package:flame_lua_runtime/runtime/packages/game_package_manifest.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { group('GamePackage', () { test('resolves manifest resource keys', () { final package = _package(); expect( package.resolveResourcePath('board'), 'example/assets/games/ludo/assets/board.png', ); }); test('resolves package-relative paths and assetsBase fallback', () { final package = _package(); expect( package.resolveResourcePath('scripts/main.lua'), 'example/assets/games/ludo/scripts/main.lua', ); expect( package.resolveResourcePath('unknown.png'), 'example/assets/games/ludo/assets/unknown.png', ); expect( package.resolveResourcePath( 'example/assets/games/ludo/assets/board.png', ), 'example/assets/games/ludo/assets/board.png', ); }); test('keeps runtime Lua root configurable per package', () { final package = GamePackage.asset( rootPath: 'example/assets/games/ludo', manifest: _manifest(), runtimeLuaRoot: 'packages/flame_lua_runtime/assets/runtime/lua', ); expect( package.runtimeLuaRoot, 'packages/flame_lua_runtime/assets/runtime/lua', ); }); test('reads file package text and bytes', () async { final root = await Directory.systemTemp.createTemp('game_package_test_'); addTearDown(() => root.deleteSync(recursive: true)); Directory('${root.path}/scripts').createSync(recursive: true); File('${root.path}/scripts/main.lua').writeAsStringSync('return true'); final package = GamePackage.file( rootPath: root.path, manifest: _manifest(), ); expect(await package.readText('scripts/main.lua'), 'return true'); expect((await package.readBytes('scripts/main.lua')).lengthInBytes, 11); }); }); } GamePackage _package() { return GamePackage.asset( rootPath: 'example/assets/games/ludo', manifest: _manifest(), ); } GamePackageManifest _manifest() { return const GamePackageManifest( gameId: 'ludo', name: 'Ludo', version: '0.1.0', runtimeApiVersion: 1, entry: 'scripts/main.lua', assetsBase: 'assets', resources: {'board': GameResource(type: 'image', path: 'assets/board.png')}, ); }