driver: screenshot generation WIP

This commit is contained in:
Thibault Deckers 2022-01-12 11:44:41 +09:00
parent 573e6df1c7
commit 1b08c36429
8 changed files with 36 additions and 20 deletions

View file

@ -129,8 +129,6 @@ class _AvesAppState extends State<AvesApp> {
locale: settingsLocale,
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
// checkerboardRasterCacheImages: true,
// checkerboardOffscreenLayers: true,
);
},
);

View file

@ -2,4 +2,5 @@ enum AppDebugAction {
prepScreenshotThumbnails,
prepScreenshotStats,
mediaStoreScanDir,
greenScreen,
}

View file

@ -184,6 +184,17 @@ class _AppDebugPageState extends State<AppDebugPage> {
builder: (context) => const MediaStoreScanDirDialog(),
);
break;
case AppDebugAction.greenScreen:
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const Scaffold(
backgroundColor: Colors.green,
body: SizedBox(),
),
),
);
break;
}
}
}

View file

@ -35,7 +35,7 @@ class _MediaStoreScanDirDialogState extends State<MediaStoreScanDirDialog> {
final dir = _pathController.text;
if (dir.isNotEmpty) {
setState(() => _processing = true);
await Future.forEach<FileSystemEntity>(Directory(dir).listSync(), (file) async {
await Future.forEach<FileSystemEntity>(Directory(dir).listSync(recursive: true), (file) async {
if (file is File) {
final mimeType = MimeTypes.forExtension(p.extension(file.path));
await mediaStoreService.scanFile(file.path, mimeType!);

View file

@ -4,13 +4,20 @@
`dart:ui`, `flutter/widgets.dart', etc.
*/
const shadersSourcePicturesDir = 'test_driver/assets/shaders/';
const shadersTargetPicturesDir = '/sdcard/Pictures/Aves Test Driver/';
const shadersTargetPicturesDirEmulated = '/storage/emulated/0/Pictures/Aves Test Driver';
const adbRoot = '/sdcard';
const androidRoot = '/storage/emulated/0';
const shadersSourceDir = 'test_driver/assets/shaders/';
const shadersTargetDirAdb = '$adbRoot/Pictures/Aves Test Driver/';
const shadersTargetDirAndroid = '$androidRoot/Pictures/Aves Test Driver';
// Cover items should be:
// - dated in the future,
// - geotagged for each country to cover.
const coversSourcePicturesDir = 'test_driver/assets/screenshots/covers';
const coversTargetPicturesDir = '/sdcard/Pictures/TD/Aves/';
const coversTargetPicturesDirEmulated = '/storage/emulated/0/Pictures/TD/Aves';
// Viewer items should be:
// - larger than screen,
// - located,
// - tagged (one tag only, so filter chips fit on one line).
const screenshotsSourceDir = 'test_driver/assets/screenshots/';
const screenshotsTargetDirAdb = '$adbRoot/Pictures/TD/Aves/';
const screenshotsTargetDirAndroid = '$androidRoot/Pictures/TD/Aves';

View file

@ -38,7 +38,7 @@ Future<void> configureAndLaunch() async {
..viewerUseCutout = true
// info
..infoMapStyle = EntryMapStyle.stamenWatercolor
..infoMapZoom = 11
..infoMapZoom = 13
..coordinateFormat = CoordinateFormat.dms
..unitSystem = UnitSystem.metric;
app.main();

View file

@ -21,7 +21,7 @@ void main() {
setUpAll(() async {
await Directory(outputDirectory).create();
await copyContent(coversSourcePicturesDir, coversTargetPicturesDir);
await copyContent(screenshotsSourceDir, screenshotsTargetDirAdb);
await Future.forEach<String>(
[
'deckers.thibault.aves.debug',
@ -35,11 +35,11 @@ void main() {
});
tearDownAll(() async {
await removeDirectory(coversTargetPicturesDir);
await removeDirectory(screenshotsTargetDirAdb);
unawaited(driver.close());
});
test('scan media dir', () => driver.scanMediaDir(coversTargetPicturesDirEmulated));
test('scan media dir', () => driver.scanMediaDir(screenshotsTargetDirAndroid));
SupportedLocales.languagesByLanguageCode.keys.forEach((languageCode) {
setLanguage(languageCode);
configureCollectionVisibility(AppDebugAction.prepScreenshotThumbnails);
@ -110,11 +110,10 @@ void collection() {
void viewer() {
test('2. Viewer', () async {
const query = 'Singapore 087 Zoo - Douc langur';
await driver.tapKeyAndWait('appbar-leading-button');
await driver.tapKeyAndWait('drawer-type-null');
await _search(query, 'query-$query');
await _search('viewer', 'album-$screenshotsTargetDirAndroid/viewer');
// delay to avoid flaky descendant resolution
await Future.delayed(const Duration(seconds: 2));

View file

@ -15,7 +15,7 @@ late FlutterDriver driver;
void main() {
group('[Aves app]', () {
setUpAll(() async {
await copyContent(shadersSourcePicturesDir, shadersTargetPicturesDir);
await copyContent(shadersSourceDir, shadersTargetDirAdb);
await Future.forEach<String>(
[
'deckers.thibault.aves.debug',
@ -29,11 +29,11 @@ void main() {
});
tearDownAll(() async {
await removeDirectory(shadersTargetPicturesDir);
await removeDirectory(shadersTargetDirAdb);
unawaited(driver.close());
});
test('scan media dir', () => driver.scanMediaDir(shadersTargetPicturesDirEmulated));
test('scan media dir', () => driver.scanMediaDir(shadersTargetDirAndroid));
agreeToTerms();
visitAbout();
visitSettings();
@ -160,7 +160,7 @@ void searchAlbum() {
test('[collection] search album', () async {
await driver.tapKeyAndWait('menu-searchCollection');
const albumPath = shadersTargetPicturesDirEmulated;
const albumPath = shadersTargetDirAndroid;
final albumDisplayName = p.split(albumPath).last;
await driver.tap(find.byType('TextField'));
await driver.enterText(albumDisplayName);