Files
rive-flutter/test/asset_gc_test.dart
mjtalbot 312a8b0577 bring flutter asset loading inline with cpp
basically does what it says, i'm also removing an example i used to check on things being garbage collected

Diffs=
c0411df0a bring flutter asset loading inline with cpp (#6135)

Co-authored-by: Gordon Hayes <pggordonhayes@gmail.com>
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
2023-10-24 14:37:30 +00:00

73 lines
2.3 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:rive/rive.dart';
import 'package:rive/src/rive_core/shapes/image.dart';
import 'src/utils.dart';
const assetName = 'CleanShot 2023-06-08 at 08.51.19@2x.png';
void main() {
group("Test asset referencer behaviour.", () {
test('Load a rive file, gets you one referencer.', () async {
final riveBytes = loadFile('assets/sample_image.riv');
final riveFile = RiveFile.import(
riveBytes,
);
expect(riveFile.artboards.length, 1);
final image = riveFile.artboards.first.component<Image>(assetName);
final asset = image!.asset;
expect(asset!.fileAssetReferencers.length, 1);
});
test('Make some artboard instances gets additional referencers.', () async {
final riveBytes = loadFile('assets/sample_image.riv');
final riveFile = RiveFile.import(
riveBytes,
);
// each artboard adds file asset referencer.
riveFile.artboards.first.instance();
riveFile.artboards.first.instance();
final image = riveFile.artboards.first.component<Image>(assetName);
final asset = image!.asset!;
expect(asset.fileAssetReferencers.length, 3);
});
test(
'If we let instance get garbage collected they will get cleaned up.',
() async {
final riveBytes = loadFile('assets/sample_image.riv');
final riveFile = RiveFile.import(
riveBytes,
);
// each artboard adds file asset referencer.
var count = 19;
while (count-- > 0) {
riveFile.artboards.first.instance();
}
final image = riveFile.artboards.first.component<Image>(assetName);
final asset = image!.asset!;
expect(asset.fileAssetReferencers.length, 20);
await Future<void>.delayed(const Duration(milliseconds: 100));
// ok, kinda lame, but the above allows garbage collection to kick in
// which will remove referencers, its not really deterministic though
expect(
asset.fileAssetReferencers.length < 5,
true,
reason: "Expected ${asset.fileAssetReferencers.length} < 5",
);
},
// skipping because it does not work, you can see things get
// finalized but this does not consistently happen in tests.
skip: true,
);
});
}