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, locale: settingsLocale,
localizationsDelegates: AppLocalizations.localizationsDelegates, localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales, supportedLocales: AppLocalizations.supportedLocales,
// checkerboardRasterCacheImages: true,
// checkerboardOffscreenLayers: true,
); );
}, },
); );

View file

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

View file

@ -184,6 +184,17 @@ class _AppDebugPageState extends State<AppDebugPage> {
builder: (context) => const MediaStoreScanDirDialog(), builder: (context) => const MediaStoreScanDirDialog(),
); );
break; 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; final dir = _pathController.text;
if (dir.isNotEmpty) { if (dir.isNotEmpty) {
setState(() => _processing = true); 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) { if (file is File) {
final mimeType = MimeTypes.forExtension(p.extension(file.path)); final mimeType = MimeTypes.forExtension(p.extension(file.path));
await mediaStoreService.scanFile(file.path, mimeType!); await mediaStoreService.scanFile(file.path, mimeType!);

View file

@ -4,13 +4,20 @@
`dart:ui`, `flutter/widgets.dart', etc. `dart:ui`, `flutter/widgets.dart', etc.
*/ */
const shadersSourcePicturesDir = 'test_driver/assets/shaders/'; const adbRoot = '/sdcard';
const shadersTargetPicturesDir = '/sdcard/Pictures/Aves Test Driver/'; const androidRoot = '/storage/emulated/0';
const shadersTargetPicturesDirEmulated = '/storage/emulated/0/Pictures/Aves Test Driver';
const shadersSourceDir = 'test_driver/assets/shaders/';
const shadersTargetDirAdb = '$adbRoot/Pictures/Aves Test Driver/';
const shadersTargetDirAndroid = '$androidRoot/Pictures/Aves Test Driver';
// Cover items should be: // Cover items should be:
// - dated in the future, // - dated in the future,
// - geotagged for each country to cover. // - geotagged for each country to cover.
const coversSourcePicturesDir = 'test_driver/assets/screenshots/covers'; // Viewer items should be:
const coversTargetPicturesDir = '/sdcard/Pictures/TD/Aves/'; // - larger than screen,
const coversTargetPicturesDirEmulated = '/storage/emulated/0/Pictures/TD/Aves'; // - 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 ..viewerUseCutout = true
// info // info
..infoMapStyle = EntryMapStyle.stamenWatercolor ..infoMapStyle = EntryMapStyle.stamenWatercolor
..infoMapZoom = 11 ..infoMapZoom = 13
..coordinateFormat = CoordinateFormat.dms ..coordinateFormat = CoordinateFormat.dms
..unitSystem = UnitSystem.metric; ..unitSystem = UnitSystem.metric;
app.main(); app.main();

View file

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

View file

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