mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

Reland of https://github.com/flutter/flutter/pull/157032.
Failed tests for initial land:
https://flutter-dashboard.appspot.com/#/build?hashFilter=5ca6350a06fdae8d3e160f9adbece193f34d0302&repo=flutter&branch=master
These two tests run the same `flavors_test`
https://ci.chromium.org/ui/p/flutter/builders/prod/Linux_pixel_7pro%20flavors_test/4579/overview
https://ci.chromium.org/ui/p/flutter/builders/prod/Windows_mokey%20flavors_test_win/988/overview
which is now passing
https://ci.chromium.org/ui/p/flutter/builders/try/Linux_pixel_7pro%20flavors_test/37/overview
(fixed by 23c62df1dc
)
The other failures seem to be flakes
https://ci.chromium.org/ui/p/flutter/builders/prod/Linux_pixel_7pro%20new_gallery_impeller_old_zoom__transition_perf/4902/overview
https://ci.chromium.org/ui/p/flutter/builders/prod/Mac%20tool_integration_tests_2_5/1247/overview
the first is a timeout, the second passed in presubmit on the original PR and also on this PR.
95 lines
3.3 KiB
Dart
95 lines
3.3 KiB
Dart
// 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 'dart:io' show File;
|
|
import 'dart:typed_data';
|
|
|
|
import 'package:collection/collection.dart';
|
|
import 'package:flutter_devicelab/framework/devices.dart';
|
|
import 'package:flutter_devicelab/framework/framework.dart';
|
|
import 'package:flutter_devicelab/framework/task_result.dart';
|
|
import 'package:flutter_devicelab/framework/utils.dart';
|
|
import 'package:flutter_devicelab/tasks/integration_tests.dart';
|
|
import 'package:path/path.dart' as path;
|
|
import 'package:standard_message_codec/standard_message_codec.dart';
|
|
|
|
Future<void> main() async {
|
|
deviceOperatingSystem = DeviceOperatingSystem.android;
|
|
await task(() async {
|
|
await createFlavorsTest().call();
|
|
await createIntegrationTestFlavorsTest().call();
|
|
|
|
final String projectPath = '${flutterDirectory.path}/dev/integration_tests/flavors';
|
|
final TaskResult installTestsResult = await inDirectory(
|
|
projectPath,
|
|
() async {
|
|
final List<TaskResult> testResults = <TaskResult>[
|
|
await _testInstallDebugPaidFlavor(projectPath),
|
|
await _testInstallBogusFlavor(),
|
|
];
|
|
|
|
final TaskResult? firstInstallFailure = testResults
|
|
.firstWhereOrNull((TaskResult element) => element.failed);
|
|
|
|
return firstInstallFailure ?? TaskResult.success(null);
|
|
},
|
|
);
|
|
|
|
return installTestsResult;
|
|
});
|
|
}
|
|
|
|
// Ensures installation works. Also tests asset bundling while we are at it.
|
|
Future<TaskResult> _testInstallDebugPaidFlavor(String projectDir) async {
|
|
await evalFlutter(
|
|
'install',
|
|
options: <String>['--debug', '--flavor', 'paid'],
|
|
);
|
|
|
|
final Uint8List assetManifestFileData = File(
|
|
path.join(projectDir, 'build', 'app', 'intermediates', 'assets', 'paidDebug', 'mergePaidDebugAssets', 'flutter_assets', 'AssetManifest.bin'),
|
|
).readAsBytesSync();
|
|
|
|
final Map<Object?, Object?> assetManifest = const StandardMessageCodec()
|
|
.decodeMessage(ByteData.sublistView(assetManifestFileData)) as Map<Object?, Object?>;
|
|
|
|
if (assetManifest.containsKey('assets/free/free.txt')) {
|
|
return TaskResult.failure('Expected the asset "assets/free/free.txt", which '
|
|
' was declared with a flavor of "free" to not be included in the asset bundle '
|
|
' because the --flavor was set to "paid".');
|
|
}
|
|
|
|
if (!assetManifest.containsKey('assets/paid/paid.txt')) {
|
|
return TaskResult.failure('Expected the asset "assets/paid/paid.txt", which '
|
|
' was declared with a flavor of "paid" to be included in the asset bundle '
|
|
' because the --flavor was set to "paid".');
|
|
}
|
|
|
|
await flutter(
|
|
'install',
|
|
options: <String>['--debug', '--flavor', 'paid', '--uninstall-only'],
|
|
);
|
|
|
|
return TaskResult.success(null);
|
|
}
|
|
|
|
Future<TaskResult> _testInstallBogusFlavor() async {
|
|
final StringBuffer stderr = StringBuffer();
|
|
await evalFlutter(
|
|
'install',
|
|
canFail: true,
|
|
stderr: stderr,
|
|
options: <String>['--flavor', 'bogus'],
|
|
);
|
|
|
|
final String stderrString = stderr.toString();
|
|
final String expectedApkPath = path.join('build', 'app', 'outputs', 'flutter-apk', 'app-bogus-release.apk');
|
|
if (!stderrString.contains('"$expectedApkPath" does not exist.')) {
|
|
print(stderrString);
|
|
return TaskResult.failure('Should not succeed with bogus flavor');
|
|
}
|
|
|
|
return TaskResult.success(null);
|
|
}
|