// 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 'dart:ui'; import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('Widgets running with runApp can find View', (WidgetTester tester) async { FlutterView? viewOf; FlutterView? viewMaybeOf; runApp( Builder( builder: (BuildContext context) { viewOf = View.of(context); viewMaybeOf = View.maybeOf(context); return Container(); }, ), ); expect(viewOf, isNotNull); expect(viewOf, isA<FlutterView>()); expect(viewMaybeOf, isNotNull); expect(viewMaybeOf, isA<FlutterView>()); }); testWidgets('Widgets running with pumpWidget can find View', (WidgetTester tester) async { FlutterView? view; FlutterView? viewMaybeOf; await tester.pumpWidget( Builder( builder: (BuildContext context) { view = View.of(context); viewMaybeOf = View.maybeOf(context); return Container(); }, ), ); expect(view, isNotNull); expect(view, isA<FlutterView>()); expect(viewMaybeOf, isNotNull); expect(viewMaybeOf, isA<FlutterView>()); }); testWidgets('cannot find View behind a LookupBoundary', (WidgetTester tester) async { await tester.pumpWidget( LookupBoundary( child: Container(), ), ); final BuildContext context = tester.element(find.byType(Container)); expect(View.maybeOf(context), isNull); expect( () => View.of(context), throwsA(isA<FlutterError>().having( (FlutterError error) => error.message, 'message', contains('The context provided to View.of() does have a View widget ancestor, but it is hidden by a LookupBoundary.'), )), ); }); }