blob: 6aafd5d6a7a2705d051a62daad536e05adc470ac [file]
// Copyright 2019 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:devtools_app/src/globals.dart';
import 'package:devtools_app/src/profiler/cpu_profiler.dart';
import 'package:devtools_app/src/service_manager.dart';
import 'package:devtools_app/src/timeline/event_details.dart';
import 'package:devtools_app/src/timeline/timeline_controller.dart';
import 'package:devtools_app/src/timeline/timeline_model.dart';
import 'package:devtools_app/src/vm_flags.dart' as vm_flags;
import 'package:devtools_testing/support/timeline_test_data.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'support/mocks.dart';
import 'support/wrappers.dart';
void main() {
group('EventDetails', () {
EventDetails eventDetails;
Future<void> pumpEventDetails(
TimelineEvent selectedEvent,
WidgetTester tester,
) async {
eventDetails = EventDetails(selectedEvent);
await tester.pumpWidget(wrapWithControllers(
eventDetails,
timeline: TimelineController(),
));
expect(find.byType(EventDetails), findsOneWidget);
}
setUp(() {
final fakeServiceManager = FakeServiceManager(useFakeService: true);
setGlobal(ServiceConnectionManager, fakeServiceManager);
when(serviceManager.connectedApp.isDartWebAppNow).thenReturn(false);
});
testWidgets('builds for UI event', (WidgetTester tester) async {
await pumpEventDetails(goldenUiTimelineEvent, tester);
expect(find.byType(CpuProfiler), findsOneWidget);
expect(find.byType(CpuProfilerDisabled), findsNothing);
expect(find.byType(EventSummary), findsNothing);
expect(find.text(EventDetails.noEventSelected), findsNothing);
expect(find.text(EventDetails.instructions), findsNothing);
});
testWidgets('builds for Raster event', (WidgetTester tester) async {
await pumpEventDetails(goldenRasterTimelineEvent, tester);
expect(find.byType(CpuProfiler), findsNothing);
expect(find.byType(CpuProfilerDisabled), findsNothing);
expect(find.byType(EventSummary), findsOneWidget);
expect(find.text(EventDetails.noEventSelected), findsNothing);
expect(find.text(EventDetails.instructions), findsNothing);
});
testWidgets('builds for ASYNC event', (WidgetTester tester) async {
await pumpEventDetails(asyncEventWithInstantChildren, tester);
expect(find.byType(CpuProfiler), findsNothing);
expect(find.byType(CpuProfilerDisabled), findsNothing);
expect(find.byType(EventSummary), findsOneWidget);
expect(find.text(EventDetails.noEventSelected), findsNothing);
expect(find.text(EventDetails.instructions), findsNothing);
});
testWidgets('builds for null event', (WidgetTester tester) async {
await pumpEventDetails(null, tester);
expect(find.byType(CpuProfiler), findsNothing);
expect(find.byType(CpuProfilerDisabled), findsNothing);
expect(find.byType(EventSummary), findsNothing);
expect(find.text(EventDetails.noEventSelected), findsOneWidget);
expect(find.text(EventDetails.instructions), findsOneWidget);
});
testWidgets('builds for disabled profiler', (WidgetTester tester) async {
await serviceManager.service.setFlag(vm_flags.profiler, 'false');
await pumpEventDetails(goldenUiTimelineEvent, tester);
expect(find.byType(CpuProfiler), findsNothing);
expect(find.byType(CpuProfilerDisabled), findsOneWidget);
expect(find.byType(EventSummary), findsNothing);
expect(find.text(EventDetails.noEventSelected), findsNothing);
expect(find.text(EventDetails.instructions), findsNothing);
await tester.tap(find.text('Enable profiler'));
await tester.pumpAndSettle();
expect(find.byType(CpuProfiler), findsOneWidget);
expect(find.text(CpuProfiler.emptyCpuProfile), findsOneWidget);
expect(find.byType(CpuProfilerDisabled), findsNothing);
expect(find.byType(EventSummary), findsNothing);
});
});
// TODO(kenz): add golden images for these tests.
group('EventSummary', () {
EventSummary eventSummary;
testWidgets('event with connected events', (WidgetTester tester) async {
eventSummary = EventSummary(asyncEventWithInstantChildren);
await tester.pumpWidget(wrap(eventSummary));
expect(find.byType(EventSummary), findsOneWidget);
expect(find.text('Time'), findsOneWidget);
expect(find.text('Thread id'), findsOneWidget);
expect(find.text('Process id'), findsOneWidget);
expect(find.text('Category'), findsOneWidget);
expect(find.text('Async id'), findsOneWidget);
expect(find.text('Connected events'), findsOneWidget);
});
testWidgets('event without connected events', (WidgetTester tester) async {
eventSummary = EventSummary(goldenUiTimelineEvent);
await tester.pumpWidget(wrap(eventSummary));
expect(find.byType(EventSummary), findsOneWidget);
expect(find.text('Time'), findsOneWidget);
expect(find.text('Thread id'), findsOneWidget);
expect(find.text('Process id'), findsOneWidget);
expect(find.text('Category'), findsOneWidget);
expect(find.text('Async id'), findsNothing);
expect(find.text('Connected events'), findsNothing);
});
testWidgets('event with args', (WidgetTester tester) async {
eventSummary = EventSummary(goldenRasterTimelineEvent);
await tester.pumpWidget(wrap(eventSummary));
expect(find.byType(EventSummary), findsOneWidget);
expect(find.text('Time'), findsOneWidget);
expect(find.text('Thread id'), findsOneWidget);
expect(find.text('Process id'), findsOneWidget);
expect(find.text('Category'), findsOneWidget);
expect(find.text('Async id'), findsNothing);
expect(find.text('Arguments'), findsOneWidget);
});
testWidgets('event without args', (WidgetTester tester) async {
eventSummary = EventSummary(goldenUiTimelineEvent);
await tester.pumpWidget(wrap(eventSummary));
expect(find.byType(EventSummary), findsOneWidget);
expect(find.text('Time'), findsOneWidget);
expect(find.text('Thread id'), findsOneWidget);
expect(find.text('Process id'), findsOneWidget);
expect(find.text('Category'), findsOneWidget);
expect(find.text('Async id'), findsNothing);
expect(find.text('Arguments'), findsNothing);
});
});
}