[fasta] messages_test automatically wraps examples in part
Update the message_test to automatically create an example that wrappes
all already defined examples in a part.
For instance, if the example is
main.dart: main() { print("hello world"); }
create an additional example that is basically
main_wrapped.dart: part 'main.dart';
main.dart: part of 'main_wrapped.dart'; main() { print("hello world"); }
(as well as some additional comments to push any actual positions in the
main file ot of scope for valid positions in the wrapper file.
This doesn't work for everything, e.g. if the original main imports or
exports anything, the new test will fail. That's okay, the status file
has been updated accordingly.
The reason for adding it is that we currently have some bugs that causes
us to crash in situations like this, i.e. situations where a message is
coming from a position in a part where the same position doesn't exist
in the non-part file.
The status file has been updated for that too, although not in sorted order.
Change-Id: Ib67f85fca5e81e0b9e93cf2d79ab50c38cae4936
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106082
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 0fccb0c..415b5dc 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -2,7 +2,23 @@
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE.md file.
+# Not sorted --- these crashes should be fixed ASAP!
+GenericFunctionTypeInferredAsActualTypeArgument/part_wrapped_script: Crash
+GenericFunctionTypeUsedAsActualTypeArgument/part_wrapped_script1: Crash
+GenericFunctionTypeUsedAsActualTypeArgument/part_wrapped_script2: Crash
+IncorrectTypeArgument/part_wrapped_script: Crash
+IncorrectTypeArgumentInReturnType/part_wrapped_script: Crash
+IncorrectTypeArgumentInSupertype/part_wrapped_script: Crash
+IncorrectTypeArgumentInSupertypeInferred/part_wrapped_script: Crash
+IncorrectTypeArgumentInferred/part_wrapped_script: Crash
+IncorrectTypeArgumentQualified/part_wrapped_script: Crash
+IncorrectTypeArgumentQualifiedInferred/part_wrapped_script: Crash
+IntersectionTypeAsTypeArgument/part_wrapped_script: Crash
+PartTwice/part_wrapped_script: Crash
+
AbstractClassInstantiation/example: Fail
+AbstractClassMember/part_wrapped_script5: Fail
+AbstractClassMember/part_wrapped_script6: Fail
AbstractClassMember/script5: Fail
AbstractClassMember/script6: Fail
AbstractNotSync/example: Fail
@@ -11,7 +27,9 @@
AccessError/example: Fail
AmbiguousSupertypes/example: Fail
AnnotationOnEnumConstant/example: Fail
+AnonymousBreakTargetOutsideFunction/part_wrapped_statement: Fail
AnonymousBreakTargetOutsideFunction/statement: Fail # Duplicated error as parser also complains.
+AnonymousContinueTargetOutsideFunction/part_wrapped_statement: Fail
AnonymousContinueTargetOutsideFunction/statement: Fail # Duplicated error as parser also complains.
ArgumentTypeNotAssignable/example: Fail
AssertAsExpression/analyzerCode: Fail
@@ -39,10 +57,15 @@
CantInferPackagesFromPackageUri/example: Fail
CantInferTypeDueToCircularity/example: Fail
CantInferTypeDueToInconsistentOverrides/example: Fail
+CantReadFile/part_wrapped_script: Fail # Importing file in the (now) part.
CantUseControlFlowOrSpreadAsConstant/example: Fail
+CantUseDeferredPrefixAsConstant/part_wrapped_script: Fail # Importing file in the (now) part.
+CantUsePrefixAsExpression/part_wrapped_script: Fail # Importing file in the (now) part.
+CantUsePrefixWithNullAware/part_wrapped_script: Fail # Importing file in the (now) part.
CantUseSuperBoundedTypeForInstanceCreation/analyzerCode: Fail
CantUseSuperBoundedTypeForInstanceCreation/example: Fail
ColonInPlaceOfIn/example: Fail
+ConflictingModifiers/part_wrapped_script1: Fail
ConflictingModifiers/script1: Fail
ConflictsWithConstructor/example: Fail
ConflictsWithFactory/analyzerCode: Fail
@@ -54,6 +77,8 @@
ConflictsWithTypeVariable/example: Fail
ConstAndFinal/declaration3: Fail
ConstAndFinal/declaration4: Fail
+ConstAndFinal/part_wrapped_declaration3: Fail
+ConstAndFinal/part_wrapped_declaration4: Fail
ConstConstructorInSubclassOfMixinApplication/example: Fail
ConstConstructorNonFinalField/example: Fail
ConstConstructorRedirectionToNonConst/analyzerCode: Fail # The analyzer doesn't report this error.
@@ -98,15 +123,24 @@
ConstructorNotFound/example: Fail
ConstructorNotSync/example: Fail
ContinueLabelNotTarget/example: Fail
+ContinueOutsideOfLoop/part_wrapped_script1: Fail
ContinueOutsideOfLoop/script1: Fail
+ContinueWithoutLabelInCase/part_wrapped_script1: Fail
ContinueWithoutLabelInCase/script1: Fail
CouldNotParseUri/analyzerCode: Fail
CouldNotParseUri/example: Fail
+CovariantAndStatic/part_wrapped_script1: Fail
+CovariantAndStatic/part_wrapped_script2: Fail
CovariantAndStatic/script1: Fail
CovariantAndStatic/script2: Fail
+CovariantMember/part_wrapped_script1: Fail
+CovariantMember/part_wrapped_script2: Fail
CovariantMember/script1: Fail
CovariantMember/script2: Fail
+CycleInTypeVariables/part_wrapped_script1: Fail
CycleInTypeVariables/script1: Fail # We report an error for each type variable involved in the cycle.
+CyclicClassHierarchy/part_wrapped_script1: Fail
+CyclicClassHierarchy/part_wrapped_script2: Fail
CyclicClassHierarchy/script1: Fail # We report an error for each class involved in the cycle.
CyclicClassHierarchy/script2: Fail # We report an error for each class involved in the cycle.
CyclicTypedef/example: Fail
@@ -115,17 +149,26 @@
DeferredTypeAnnotation/example: Fail
DillOutlineSummary/analyzerCode: Fail
DillOutlineSummary/example: Fail
+DirectiveAfterDeclaration/part_wrapped_script1: Fail
+DirectiveAfterDeclaration/part_wrapped_script2: Fail
DirectiveAfterDeclaration/script1: Fail
DirectiveAfterDeclaration/script2: Fail
DuplicateDeferred/example: Fail
DuplicatePrefix/example: Fail
DuplicatedDeclarationUse/analyzerCode: Fail # No corresponding analyzer code.
+DuplicatedDeclarationUse/part_wrapped_script1: Fail
+DuplicatedDeclarationUse/part_wrapped_script2: Fail
DuplicatedDeclarationUse/script1: Fail # This test can't pass.
DuplicatedDeclarationUse/script2: Fail # Wrong error.
DuplicatedDefinition/analyzerCode: Fail
DuplicatedDefinition/example: Fail
+DuplicatedExport/part_wrapped_script: Fail # Exporting file in the (now) part.
DuplicatedExportInType/analyzerCode: Fail
DuplicatedExportInType/example: Fail
+DuplicatedImportInType/part_wrapped_script: Fail # Importing file in the (now) part.
+DuplicatedLibraryExport/part_wrapped_script: Fail # Exporting file in the (now) part.
+DuplicatedLibraryImport/part_wrapped_script: Fail # Importing file in the (now) part.
+DuplicatedModifier/part_wrapped_script1: Fail
DuplicatedModifier/script1: Fail
DuplicatedName/example: Fail
DuplicatedNamedArgument/example: Fail
@@ -133,10 +176,16 @@
Encoding/analyzerCode: Fail
EnumConstantSameNameAsEnclosing/example: Fail
EnumInstantiation/example: Fail
+EqualityCannotBeEqualityOperand/part_wrapped_script1: Fail
+EqualityCannotBeEqualityOperand/part_wrapped_script2: Fail
EqualityCannotBeEqualityOperand/script1: Fail
EqualityCannotBeEqualityOperand/script2: Fail
+ExpectedBlock/part_wrapped_script: Fail
ExpectedBlock/script: Fail
+ExpectedBlockToSkip/part_wrapped_script: Fail
ExpectedBlockToSkip/script: Fail
+ExpectedButGot/part_wrapped_script1: Fail
+ExpectedButGot/part_wrapped_script2: Fail
ExpectedButGot/script1: Fail
ExpectedButGot/script2: Fail
ExpectedClassMember/example: Fail
@@ -149,6 +198,7 @@
ExpectedOneExpression/example: Fail
ExpectedOpenParens/analyzerCode: Fail
ExpectedOpenParens/example: Fail
+ExpectedStatement/part_wrapped_statement: Fail
ExpectedStatement/statement: Fail
ExpectedString/example: Fail
ExpectedToken/example: Fail
@@ -156,15 +206,35 @@
ExpectedUri/analyzerCode: Fail
ExpectedUri/example: Fail
ExperimentNotEnabled/example: Fail
+ExportAfterPart/part_wrapped_script1: Fail
ExportAfterPart/script1: Fail
ExpressionNotMetadata/analyzerCode: Fail
ExpressionNotMetadata/example: Fail
ExtendingEnum/example: Fail
ExtendingRestricted/example: Fail
+ExternalConstructorWithBody/part_wrapped_script1: Fail
ExternalConstructorWithBody/script1: Fail
ExternalConstructorWithFieldInitializers/example: Fail
ExternalFactoryRedirection/example: Fail
+ExternalFactoryWithBody/part_wrapped_script1: Fail
ExternalFactoryWithBody/script1: Fail
+ExtraneousModifier/part_wrapped_script1: Fail
+ExtraneousModifier/part_wrapped_script2: Fail
+ExtraneousModifier/part_wrapped_script3: Fail
+ExtraneousModifier/part_wrapped_script4: Fail
+ExtraneousModifier/part_wrapped_script5: Fail
+ExtraneousModifier/part_wrapped_script7: Fail
+ExtraneousModifier/part_wrapped_script8: Fail
+ExtraneousModifier/part_wrapped_script9: Fail
+ExtraneousModifier/part_wrapped_script10: Fail
+ExtraneousModifier/part_wrapped_script11: Fail
+ExtraneousModifier/part_wrapped_script12: Fail
+ExtraneousModifier/part_wrapped_script13: Fail
+ExtraneousModifier/part_wrapped_script16: Fail
+ExtraneousModifier/part_wrapped_script17: Fail
+ExtraneousModifier/part_wrapped_script18: Fail
+ExtraneousModifier/part_wrapped_script19: Fail
+ExtraneousModifier/part_wrapped_script20: Fail
ExtraneousModifier/script1: Fail
ExtraneousModifier/script10: Fail
ExtraneousModifier/script11: Fail
@@ -196,34 +266,47 @@
FfiTypeInvalid/analyzerCode: Fail
FfiTypeMismatch/analyzerCode: Fail
FfiTypeUnsized/analyzerCode: Fail
+FieldInitializedOutsideDeclaringClass/part_wrapped_script1: Fail
FieldInitializedOutsideDeclaringClass/script1: Fail
+FieldInitializerOutsideConstructor/part_wrapped_script1: Fail
FieldInitializerOutsideConstructor/script1: Fail
+FinalAndCovariant/part_wrapped_script2: Fail
FinalAndCovariant/script2: Fail
FinalFieldWithoutInitializer/example: Fail
FinalInstanceVariableAlreadyInitialized/example: Fail
ForInLoopElementTypeNotAssignable/example: Fail
ForInLoopExactlyOneVariable/analyzerCode: Fail # The analyzer doesn't recover well.
+ForInLoopExactlyOneVariable/part_wrapped_statement: Fail
ForInLoopExactlyOneVariable/statement: Fail # Fasta reports too many errors.
ForInLoopNotAssignable/analyzerCode: Fail # The analyzer reports a different error.
+ForInLoopNotAssignable/part_wrapped_statement: Fail
ForInLoopNotAssignable/statement: Fail
ForInLoopTypeNotIterable/example: Fail
ForInLoopWithConstVariable/example: Fail
FunctionTypeDefaultValue/example: Fail
+FunctionTypedParameterVar/part_wrapped_script1: Fail
FunctionTypedParameterVar/script1: Fail
GeneratorReturnsValue/example: Fail
GetterNotFound/example: Fail
GetterWithFormals/example: Fail
+IllegalAssignmentToNonAssignable/part_wrapped_script1: Fail
IllegalAssignmentToNonAssignable/script1: Fail
IllegalAsyncGeneratorVoidReturnType/analyzerCode: Fail # The analyzer doesn't report this error.
IllegalMixin/example: Fail
IllegalMixinDueToConstructors/example: Fail
IllegalSyncGeneratorVoidReturnType/analyzerCode: Fail # The analyzer doesn't report this error.
+ImplementsBeforeExtends/part_wrapped_script: Fail
ImplementsBeforeExtends/script: Fail
+ImplementsBeforeOn/part_wrapped_script: Fail
ImplementsBeforeOn/script: Fail
+ImplementsBeforeWith/part_wrapped_script: Fail
ImplementsBeforeWith/script: Fail
ImplementsFutureOr/analyzerCode: Fail # The analyzer doesn't report this error.
+ImplementsFutureOr/part_wrapped_script1: Fail # Importing file in the (now) part.
ImplicitCallOfNonMethod/example: Fail
+ImportAfterPart/part_wrapped_script1: Fail
ImportAfterPart/script1: Fail
+IncompatibleRedirecteeFunctionType/part_wrapped_script6: Fail
IncompatibleRedirecteeFunctionType/script6: Fail # Triggers multiple errors.
InitializerForStaticField/example: Fail
InitializerOutsideConstructor/example: Fail
@@ -252,8 +335,13 @@
InvalidSuperInInitializer/example: Fail
InvalidThisInInitializer/example: Fail
InvalidUseOfNullAwareAccess/example: Fail
+InvalidVoid/part_wrapped_script1: Fail
+InvalidVoid/part_wrapped_script2: Fail
InvalidVoid/script1: Fail
InvalidVoid/script2: Fail
+LibraryDirectiveNotFirst/part_wrapped_script1: Fail # Defining library name in the (now) part.
+LibraryDirectiveNotFirst/part_wrapped_script2: Fail
+LibraryDirectiveNotFirst/part_wrapped_script3: Fail
LibraryDirectiveNotFirst/script2: Fail
LibraryDirectiveNotFirst/script3: Fail
ListLiteralTooManyTypeArguments/example: Fail
@@ -265,19 +353,27 @@
MethodNotFound/example: Fail
MissingArgumentList/analyzerCode: Fail
MissingArgumentList/example: Fail
+MissingAssignableSelector/part_wrapped_script1: Fail
MissingAssignableSelector/script1: Fail
+MissingAssignmentInInitializer/part_wrapped_script1: Fail
MissingAssignmentInInitializer/script1: Fail
MissingInput/analyzerCode: Fail
MissingInput/example: Fail
MissingMain/analyzerCode: Fail
MissingMain/example: Fail
+MissingPartOf/part_wrapped_script: Fail # Using 'part' in the (now) part.
MissingPrefixInDeferredImport/example: Fail
MixinInferenceNoMatchingClass/example: Fail
+ModifierOutOfOrder/part_wrapped_script1: Fail
ModifierOutOfOrder/script1: Fail
+MultipleExtends/part_wrapped_script: Fail
MultipleExtends/script: Fail
+MultipleImplements/part_wrapped_script: Fail
MultipleImplements/script: Fail
MultipleLibraryDirectives/example: Fail
+MultipleOnClauses/part_wrapped_script: Fail
MultipleOnClauses/script: Fail
+MultipleWith/part_wrapped_script: Fail
MultipleWith/script: Fail
NamedFunctionExpression/example: Fail
NativeClauseShouldBeAnnotation/example: Fail
@@ -286,10 +382,12 @@
NoUnnamedConstructorInObject/analyzerCode: Fail
NoUnnamedConstructorInObject/example: Fail
NonAsciiIdentifier/expression: Fail
+NonAsciiIdentifier/part_wrapped_expression: Fail
NonConstConstructor/example: Fail
NonConstFactory/example: Fail
NonInstanceTypeVariableUse/example: Fail
NonNullAwareSpreadIsNull/analyzerCode: Fail # There's no analyzer code for that error yet.
+NonPartOfDirectiveInPart/part_wrapped_script1: Fail
NonPartOfDirectiveInPart/script1: Fail
NotAConstantExpression/example: Fail
NotAType/example: Fail
@@ -313,10 +411,19 @@
PackageNotFound/analyzerCode: Fail
PackageNotFound/example: Fail
PackagesFileFormat/analyzerCode: Fail # Analyzer crashes when .packages file has format error
+PartExport/part_wrapped_script: Fail # Exporting file in the (now) part.
+PartInPart/part_wrapped_script: Fail # Using 'part' in the (now) part.
+PartOfInLibrary/part_wrapped_script: Fail # Importing file in the (now) part.
PartOfLibraryNameMismatch/example: Fail
+PartOfSelf/part_wrapped_script: Fail # Using 'part' in the (now) part.
+PartOfTwice/part_wrapped_script1: Fail # Using 'part' in the (now) part.
+PartOfTwice/part_wrapped_script2: Fail # Using 'part' in the (now) part.
+PartOfTwice/part_wrapped_script3: Fail # Using 'part' in the (now) part.
+PartOfTwoLibraries/part_wrapped_script: Fail # Defining library name in the (now) part.
PartOfUriMismatch/example: Fail
PartOfUseUri/example: Fail
PartOrphan/analyzerCode: Fail # Analyzer can't handle this situation
+PartOrphan/part_wrapped_script: Fail # Already using 'part of' in the (now) part.
PatchClassTypeVariablesMismatch/analyzerCode: Fail
PatchClassTypeVariablesMismatch/example: Fail
PatchDeclarationMismatch/analyzerCode: Fail
@@ -331,7 +438,9 @@
PreviousUseOfName/analyzerCode: Fail
PreviousUseOfName/example: Fail
PrivateNamedParameter/example: Fail
+RedirectingConstructorWithBody/part_wrapped_script1: Fail
RedirectingConstructorWithBody/script1: Fail
+RedirectionInNonFactory/part_wrapped_script1: Fail
RedirectionInNonFactory/script1: Fail
RedirectionTargetNotFound/example: Fail
RethrowNotCatch/example: Fail
@@ -381,6 +490,7 @@
TooManyArguments/example: Fail
TypeAfterVar/example: Fail
TypeArgumentMismatch/example: Fail
+TypeArgumentsOnTypeVariable/part_wrapped_script1: Fail
TypeArgumentsOnTypeVariable/script1: Fail
TypeNotFound/example: Fail
TypeVariableDuplicatedName/example: Fail
@@ -388,13 +498,26 @@
TypeVariableInStaticContext/declaration2: Fail # Unfortunate message from outline phase.
TypeVariableInStaticContext/declaration3: Fail # Unfortunate message from outline phase.
TypeVariableInStaticContext/declaration4: Fail # Unfortunate message from outline phase.
+TypeVariableInStaticContext/part_wrapped_declaration1: Fail
+TypeVariableInStaticContext/part_wrapped_declaration2: Fail
+TypeVariableInStaticContext/part_wrapped_declaration3: Fail
+TypeVariableInStaticContext/part_wrapped_declaration4: Fail
TypeVariableSameNameAsEnclosing/example: Fail
TypedefNotFunction/example: Fail
+UnexpectedToken/part_wrapped_script1: Fail
UnexpectedToken/script1: Fail
+UnmatchedToken/part_wrapped_script1: Fail
+UnmatchedToken/part_wrapped_script3: Fail
UnmatchedToken/script1: Fail
UnmatchedToken/script3: Fail
Unspecified/analyzerCode: Fail
Unspecified/example: Fail
+UnterminatedString/part_wrapped_script2: Fail
+UnterminatedString/part_wrapped_script4: Fail
+UnterminatedString/part_wrapped_script5: Fail
+UnterminatedString/part_wrapped_script6: Fail
+UnterminatedString/part_wrapped_script7: Fail
+UnterminatedString/part_wrapped_script8: Fail
UnterminatedString/script2: Fail
UnterminatedString/script4: Fail
UnterminatedString/script5: Fail
@@ -403,6 +526,8 @@
UnterminatedString/script8: Fail
UnterminatedToken/analyzerCode: Fail
UnterminatedToken/example: Fail
+UntranslatableUri/part_wrapped_script: Fail # Importing file in the (now) part.
+VarAsTypeName/part_wrapped_script1: Fail
VarAsTypeName/script1: Fail # Too many problems
WebLiteralCannotBeRepresentedExactly/analyzerCode: Fail
WebLiteralCannotBeRepresentedExactly/example: Fail
diff --git a/pkg/front_end/test/fasta/messages_test.dart b/pkg/front_end/test/fasta/messages_test.dart
index de25e18..f0141c1 100644
--- a/pkg/front_end/test/fasta/messages_test.dart
+++ b/pkg/front_end/test/fasta/messages_test.dart
@@ -213,6 +213,11 @@
for (Example example in examples) {
yield createDescription(example.name, example, null);
}
+ // "Wrap" example as a part.
+ for (Example example in examples) {
+ yield createDescription("part_wrapped_${example.name}",
+ new PartWrapExample("part_wrapped_${example.name}", name, example), null);
+ }
yield createDescription(
"knownKeys",
@@ -312,8 +317,10 @@
Uint8List get bytes;
Map<String, Uint8List> get scripts {
- return {"main.dart": bytes};
+ return {mainFilename: bytes};
}
+
+ String get mainFilename => "main.dart";
}
class BytesExample extends Example {
@@ -418,11 +425,57 @@
});
return scriptFiles;
} else {
- return {"main.dart": new Uint8List.fromList(utf8.encode(script))};
+ return {mainFilename: new Uint8List.fromList(utf8.encode(script))};
}
}
}
+class PartWrapExample extends Example {
+ final Example example;
+ PartWrapExample(String name, String code, this.example) : super(name, code);
+
+ @override
+ Uint8List get bytes => throw "Unsupported: PartWrapExample.bytes";
+
+ @override
+ String get mainFilename => "main_wrapped.dart";
+
+ @override
+ Map<String, Uint8List> get scripts {
+ Map<String, Uint8List> wrapped = example.scripts;
+
+ var scriptFiles = <String, Uint8List>{};
+ scriptFiles.addAll(wrapped);
+
+ // Create a new main file
+ // TODO: Technically we should find a un-used name.
+ if (scriptFiles.containsKey(mainFilename)) {
+ throw "Framework failure: "
+ "Wanted to create wrapper file, but the file alread exists!";
+ }
+ scriptFiles[mainFilename] = new Uint8List.fromList(utf8.encode("""
+ part "${example.mainFilename}";
+ """));
+
+ // Modify the original main file to be part of the wrapper and add lots of
+ // gunk so every actual position in the file is not a valid position in the
+ // wrapper.
+ scriptFiles[example.mainFilename] = new Uint8List.fromList(utf8.encode("""
+ part of "${mainFilename}";
+ // La la la la la la la la la la la la la.
+ // La la la la la la la la la la la la la.
+ // La la la la la la la la la la la la la.
+ // La la la la la la la la la la la la la.
+ // La la la la la la la la la la la la la.
+ """) + scriptFiles[example.mainFilename]);
+
+ return scriptFiles;
+ }
+
+ @override
+ YamlNode get node => example.node;
+}
+
class Validate extends Step<MessageTestDescription, Example, MessageTestSuite> {
const Validate();
@@ -450,7 +503,8 @@
Uri uri = suite.fileSystem.currentDirectory.resolve("$dir/$fileName");
suite.fileSystem.entityForUri(uri).writeAsBytesSync(bytes);
});
- Uri main = suite.fileSystem.currentDirectory.resolve("$dir/main.dart");
+ Uri main = suite.fileSystem.currentDirectory
+ .resolve("$dir/${example.mainFilename}");
Uri output =
suite.fileSystem.currentDirectory.resolve("$dir/main.dart.dill");