Skip to content

Commit b3b9679

Browse files
[Adjustment] - Make takePhoto()'s Finder optional (Resolves #28) (#30)
1 parent a1f01e1 commit b3b9679

9 files changed

+43
-33
lines changed

lib/src/goldens/golden_camera.dart

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,22 @@ import 'dart:ui';
33
import 'package:flutter/rendering.dart';
44
import 'package:flutter_test/flutter_test.dart';
55

6+
import 'package:flutter_test_goldens/src/goldens/golden_rendering.dart';
7+
68
/// A camera for taking golden screenshots and storing them for later reference.
79
class GoldenCamera {
8-
GoldenCamera(this._tester);
9-
10-
final WidgetTester _tester;
10+
GoldenCamera();
1111

1212
List<GoldenPhoto> get photos => List.from(_photos);
1313
final _photos = <GoldenPhoto>[];
1414

1515
/// Takes a screenshot of the given [finder] and stores it in [photos]
1616
/// along with its [description].
17-
Future<void> takePhoto(Finder finder, String description) async {
17+
///
18+
/// {@macro golden_image_bounds_default_finder}
19+
Future<void> takePhoto(String description, [Finder? finder]) async {
20+
finder = finder ?? find.byType(GoldenImageBounds);
21+
1822
expect(finder, findsOne);
1923

2024
final renderObject = finder.evaluate().first.findRenderObject();

lib/src/scenes/film_strip.dart

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,18 @@ class FilmStrip {
6262
}
6363

6464
/// Take a golden photo screenshot of the current Flutter UI.
65-
FilmStrip takePhoto(Finder photoBoundsFinder, String description) {
65+
///
66+
/// {@template golden_image_bounds_default_finder}
67+
/// If no [finder] is provided, then it's assumed that somewhere in the widget tree is
68+
/// a [GoldenImageBounds] widget. That widget is used as the boundary for this photo.
69+
/// If no such widget exists, an error is thrown.
70+
/// {@endtemplate}
71+
FilmStrip takePhoto(String description, [Finder? photoBoundsFinder]) {
6672
if (_setup == null) {
6773
throw Exception("Can't take a photo before setup. Please call setup() or setupWithPump()");
6874
}
6975

70-
_steps.add(_FilmStripPhotoRequest(photoBoundsFinder, description));
76+
_steps.add(_FilmStripPhotoRequest(photoBoundsFinder ?? find.byType(GoldenImageBounds), description));
7177

7278
return this;
7379
}
@@ -137,7 +143,7 @@ class FilmStrip {
137143
// anti-aliasing and other artifacts from fractional pixel offsets.
138144
_tester.view.devicePixelRatio = 1.0;
139145

140-
final camera = GoldenCamera(_tester);
146+
final camera = GoldenCamera();
141147
final testContext = FilmStripTestContext();
142148

143149
// Setup the scene.
@@ -163,7 +169,7 @@ class FilmStrip {
163169
"Failed to find a render object for photo '${step.description}', using finder '${step.photoBoundsFinder}'",
164170
);
165171

166-
await camera.takePhoto(step.photoBoundsFinder, step.description);
172+
await camera.takePhoto(step.description, step.photoBoundsFinder);
167173

168174
continue;
169175
}

lib/src/scenes/gallery.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ class Gallery {
143143
FtgLog.pipeline.info("Rendering or comparing golden - $_sceneName");
144144

145145
// Build each gallery item and screenshot it.
146-
final camera = GoldenCamera(_tester);
146+
final camera = GoldenCamera();
147147
for (final item in _items) {
148148
FtgLog.pipeline.info("Building gallery item: ${item.description}, item decorated: $_itemDecorator");
149149

@@ -190,7 +190,7 @@ class Gallery {
190190
reason: "Failed to find a render object for gallery item '${item.description}'",
191191
);
192192

193-
await camera.takePhoto(item.boundsFinder, item.description);
193+
await camera.takePhoto(item.description, item.boundsFinder);
194194
}
195195

196196
// Lay out gallery items in the desired layout.

test_goldens/flutter/buttons/buttons_test.dart

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ void main() {
2121
),
2222
);
2323
})
24-
.takePhoto(find.byKey(goldenKey), "idle")
24+
.takePhoto("idle", find.byKey(goldenKey))
2525
.hoverOver(find.byType(ElevatedButton))
26-
.takePhoto(find.byKey(goldenKey), "hover")
26+
.takePhoto("hover", find.byKey(goldenKey))
2727
.pressHover()
28-
.takePhoto(find.byKey(goldenKey), "pressed")
28+
.takePhoto("pressed", find.byKey(goldenKey))
2929
.renderOrCompareGolden(
3030
goldenName: "button_elevated_interactions",
3131
layout: SceneLayout.row,
@@ -45,11 +45,11 @@ void main() {
4545
),
4646
);
4747
})
48-
.takePhoto(find.byKey(goldenKey), "idle")
48+
.takePhoto("idle", find.byKey(goldenKey))
4949
.hoverOver(find.byType(TextButton))
50-
.takePhoto(find.byKey(goldenKey), "hover")
50+
.takePhoto("hover", find.byKey(goldenKey))
5151
.pressHover()
52-
.takePhoto(find.byKey(goldenKey), "pressed")
52+
.takePhoto("pressed", find.byKey(goldenKey))
5353
.renderOrCompareGolden(
5454
goldenName: "button_text_interactions",
5555
layout: SceneLayout.row,
@@ -78,11 +78,11 @@ void main() {
7878
),
7979
);
8080
})
81-
.takePhoto(find.byKey(goldenKey), "idle")
81+
.takePhoto("idle", find.byKey(goldenKey))
8282
.hoverOver(find.byType(IconButton))
83-
.takePhoto(find.byKey(goldenKey), "hover")
83+
.takePhoto("hover", find.byKey(goldenKey))
8484
.pressHover()
85-
.takePhoto(find.byKey(goldenKey), "pressed")
85+
.takePhoto("pressed", find.byKey(goldenKey))
8686
.renderOrCompareGolden(
8787
goldenName: "button_icon_interactions",
8888
layout: SceneLayout.row,
@@ -102,11 +102,11 @@ void main() {
102102
),
103103
);
104104
})
105-
.takePhoto(find.byKey(goldenKey), "idle")
105+
.takePhoto("idle", find.byKey(goldenKey))
106106
.hoverOver(find.byType(FloatingActionButton))
107-
.takePhoto(find.byKey(goldenKey), "hover")
107+
.takePhoto("hover", find.byKey(goldenKey))
108108
.pressHover()
109-
.takePhoto(find.byKey(goldenKey), "pressed")
109+
.takePhoto("pressed", find.byKey(goldenKey))
110110
.renderOrCompareGolden(
111111
goldenName: "button_fab_interactions",
112112
layout: SceneLayout.row,
@@ -133,15 +133,15 @@ void main() {
133133
),
134134
);
135135
})
136-
.takePhoto(find.byKey(goldenKey), "idle")
136+
.takePhoto("idle", find.byKey(goldenKey))
137137
// .takePhoto(find.byType(FlutterWidgetScaffold), "idle")
138138

