From affdab1a5aac67b26be4c9a8b85c75ceaba0e93b Mon Sep 17 00:00:00 2001 From: Michael Goderbauer Date: Mon, 2 Oct 2017 15:46:22 -0700 Subject: [PATCH] Add SemanticsEvent.toString for easier debugging (#12363) --- .../lib/src/rendering/semantics_event.dart | 10 +++++ .../test/widgets/semantics_event_test.dart | 44 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 packages/flutter/test/widgets/semantics_event_test.dart diff --git a/packages/flutter/lib/src/rendering/semantics_event.dart b/packages/flutter/lib/src/rendering/semantics_event.dart index a38def83c7..ca99db07c2 100644 --- a/packages/flutter/lib/src/rendering/semantics_event.dart +++ b/packages/flutter/lib/src/rendering/semantics_event.dart @@ -26,6 +26,16 @@ abstract class SemanticsEvent { /// Converts this event to a Map that can be encoded with /// [StandardMessageCodec]. Map toMap(); + + @override + String toString() { + final List pairs = []; + final Map map = toMap(); + final List sortedKeys = map.keys.toList()..sort(); + for (String key in sortedKeys) + pairs.add('$key: ${map[key]}'); + return '$runtimeType(${pairs.join(', ')})'; + } } /// Notifies that a scroll action has been completed. diff --git a/packages/flutter/test/widgets/semantics_event_test.dart b/packages/flutter/test/widgets/semantics_event_test.dart new file mode 100644 index 0000000000..449e0da092 --- /dev/null +++ b/packages/flutter/test/widgets/semantics_event_test.dart @@ -0,0 +1,44 @@ +// 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/rendering.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + test('SemanticsEvent.toString', () { + expect( + new TestSemanticsEvent().toString(), + 'TestSemanticsEvent()', + ); + expect( + new TestSemanticsEvent(number: 10).toString(), + 'TestSemanticsEvent(number: 10)', + ); + expect( + new TestSemanticsEvent(text: 'hello').toString(), + 'TestSemanticsEvent(text: hello)', + ); + expect( + new TestSemanticsEvent(text: 'hello', number: 10).toString(), + 'TestSemanticsEvent(number: 10, text: hello)', + ); + }); +} + +class TestSemanticsEvent extends SemanticsEvent { + TestSemanticsEvent({ this.text, this.number }) : super('TestEvent'); + + final String text; + final int number; + + @override + Map toMap() { + final Map result = {}; + if (text != null) + result['text'] = text; + if (number != null) + result['number'] = number; + return result; + } +}