mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
parent
1bb40aee1b
commit
584fd5f913
@ -145,8 +145,8 @@ final RegExp _deprecationPattern4 = RegExp(r'^ *\)$');
|
||||
/// the regexp just above...)
|
||||
const String _ignoreDeprecation = ' // ignore: flutter_deprecation_syntax (see analyze.dart)';
|
||||
|
||||
/// Some deprecation notices are grand-fathered in for now. They must have an issue listed.
|
||||
final RegExp _grandfatheredDeprecation = RegExp(r' // ignore: flutter_deprecation_syntax, https://github.com/flutter/flutter/issues/[0-9]+$');
|
||||
/// Some deprecation notices are exempt for historical reasons. They must have an issue listed.
|
||||
final RegExp _legacyDeprecation = RegExp(r' // ignore: flutter_deprecation_syntax, https://github.com/flutter/flutter/issues/[0-9]+$');
|
||||
|
||||
Future<void> verifyDeprecations(String workingDirectory, { int minimumMatches = 2000 }) async {
|
||||
final List<String> errors = <String>[];
|
||||
@ -157,7 +157,7 @@ Future<void> verifyDeprecations(String workingDirectory, { int minimumMatches =
|
||||
for (final String line in lines) {
|
||||
if (line.contains(_findDeprecationPattern) &&
|
||||
!line.endsWith(_ignoreDeprecation) &&
|
||||
!line.contains(_grandfatheredDeprecation)) {
|
||||
!line.contains(_legacyDeprecation)) {
|
||||
linesWithDeprecations.add(lineNumber);
|
||||
}
|
||||
lineNumber += 1;
|
||||
@ -691,7 +691,7 @@ class Hash256 {
|
||||
// If you are adding/changing template images, use the flutter_template_images
|
||||
// package and a .img.tmpl placeholder instead.
|
||||
// If you have other binaries to add, please consult Hixie for advice.
|
||||
final Set<Hash256> _grandfatheredBinaries = <Hash256>{
|
||||
final Set<Hash256> _legacyBinaries = <Hash256>{
|
||||
// DEFAULT ICON IMAGES
|
||||
|
||||
// packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-hdpi/ic_launcher.png
|
||||
@ -1046,18 +1046,18 @@ final Set<Hash256> _grandfatheredBinaries = <Hash256>{
|
||||
const Hash256(0x63D2ABD0041C3E3B, 0x4B52AD8D382353B5, 0x3C51C6785E76CE56, 0xED9DACAD2D2E31C4),
|
||||
};
|
||||
|
||||
Future<void> verifyNoBinaries(String workingDirectory, { Set<Hash256> grandfatheredBinaries }) async {
|
||||
// Please do not add anything to the _grandfatheredBinaries set above.
|
||||
Future<void> verifyNoBinaries(String workingDirectory, { Set<Hash256> legacyBinaries }) async {
|
||||
// Please do not add anything to the _legacyBinaries set above.
|
||||
// We have a policy of not checking in binaries into this repository.
|
||||
// If you are adding/changing template images, use the flutter_template_images
|
||||
// package and a .img.tmpl placeholder instead.
|
||||
// If you have other binaries to add, please consult Hixie for advice.
|
||||
assert(
|
||||
_grandfatheredBinaries
|
||||
_legacyBinaries
|
||||
.expand<int>((Hash256 hash) => <int>[hash.a, hash.b, hash.c, hash.d])
|
||||
.reduce((int value, int element) => value ^ element) == 0x606B51C908B40BFA // Please do not modify this line.
|
||||
);
|
||||
grandfatheredBinaries ??= _grandfatheredBinaries;
|
||||
legacyBinaries ??= _legacyBinaries;
|
||||
if (!Platform.isWindows) { // TODO(ianh): Port this to Windows
|
||||
final EvalResult evalResult = await _evalCommand(
|
||||
'git', <String>['ls-files', '-z'],
|
||||
@ -1087,7 +1087,7 @@ Future<void> verifyNoBinaries(String workingDirectory, { Set<Hash256> grandfathe
|
||||
utf8.decode(bytes);
|
||||
} on FormatException catch (error) {
|
||||
final Digest digest = sha256.convert(bytes);
|
||||
if (!grandfatheredBinaries.contains(Hash256.fromDigest(digest)))
|
||||
if (!legacyBinaries.contains(Hash256.fromDigest(digest)))
|
||||
problems.add('${file.path}:${error.offset}: file is not valid UTF-8');
|
||||
}
|
||||
}
|
||||
|
@ -82,8 +82,8 @@ int get webShardCount => Platform.environment.containsKey('WEB_SHARD_COUNT')
|
||||
|
||||
/// Tests that we don't run on Web for various reasons.
|
||||
//
|
||||
// TODO(yjbanov): we're getting rid of this blacklist as part of https://github.com/flutter/flutter/projects/60
|
||||
const List<String> kWebTestFileBlacklist = <String>[
|
||||
// TODO(yjbanov): we're getting rid of this as part of https://github.com/flutter/flutter/projects/60
|
||||
const List<String> kWebTestFileKnownFailures = <String>[
|
||||
// This test doesn't compile because it depends on code outside the flutter package.
|
||||
'test/examples/sector_layout_test.dart',
|
||||
// This test relies on widget tracking capability in the VM.
|
||||
@ -699,7 +699,7 @@ Future<void> _runWebUnitTests() async {
|
||||
)
|
||||
.whereType<File>()
|
||||
.map<String>((File file) => path.relative(file.path, from: flutterPackageDirectory.path))
|
||||
.where((String filePath) => !kWebTestFileBlacklist.contains(filePath))
|
||||
.where((String filePath) => !kWebTestFileKnownFailures.contains(filePath))
|
||||
.toList()
|
||||
// Finally we shuffle the list because we want the average cost per file to be uniformly
|
||||
// distributed. If the list is not sorted then different shards and batches may have
|
||||
|
@ -95,7 +95,7 @@ void main() {
|
||||
test('analyze.dart - verifyNoBinaries - positive', () async {
|
||||
final String result = await capture(() => verifyNoBinaries(
|
||||
testRootPath,
|
||||
grandfatheredBinaries: <Hash256>{const Hash256(0x39A050CD69434936, 0, 0, 0)},
|
||||
legacyBinaries: <Hash256>{const Hash256(0x39A050CD69434936, 0, 0, 0)},
|
||||
), exitCode: Platform.isWindows ? 0 : 1);
|
||||
if (!Platform.isWindows) {
|
||||
// The output starts with the call to git ls-files, the details of which
|
||||
@ -116,7 +116,7 @@ void main() {
|
||||
test('analyze.dart - verifyNoBinaries - negative', () async {
|
||||
await capture(() => verifyNoBinaries(
|
||||
testRootPath,
|
||||
grandfatheredBinaries: <Hash256>{
|
||||
legacyBinaries: <Hash256>{
|
||||
const Hash256(0xA8100AE6AA1940D0, 0xB663BB31CD466142, 0xEBBDBD5187131B92, 0xD93818987832EB89), // sha256("\xff")
|
||||
const Hash256(0x155644D3F13D98BF, 0, 0, 0),
|
||||
},
|
||||
|
@ -18,7 +18,7 @@ const double skipCost = 2473.0; // 20 hours: 5 to fix the issue we're ignoring,
|
||||
const double ignoreForFileCost = 2477.0; // similar thinking as skipCost
|
||||
const double asDynamicCost = 2011.0; // a few days to refactor the code.
|
||||
const double deprecationCost = 233.0; // a few hours to remove the old code.
|
||||
const double grandfatheredDeprecationCost = 9973.0; // a couple of weeks.
|
||||
const double legacyDeprecationCost = 9973.0; // a couple of weeks.
|
||||
|
||||
final RegExp todoPattern = RegExp(r'(?://|#) *TODO');
|
||||
final RegExp ignorePattern = RegExp(r'// *ignore:');
|
||||
@ -26,7 +26,7 @@ final RegExp ignoreForFilePattern = RegExp(r'// *ignore_for_file:');
|
||||
final RegExp asDynamicPattern = RegExp(r'\bas dynamic\b');
|
||||
final RegExp deprecationPattern = RegExp(r'^ *@[dD]eprecated');
|
||||
const Pattern globalsPattern = 'globals.';
|
||||
const String grandfatheredDeprecationPattern = '// ignore: flutter_deprecation_syntax, https';
|
||||
const String legacyDeprecationPattern = '// ignore: flutter_deprecation_syntax, https';
|
||||
|
||||
Future<double> findCostsForFile(File file) async {
|
||||
if (path.extension(file.path) == '.py')
|
||||
@ -48,8 +48,8 @@ Future<double> findCostsForFile(File file) async {
|
||||
total += asDynamicCost;
|
||||
if (line.contains(deprecationPattern))
|
||||
total += deprecationCost;
|
||||
if (line.contains(grandfatheredDeprecationPattern))
|
||||
total += grandfatheredDeprecationCost;
|
||||
if (line.contains(legacyDeprecationPattern))
|
||||
total += legacyDeprecationCost;
|
||||
if (isTest && line.contains('skip:'))
|
||||
total += skipCost;
|
||||
}
|
||||
|
@ -72,11 +72,13 @@ Future<T> debugInstrumentAction<T>(String description, Future<T> action()) {
|
||||
/// Argument passed to [Timeline] events in order to cause those events to be
|
||||
/// shown in the developer-centric version of the Observatory Timeline.
|
||||
///
|
||||
/// Generally these indicate landmark events such as the build phase or layout.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [Timeline.startSync], which typically takes this value as its `arguments`
|
||||
/// argument.
|
||||
const Map<String, String> timelineWhitelistArguments = <String, String>{
|
||||
const Map<String, String> timelineArgumentsIndicatingLandmarkEvent = <String, String>{
|
||||
'mode': 'basic',
|
||||
};
|
||||
|
||||
|
@ -414,7 +414,7 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture
|
||||
@override
|
||||
Future<void> performReassemble() async {
|
||||
await super.performReassemble();
|
||||
Timeline.startSync('Dirty Render Tree', arguments: timelineWhitelistArguments);
|
||||
Timeline.startSync('Dirty Render Tree', arguments: timelineArgumentsIndicatingLandmarkEvent);
|
||||
try {
|
||||
renderView.reassemble();
|
||||
} finally {
|
||||
|
@ -173,7 +173,7 @@ class PaintingContext extends ClipContext {
|
||||
void paintChild(RenderObject child, Offset offset) {
|
||||
assert(() {
|
||||
if (debugProfilePaintsEnabled)
|
||||
Timeline.startSync('${child.runtimeType}', arguments: timelineWhitelistArguments);
|
||||
Timeline.startSync('${child.runtimeType}', arguments: timelineArgumentsIndicatingLandmarkEvent);
|
||||
if (debugOnProfilePaint != null)
|
||||
debugOnProfilePaint(child);
|
||||
return true;
|
||||
@ -873,7 +873,7 @@ class PipelineOwner {
|
||||
/// See [RendererBinding] for an example of how this function is used.
|
||||
void flushLayout() {
|
||||
if (!kReleaseMode) {
|
||||
Timeline.startSync('Layout', arguments: timelineWhitelistArguments);
|
||||
Timeline.startSync('Layout', arguments: timelineArgumentsIndicatingLandmarkEvent);
|
||||
}
|
||||
assert(() {
|
||||
_debugDoingLayout = true;
|
||||
@ -965,7 +965,7 @@ class PipelineOwner {
|
||||
/// See [RendererBinding] for an example of how this function is used.
|
||||
void flushPaint() {
|
||||
if (!kReleaseMode) {
|
||||
Timeline.startSync('Paint', arguments: timelineWhitelistArguments);
|
||||
Timeline.startSync('Paint', arguments: timelineArgumentsIndicatingLandmarkEvent);
|
||||
}
|
||||
assert(() {
|
||||
_debugDoingPaint = true;
|
||||
|
@ -226,7 +226,7 @@ class RenderView extends RenderObject with RenderObjectWithChildMixin<RenderBox>
|
||||
///
|
||||
/// Actually causes the output of the rendering pipeline to appear on screen.
|
||||
void compositeFrame() {
|
||||
Timeline.startSync('Compositing', arguments: timelineWhitelistArguments);
|
||||
Timeline.startSync('Compositing', arguments: timelineArgumentsIndicatingLandmarkEvent);
|
||||
try {
|
||||
final ui.SceneBuilder builder = ui.SceneBuilder();
|
||||
final ui.Scene scene = layer.buildScene(builder);
|
||||
|
@ -994,7 +994,7 @@ mixin SchedulerBinding on BindingBase {
|
||||
/// statements printed during a frame from those printed between frames (e.g.
|
||||
/// in response to events or timers).
|
||||
void handleBeginFrame(Duration rawTimeStamp) {
|
||||
Timeline.startSync('Frame', arguments: timelineWhitelistArguments);
|
||||
Timeline.startSync('Frame', arguments: timelineArgumentsIndicatingLandmarkEvent);
|
||||
_firstRawTimeStampInEpoch ??= rawTimeStamp;
|
||||
_currentFrameTimeStamp = _adjustForEpoch(rawTimeStamp ?? _lastRawTimeStamp);
|
||||
if (rawTimeStamp != null)
|
||||
@ -1021,7 +1021,7 @@ mixin SchedulerBinding on BindingBase {
|
||||
_hasScheduledFrame = false;
|
||||
try {
|
||||
// TRANSIENT FRAME CALLBACKS
|
||||
Timeline.startSync('Animate', arguments: timelineWhitelistArguments);
|
||||
Timeline.startSync('Animate', arguments: timelineArgumentsIndicatingLandmarkEvent);
|
||||
_schedulerPhase = SchedulerPhase.transientCallbacks;
|
||||
final Map<int, _FrameCallbackEntry> callbacks = _transientCallbacks;
|
||||
_transientCallbacks = <int, _FrameCallbackEntry>{};
|
||||
|
@ -2603,7 +2603,7 @@ class BuildOwner {
|
||||
_debugBuilding = true;
|
||||
return true;
|
||||
}());
|
||||
Timeline.startSync('Build', arguments: timelineWhitelistArguments);
|
||||
Timeline.startSync('Build', arguments: timelineArgumentsIndicatingLandmarkEvent);
|
||||
try {
|
||||
_scheduledFlushDirtyElements = true;
|
||||
if (callback != null) {
|
||||
@ -2748,7 +2748,7 @@ class BuildOwner {
|
||||
/// After the current call stack unwinds, a microtask that notifies listeners
|
||||
/// about changes to global keys will run.
|
||||
void finalizeTree() {
|
||||
Timeline.startSync('Finalize tree', arguments: timelineWhitelistArguments);
|
||||
Timeline.startSync('Finalize tree', arguments: timelineArgumentsIndicatingLandmarkEvent);
|
||||
try {
|
||||
lockState(() {
|
||||
_inactiveElements._unmountAll(); // this unregisters the GlobalKeys
|
||||
@ -4534,7 +4534,7 @@ abstract class ComponentElement extends Element {
|
||||
@override
|
||||
void performRebuild() {
|
||||
if (!kReleaseMode && debugProfileBuildsEnabled)
|
||||
Timeline.startSync('${widget.runtimeType}', arguments: timelineWhitelistArguments);
|
||||
Timeline.startSync('${widget.runtimeType}', arguments: timelineArgumentsIndicatingLandmarkEvent);
|
||||
|
||||
assert(_debugSetAllowIgnoredCallsToMarkNeedsBuild(true));
|
||||
Widget built;
|
||||
|
@ -270,7 +270,7 @@ class AndroidDevice extends Device {
|
||||
workingDirectory: workingDirectory,
|
||||
allowReentrantFlutter: allowReentrantFlutter,
|
||||
environment: environment,
|
||||
whiteListFailures: (int value) => allowHeapCorruptionOnWindows(value, _platform),
|
||||
allowedFailures: (int value) => allowHeapCorruptionOnWindows(value, _platform),
|
||||
).stdout.trim();
|
||||
}
|
||||
|
||||
@ -284,7 +284,7 @@ class AndroidDevice extends Device {
|
||||
throwOnError: true,
|
||||
workingDirectory: workingDirectory,
|
||||
allowReentrantFlutter: allowReentrantFlutter,
|
||||
whiteListFailures: (int value) => allowHeapCorruptionOnWindows(value, _platform),
|
||||
allowedFailures: (int value) => allowHeapCorruptionOnWindows(value, _platform),
|
||||
);
|
||||
}
|
||||
|
||||
@ -1077,7 +1077,7 @@ class AdbLogReader extends DeviceLogReader {
|
||||
// 'W/ActivityManager(pid): '
|
||||
static final RegExp _logFormat = RegExp(r'^[VDIWEF]\/.*?\(\s*(\d+)\):\s');
|
||||
|
||||
static final List<RegExp> _whitelistedTags = <RegExp>[
|
||||
static final List<RegExp> _allowedTags = <RegExp>[
|
||||
RegExp(r'^[VDIWEF]\/flutter[^:]*:\s+', caseSensitive: false),
|
||||
RegExp(r'^[IE]\/DartVM[^:]*:\s+'),
|
||||
RegExp(r'^[WEF]\/AndroidRuntime:\s+'),
|
||||
@ -1149,7 +1149,7 @@ class AdbLogReader extends DeviceLogReader {
|
||||
}
|
||||
} else {
|
||||
// Filter on approved names and levels.
|
||||
acceptLine = _whitelistedTags.any((RegExp re) => re.hasMatch(line));
|
||||
acceptLine = _allowedTags.any((RegExp re) => re.hasMatch(line));
|
||||
}
|
||||
|
||||
if (acceptLine) {
|
||||
|
@ -198,9 +198,9 @@ abstract class ProcessUtils {
|
||||
/// When [throwOnError] is `true`, if the child process finishes with a non-zero
|
||||
/// exit code, a [ProcessException] is thrown.
|
||||
///
|
||||
/// If [throwOnError] is `true`, and [whiteListFailures] is supplied,
|
||||
/// If [throwOnError] is `true`, and [allowedFailures] is supplied,
|
||||
/// a [ProcessException] is only thrown on a non-zero exit code if
|
||||
/// [whiteListFailures] returns false when passed the exit code.
|
||||
/// [allowedFailures] returns false when passed the exit code.
|
||||
///
|
||||
/// When [workingDirectory] is set, it is the working directory of the child
|
||||
/// process.
|
||||
@ -219,7 +219,7 @@ abstract class ProcessUtils {
|
||||
Future<RunResult> run(
|
||||
List<String> cmd, {
|
||||
bool throwOnError = false,
|
||||
RunResultChecker whiteListFailures,
|
||||
RunResultChecker allowedFailures,
|
||||
String workingDirectory,
|
||||
bool allowReentrantFlutter = false,
|
||||
Map<String, String> environment,
|
||||
@ -231,7 +231,7 @@ abstract class ProcessUtils {
|
||||
RunResult runSync(
|
||||
List<String> cmd, {
|
||||
bool throwOnError = false,
|
||||
RunResultChecker whiteListFailures,
|
||||
RunResultChecker allowedFailures,
|
||||
bool hideStdout = false,
|
||||
String workingDirectory,
|
||||
Map<String, String> environment,
|
||||
@ -292,7 +292,7 @@ class _DefaultProcessUtils implements ProcessUtils {
|
||||
Future<RunResult> run(
|
||||
List<String> cmd, {
|
||||
bool throwOnError = false,
|
||||
RunResultChecker whiteListFailures,
|
||||
RunResultChecker allowedFailures,
|
||||
String workingDirectory,
|
||||
bool allowReentrantFlutter = false,
|
||||
Map<String, String> environment,
|
||||
@ -318,7 +318,7 @@ class _DefaultProcessUtils implements ProcessUtils {
|
||||
final RunResult runResult = RunResult(results, cmd);
|
||||
_logger.printTrace(runResult.toString());
|
||||
if (throwOnError && runResult.exitCode != 0 &&
|
||||
(whiteListFailures == null || !whiteListFailures(runResult.exitCode))) {
|
||||
(allowedFailures == null || !allowedFailures(runResult.exitCode))) {
|
||||
runResult.throwException('Process exited abnormally:\n$runResult');
|
||||
}
|
||||
return runResult;
|
||||
@ -382,7 +382,7 @@ class _DefaultProcessUtils implements ProcessUtils {
|
||||
if (exitCode != null) {
|
||||
_logger.printTrace(runResult.toString());
|
||||
if (throwOnError && runResult.exitCode != 0 &&
|
||||
(whiteListFailures == null || !whiteListFailures(exitCode))) {
|
||||
(allowedFailures == null || !allowedFailures(exitCode))) {
|
||||
runResult.throwException('Process exited abnormally:\n$runResult');
|
||||
}
|
||||
return runResult;
|
||||
@ -407,7 +407,7 @@ class _DefaultProcessUtils implements ProcessUtils {
|
||||
RunResult runSync(
|
||||
List<String> cmd, {
|
||||
bool throwOnError = false,
|
||||
RunResultChecker whiteListFailures,
|
||||
RunResultChecker allowedFailures,
|
||||
bool hideStdout = false,
|
||||
String workingDirectory,
|
||||
Map<String, String> environment,
|
||||
@ -424,8 +424,8 @@ class _DefaultProcessUtils implements ProcessUtils {
|
||||
_logger.printTrace('Exit code ${runResult.exitCode} from: ${cmd.join(' ')}');
|
||||
|
||||
bool failedExitCode = runResult.exitCode != 0;
|
||||
if (whiteListFailures != null && failedExitCode) {
|
||||
failedExitCode = !whiteListFailures(runResult.exitCode);
|
||||
if (allowedFailures != null && failedExitCode) {
|
||||
failedExitCode = !allowedFailures(runResult.exitCode);
|
||||
}
|
||||
|
||||
if (runResult.stdout.isNotEmpty && !hideStdout) {
|
||||
|
@ -363,10 +363,10 @@ class IOSSimulator extends Device {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if the device is part of a blacklisted category.
|
||||
// Check if the device is part of a blocked category.
|
||||
// We do not yet support WatchOS or tvOS devices.
|
||||
final RegExp blacklist = RegExp(r'Apple (TV|Watch)', caseSensitive: false);
|
||||
if (blacklist.hasMatch(name)) {
|
||||
final RegExp blocklist = RegExp(r'Apple (TV|Watch)', caseSensitive: false);
|
||||
if (blocklist.hasMatch(name)) {
|
||||
_supportMessage = 'Flutter does not support Apple TV or Apple Watch.';
|
||||
return false;
|
||||
}
|
||||
|
@ -385,7 +385,7 @@ class XcodeProjectInterpreter {
|
||||
if (projectFilename != null) ...<String>['-project', projectFilename],
|
||||
],
|
||||
throwOnError: true,
|
||||
whiteListFailures: (int c) => c == missingProjectExitCode,
|
||||
allowedFailures: (int c) => c == missingProjectExitCode,
|
||||
workingDirectory: projectPath,
|
||||
);
|
||||
if (result.exitCode == missingProjectExitCode) {
|
||||
|
@ -161,7 +161,7 @@ void main() {
|
||||
throwsA(isA<ProcessException>()));
|
||||
});
|
||||
|
||||
testWithoutContext(' does not throw on failure with whitelist', () async {
|
||||
testWithoutContext(' does not throw on allowed Failures', () async {
|
||||
when(mockProcessManager.run(<String>['kaboom'])).thenAnswer((_) {
|
||||
return Future<ProcessResult>.value(ProcessResult(0, 1, '', ''));
|
||||
});
|
||||
@ -169,13 +169,13 @@ void main() {
|
||||
(await processUtils.run(
|
||||
<String>['kaboom'],
|
||||
throwOnError: true,
|
||||
whiteListFailures: (int c) => c == 1,
|
||||
allowedFailures: (int c) => c == 1,
|
||||
)).exitCode,
|
||||
1,
|
||||
);
|
||||
});
|
||||
|
||||
testWithoutContext(' throws on failure when not in whitelist', () async {
|
||||
testWithoutContext(' throws on disallowed failure', () async {
|
||||
when(mockProcessManager.run(<String>['kaboom'])).thenAnswer((_) {
|
||||
return Future<ProcessResult>.value(ProcessResult(0, 2, '', ''));
|
||||
});
|
||||
@ -183,7 +183,7 @@ void main() {
|
||||
() => processUtils.run(
|
||||
<String>['kaboom'],
|
||||
throwOnError: true,
|
||||
whiteListFailures: (int c) => c == 1,
|
||||
allowedFailures: (int c) => c == 1,
|
||||
),
|
||||
throwsA(isA<ProcessException>()),
|
||||
);
|
||||
@ -295,7 +295,7 @@ void main() {
|
||||
throwsA(isA<ProcessException>()));
|
||||
});
|
||||
|
||||
testWithoutContext(' does not throw on failure with whitelist', () async {
|
||||
testWithoutContext(' does not throw on allowed Failures', () async {
|
||||
when(mockProcessManager.runSync(<String>['kaboom'])).thenReturn(
|
||||
ProcessResult(0, 1, '', '')
|
||||
);
|
||||
@ -303,12 +303,12 @@ void main() {
|
||||
processUtils.runSync(
|
||||
<String>['kaboom'],
|
||||
throwOnError: true,
|
||||
whiteListFailures: (int c) => c == 1,
|
||||
allowedFailures: (int c) => c == 1,
|
||||
).exitCode,
|
||||
1);
|
||||
});
|
||||
|
||||
testWithoutContext(' throws on failure when not in whitelist', () async {
|
||||
testWithoutContext(' throws on disallowed failure', () async {
|
||||
when(mockProcessManager.runSync(<String>['kaboom'])).thenReturn(
|
||||
ProcessResult(0, 2, '', '')
|
||||
);
|
||||
@ -316,7 +316,7 @@ void main() {
|
||||
() => processUtils.runSync(
|
||||
<String>['kaboom'],
|
||||
throwOnError: true,
|
||||
whiteListFailures: (int c) => c == 1,
|
||||
allowedFailures: (int c) => c == 1,
|
||||
),
|
||||
throwsA(isA<ProcessException>()));
|
||||
});
|
||||
|
@ -59,18 +59,18 @@ void main() {
|
||||
});
|
||||
|
||||
test('no unauthorized imports of dart:io', () {
|
||||
final List<String> whitelistedPaths = <String>[
|
||||
final List<String> allowedPaths = <String>[
|
||||
globals.fs.path.join(flutterTools, 'lib', 'src', 'base', 'io.dart'),
|
||||
globals.fs.path.join(flutterTools, 'lib', 'src', 'base', 'platform.dart'),
|
||||
globals.fs.path.join(flutterTools, 'lib', 'src', 'base', 'error_handling_file_system.dart'),
|
||||
];
|
||||
bool _isNotWhitelisted(FileSystemEntity entity) => whitelistedPaths.every((String path) => path != entity.path);
|
||||
bool _isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => path != entity.path);
|
||||
|
||||
for (final String dirName in <String>['lib', 'bin']) {
|
||||
final Iterable<File> files = globals.fs.directory(globals.fs.path.join(flutterTools, dirName))
|
||||
.listSync(recursive: true)
|
||||
.where(_isDartFile)
|
||||
.where(_isNotWhitelisted)
|
||||
.where(_isNotAllowed)
|
||||
.map(_asFile);
|
||||
for (final File file in files) {
|
||||
for (final String line in file.readAsLinesSync()) {
|
||||
@ -85,19 +85,19 @@ void main() {
|
||||
});
|
||||
|
||||
test('no unauthorized imports of test_api', () {
|
||||
final List<String> whitelistedPaths = <String>[
|
||||
final List<String> allowedPaths = <String>[
|
||||
globals.fs.path.join(flutterTools, 'lib', 'src', 'build_runner', 'build_script.dart'),
|
||||
globals.fs.path.join(flutterTools, 'lib', 'src', 'test', 'flutter_platform.dart'),
|
||||
globals.fs.path.join(flutterTools, 'lib', 'src', 'test', 'flutter_web_platform.dart'),
|
||||
globals.fs.path.join(flutterTools, 'lib', 'src', 'test', 'test_wrapper.dart'),
|
||||
];
|
||||
bool _isNotWhitelisted(FileSystemEntity entity) => whitelistedPaths.every((String path) => path != entity.path);
|
||||
bool _isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => path != entity.path);
|
||||
|
||||
for (final String dirName in <String>['lib']) {
|
||||
final Iterable<File> files = globals.fs.directory(globals.fs.path.join(flutterTools, dirName))
|
||||
.listSync(recursive: true)
|
||||
.where(_isDartFile)
|
||||
.where(_isNotWhitelisted)
|
||||
.where(_isNotAllowed)
|
||||
.map(_asFile);
|
||||
for (final File file in files) {
|
||||
for (final String line in file.readAsLinesSync()) {
|
||||
@ -112,7 +112,7 @@ void main() {
|
||||
});
|
||||
|
||||
test('no unauthorized imports of package:path', () {
|
||||
final List<String> whitelistedPath = <String>[
|
||||
final List<String> allowedPath = <String>[
|
||||
globals.fs.path.join(flutterTools, 'lib', 'src', 'build_runner', 'web_compilation_delegate.dart'),
|
||||
globals.fs.path.join(flutterTools, 'test', 'general.shard', 'platform_plugins_test.dart'),
|
||||
];
|
||||
@ -120,7 +120,7 @@ void main() {
|
||||
final Iterable<File> files = globals.fs.directory(globals.fs.path.join(flutterTools, dirName))
|
||||
.listSync(recursive: true)
|
||||
.where(_isDartFile)
|
||||
.where((FileSystemEntity entity) => !whitelistedPath.contains(entity.path))
|
||||
.where((FileSystemEntity entity) => !allowedPath.contains(entity.path))
|
||||
.map(_asFile);
|
||||
for (final File file in files) {
|
||||
for (final String line in file.readAsLinesSync()) {
|
||||
@ -135,14 +135,14 @@ void main() {
|
||||
});
|
||||
|
||||
test('no unauthorized imports of package:file/local.dart', () {
|
||||
final List<String> whitelistedPath = <String>[
|
||||
final List<String> allowedPath = <String>[
|
||||
globals.fs.path.join(flutterTools, 'lib', 'src', 'base', 'file_system.dart'),
|
||||
];
|
||||
for (final String dirName in <String>['lib', 'bin', 'test']) {
|
||||
final Iterable<File> files = globals.fs.directory(globals.fs.path.join(flutterTools, dirName))
|
||||
.listSync(recursive: true)
|
||||
.where(_isDartFile)
|
||||
.where((FileSystemEntity entity) => !whitelistedPath.contains(entity.path))
|
||||
.where((FileSystemEntity entity) => !allowedPath.contains(entity.path))
|
||||
.map(_asFile);
|
||||
for (final File file in files) {
|
||||
for (final String line in file.readAsLinesSync()) {
|
||||
@ -156,17 +156,17 @@ void main() {
|
||||
});
|
||||
|
||||
test('no unauthorized imports of dart:convert', () {
|
||||
final List<String> whitelistedPaths = <String>[
|
||||
final List<String> allowedPaths = <String>[
|
||||
globals.fs.path.join(flutterTools, 'lib', 'src', 'convert.dart'),
|
||||
globals.fs.path.join(flutterTools, 'lib', 'src', 'base', 'error_handling_file_system.dart'),
|
||||
];
|
||||
bool _isNotWhitelisted(FileSystemEntity entity) => whitelistedPaths.every((String path) => path != entity.path);
|
||||
bool _isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => path != entity.path);
|
||||
|
||||
for (final String dirName in <String>['lib']) {
|
||||
final Iterable<File> files = globals.fs.directory(globals.fs.path.join(flutterTools, dirName))
|
||||
.listSync(recursive: true)
|
||||
.where(_isDartFile)
|
||||
.where(_isNotWhitelisted)
|
||||
.where(_isNotAllowed)
|
||||
.map(_asFile);
|
||||
for (final File file in files) {
|
||||
for (final String line in file.readAsLinesSync()) {
|
||||
@ -181,20 +181,20 @@ void main() {
|
||||
});
|
||||
|
||||
test('no unauthorized imports of build_runner or dwds', () {
|
||||
final List<String> whitelistedPaths = <String>[
|
||||
final List<String> allowedPaths = <String>[
|
||||
globals.fs.path.join(flutterTools, 'test', 'src', 'build_runner'),
|
||||
globals.fs.path.join(flutterTools, 'lib', 'src', 'build_runner'),
|
||||
globals.fs.path.join(flutterTools, 'lib', 'executable.dart'),
|
||||
globals.fs.path.join(flutterTools, 'lib', 'devfs_web.dart'),
|
||||
globals.fs.path.join(flutterTools, 'lib', 'resident_web_runner.dart'),
|
||||
];
|
||||
bool _isNotWhitelisted(FileSystemEntity entity) => whitelistedPaths.every((String path) => !entity.path.contains(path));
|
||||
bool _isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => !entity.path.contains(path));
|
||||
|
||||
for (final String dirName in <String>['lib']) {
|
||||
final Iterable<File> files = globals.fs.directory(globals.fs.path.join(flutterTools, dirName))
|
||||
.listSync(recursive: true)
|
||||
.where(_isDartFile)
|
||||
.where(_isNotWhitelisted)
|
||||
.where(_isNotAllowed)
|
||||
.map(_asFile);
|
||||
for (final File file in files) {
|
||||
for (final String line in file.readAsLinesSync()) {
|
||||
|
Loading…
Reference in New Issue
Block a user