| // 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 'package:test/bootstrap/browser.dart'; |
| import 'package:test/test.dart'; |
| import 'package:ui/src/engine.dart'; |
| import 'package:ui/ui.dart' as ui; |
| import 'package:ui/ui_web/src/ui_web.dart' as ui_web; |
| |
| import '../common/matchers.dart'; |
| import 'common.dart'; |
| |
| void main() { |
| internalBootstrapBrowserTest(() => testMain); |
| } |
| |
| void testMain() { |
| group('CanvasKit', () { |
| setUpCanvasKitTest(withImplicitView: true); |
| |
| late LayerScene scene; |
| |
| setUp(() { |
| // Create a scene to use in tests. |
| final CkPicture picture = |
| paintPicture(const ui.Rect.fromLTRB(0, 0, 60, 60), (CkCanvas canvas) { |
| canvas.drawRect(const ui.Rect.fromLTRB(0, 0, 60, 60), |
| CkPaint()..style = ui.PaintingStyle.fill); |
| }); |
| final LayerSceneBuilder sb = LayerSceneBuilder(); |
| sb.addPicture(ui.Offset.zero, picture); |
| scene = sb.build(); |
| }); |
| |
| test('can render into arbitrary views', () async { |
| await CanvasKitRenderer.instance.renderScene(scene, implicitView); |
| |
| final EngineFlutterView anotherView = EngineFlutterView( |
| EnginePlatformDispatcher.instance, createDomElement('another-view')); |
| EnginePlatformDispatcher.instance.viewManager.registerView(anotherView); |
| |
| await CanvasKitRenderer.instance.renderScene(scene, anotherView); |
| }); |
| |
| test('will error if trying to render into an unregistered view', () async { |
| final EngineFlutterView unregisteredView = EngineFlutterView( |
| EnginePlatformDispatcher.instance, |
| createDomElement('unregistered-view')); |
| expect( |
| () => CanvasKitRenderer.instance.renderScene(scene, unregisteredView), |
| throwsAssertionError, |
| ); |
| }); |
| |
| test('will dispose the Rasterizer for a disposed view', () async { |
| final EngineFlutterView view = EngineFlutterView( |
| EnginePlatformDispatcher.instance, createDomElement('multi-view')); |
| EnginePlatformDispatcher.instance.viewManager.registerView(view); |
| expect( |
| CanvasKitRenderer.instance.debugGetRasterizerForView(view), |
| isNotNull, |
| ); |
| |
| EnginePlatformDispatcher.instance.viewManager |
| .disposeAndUnregisterView(view.viewId); |
| expect( |
| CanvasKitRenderer.instance.debugGetRasterizerForView(view), |
| isNull, |
| ); |
| }); |
| |
| // Issue https://github.com/flutter/flutter/issues/142094 |
| test('does not reset platform view factories when disposing a view', |
| () async { |
| expect(PlatformViewManager.instance.knowsViewType('self-test'), isFalse); |
| |
| final EngineFlutterView view = EngineFlutterView( |
| EnginePlatformDispatcher.instance, createDomElement('multi-view')); |
| EnginePlatformDispatcher.instance.viewManager.registerView(view); |
| expect( |
| CanvasKitRenderer.instance.debugGetRasterizerForView(view), |
| isNotNull, |
| ); |
| |
| EnginePlatformDispatcher.instance.viewManager |
| .disposeAndUnregisterView(view.viewId); |
| expect( |
| CanvasKitRenderer.instance.debugGetRasterizerForView(view), |
| isNull, |
| ); |
| |
| expect( |
| PlatformViewManager.instance.knowsViewType( |
| ui_web.PlatformViewRegistry.defaultVisibleViewType), |
| isTrue); |
| expect( |
| PlatformViewManager.instance.knowsViewType( |
| ui_web.PlatformViewRegistry.defaultInvisibleViewType), |
| isTrue); |
| }); |
| }); |
| } |