Skip to content

Commit bf1083c

Browse files
authored
Merge pull request #60 from eBay/iterate_on_image_loading
Iterate on asset priming
2 parents 386d611 + ff9cde4 commit bf1083c

File tree

6 files changed

+67
-8
lines changed

6 files changed

+67
-8
lines changed

packages/golden_toolkit/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 0.5.1
4+
5+
Improved the reliability of the default behavior for ```tester.waitForAssets()``` to handle additional cases.
6+
37
## 0.5.0
48

59
### More intelligent behavior for loading assets

packages/golden_toolkit/lib/src/testing_tools.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,8 @@ Future<void> legacyPrimeAssets(WidgetTester tester) async {
281281
/// See also:
282282
/// * [GoldenToolkitConfiguration.primeAssets] to configure a global asset prime function.
283283
Future<void> defaultPrimeAssets(WidgetTester tester) async {
284-
final imageElements = find.byType(Image).evaluate();
285-
final containerElements = find.byType(Container).evaluate();
284+
final imageElements = find.byType(Image, skipOffstage: false).evaluate();
285+
final containerElements = find.byType(DecoratedBox, skipOffstage: false).evaluate();
286286
await tester.runAsync(() async {
287287
for (final imageElement in imageElements) {
288288
final widget = imageElement.widget;
@@ -291,7 +291,7 @@ Future<void> defaultPrimeAssets(WidgetTester tester) async {
291291
}
292292
}
293293
for (final container in containerElements) {
294-
final Container widget = container.widget;
294+
final DecoratedBox widget = container.widget;
295295
final decoration = widget.decoration;
296296
if (decoration is BoxDecoration) {
297297
if (decoration.image != null) {

packages/golden_toolkit/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: golden_toolkit
22
description: Common patterns for screenshot-based widget testing using Goldens.
3-
version: 0.5.0
3+
version: 0.5.1
44
homepage: https://github.com/eBay/flutter_glove_box/
55
repository: https://github.com/eBay/flutter_glove_box/tree/master/packages/golden_toolkit
66
issue_tracker: https://github.com/eBay/flutter_glove_box/issues

packages/golden_toolkit/test/image_loading/default/default_asset_loading_test.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:flutter/material.dart';
12
import 'package:flutter_test/flutter_test.dart';
23
import 'package:golden_toolkit/golden_toolkit.dart';
34
import 'package:golden_toolkit/src/configuration.dart';
@@ -55,6 +56,27 @@ void main() {
5556
config: defaultConfiguration,
5657
);
5758
});
59+
60+
testWidgets('should load assets that have not come into view yet', (tester) async {
61+
await GoldenToolkit.runWithConfiguration(
62+
() async {
63+
await tester.pumpWidgetBuilder(
64+
const ListOfItemsWithOneImage(
65+
itemSize: Size(100, 100),
66+
cacheExtent: 1000,
67+
indexThatContainsImage: 10,
68+
),
69+
surfaceSize: const Size(300, 100),
70+
);
71+
await tester.waitForAssets();
72+
await tester.drag(find.byType(Scrollable), const Offset(0, -1000));
73+
await tester.pump();
74+
await expectLater(
75+
find.byType(ListOfItemsWithOneImage).first, matchesGoldenFile('goldens/list_of_images_will_show.png'));
76+
},
77+
config: defaultConfiguration,
78+
);
79+
});
5880
},
5981
);
6082
}
15.9 KB
Loading

packages/golden_toolkit/test/image_loading/image_loading_utils.dart

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@ class BoxDecorationWithImage extends StatelessWidget {
1818

1919
@override
2020
Widget build(BuildContext context) {
21-
return Container(
22-
width: 800,
23-
height: 600,
24-
decoration: const BoxDecoration(
21+
return const DecoratedBox(
22+
decoration: BoxDecoration(
2523
image: DecorationImage(
2624
image: AssetImage('images/earth_image.jpg', package: 'sample_dependency'),
2725
),
@@ -35,3 +33,38 @@ GoldenToolkitConfiguration get legacyConfiguration =>
3533

3634
GoldenToolkitConfiguration get defaultConfiguration =>
3735
GoldenToolkit.configuration.copyWith(primeAssets: defaultPrimeAssets);
36+
37+
@immutable
38+
class ListOfItemsWithOneImage extends StatelessWidget {
39+
const ListOfItemsWithOneImage({
40+
@required this.itemSize,
41+
@required this.indexThatContainsImage,
42+
@required this.cacheExtent,
43+
});
44+
45+
final Size itemSize;
46+
final int indexThatContainsImage;
47+
final double cacheExtent;
48+
49+
@override
50+
Widget build(BuildContext context) {
51+
return Container(
52+
color: Colors.grey,
53+
child: ListView.builder(
54+
itemBuilder: (context, index) => Center(
55+
child: Row(
56+
children: [
57+
Container(
58+
width: itemSize.width,
59+
height: itemSize.height,
60+
color: Colors.lightBlue,
61+
child: (index == indexThatContainsImage) ? const ImageWidget() : null,
62+
),
63+
],
64+
),
65+
),
66+
cacheExtent: cacheExtent,
67+
),
68+
);
69+
}
70+
}

0 commit comments

Comments
 (0)