139139
.hoverOver(find.byType(FloatingActionButton))
140-
.takePhoto(find.byKey(goldenKey), "hover")
140+
.takePhoto("hover", find.byKey(goldenKey))
141141
// .takePhoto(find.byType(FlutterWidgetScaffold), "idle")
142142

143143
.pressHover()
144-
.takePhoto(find.byKey(goldenKey), "pressed")
144+
.takePhoto("pressed", find.byKey(goldenKey))
145145
// .takePhoto(find.byType(FlutterWidgetScaffold), "pressed")
146146
.renderOrCompareGolden(
147147
goldenName: "button_extended_fab_interactions",
62.3 KB
Loading
61.9 KB
Loading
62.1 KB
Loading

test_goldens/flutter/list_tile/list_tile_test.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ void main() {
2828
),
2929
);
3030
})
31-
.takePhoto(find.byKey(goldenKey), "idle")
31+
.takePhoto("idle", find.byKey(goldenKey))
3232
.hoverOver(find.byType(ListTile))
33-
.takePhoto(find.byKey(goldenKey), "hover")
33+
.takePhoto("hover", find.byKey(goldenKey))
3434
.pressHover()
35-
.takePhoto(find.byKey(goldenKey), "pressed")
35+
.takePhoto("pressed", find.byKey(goldenKey))
3636
.renderOrCompareGolden(
3737
goldenName: "list_tile_interactions",
3838
layout: SceneLayout.column,

test_goldens/flutter/textfield/textfield_tests.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,18 @@ void main() {
1919
),
2020
);
2121
})
22-
.takePhoto(find.byKey(goldenKey), "idle")
22+
.takePhoto("idle", find.byKey(goldenKey))
2323
.hoverOver(find.byType(TextField))
24-
.takePhoto(find.byKey(goldenKey), "hover")
24+
.takePhoto("hover", find.byKey(goldenKey))
2525
.pressHover()
26-
.takePhoto(find.byKey(goldenKey), "pressed")
26+
.takePhoto("pressed", find.byKey(goldenKey))
2727
.releaseHover()
28-
.takePhoto(find.byKey(goldenKey), "placed caret")
28+
.takePhoto("placed caret", find.byKey(goldenKey))
2929
.modifyScene((tester, testContext) async {
3030
await tester.enterText(find.byType(TextField), "Hello, world!");
3131
await tester.pumpAndSettle();
3232
})
33-
.takePhoto(find.byKey(goldenKey), "typed text")
33+
.takePhoto("typed text", find.byKey(goldenKey))
3434
.renderOrCompareGolden(
3535
goldenName: "textfield_interactions",
3636
layout: SceneLayout.column,

0 commit comments

Comments
 (0)