blob: e776245afeba671dc769ebe354b465b2ac747767 [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/analytics/analytics_controller.dart';
import 'package:devtools_app/src/config_specific/ide_theme/ide_theme.dart';
import 'package:devtools_app/src/config_specific/import_export/import_export.dart';
import 'package:devtools_app/src/screens/debugger/debugger_screen.dart';
import 'package:devtools_app/src/service/service_manager.dart';
import 'package:devtools_app/src/shared/framework_controller.dart';
import 'package:devtools_app/src/shared/globals.dart';
import 'package:devtools_app/src/shared/scaffold.dart';
import 'package:devtools_app/src/shared/screen.dart';
import 'package:devtools_app/src/shared/survey.dart';
import 'package:devtools_test/devtools_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
void main() {
final mockServiceManager = MockServiceConnectionManager();
when(mockServiceManager.service).thenReturn(null);
when(mockServiceManager.connectedAppInitialized).thenReturn(false);
when(mockServiceManager.connectedState).thenReturn(
ValueNotifier<ConnectedState>(const ConnectedState(false)),
);
final mockErrorBadgeManager = MockErrorBadgeManager();
when(mockServiceManager.errorBadgeManager).thenReturn(mockErrorBadgeManager);
when(mockErrorBadgeManager.errorCountNotifier(any))
.thenReturn(ValueNotifier<int>(0));
setGlobal(ServiceConnectionManager, mockServiceManager);
setGlobal(FrameworkController, FrameworkController());
setGlobal(SurveyService, SurveyService());
setGlobal(OfflineModeController, OfflineModeController());
setGlobal(IdeTheme, IdeTheme());
testWidgets(
'does not display floating debugger controls when debugger screen is showing',
(WidgetTester tester) async {
final mockConnectedApp = MockConnectedAppLegacy();
when(mockConnectedApp.isFlutterAppNow).thenReturn(true);
when(mockConnectedApp.isProfileBuildNow).thenReturn(false);
when(mockServiceManager.connectedAppInitialized).thenReturn(true);
when(mockServiceManager.connectedApp).thenReturn(mockConnectedApp);
final mockDebuggerController = MockDebuggerController();
when(mockDebuggerController.isPaused)
.thenReturn(ValueNotifier<bool>(false));
const debuggerScreenKey = Key('debugger screen');
const debuggerTabKey = Key('debugger tab');
await tester.pumpWidget(
wrapWithControllers(
DevToolsScaffold(
tabs: const [
_TestScreen(
DebuggerScreen.id,
debuggerScreenKey,
tabKey: debuggerTabKey,
showFloatingDebuggerControls: false,
),
_screen2,
],
ideTheme: IdeTheme(),
),
debugger: mockDebuggerController,
analytics: AnalyticsController(enabled: false, firstRun: false),
),
);
expect(find.byKey(debuggerScreenKey), findsOneWidget);
expect(find.byKey(_k2), findsNothing);
expect(find.byType(FloatingDebuggerControls), findsNothing);
// Tap on the tab for screen 2 and verify the controls are present.
await tester.tap(find.byKey(_t2));
await tester.pumpAndSettle();
await tester.pumpAndSettle();
expect(find.byKey(debuggerScreenKey), findsNothing);
expect(find.byKey(_k2), findsOneWidget);
expect(find.byType(FloatingDebuggerControls), findsOneWidget);
// Return to the debugger screen and verify the controls are gone.
await tester.tap(find.byKey(debuggerTabKey));
await tester.pumpAndSettle();
await tester.pumpAndSettle();
expect(find.byKey(debuggerScreenKey), findsOneWidget);
expect(find.byKey(_k2), findsNothing);
expect(find.byType(FloatingDebuggerControls), findsNothing);
});
}
class _TestScreen extends Screen {
const _TestScreen(
this.name,
this.key, {
bool showFloatingDebuggerControls = true,
Key? tabKey,
}) : super(
name,
title: name,
icon: Icons.computer,
tabKey: tabKey,
showFloatingDebuggerControls: showFloatingDebuggerControls,
);
final String name;
final Key key;
@override
Widget build(BuildContext context) {
return SizedBox(key: key);
}
}
// Keys and tabs for use in the test.
const _k2 = Key('body key 2');
const _t2 = Key('tab key 2');
const _screen2 = _TestScreen('screen2', _k2, tabKey: _t2);