From f4fc2c87f7cef6bf50a52af323d23abb7680e035 Mon Sep 17 00:00:00 2001 From: Emmanuel Garcia Date: Tue, 22 Feb 2022 14:53:17 -0800 Subject: [PATCH] Test that render object changed its visual appearance after texture is create (#98622) --- .../test/rendering/platform_view_test.dart | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/packages/flutter/test/rendering/platform_view_test.dart b/packages/flutter/test/rendering/platform_view_test.dart index a57a3e6880c..ef38c7c65af 100644 --- a/packages/flutter/test/rendering/platform_view_test.dart +++ b/packages/flutter/test/rendering/platform_view_test.dart @@ -2,6 +2,7 @@ // 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:ui' as ui; import 'package:fake_async/fake_async.dart'; @@ -14,7 +15,7 @@ import '../services/fake_platform_views.dart'; import 'rendering_tester.dart'; void main() { - TestRenderingFlutterBinding.ensureInitialized(); + final TestRenderingFlutterBinding binding = TestRenderingFlutterBinding.ensureInitialized(); group('PlatformViewRenderBox', () { late FakePlatformViewController fakePlatformViewController; @@ -149,6 +150,45 @@ void main() { // Passes if no crashes. }); + + test('render object changed its visual appearance after texture is created', () { + FakeAsync().run((FakeAsync async) { + final AndroidViewController viewController = + PlatformViewsService.initAndroidView(id: 0, viewType: 'webview', layoutDirection: TextDirection.rtl); + final RenderAndroidView renderBox = RenderAndroidView( + viewController: viewController, + hitTestBehavior: PlatformViewHitTestBehavior.opaque, + gestureRecognizers: >{}, + ); + + final Completer viewCreation = Completer(); + const MethodChannel channel = MethodChannel('flutter/platform_views'); + binding.defaultBinaryMessenger.setMockMethodCallHandler(channel, (MethodCall methodCall) async { + assert(methodCall.method == 'create', 'Unexpected method call'); + await viewCreation.future; + return /*textureId=*/ 0; + }); + + layout(renderBox); + pumpFrame(phase: EnginePhase.paint); + + expect(renderBox.debugLayer, isNotNull); + expect(renderBox.debugLayer!.hasChildren, isFalse); + expect(viewController.isCreated, isFalse); + expect(renderBox.debugNeedsPaint, isFalse); + + viewCreation.complete(); + async.flushMicrotasks(); + + expect(viewController.isCreated, isTrue); + expect(renderBox.debugNeedsPaint, isTrue); + expect(renderBox.debugLayer!.hasChildren, isFalse); + + pumpFrame(phase: EnginePhase.paint); + expect(renderBox.debugLayer!.hasChildren, isTrue); + expect(renderBox.debugLayer!.firstChild, isA()); + }); + }); } ui.PointerData _pointerData(