// 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_driver/src/driver/timeline.dart'; import '../../common.dart'; void main() { group('Timeline', () { test('parses JSON', () { final Timeline timeline = Timeline.fromJson(<String, dynamic>{ 'traceEvents': <Map<String, dynamic>>[ <String, dynamic>{ 'name': 'test event', 'cat': 'test category', 'ph': 'B', 'pid': 123, 'tid': 234, 'dur': 345, 'tdur': 245, 'ts': 456, 'tts': 567, 'args': <String, dynamic>{ 'arg1': true, }, }, // Tests that we don't choke on missing data <String, dynamic>{}, ], }); expect(timeline.events, hasLength(2)); final TimelineEvent e1 = timeline.events![1]; expect(e1.name, 'test event'); expect(e1.category, 'test category'); expect(e1.phase, 'B'); expect(e1.processId, 123); expect(e1.threadId, 234); expect(e1.duration, const Duration(microseconds: 345)); expect(e1.threadDuration, const Duration(microseconds: 245)); expect(e1.timestampMicros, 456); expect(e1.threadTimestampMicros, 567); expect(e1.arguments, <String, dynamic>{'arg1': true}); final TimelineEvent e2 = timeline.events![0]; expect(e2.name, isNull); expect(e2.category, isNull); expect(e2.phase, isNull); expect(e2.processId, isNull); expect(e2.threadId, isNull); expect(e2.duration, isNull); expect(e2.threadDuration, isNull); expect(e2.timestampMicros, isNull); expect(e2.threadTimestampMicros, isNull); expect(e2.arguments, isNull); }); test('sorts JSON', () { final Timeline timeline = Timeline.fromJson(<String, dynamic>{ 'traceEvents': <Map<String, dynamic>>[ <String, dynamic>{ 'name': 'test event 1', 'ts': 457, }, <String, dynamic>{ 'name': 'test event 2', 'ts': 456, }, ], }); expect(timeline.events, hasLength(2)); expect(timeline.events![0].timestampMicros, equals(456)); expect(timeline.events![1].timestampMicros, equals(457)); expect(timeline.events![0].name, equals('test event 2')); expect(timeline.events![1].name, equals('test event 1')); }); test('sorts JSON nulls first', () { final Timeline timeline = Timeline.fromJson(<String, dynamic>{ 'traceEvents': <Map<String, dynamic>>[ <String, dynamic>{ 'name': 'test event 0', 'ts': null, }, <String, dynamic>{ 'name': 'test event 1', 'ts': 457, }, <String, dynamic>{ 'name': 'test event 2', 'ts': 456, }, <String, dynamic>{ 'name': 'test event 3', 'ts': null, }, ], }); expect(timeline.events, hasLength(4)); expect(timeline.events![0].timestampMicros, isNull); expect(timeline.events![1].timestampMicros, isNull); expect(timeline.events![2].timestampMicros, equals(456)); expect(timeline.events![3].timestampMicros, equals(457)); expect(timeline.events![0].name, equals('test event 0')); expect(timeline.events![1].name, equals('test event 3')); expect(timeline.events![2].name, equals('test event 2')); expect(timeline.events![3].name, equals('test event 1')); }); }); }