22// Use of this source code is governed by a BSD-style license that can be
33// found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd.
44
5+ import 'package:devtools_app/devtools_app.dart' ;
56import 'package:devtools_app/src/framework/scaffold/scaffold.dart' ;
6- import 'package:devtools_app/src/service/service_manager.dart' ;
7- import 'package:devtools_app/src/shared/globals.dart' ;
8- import 'package:devtools_app/src/shared/managers/banner_messages.dart' ;
9- import 'package:devtools_app/src/shared/managers/notifications.dart' ;
107import 'package:devtools_app_shared/ui.dart' ;
118import 'package:devtools_app_shared/utils.dart' ;
129import 'package:devtools_test/devtools_test.dart' ;
@@ -34,20 +31,12 @@ void main() {
3431 await tester.pumpAndSettle ();
3532 }
3633
37- Widget buildBannerMessages () {
34+ Widget buildBannerMessages ({ Screen ? screen} ) {
3835 return wrap (
3936 Directionality (
4037 textDirection: TextDirection .ltr,
4138 child: BannerMessages (
42- screen: SimpleScreen (
43- Column (
44- children: < Widget > [
45- // This is button is present so that we can tap it and
46- // simulate a frame being drawn.
47- ElevatedButton (onPressed: () => {}, child: const SizedBox ()),
48- ],
49- ),
50- ),
39+ screen: screen ?? SimpleScreen (const _TestScreenBody ()),
5140 ),
5241 ),
5342 );
@@ -66,6 +55,18 @@ void main() {
6655 expect (find.byKey (k2), findsOneWidget);
6756 });
6857
58+ testWidgets ('displays universal banner messages for every screen' , (
59+ WidgetTester tester,
60+ ) async {
61+ await tester.pumpWidget (buildBannerMessages ());
62+ bannerMessages.addMessage (universalMessage);
63+ await pumpTestFrame (tester);
64+ expect (find.byKey (kUniversal), findsOneWidget);
65+
66+ await tester.pumpWidget (buildBannerMessages (screen: TestScreen ()));
67+ expect (find.byKey (kUniversal), findsOneWidget);
68+ });
69+
6970 testWidgets ('does not add duplicate messages' , (WidgetTester tester) async {
7071 await tester.pumpWidget (buildBannerMessages ());
7172 expect (find.byKey (k1), findsNothing);
@@ -164,17 +165,56 @@ void main() {
164165
165166final testMessage1ScreenId = SimpleScreen .id;
166167final testMessage2ScreenId = SimpleScreen .id;
168+
167169const k1 = Key ('test message 1' );
168170const k2 = Key ('test message 2' );
171+ const kUniversal = Key ('universal message' );
172+
169173final testMessage1 = BannerMessage (
170174 key: k1,
171175 buildTextSpans: (_) => const [TextSpan (text: 'Test Message 1' )],
172176 screenId: testMessage1ScreenId,
173177 messageType: BannerMessageType .warning,
174178);
179+
175180final testMessage2 = BannerMessage (
176181 key: k2,
177182 buildTextSpans: (_) => const [TextSpan (text: 'Test Message 2' )],
178183 screenId: testMessage2ScreenId,
179184 messageType: BannerMessageType .warning,
180185);
186+
187+ final universalMessage = BannerMessage (
188+ key: kUniversal,
189+ buildTextSpans: (_) => const [TextSpan (text: 'Universal Message' )],
190+ screenId: universalBannerMessageId,
191+ messageType: BannerMessageType .warning,
192+ );
193+
194+ class TestScreen extends Screen {
195+ TestScreen () : super (id, showFloatingDebuggerControls: false );
196+
197+ // This is arbitrary for the test. It just needs to be something different
198+ // than [ScreenMetaData.simple.id].
199+ static final id = ScreenMetaData .logging.id;
200+
201+ @override
202+ Widget buildScreenBody (BuildContext context) {
203+ return const _TestScreenBody ();
204+ }
205+ }
206+
207+ class _TestScreenBody extends StatelessWidget {
208+ const _TestScreenBody ();
209+
210+ @override
211+ Widget build (BuildContext context) {
212+ return Column (
213+ children: < Widget > [
214+ // This button is present so that we can tap it and
215+ // simulate a frame being drawn.
216+ ElevatedButton (onPressed: () => {}, child: const SizedBox ()),
217+ ],
218+ );
219+ }
220+ }
0 commit comments