diff --git a/dev/integration_tests/ui/pubspec.yaml b/dev/integration_tests/ui/pubspec.yaml index 4834e67b5277..af00f14fc2a5 100644 --- a/dev/integration_tests/ui/pubspec.yaml +++ b/dev/integration_tests/ui/pubspec.yaml @@ -8,6 +8,7 @@ environment: # It can probably be removed, see the comment in that file. dependencies: + image: 3.2.2 flutter: sdk: flutter flutter_driver: @@ -42,6 +43,7 @@ dependencies: node_preamble: 2.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" path: 1.8.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + petitparser: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" pool: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" pub_semver: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" shelf: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -64,6 +66,7 @@ dependencies: web_socket_channel: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" webdriver: 3.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" webkit_inspection_protocol: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + xml: 6.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 3.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dev_dependencies: @@ -79,4 +82,4 @@ flutter: assets: - assets/foo.png -# PUBSPEC CHECKSUM: 691e +# PUBSPEC CHECKSUM: 321a diff --git a/dev/integration_tests/ui/test_driver/screenshot_test.dart b/dev/integration_tests/ui/test_driver/screenshot_test.dart new file mode 100644 index 000000000000..b5df865a35da --- /dev/null +++ b/dev/integration_tests/ui/test_driver/screenshot_test.dart @@ -0,0 +1,53 @@ +// 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. + +// This test is used by devicelab, test "integration_ui_ios_screenshot". +// Its use of package:image is, at the time of writing, the only use of that +// package in this repository. If package:image is a problem, it is probably +// fine to just remove this test since the value of the test is probably not +// as much as the cost of the dependency. + +import 'package:flutter_driver/flutter_driver.dart'; +import 'package:image/image.dart'; + +import 'package:test/test.dart' hide TypeMatcher, isInstanceOf; + +void main() { + group('FlutterDriver', () { + late FlutterDriver driver; + + setUpAll(() async { + driver = await FlutterDriver.connect(); + }); + + tearDownAll(() async { + await driver.close(); + }); + + test('should take screenshot', () async { + final SerializableFinder toggleBtn = find.byValueKey('toggle'); + // Cards use a magic background color that we look for in the screenshots. + final Matcher cardsAreVisible = contains(getColor(0xff, 0x01, 0x02)); + await driver.waitFor(toggleBtn); + + bool cardsShouldBeVisible = false; + Image? imageBefore = decodePng(await driver.screenshot()); + for (int i = 0; i < 10; i += 1) { + await driver.tap(toggleBtn); + cardsShouldBeVisible = !cardsShouldBeVisible; + final Image? imageAfter = decodePng(await driver.screenshot()); + + if (cardsShouldBeVisible) { + expect(imageBefore?.data, isNot(cardsAreVisible)); + expect(imageAfter?.data, cardsAreVisible); + } else { + expect(imageBefore?.data, cardsAreVisible); + expect(imageAfter?.data, isNot(cardsAreVisible)); + } + + imageBefore = imageAfter; + } + }, timeout: Timeout.none); + }); +}