This folder contains e2e integration tests for the engine in conjunction with a fake dart:ui framework running in JIT or AOT.
It intentionally has no dependencies on the Flutter framework or tooling, such that it should be buildable as a presubmit or postsubmit to the engine even in the face of changes to Dart or dart:ui that require upstream changes in the Flutter tooling.
Create a new subclass of Scenario and add it to the map in main.dart. For an example, see animated_color_square.dart, which draws a continuously animating colored square that bounces off the sides of the viewport.
Then set the scenario from the Android or iOS app by calling “set_scenario” on platform channel.
./build_and_run_ios_tests.sh
For PlatformView tests on iOS, you‘ll also have to edit the dictionaries in AppDelegate.m and PlatformViewGoldenTestManager.m so that the correct golden image can be found. Also, you’ll have to add a GoldenPlatformViewTests in PlatformViewUITests.m.
Screenshots are saved as XCTAttachment‘s. If you look at the output from running the tests you’ll find a path in the form: /Users/$USER/Library/Developer/Xcode/DerivedData/Scenarios-$HASH
. Inside that directory you'll find ./Build/Products/Debug-iphonesimulator/ScenariosUITests-Runner.app/PlugIns/ScenariosUITests.xctest/
which is where all the images that were compared against golden reside.
The test is run on a x86 emulator. To run the test locally, you must create an emulator running API level 28, using an x86_64 ABI, and set the following screen settings in the avd's config.ini
file:
hw.lcd.density = 480 hw.lcd.height = 1680 hw.lcd.width = 1080 lcd.depth = 16
This file is typically located in your $HOME/.android/avd/<avd>
folder.
Once the emulator is up, you can run the test by running:
./build_and_run_android_tests.sh
In the android
directory, run:
./gradlew app:recordDebugAndroidTestScreenshotTest
The screenshots are recorded into android/reports/screenshots
.
In the android
directory, run:
./gradlew app:verifyDebugAndroidTestScreenshotTest
If you change the dart:ui interface, remember to point the sky_engine and sky_services clauses to your local engine's output path before compiling.