| // 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:typed_data'; | |
| import 'dart:ui'; | |
| import 'package:litetest/litetest.dart'; | |
| void main() { | |
| test('window.sendPlatformMessage preserves callback zone', () { | |
| runZoned(() { | |
| final Zone innerZone = Zone.current; | |
| PlatformDispatcher.instance.sendPlatformMessage('test', ByteData.view(Uint8List(0).buffer), expectAsync1((ByteData? data) { | |
| final Zone runZone = Zone.current; | |
| expect(runZone, isNotNull); | |
| expect(runZone, same(innerZone)); | |
| })); | |
| }); | |
| }); | |
| test('FrameTiming.toString has the correct format', () { | |
| final FrameTiming timing = FrameTiming( | |
| vsyncStart: 500, | |
| buildStart: 1000, | |
| buildFinish: 8000, | |
| rasterStart: 9000, | |
| rasterFinish: 19500, | |
| rasterFinishWallTime: 19501, | |
| frameNumber: 23, | |
| ); | |
| expect(timing.toString(), | |
| 'FrameTiming(buildDuration: 7.0ms, ' | |
| 'rasterDuration: 10.5ms, ' | |
| 'vsyncOverhead: 0.5ms, ' | |
| 'totalSpan: 19.0ms, ' | |
| 'layerCacheCount: 0, ' | |
| 'layerCacheBytes: 0, ' | |
| 'pictureCacheCount: 0, ' | |
| 'pictureCacheBytes: 0, ' | |
| 'frameNumber: 23)'); | |
| }); | |
| test('FrameTiming.toString with cache statistics has the correct format', () { | |
| final FrameTiming timing = FrameTiming( | |
| vsyncStart: 500, | |
| buildStart: 1000, | |
| buildFinish: 8000, | |
| rasterStart: 9000, | |
| rasterFinish: 19500, | |
| rasterFinishWallTime: 19501, | |
| layerCacheCount: 5, | |
| layerCacheBytes: 200000, | |
| pictureCacheCount: 3, | |
| pictureCacheBytes: 300000, | |
| frameNumber: 29, | |
| ); | |
| expect(timing.toString(), | |
| 'FrameTiming(buildDuration: 7.0ms, ' | |
| 'rasterDuration: 10.5ms, ' | |
| 'vsyncOverhead: 0.5ms, ' | |
| 'totalSpan: 19.0ms, ' | |
| 'layerCacheCount: 5, ' | |
| 'layerCacheBytes: 200000, ' | |
| 'pictureCacheCount: 3, ' | |
| 'pictureCacheBytes: 300000, ' | |
| 'frameNumber: 29)'); | |
| }); | |
| test('computePlatformResolvedLocale basic', () { | |
| final List<Locale> supportedLocales = <Locale>[ | |
| const Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hans', countryCode: 'CN'), | |
| const Locale.fromSubtags(languageCode: 'fr', countryCode: 'FR'), | |
| const Locale.fromSubtags(languageCode: 'en', countryCode: 'US'), | |
| const Locale.fromSubtags(languageCode: 'en'), | |
| ]; | |
| // The default implementation returns null due to lack of a real platform. | |
| final Locale? result = PlatformDispatcher.instance.computePlatformResolvedLocale(supportedLocales); | |
| expect(result, null); | |
| }); | |
| test('Display is configured for the implicitView', () { | |
| final FlutterView implicitView = PlatformDispatcher.instance.implicitView!; | |
| final Display display = implicitView.display; | |
| expect(display.id, 0); | |
| expect(display.devicePixelRatio, implicitView.devicePixelRatio); | |
| expect(display.refreshRate, 60); | |
| expect(display.size, implicitView.physicalSize); | |
| }); | |
| test('FlutterView.toString contains the viewId', () { | |
| final FlutterView flutterView = PlatformDispatcher.instance.implicitView!; | |
| expect(flutterView.viewId, 0); | |
| expect(flutterView.toString(), 'FlutterView(id: 0)'); | |
| }); | |
| test('scaleFontSize is the identity function by default when textScaleFactor = 1', () { | |
| expect(PlatformDispatcher.instance.scaleFontSize(0), 0.0); | |
| expect(PlatformDispatcher.instance.scaleFontSize(1), 1.0); | |
| expect(PlatformDispatcher.instance.scaleFontSize(2), 2.0); | |
| expect(PlatformDispatcher.instance.scaleFontSize(3), 3.0); | |
| expect(PlatformDispatcher.instance.scaleFontSize(3.4), 3.4); | |
| }); | |
| } |