| // Copyright 2017 The Chromium 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/material.dart'; |
| import 'package:flutter/rendering.dart'; |
| import 'package:test/test.dart'; |
| |
| void main() { |
| test('ensure frame is scheduled for markNeedsSemanticsUpdate', () { |
| final TestRenderObject renderObject = new TestRenderObject(); |
| int onNeedVisualUpdateCallCount = 0; |
| final PipelineOwner owner = new PipelineOwner(onNeedVisualUpdate: () { |
| onNeedVisualUpdateCallCount +=1; |
| }); |
| owner.ensureSemantics(); |
| renderObject.attach(owner); |
| owner.flushSemantics(); |
| |
| expect(onNeedVisualUpdateCallCount, 1); |
| renderObject.markNeedsSemanticsUpdate(); |
| expect(onNeedVisualUpdateCallCount, 2); |
| }); |
| |
| test('detached RenderObject does not do semantics', () { |
| final TestRenderObject renderObject = new TestRenderObject(); |
| expect(renderObject.attached, isFalse); |
| expect(renderObject.describeSemanticsConfigurationCallCount, 0); |
| |
| renderObject.markNeedsSemanticsUpdate(); |
| expect(renderObject.describeSemanticsConfigurationCallCount, 0); |
| }); |
| } |
| |
| class TestRenderObject extends RenderObject { |
| @override |
| void debugAssertDoesMeetConstraints() {} |
| |
| @override |
| Rect get paintBounds => null; |
| |
| @override |
| void performLayout() {} |
| |
| @override |
| void performResize() {} |
| |
| @override |
| Rect get semanticBounds => new Rect.fromLTWH(0.0, 0.0, 10.0, 20.0); |
| |
| int describeSemanticsConfigurationCallCount = 0; |
| |
| @override |
| void describeSemanticsConfiguration(SemanticsConfiguration config) { |
| super.describeSemanticsConfiguration(config); |
| config.isSemanticBoundary = true; |
| describeSemanticsConfigurationCallCount++; |
| } |
| } |
| |