// 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'));
    });
  });
}
