| // Copyright 2014 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:flutter/rendering.dart'; |
| import 'package:flutter/scheduler.dart'; |
| import 'package:flutter/widgets.dart'; |
| import 'package:flutter_test/flutter_test.dart'; |
| |
| void main() { |
| WidgetsFlutterBinding.ensureInitialized(); |
| |
| test( |
| 'handleMetricsChanged does not scheduleForcedFrame unless there a registered renderView with a child', |
| () async { |
| expect(SchedulerBinding.instance.hasScheduledFrame, false); |
| RendererBinding.instance.handleMetricsChanged(); |
| expect(SchedulerBinding.instance.hasScheduledFrame, false); |
| |
| RendererBinding.instance.addRenderView(RendererBinding.instance.renderView); |
| RendererBinding.instance.handleMetricsChanged(); |
| expect(SchedulerBinding.instance.hasScheduledFrame, false); |
| |
| RendererBinding.instance.renderView.child = RenderLimitedBox(); |
| RendererBinding.instance.handleMetricsChanged(); |
| expect(SchedulerBinding.instance.hasScheduledFrame, true); |
| |
| RendererBinding.instance.removeRenderView(RendererBinding.instance.renderView); |
| }, |
| ); |
| |
| test('debugDumpSemantics prints explanation when semantics are unavailable', () { |
| RendererBinding.instance.addRenderView(RendererBinding.instance.renderView); |
| final List<String?> log = <String?>[]; |
| debugPrint = (String? message, {int? wrapWidth}) { |
| log.add(message); |
| }; |
| debugDumpSemanticsTree(); |
| expect(log, hasLength(1)); |
| expect(log.single, startsWith('Semantics not generated')); |
| expect( |
| log.single, |
| endsWith( |
| 'For performance reasons, the framework only generates semantics when asked to do so by the platform.\n' |
| 'Usually, platforms only ask for semantics when assistive technologies (like screen readers) are running.\n' |
| 'To generate semantics, try turning on an assistive technology (like VoiceOver or TalkBack) on your device.', |
| ), |
| ); |
| RendererBinding.instance.removeRenderView(RendererBinding.instance.renderView); |
| }); |
| |
| test('root pipeline owner cannot manage root node', () { |
| final RenderObject rootNode = RenderProxyBox(); |
| expect( |
| () => RendererBinding.instance.rootPipelineOwner.rootNode = rootNode, |
| throwsA( |
| isFlutterError.having( |
| (FlutterError e) => e.message, |
| 'message', |
| contains('Cannot set a rootNode on the default root pipeline owner.'), |
| ), |
| ), |
| ); |
| }); |
| } |