diff --git a/dev/devicelab/bin/tasks/android_sample_catalog_generator.dart b/dev/devicelab/bin/tasks/android_sample_catalog_generator.dart new file mode 100644 index 0000000000..b9550b36c6 --- /dev/null +++ b/dev/devicelab/bin/tasks/android_sample_catalog_generator.dart @@ -0,0 +1,14 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:async'; + +import 'package:flutter_devicelab/framework/adb.dart'; +import 'package:flutter_devicelab/framework/framework.dart'; +import 'package:flutter_devicelab/tasks/sample_catalog_generator.dart'; + +Future main() async { + deviceOperatingSystem = DeviceOperatingSystem.android; + await task(samplePageCatalogGenerator); +} diff --git a/dev/devicelab/bin/tasks/ios_sample_catalog_generator.dart b/dev/devicelab/bin/tasks/ios_sample_catalog_generator.dart new file mode 100644 index 0000000000..94f14641c1 --- /dev/null +++ b/dev/devicelab/bin/tasks/ios_sample_catalog_generator.dart @@ -0,0 +1,14 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:async'; + +import 'package:flutter_devicelab/framework/adb.dart'; +import 'package:flutter_devicelab/framework/framework.dart'; +import 'package:flutter_devicelab/tasks/sample_catalog_generator.dart'; + +Future main() async { + deviceOperatingSystem = DeviceOperatingSystem.ios; + await task(samplePageCatalogGenerator); +} diff --git a/dev/devicelab/lib/tasks/sample_catalog_generator.dart b/dev/devicelab/lib/tasks/sample_catalog_generator.dart new file mode 100644 index 0000000000..d0ea57acc8 --- /dev/null +++ b/dev/devicelab/lib/tasks/sample_catalog_generator.dart @@ -0,0 +1,38 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:async'; +import 'dart:io'; + +import '../framework/adb.dart'; +import '../framework/framework.dart'; +import '../framework/ios.dart'; +import '../framework/utils.dart'; + +Future samplePageCatalogGenerator() async { + final Device device = await devices.workingDevice; + await device.unlock(); + final String deviceId = device.deviceId; + + final Directory catalogDirectory = dir('${flutterDirectory.path}/examples/catalog'); + await inDirectory(catalogDirectory, () async { + await flutter('packages', options: ['get']); + + if (deviceOperatingSystem == DeviceOperatingSystem.ios) { + await prepareProvisioningCertificates(catalogDirectory.path); + // This causes an Xcode project to be created. + await flutter('build', options: ['ios', '--profile']); + } + + await dart(['bin/sample_page.dart']); + + await flutter('drive', options: [ + 'test_driver/screenshot.dart', + '-d', + deviceId, + ]); + }); + + return new TaskResult.success(null); +} diff --git a/dev/devicelab/manifest.yaml b/dev/devicelab/manifest.yaml index d98fa2ae68..914f4fad03 100644 --- a/dev/devicelab/manifest.yaml +++ b/dev/devicelab/manifest.yaml @@ -171,6 +171,13 @@ tasks: stage: devicelab required_agent_capabilities: ["has-android-device"] + android_sample_catalog_generator: + description: > + Builds sample catalog markdown pages and Android screenshots + stage: devicelab + required_agent_capabilities: ["has-android-device"] + flaky: true + # iOS on-device tests channels_integration_test_ios: @@ -240,6 +247,13 @@ tasks: stage: devicelab_ios required_agent_capabilities: ["has-ios-device"] + ios_sample_catalog_generator: + description: > + Builds sample catalog markdown pages and iOS screenshots + stage: devicelab_ios + required_agent_capabilities: ["has-ios-device"] + flaky: true + # Tests running on Windows host channels_integration_test_win: diff --git a/examples/catalog/bin/sample_page.dart b/examples/catalog/bin/sample_page.dart index cc28273488..f5568927cd 100644 --- a/examples/catalog/bin/sample_page.dart +++ b/examples/catalog/bin/sample_page.dart @@ -135,6 +135,8 @@ class SampleGenerator { ); commentValues[keyword.toLowerCase()] = value.trim(); } + commentValues['name'] = sourceName; + commentValues['path'] = 'examples/catalog/${sourceFile.path}'; commentValues['source'] = sourceCode.trim(); return true; @@ -177,14 +179,12 @@ void generate() { screenshotDriverTemplate, { 'paths': samples.map((SampleGenerator sample) { - return "'${outputFile(sample.sourceName + '.png').path}'"; + return "'${outputFile('\${prefix}' + sample.sourceName + '.png').path}'"; }).toList().join(',\n'), }, ); - final List flutterDriveArgs = ['drive', 'test_driver/screenshot.dart']; - logMessage('Generating screenshots with: flutter ${flutterDriveArgs.join(" ")}'); - Process.runSync('flutter', flutterDriveArgs); + // To generate the screenshots: flutter drive test_driver/screenshot.dart } void main(List args) { diff --git a/examples/catalog/bin/sample_page.md.template b/examples/catalog/bin/sample_page.md.template index cc937f1c6c..c3ccc783a2 100644 --- a/examples/catalog/bin/sample_page.md.template +++ b/examples/catalog/bin/sample_page.md.template @@ -1,5 +1,9 @@ -@(title) -============= +--- +catalog: @(name) +title: "@(title)" + +permalink: /catalog/@(name)/ +--- @(summary) @@ -8,6 +12,7 @@ See also: @(see also) -``` +```dart @(source) ``` +The source code is based on [@(path)](https://github.com/flutter/flutter/blob/master/@(path)). diff --git a/examples/catalog/bin/screenshot.dart.template b/examples/catalog/bin/screenshot.dart.template index b513f85ca8..c939db7be7 100644 --- a/examples/catalog/bin/screenshot.dart.template +++ b/examples/catalog/bin/screenshot.dart.template @@ -36,5 +36,6 @@ class SampleScreenshotsState extends State { void main() { enableFlutterDriverExtension(); + WidgetsApp.debugAllowBannerOverride = false; // No "slow mode" banner. runApp(new SampleScreenshots()); } diff --git a/examples/catalog/bin/screenshot_test.dart.template b/examples/catalog/bin/screenshot_test.dart.template index d25ceae2fd..4eb55bd498 100644 --- a/examples/catalog/bin/screenshot_test.dart.template +++ b/examples/catalog/bin/screenshot_test.dart.template @@ -7,7 +7,7 @@ import 'package:flutter_driver/flutter_driver.dart'; import 'package:test/test.dart'; void main() { - group('sample screenshots', () async { + group('sample screenshots', () { FlutterDriver driver; setUpAll(() async { @@ -19,6 +19,7 @@ void main() { }); test('take sample screenshots', () async { + String prefix = Platform.isMacOS ? 'ios_' : ""; final List paths = [ @(paths) ];