Version 2.13.0-158.0.dev
Merge commit '86e296f3ce7a728a9cad5f73263755efef4d6bae' into 'dev'
diff --git a/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart b/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
index 49a8a88..507ea06 100644
--- a/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
+++ b/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
@@ -209,23 +209,15 @@
}
extension on CommentToken {
- /// The error codes currently do not contain digits or dollar signs, so we
- /// can be a bit more restrictive in this test.
- static final _identifierRegExp = RegExp(r'^[a-zA-Z][_a-zA-Z]*$');
-
/// Return the diagnostic names contained in this comment, assuming that it is
/// a correctly formatted ignore comment.
Iterable<DiagnosticName> get diagnosticNames sync* {
- bool isValidIdentifier(String text) {
- return text.contains(_identifierRegExp);
- }
-
int offset = lexeme.indexOf(':') + 1;
var names = lexeme.substring(offset).split(',');
offset += this.offset;
for (var name in names) {
var trimmedName = name.trim();
- if (trimmedName.isNotEmpty && isValidIdentifier(trimmedName)) {
+ if (trimmedName.isNotEmpty) {
var innerOffset = name.indexOf(trimmedName);
yield DiagnosticName(trimmedName.toLowerCase(), offset + innerOffset);
}
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index 8702311..e4b76d3 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -237,6 +237,11 @@
const String overwriteCurrentSdkVersion = '--overwrite-current-sdk-version=';
const String noVerifyCmd = '--no-verify';
+final ExpectationSet staticExpectationSet =
+ new ExpectationSet.fromJsonList(jsonDecode(EXPECTATIONS));
+final Expectation semiFuzzFailure = staticExpectationSet["SemiFuzzFailure"];
+final Expectation semiFuzzCrash = staticExpectationSet["SemiFuzzCrash"];
+
/// Options used for all tests within a given folder.
///
/// This is used for instance for defining target, mode, and experiment specific
@@ -332,8 +337,7 @@
bool get canBeFixWithUpdateExpectations => true;
@override
- final ExpectationSet expectationSet =
- new ExpectationSet.fromJsonList(jsonDecode(EXPECTATIONS));
+ final ExpectationSet expectationSet = staticExpectationSet;
Map<Uri, Component> _platforms = {};
@@ -404,11 +408,17 @@
steps.add(const EnsureNoErrors());
if (!skipVm) {
steps.add(const WriteDill());
- steps.add(const Run());
}
if (semiFuzz) {
steps.add(const FuzzCompiles());
}
+
+ // Notice: The below steps will run async, i.e. the next test will run
+ // intertwined with this/these step(s). That for instance means that they
+ // should not touch any ASTs!
+ if (!skipVm) {
+ steps.add(const Run());
+ }
}
}
@@ -716,6 +726,11 @@
Set<Expectation> outcomes, TestDescription description) {
if (skipVm && outcomes.length == 1 && outcomes.single == runtimeError) {
return new Set<Expectation>.from([Expectation.Pass]);
+ } else if (!semiFuzz &&
+ outcomes.length == 1 &&
+ (outcomes.single == semiFuzzFailure ||
+ outcomes.single == semiFuzzCrash)) {
+ return new Set<Expectation>.from([Expectation.Pass]);
} else {
return outcomes;
}
@@ -795,10 +810,9 @@
String get name => "run";
+ /// WARNING: Every subsequent step in this test will run async as well!
bool get isAsync => true;
- bool get isRuntime => true;
-
Future<Result<ComponentResult>> run(
ComponentResult result, FastaContext context) async {
FolderOptions folderOptions =
@@ -1188,7 +1202,7 @@
userLibraries.length != result.userLibraries.length) {
return new Result<ComponentResult>(
result,
- context.expectationSet["SemiFuzzFailure"],
+ semiFuzzFailure,
"Got a different amount of user libraries on first compile "
"compared to 'original' compilation:\n\n"
"This compile:\n"
@@ -1213,7 +1227,7 @@
originalErrors.map((error) => error.join('\n')).join('\n\n');
return new Result<ComponentResult>(
result,
- context.expectationSet["SemiFuzzFailure"],
+ semiFuzzFailure,
"Expected these errors:\n${errorsString}\n\n"
"but didn't get any after invalidating $importUri");
} else {
@@ -1222,7 +1236,7 @@
.join('\n\n');
return new Result<ComponentResult>(
result,
- context.expectationSet["SemiFuzzFailure"],
+ semiFuzzFailure,
"Unexpected errors:\n${errorsString}\n\n"
"after invalidating $importUri");
}
@@ -1234,7 +1248,7 @@
newUserLibraries.length != userLibraries.length) {
return new Result<ComponentResult>(
result,
- context.expectationSet["SemiFuzzFailure"],
+ semiFuzzFailure,
"Got a different amount of user libraries on recompile "
"compared to 'original' compilation after having invalidated "
"$importUri.\n\n"
@@ -1303,8 +1317,18 @@
continue;
}
Uint8List orgData = fs.data[uri];
- FuzzAstVisitorSorter fuzzAstVisitorSorter =
- new FuzzAstVisitorSorter(orgData, builder.isNonNullableByDefault);
+ FuzzAstVisitorSorter fuzzAstVisitorSorter;
+ try {
+ fuzzAstVisitorSorter =
+ new FuzzAstVisitorSorter(orgData, builder.isNonNullableByDefault);
+ } on FormatException catch (e, st) {
+ // UTF-16-LE formatted test crashes `utf8.decode(bytes)` --- catch that
+ return new Result<ComponentResult>(
+ result,
+ semiFuzzCrash,
+ "$e\n\n"
+ "$st");
+ }
// Sort ascending and then compile. Then sort descending and try again.
for (void Function() sorter in [
@@ -1325,7 +1349,7 @@
} catch (e, st) {
return new Result<ComponentResult>(
result,
- context.expectationSet["SemiFuzzCrash"],
+ semiFuzzCrash,
"Crashed with '$e' after reordering '$uri' to\n\n"
"$sb\n\n"
"$st");
@@ -1345,7 +1369,7 @@
originalErrors.map((error) => error.join('\n')).join('\n\n');
return new Result<ComponentResult>(
result,
- context.expectationSet["SemiFuzzFailure"],
+ semiFuzzFailure,
"Expected these errors:\n${errorsString}\n\n"
"but didn't get any after reordering $uri "
"to have this content:\n\n"
@@ -1353,7 +1377,7 @@
} else {
return new Result<ComponentResult>(
result,
- context.expectationSet["SemiFuzzFailure"],
+ semiFuzzFailure,
"Unexpected errors:\n${errorsString}\n\n"
"after reordering $uri to have this content:\n\n"
"$sb");
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index b3ade10..253e22b 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -738,6 +738,7 @@
timings
tinv
told
+touch
tpt
transitively
translators
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 58f937f..9c4e2cc 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -4,11 +4,11 @@
# Status file for the weak_suite.dart test suite.
-# general/platform_invalid_uris/main: SemiFuzzFailure # semi fuzz fails but isn't currently enabled by default.
-# general/error_recovery/issue_39058.crash: SemiFuzzFailure # semi fuzz fails but isn't currently enabled by default.
-# general/error_recovery/issue_39058_prime.crash: SemiFuzzFailure # semi fuzz fails but isn't currently enabled by default.
-# general/error_recovery/issue_39202.crash: SemiFuzzCrash # semi fuzz fails but isn't currently enabled by default.
-# regress/utf_16_le_content.crash: Crash # semi fuzz fails but isn't currently enabled by default.
+general/platform_invalid_uris/main: SemiFuzzFailure
+general/error_recovery/issue_39058_prime.crash: SemiFuzzFailure
+general/error_recovery/issue_39202.crash: SemiFuzzCrash
+general/error_recovery/issue_39058.crash: SemiFuzzFailure
+regress/utf_16_le_content.crash: SemiFuzzCrash
extension_types/simple: ExpectationFileMismatchSerialized # Expected.
extension_types/simple_getter_resolution: ExpectationFileMismatchSerialized # Expected.
diff --git a/pkg/testing/lib/src/chain.dart b/pkg/testing/lib/src/chain.dart
index 1f7fc84..c56fc21 100644
--- a/pkg/testing/lib/src/chain.dart
+++ b/pkg/testing/lib/src/chain.dart
@@ -322,12 +322,29 @@
String get name;
+ /// Sets this (*and effectively subsequent*) test step(s) as async.
+ ///
+ /// TL;DR: Either set to false, or only set to true when this and all
+ /// subsequent steps can run intertwined with another test.
+ ///
+ /// Details:
+ ///
+ /// A single test (TestDescription) can have several steps (Step).
+ /// When running a test the first step is executed, and when that step is done
+ /// the next step is executed by the now-ending step.
+ ///
+ /// When isAsync is false each step returns a future which is awaited,
+ /// effectivly meaning that only a single test is run at a time.
+ ///
+ /// When isAsync is true that step doesn't return a future (but adds it's
+ /// future to a list which is awaited before sending an 'entire suite done'
+ /// message), meaning that the next test can start before the step is
+ /// finished. As the next step in the test only starts after the current
+ /// step finishes, that also means that the next test can start - and run
+ /// intertwined with - a subsequent step even if such a subsequent step has
+ /// isAsync set to false.
bool get isAsync => false;
- bool get isCompiler => false;
-
- bool get isRuntime => false;
-
Future<Result<O>> run(I input, C context);
Result<O> unhandledError(error, StackTrace trace) {
diff --git a/tools/VERSION b/tools/VERSION
index 91d40c7..654aa33 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 13
PATCH 0
-PRERELEASE 157
+PRERELEASE 158
PRERELEASE_PATCH 0
\ No newline at end of file