diff --git a/dev/bots/check_code_samples.dart b/dev/bots/check_code_samples.dart index d7e21ef1a9..b5ff9fdd63 100644 --- a/dev/bots/check_code_samples.dart +++ b/dev/bots/check_code_samples.dart @@ -311,5 +311,4 @@ class SampleChecker { final Set _knownMissingTests = { 'examples/api/test/material/color_scheme/dynamic_content_color.0_test.dart', 'examples/api/test/widgets/image/image.frame_builder.0_test.dart', - 'examples/api/test/widgets/image/image.loading_builder.0_test.dart', }; diff --git a/examples/api/test/widgets/image/image.loading_builder.0_test.dart b/examples/api/test/widgets/image/image.loading_builder.0_test.dart new file mode 100644 index 0000000000..da4668e461 --- /dev/null +++ b/examples/api/test/widgets/image/image.loading_builder.0_test.dart @@ -0,0 +1,65 @@ +// 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:io'; + +import 'package:flutter/material.dart'; +import 'package:flutter_api_samples/widgets/image/image.loading_builder.0.dart' + as example; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + // The app being tested loads images via HTTP which the test + // framework defeats by default. + setUpAll(() { + HttpOverrides.global = null; + }); + + testWidgets('The loading builder returns the child when there is no loading progress', (WidgetTester tester) async { + await tester.pumpWidget( + const example.LoadingBuilderExampleApp(), + ); + await tester.pumpAndSettle(); + + final Image image = tester.widget(find.byType(Image)); + final ImageLoadingBuilder loadingBuilder = image.loadingBuilder!; + final BuildContext context = tester.element(find.byType(Image)); + + const SizedBox child = SizedBox(key: Key('child')); + + await tester.pumpWidget(loadingBuilder(context, child, null)); + + expect(find.byWidget(child), findsOne); + expect(find.byType(CircularProgressIndicator), findsNothing); + }); + + testWidgets('The loading builder returns a circular progress indicator when loading', (WidgetTester tester) async { + await tester.pumpWidget( + const example.LoadingBuilderExampleApp(), + ); + await tester.pumpAndSettle(); + + final Image image = tester.widget(find.byType(Image)); + final ImageLoadingBuilder loadingBuilder = image.loadingBuilder!; + final BuildContext context = tester.element(find.byType(Image)); + + const SizedBox child = SizedBox(key: Key('child')); + + await tester.pumpWidget( + MaterialApp( + home: loadingBuilder( + context, + child, + const ImageChunkEvent( + cumulativeBytesLoaded: 1, + expectedTotalBytes: 10, + ), + ), + ), + ); + + expect(find.byWidget(child), findsNothing); + expect(find.byType(CircularProgressIndicator), findsOne); + }); +}