diff --git a/packages/flame/test/_resources/caveace.fa b/packages/flame/test/_resources/caveace.fa new file mode 100644 index 00000000000..cb95b6b4e8e Binary files /dev/null and b/packages/flame/test/_resources/caveace.fa differ diff --git a/packages/flame/test/_resources/chopper.json b/packages/flame/test/_resources/chopper.json new file mode 100644 index 00000000000..2f97f7278ab --- /dev/null +++ b/packages/flame/test/_resources/chopper.json @@ -0,0 +1,120 @@ +{ + "frames": { + "chopper 0.aseprite": { + "frame": { + "x": 0, + "y": 0, + "w": 48, + "h": 48 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 48, + "h": 48 + }, + "sourceSize": { + "w": 48, + "h": 48 + }, + "duration": 100 + }, + "chopper 1.aseprite": { + "frame": { + "x": 48, + "y": 0, + "w": 48, + "h": 48 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 48, + "h": 48 + }, + "sourceSize": { + "w": 48, + "h": 48 + }, + "duration": 100 + }, + "chopper 2.aseprite": { + "frame": { + "x": 96, + "y": 0, + "w": 48, + "h": 48 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 48, + "h": 48 + }, + "sourceSize": { + "w": 48, + "h": 48 + }, + "duration": 100 + }, + "chopper 3.aseprite": { + "frame": { + "x": 144, + "y": 0, + "w": 48, + "h": 48 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 48, + "h": 48 + }, + "sourceSize": { + "w": 48, + "h": 48 + }, + "duration": 100 + } + }, + "meta": { + "app": "http://www.aseprite.org/", + "version": "1.3-dev", + "image": "/home/erick/projetos/gamedev/airplane-resource-pack/chopper.png", + "format": "RGBA8888", + "size": { + "w": 192, + "h": 48 + }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { + "name": "body", + "opacity": 255, + "blendMode": "normal" + }, + { + "name": "rotor", + "opacity": 255, + "blendMode": "normal" + }, + { + "name": "stabilizer", + "opacity": 255, + "blendMode": "normal" + } + ], + "slices": [ + ] + } +} diff --git a/packages/flame/test/_resources/test_text_file.txt b/packages/flame/test/_resources/test_text_file.txt new file mode 100644 index 00000000000..de0f4c827e2 --- /dev/null +++ b/packages/flame/test/_resources/test_text_file.txt @@ -0,0 +1 @@ +This is sample text file for AssetsCache Unit testing. \ No newline at end of file diff --git a/packages/flame/test/cache/assets_cache_test.dart b/packages/flame/test/cache/assets_cache_test.dart new file mode 100644 index 00000000000..a5d9d4e6d76 --- /dev/null +++ b/packages/flame/test/cache/assets_cache_test.dart @@ -0,0 +1,91 @@ +import 'package:flame/cache.dart'; +import 'package:flame/flame.dart'; +import 'package:flame_test/flame_test.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; + +import '../fixtures/fixture_reader.dart'; + +class _AssetsCacheMock extends Mock implements AssetsCache {} + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('AssetsCache', () { + test('readFile', () async { + final assetsCache = AssetsCache(prefix: ''); + final fileName = fixture('test_text_file.txt').path; + final file = await assetsCache.readFile(fileName); + expect(file, isA()); + + expect( + () async => + assetsCache.readBinaryFile(fixture('test_text_file.txt').path), + failsAssert('"$fileName" was previously loaded as a text file'), + ); + }); + + test('readJson', () async { + final assetsCache = AssetsCache(prefix: ''); + final file = await assetsCache.readJson(fixture('chopper.json').path); + expect(file, isA>()); + }); + + test('readBinaryFile', () async { + final assetsCache = AssetsCache(prefix: ''); + final fileName = fixture('caveace.fa').path; + final file = await assetsCache.readBinaryFile(fileName); + expect(file, isA()); + + expect( + () async => assetsCache.readFile(fixture('caveace.fa').path), + failsAssert('"$fileName" was previously loaded as a binary file'), + ); + }); + + test('clear', () async { + final assetsCache = AssetsCache(prefix: ''); + + final fileName = fixture('test_text_file.txt').path; + final file = await assetsCache.readFile(fileName); + expect(file, isA()); + + final assetsCacheMock = _AssetsCacheMock(); + assetsCacheMock.clear(fileName); + verify(() => assetsCacheMock.clear(fileName)).called(1); + }); + + test('clearCache', () async { + final assetsCache = AssetsCache(prefix: ''); + + final fileName = fixture('test_text_file.txt').path; + final file = await assetsCache.readFile(fileName); + expect(file, isA()); + + final assetsCacheMock = _AssetsCacheMock(); + assetsCacheMock.clearCache(); + verify(assetsCacheMock.clearCache).called(1); + + // If all file was not clear from cache then it will not readBinaryFile + assetsCache.clearCache(); + final fileTxtAsBinary = await assetsCache.readBinaryFile(fileName); + expect(fileTxtAsBinary, isA()); + }); + + testWithFlameGame( + 'prefix on assets can not be changed', + (game) async { + game.assets = AssetsCache(); + expect(game.assets.prefix, 'assets/'); + }, + ); + + testWithFlameGame( + 'Game.assets is same as Flame.assets', + (game) async { + expect(game.assets, equals(Flame.assets)); + }, + ); + }); +} diff --git a/packages/flame/test/fixtures/fixture_reader.dart b/packages/flame/test/fixtures/fixture_reader.dart new file mode 100644 index 00000000000..26015d9d44c --- /dev/null +++ b/packages/flame/test/fixtures/fixture_reader.dart @@ -0,0 +1,12 @@ +import 'dart:io'; + +File fixture(String name) { + var dir = Directory.current.path; + if (dir.endsWith('/test')) { + dir = dir.replaceAll('/test', ''); + } + return File('$dir/test/_resources/$name'); +} + +String fixtureForString(String name) => + File('test/fixtures/$name').readAsStringSync();