// 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('ensure frame is scheduled for markNeedsSemanticsUpdate with onlyChanges: true', () { 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(onlyLocalUpdates: true); expect(onNeedVisualUpdateCallCount, 2); }); } 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); @override void describeSemanticsConfiguration(SemanticsConfiguration config) { super.describeSemanticsConfiguration(config); config.isSemanticBoundary = true; } }