feat: enable flavor option on test command (#89045)

This commit is contained in:
Core 2021-11-12 00:23:02 +07:00 committed by GitHub
parent 240973283d
commit d8034538bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 89 additions and 4 deletions

View File

@ -4,9 +4,15 @@
import 'package:flutter_devicelab/framework/devices.dart'; import 'package:flutter_devicelab/framework/devices.dart';
import 'package:flutter_devicelab/framework/framework.dart'; import 'package:flutter_devicelab/framework/framework.dart';
import 'package:flutter_devicelab/framework/task_result.dart';
import 'package:flutter_devicelab/tasks/integration_tests.dart'; import 'package:flutter_devicelab/tasks/integration_tests.dart';
Future<void> main() async { Future<void> main() async {
deviceOperatingSystem = DeviceOperatingSystem.android; deviceOperatingSystem = DeviceOperatingSystem.android;
await task(createFlavorsTest()); await task(() async {
await createFlavorsTest().call();
await createIntegrationTestFlavorsTest().call();
return TaskResult.success(null);
});
} }

View File

@ -4,9 +4,15 @@
import 'package:flutter_devicelab/framework/devices.dart'; import 'package:flutter_devicelab/framework/devices.dart';
import 'package:flutter_devicelab/framework/framework.dart'; import 'package:flutter_devicelab/framework/framework.dart';
import 'package:flutter_devicelab/framework/task_result.dart';
import 'package:flutter_devicelab/tasks/integration_tests.dart'; import 'package:flutter_devicelab/tasks/integration_tests.dart';
Future<void> main() async { Future<void> main() async {
deviceOperatingSystem = DeviceOperatingSystem.ios; deviceOperatingSystem = DeviceOperatingSystem.ios;
await task(createFlavorsTest()); await task(() async {
await createFlavorsTest().call();
await createIntegrationTestFlavorsTest().call();
return TaskResult.success(null);
});
} }

View File

@ -4,9 +4,15 @@
import 'package:flutter_devicelab/framework/devices.dart'; import 'package:flutter_devicelab/framework/devices.dart';
import 'package:flutter_devicelab/framework/framework.dart'; import 'package:flutter_devicelab/framework/framework.dart';
import 'package:flutter_devicelab/framework/task_result.dart';
import 'package:flutter_devicelab/tasks/integration_tests.dart'; import 'package:flutter_devicelab/tasks/integration_tests.dart';
Future<void> main() async { Future<void> main() async {
deviceOperatingSystem = DeviceOperatingSystem.android; deviceOperatingSystem = DeviceOperatingSystem.android;
await task(createFlavorsTest()); await task(() async {
await createFlavorsTest().call();
await createIntegrationTestFlavorsTest().call();
return TaskResult.success(null);
});
} }

View File

@ -29,6 +29,14 @@ TaskFunction createFlavorsTest() {
); );
} }
TaskFunction createIntegrationTestFlavorsTest() {
return IntegrationTest(
'${flutterDirectory.path}/dev/integration_tests/flavors',
'integration_test/integration_test.dart',
extraOptions: <String>['--flavor', 'paid'],
);
}
TaskFunction createExternalUiIntegrationTest() { TaskFunction createExternalUiIntegrationTest() {
return DriverTest( return DriverTest(
'${flutterDirectory.path}/dev/integration_tests/external_ui', '${flutterDirectory.path}/dev/integration_tests/external_ui',
@ -166,10 +174,16 @@ class DriverTest {
} }
class IntegrationTest { class IntegrationTest {
IntegrationTest(this.testDirectory, this.testTarget); IntegrationTest(
this.testDirectory,
this.testTarget, {
this.extraOptions = const <String>[],
}
);
final String testDirectory; final String testDirectory;
final String testTarget; final String testTarget;
final List<String> extraOptions;
Future<TaskResult> call() { Future<TaskResult> call() {
return inDirectory<TaskResult>(testDirectory, () async { return inDirectory<TaskResult>(testDirectory, () async {
@ -183,6 +197,7 @@ class IntegrationTest {
'-d', '-d',
deviceId, deviceId,
testTarget, testTarget,
...extraOptions,
]; ];
await flutter('test', options: options); await flutter('test', options: options);

View File

@ -0,0 +1,21 @@
// Copyright 2014 The Flutter 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 'package:flavors/main.dart' as app;
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
group('Flavor Test', () {
testWidgets('check flavor', (WidgetTester tester) async {
app.runMainApp();
await tester.pumpAndSettle();
await tester.pumpAndSettle();
expect(find.text('paid'), findsOneWidget);
});
});
}

View File

@ -8,6 +8,10 @@ import 'package:flutter_driver/driver_extension.dart';
void main() { void main() {
enableFlutterDriverExtension(); enableFlutterDriverExtension();
runMainApp();
}
void runMainApp() {
runApp(const Center(child: Flavor())); runApp(const Center(child: Flavor()));
} }

View File

@ -73,6 +73,7 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts {
usesDartDefineOption(); usesDartDefineOption();
usesWebRendererOption(); usesWebRendererOption();
usesDeviceUserOption(); usesDeviceUserOption();
usesFlavorOption();
argParser argParser
..addMultiOption('name', ..addMultiOption('name',

View File

@ -605,6 +605,32 @@ dev_dependencies:
]), ]),
}); });
testUsingContext('Integration tests given flavor', () async {
final FakeFlutterTestRunner testRunner = FakeFlutterTestRunner(0);
final TestCommand testCommand = TestCommand(testRunner: testRunner);
final CommandRunner<void> commandRunner = createTestCommandRunner(testCommand);
await commandRunner.run(const <String>[
'test',
'--no-pub',
'--flavor',
'dev',
'integration_test',
]);
expect(
testRunner.lastDebuggingOptionsValue.buildInfo.flavor,
contains('dev'),
);
}, overrides: <Type, Generator>{
FileSystem: () => fs,
ProcessManager: () => FakeProcessManager.any(),
DeviceManager: () => _FakeDeviceManager(<Device>[
FakeDevice('ephemeral', 'ephemeral', type: PlatformType.android),
]),
});
testUsingContext('Builds the asset manifest by default', () async { testUsingContext('Builds the asset manifest by default', () async {
final FakeFlutterTestRunner testRunner = FakeFlutterTestRunner(0); final FakeFlutterTestRunner testRunner = FakeFlutterTestRunner(0);