driver: screenshot generation WIP
This commit is contained in:
parent
573e6df1c7
commit
1b08c36429
8 changed files with 36 additions and 20 deletions
|
@ -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,
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
@ -2,4 +2,5 @@ enum AppDebugAction {
|
||||||
prepScreenshotThumbnails,
|
prepScreenshotThumbnails,
|
||||||
prepScreenshotStats,
|
prepScreenshotStats,
|
||||||
mediaStoreScanDir,
|
mediaStoreScanDir,
|
||||||
|
greenScreen,
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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!);
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue