blob: 84dca650681e904f2e5382478c29826ec48768fa [file] [log] [blame]
// 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);
});
});
}