| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| import 'dart:async'; | |
| import 'dart:convert'; | |
| import 'dart:typed_data'; | |
| import 'dart:ui'; | |
| import 'package:litetest/litetest.dart'; | |
| void main() { | |
| test('Loading an asset that does not exist returns null', () async { | |
| Object? error; | |
| try { | |
| await ImmutableBuffer.fromAsset('ThisDoesNotExist'); | |
| } catch (err) { | |
| error = err; | |
| } | |
| expect(error, isNotNull); | |
| expect(error is Exception, true); | |
| }); | |
| test('Loading a file that does not exist returns null', () async { | |
| Object? error; | |
| try { | |
| await ImmutableBuffer.fromFilePath('ThisDoesNotExist'); | |
| } catch (err) { | |
| error = err; | |
| } | |
| expect(error, isNotNull); | |
| expect(error is Exception, true); | |
| }); | |
| test('returns the bytes of a bundled asset', () async { | |
| final ImmutableBuffer buffer = await ImmutableBuffer.fromAsset('DashInNooglerHat.jpg'); | |
| expect(buffer.length == 354679, true); | |
| }); | |
| test('returns the bytes of a file', () async { | |
| final ImmutableBuffer buffer = await ImmutableBuffer.fromFilePath('flutter/lib/ui/fixtures/DashInNooglerHat.jpg'); | |
| expect(buffer.length == 354679, true); | |
| }); | |
| test('Can load an asset with a space in the key', () async { | |
| // This assets actual path is "fixtures/DashInNooglerHat%20WithSpace.jpg" | |
| final ImmutableBuffer buffer = await ImmutableBuffer.fromAsset('DashInNooglerHat WithSpace.jpg'); | |
| expect(buffer.length == 354679, true); | |
| }); | |
| test('can dispose immutable buffer', () async { | |
| final ImmutableBuffer buffer = await ImmutableBuffer.fromAsset('DashInNooglerHat.jpg'); | |
| buffer.dispose(); | |
| }); | |
| test('Tester can disable loading fonts from an asset bundle', () async { | |
| final List<int> ahemImage = await _createPictureFromFont('Ahem'); | |
| // Font that is bundled in the asset directory of the test runner. | |
| final List<int> bundledFontImage = await _createPictureFromFont('Roboto'); | |
| // Bundling fonts is disabled, so the font selected in both cases should be ahem. | |
| // Therefore each buffer will contain identical contents. | |
| expect(ahemImage, equals(bundledFontImage)); | |
| }); | |
| test('Tester can still load through dart:ui', () async { | |
| /// Manually load font asset through dart. | |
| final Uint8List encoded = utf8.encode(Uri(path: Uri.encodeFull('Roboto-Medium.ttf')).path); | |
| final Completer<Uint8List> result = Completer<Uint8List>(); | |
| PlatformDispatcher.instance.sendPlatformMessage('flutter/assets', encoded.buffer.asByteData(), (ByteData? data) { | |
| result.complete(data!.buffer.asUint8List()); | |
| }); | |
| await loadFontFromList(await result.future, fontFamily: 'Roboto2'); | |
| final List<int> ahemImage = await _createPictureFromFont('Ahem'); | |
| // Font that is bundled in the asset directory of the test runner. | |
| final List<int> bundledFontImage = await _createPictureFromFont('Roboto2'); | |
| // Bundling fonts is disabled, so the font selected in both cases should be ahem. | |
| // Therefore each buffer will contain identical contents. | |
| expect(ahemImage, notEquals(bundledFontImage)); | |
| }); | |
| } | |
| Future<List<int>> _createPictureFromFont(String fontFamily) async { | |
| final ParagraphBuilder builder = ParagraphBuilder(ParagraphStyle( | |
| fontFamily: fontFamily, | |
| fontStyle: FontStyle.normal, | |
| fontWeight: FontWeight.normal, | |
| fontSize: 20, | |
| )); | |
| builder.addText('Test'); | |
| final Paragraph paragraph = builder.build(); | |
| paragraph.layout(const ParagraphConstraints(width: 20 * 5.0)); | |
| final PictureRecorder recorder = PictureRecorder(); | |
| final Canvas canvas = Canvas(recorder); | |
| canvas.drawParagraph(paragraph, Offset.zero); | |
| final Picture picture = recorder.endRecording(); | |
| final Image image = await picture.toImage(100, 100); | |
| final ByteData? data = await image.toByteData(); | |
| return data!.buffer.asUint8List().toList(); | |
| } |