Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1293)

Unified Diff: pkg/analyzer/test/generated/parser_test.dart

Issue 2703553003: Create a new class for parser tests that test top level constructs. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/generated/parser_test.dart
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 914abd0a90b89b85cada166e116c469900886531..4db306b5f39087200664edd2448ba1521fc5daab 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -30,6 +30,7 @@ main() {
defineReflectiveTests(NonErrorParserTest);
defineReflectiveTests(RecoveryParserTest);
defineReflectiveTests(SimpleParserTest);
+ defineReflectiveTests(TopLevelParserTest);
});
}
@@ -2942,7 +2943,9 @@ class NonErrorParserTest extends ParserTestCase {
* Implementation of [AbstractParserTestCase] specialized for testing the
* analyzer parser.
*/
-class ParserTestCase extends EngineTestCase implements AbstractParserTestCase {
+class ParserTestCase extends EngineTestCase
+ with ParserTestHelpers
+ implements AbstractParserTestCase {
/**
* A flag indicating whether parser is to parse function bodies.
*/
@@ -3176,6 +3179,29 @@ class ParserTestCase extends EngineTestCase implements AbstractParserTestCase {
}
/**
+ * Helper methods that aid in parser tests.
+ *
+ * Intended to be mixed in to parser test case classes.
+ */
+class ParserTestHelpers {
+ void expectCommentText(Comment comment, String expectedText) {
+ expect(comment.beginToken, same(comment.endToken));
+ expect(comment.beginToken.lexeme, expectedText);
+ }
+
+ void expectDottedName(DottedName name, List<String> expectedComponents) {
+ int count = expectedComponents.length;
+ NodeList<SimpleIdentifier> components = name.components;
+ expect(components, hasLength(count));
+ for (int i = 0; i < count; i++) {
+ SimpleIdentifier component = components[i];
+ expect(component, isNotNull);
+ expect(component.name, expectedComponents[i]);
+ }
+ }
+}
+
+/**
* The class `RecoveryParserTest` defines parser tests that test the parsing of invalid code
* sequences to ensure that the correct recovery steps are taken in the parser.
*/
@@ -4491,49 +4517,6 @@ class SimpleParserTest extends ParserTestCase {
expect(literal.isSynthetic, isTrue);
}
- void test_function_literal_allowed_at_toplevel() {
- parseCompilationUnit("var x = () {};");
- }
-
- void
- test_function_literal_allowed_in_ArgumentList_in_ConstructorFieldInitializer() {
- parseCompilationUnit("class C { C() : a = f(() {}); }");
- }
-
- void
- test_function_literal_allowed_in_IndexExpression_in_ConstructorFieldInitializer() {
- parseCompilationUnit("class C { C() : a = x[() {}]; }");
- }
-
- void
- test_function_literal_allowed_in_ListLiteral_in_ConstructorFieldInitializer() {
- parseCompilationUnit("class C { C() : a = [() {}]; }");
- }
-
- void
- test_function_literal_allowed_in_MapLiteral_in_ConstructorFieldInitializer() {
- parseCompilationUnit("class C { C() : a = {'key': () {}}; }");
- }
-
- void
- test_function_literal_allowed_in_ParenthesizedExpression_in_ConstructorFieldInitializer() {
- parseCompilationUnit("class C { C() : a = (() {}); }");
- }
-
- void
- test_function_literal_allowed_in_StringInterpolation_in_ConstructorFieldInitializer() {
- parseCompilationUnit("class C { C() : a = \"\${(){}}\"; }");
- }
-
- void test_import_as_show() {
- parseCompilationUnit("import 'dart:math' as M show E;");
- }
-
- void test_import_show_hide() {
- parseCompilationUnit(
- "import 'import1_lib.dart' show hide, show hide ugly;");
- }
-
void test_isFunctionDeclaration_nameButNoReturn_block() {
expect(_isFunctionDeclaration("f() {}"), isTrue);
}
@@ -5734,349 +5717,126 @@ class SimpleParserTest extends ParserTestCase {
expect(section.propertyName, isNotNull);
}
- void test_parseClassDeclaration_abstract() {
- createParser('abstract class A {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
+ void test_parseClassMember_constructor_withInitializers() {
+ // TODO(brianwilkerson) Test other kinds of class members: fields, getters
+ // and setters.
+ createParser('C(_, _\$, this.__) : _a = _ + _\$ {}');
+ ClassMember member = parser.parseClassMember('C');
expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassDeclaration>());
- ClassDeclaration declaration = member;
- expect(declaration.documentationComment, isNull);
- expect(declaration.abstractKeyword, isNotNull);
- expect(declaration.extendsClause, isNull);
- expect(declaration.implementsClause, isNull);
- expect(declaration.classKeyword, isNotNull);
- expect(declaration.leftBracket, isNotNull);
- expect(declaration.name, isNotNull);
- expect(declaration.members, hasLength(0));
- expect(declaration.rightBracket, isNotNull);
- expect(declaration.typeParameters, isNull);
+ expect(member, new isInstanceOf<ConstructorDeclaration>());
+ ConstructorDeclaration constructor = member;
+ expect(constructor.body, isNotNull);
+ expect(constructor.separator, isNotNull);
+ expect(constructor.externalKeyword, isNull);
+ expect(constructor.constKeyword, isNull);
+ expect(constructor.factoryKeyword, isNull);
+ expect(constructor.name, isNull);
+ expect(constructor.parameters, isNotNull);
+ expect(constructor.period, isNull);
+ expect(constructor.returnType, isNotNull);
+ expect(constructor.initializers, hasLength(1));
}
- void test_parseClassDeclaration_empty() {
- createParser('class A {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
+ void test_parseClassMember_field_covariant() {
+ createParser('covariant T f;');
+ ClassMember member = parser.parseClassMember('C');
expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassDeclaration>());
- ClassDeclaration declaration = member;
- expect(declaration.documentationComment, isNull);
- expect(declaration.abstractKeyword, isNull);
- expect(declaration.extendsClause, isNull);
- expect(declaration.implementsClause, isNull);
- expect(declaration.classKeyword, isNotNull);
- expect(declaration.leftBracket, isNotNull);
- expect(declaration.name, isNotNull);
- expect(declaration.members, hasLength(0));
- expect(declaration.rightBracket, isNotNull);
- expect(declaration.typeParameters, isNull);
+ expect(member, new isInstanceOf<FieldDeclaration>());
+ FieldDeclaration field = member;
+ expect(field.covariantKeyword, isNotNull);
+ expect(field.documentationComment, isNull);
+ expect(field.metadata, hasLength(0));
+ expect(field.staticKeyword, isNull);
+ VariableDeclarationList list = field.fields;
+ expect(list, isNotNull);
+ NodeList<VariableDeclaration> variables = list.variables;
+ expect(variables, hasLength(1));
+ VariableDeclaration variable = variables[0];
+ expect(variable.name, isNotNull);
}
- void test_parseClassDeclaration_extends() {
- createParser('class A extends B {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
+ void test_parseClassMember_field_instance_prefixedType() {
+ createParser('p.A f;');
+ ClassMember member = parser.parseClassMember('C');
expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassDeclaration>());
- ClassDeclaration declaration = member;
- expect(declaration.documentationComment, isNull);
- expect(declaration.abstractKeyword, isNull);
- expect(declaration.extendsClause, isNotNull);
- expect(declaration.implementsClause, isNull);
- expect(declaration.classKeyword, isNotNull);
- expect(declaration.leftBracket, isNotNull);
- expect(declaration.name, isNotNull);
- expect(declaration.members, hasLength(0));
- expect(declaration.rightBracket, isNotNull);
- expect(declaration.typeParameters, isNull);
+ expect(member, new isInstanceOf<FieldDeclaration>());
+ FieldDeclaration field = member;
+ expect(field.covariantKeyword, isNull);
+ expect(field.documentationComment, isNull);
+ expect(field.metadata, hasLength(0));
+ expect(field.staticKeyword, isNull);
+ VariableDeclarationList list = field.fields;
+ expect(list, isNotNull);
+ NodeList<VariableDeclaration> variables = list.variables;
+ expect(variables, hasLength(1));
+ VariableDeclaration variable = variables[0];
+ expect(variable.name, isNotNull);
}
- void test_parseClassDeclaration_extendsAndImplements() {
- createParser('class A extends B implements C {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
+ void test_parseClassMember_field_namedGet() {
+ createParser('var get;');
+ ClassMember member = parser.parseClassMember('C');
expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassDeclaration>());
- ClassDeclaration declaration = member;
- expect(declaration.documentationComment, isNull);
- expect(declaration.abstractKeyword, isNull);
- expect(declaration.extendsClause, isNotNull);
- expect(declaration.implementsClause, isNotNull);
- expect(declaration.classKeyword, isNotNull);
- expect(declaration.leftBracket, isNotNull);
- expect(declaration.name, isNotNull);
- expect(declaration.members, hasLength(0));
- expect(declaration.rightBracket, isNotNull);
- expect(declaration.typeParameters, isNull);
+ expect(member, new isInstanceOf<FieldDeclaration>());
+ FieldDeclaration field = member;
+ expect(field.covariantKeyword, isNull);
+ expect(field.documentationComment, isNull);
+ expect(field.metadata, hasLength(0));
+ expect(field.staticKeyword, isNull);
+ VariableDeclarationList list = field.fields;
+ expect(list, isNotNull);
+ NodeList<VariableDeclaration> variables = list.variables;
+ expect(variables, hasLength(1));
+ VariableDeclaration variable = variables[0];
+ expect(variable.name, isNotNull);
}
- void test_parseClassDeclaration_extendsAndWith() {
- createParser('class A extends B with C {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
+ void test_parseClassMember_field_namedOperator() {
+ createParser('var operator;');
+ ClassMember member = parser.parseClassMember('C');
expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassDeclaration>());
- ClassDeclaration declaration = member;
- expect(declaration.documentationComment, isNull);
- expect(declaration.abstractKeyword, isNull);
- expect(declaration.classKeyword, isNotNull);
- expect(declaration.name, isNotNull);
- expect(declaration.typeParameters, isNull);
- expect(declaration.extendsClause, isNotNull);
- expect(declaration.withClause, isNotNull);
- expect(declaration.implementsClause, isNull);
- expect(declaration.leftBracket, isNotNull);
- expect(declaration.members, hasLength(0));
- expect(declaration.rightBracket, isNotNull);
+ expect(member, new isInstanceOf<FieldDeclaration>());
+ FieldDeclaration field = member;
+ expect(field.covariantKeyword, isNull);
+ expect(field.documentationComment, isNull);
+ expect(field.metadata, hasLength(0));
+ expect(field.staticKeyword, isNull);
+ VariableDeclarationList list = field.fields;
+ expect(list, isNotNull);
+ NodeList<VariableDeclaration> variables = list.variables;
+ expect(variables, hasLength(1));
+ VariableDeclaration variable = variables[0];
+ expect(variable.name, isNotNull);
}
- void test_parseClassDeclaration_extendsAndWithAndImplements() {
- createParser('class A extends B with C implements D {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
+ void test_parseClassMember_field_namedOperator_withAssignment() {
+ createParser('var operator = (5);');
+ ClassMember member = parser.parseClassMember('C');
expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassDeclaration>());
- ClassDeclaration declaration = member;
- expect(declaration.documentationComment, isNull);
- expect(declaration.abstractKeyword, isNull);
- expect(declaration.classKeyword, isNotNull);
- expect(declaration.name, isNotNull);
- expect(declaration.typeParameters, isNull);
- expect(declaration.extendsClause, isNotNull);
- expect(declaration.withClause, isNotNull);
- expect(declaration.implementsClause, isNotNull);
- expect(declaration.leftBracket, isNotNull);
- expect(declaration.members, hasLength(0));
- expect(declaration.rightBracket, isNotNull);
+ expect(member, new isInstanceOf<FieldDeclaration>());
+ FieldDeclaration field = member;
+ expect(field.covariantKeyword, isNull);
+ expect(field.documentationComment, isNull);
+ expect(field.metadata, hasLength(0));
+ expect(field.staticKeyword, isNull);
+ VariableDeclarationList list = field.fields;
+ expect(list, isNotNull);
+ NodeList<VariableDeclaration> variables = list.variables;
+ expect(variables, hasLength(1));
+ VariableDeclaration variable = variables[0];
+ expect(variable.name, isNotNull);
+ expect(variable.initializer, isNotNull);
}
- void test_parseClassDeclaration_implements() {
- createParser('class A implements C {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassDeclaration>());
- ClassDeclaration declaration = member;
- expect(declaration.documentationComment, isNull);
- expect(declaration.abstractKeyword, isNull);
- expect(declaration.extendsClause, isNull);
- expect(declaration.implementsClause, isNotNull);
- expect(declaration.classKeyword, isNotNull);
- expect(declaration.leftBracket, isNotNull);
- expect(declaration.name, isNotNull);
- expect(declaration.members, hasLength(0));
- expect(declaration.rightBracket, isNotNull);
- expect(declaration.typeParameters, isNull);
- }
-
- void test_parseClassDeclaration_native() {
- createParser('class A native "nativeValue" {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassDeclaration>());
- ClassDeclaration declaration = member;
- NativeClause nativeClause = declaration.nativeClause;
- expect(nativeClause, isNotNull);
- expect(nativeClause.nativeKeyword, isNotNull);
- expect(nativeClause.name.stringValue, "nativeValue");
- expect(nativeClause.beginToken, same(nativeClause.nativeKeyword));
- expect(nativeClause.endToken, same(nativeClause.name.endToken));
- }
-
- void test_parseClassDeclaration_nonEmpty() {
- createParser('class A {var f;}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassDeclaration>());
- ClassDeclaration declaration = member;
- expect(declaration.documentationComment, isNull);
- expect(declaration.abstractKeyword, isNull);
- expect(declaration.extendsClause, isNull);
- expect(declaration.implementsClause, isNull);
- expect(declaration.classKeyword, isNotNull);
- expect(declaration.leftBracket, isNotNull);
- expect(declaration.name, isNotNull);
- expect(declaration.members, hasLength(1));
- expect(declaration.rightBracket, isNotNull);
- expect(declaration.typeParameters, isNull);
- }
-
- void test_parseClassDeclaration_typeAlias_implementsC() {
- createParser('class A = Object with B implements C;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassTypeAlias>());
- ClassTypeAlias typeAlias = member;
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.withClause, isNotNull);
- expect(typeAlias.implementsClause, isNotNull);
- expect(typeAlias.implementsClause.implementsKeyword, isNotNull);
- expect(typeAlias.implementsClause.interfaces.length, 1);
- expect(typeAlias.semicolon, isNotNull);
- }
-
- void test_parseClassDeclaration_typeAlias_withB() {
- createParser('class A = Object with B;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassTypeAlias>());
- ClassTypeAlias typeAlias = member;
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.withClause, isNotNull);
- expect(typeAlias.withClause.withKeyword, isNotNull);
- expect(typeAlias.withClause.mixinTypes.length, 1);
- expect(typeAlias.implementsClause, isNull);
- expect(typeAlias.semicolon, isNotNull);
- }
-
- void test_parseClassDeclaration_typeParameters() {
- createParser('class A<B> {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassDeclaration>());
- ClassDeclaration declaration = member;
- expect(declaration.documentationComment, isNull);
- expect(declaration.abstractKeyword, isNull);
- expect(declaration.extendsClause, isNull);
- expect(declaration.implementsClause, isNull);
- expect(declaration.classKeyword, isNotNull);
- expect(declaration.leftBracket, isNotNull);
- expect(declaration.name, isNotNull);
- expect(declaration.members, hasLength(0));
- expect(declaration.rightBracket, isNotNull);
- expect(declaration.typeParameters, isNotNull);
- expect(declaration.typeParameters.typeParameters, hasLength(1));
- }
-
- void test_parseClassMember_constructor_withInitializers() {
- // TODO(brianwilkerson) Test other kinds of class members: fields, getters
- // and setters.
- createParser('C(_, _\$, this.__) : _a = _ + _\$ {}');
- ClassMember member = parser.parseClassMember('C');
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<ConstructorDeclaration>());
- ConstructorDeclaration constructor = member;
- expect(constructor.body, isNotNull);
- expect(constructor.separator, isNotNull);
- expect(constructor.externalKeyword, isNull);
- expect(constructor.constKeyword, isNull);
- expect(constructor.factoryKeyword, isNull);
- expect(constructor.name, isNull);
- expect(constructor.parameters, isNotNull);
- expect(constructor.period, isNull);
- expect(constructor.returnType, isNotNull);
- expect(constructor.initializers, hasLength(1));
- }
-
- void test_parseClassMember_field_covariant() {
- createParser('covariant T f;');
- ClassMember member = parser.parseClassMember('C');
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<FieldDeclaration>());
- FieldDeclaration field = member;
- expect(field.covariantKeyword, isNotNull);
- expect(field.documentationComment, isNull);
- expect(field.metadata, hasLength(0));
- expect(field.staticKeyword, isNull);
- VariableDeclarationList list = field.fields;
- expect(list, isNotNull);
- NodeList<VariableDeclaration> variables = list.variables;
- expect(variables, hasLength(1));
- VariableDeclaration variable = variables[0];
- expect(variable.name, isNotNull);
- }
-
- void test_parseClassMember_field_instance_prefixedType() {
- createParser('p.A f;');
- ClassMember member = parser.parseClassMember('C');
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<FieldDeclaration>());
- FieldDeclaration field = member;
- expect(field.covariantKeyword, isNull);
- expect(field.documentationComment, isNull);
- expect(field.metadata, hasLength(0));
- expect(field.staticKeyword, isNull);
- VariableDeclarationList list = field.fields;
- expect(list, isNotNull);
- NodeList<VariableDeclaration> variables = list.variables;
- expect(variables, hasLength(1));
- VariableDeclaration variable = variables[0];
- expect(variable.name, isNotNull);
- }
-
- void test_parseClassMember_field_namedGet() {
- createParser('var get;');
- ClassMember member = parser.parseClassMember('C');
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<FieldDeclaration>());
- FieldDeclaration field = member;
- expect(field.covariantKeyword, isNull);
- expect(field.documentationComment, isNull);
- expect(field.metadata, hasLength(0));
- expect(field.staticKeyword, isNull);
- VariableDeclarationList list = field.fields;
- expect(list, isNotNull);
- NodeList<VariableDeclaration> variables = list.variables;
- expect(variables, hasLength(1));
- VariableDeclaration variable = variables[0];
- expect(variable.name, isNotNull);
- }
-
- void test_parseClassMember_field_namedOperator() {
- createParser('var operator;');
- ClassMember member = parser.parseClassMember('C');
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<FieldDeclaration>());
- FieldDeclaration field = member;
- expect(field.covariantKeyword, isNull);
- expect(field.documentationComment, isNull);
- expect(field.metadata, hasLength(0));
- expect(field.staticKeyword, isNull);
- VariableDeclarationList list = field.fields;
- expect(list, isNotNull);
- NodeList<VariableDeclaration> variables = list.variables;
- expect(variables, hasLength(1));
- VariableDeclaration variable = variables[0];
- expect(variable.name, isNotNull);
- }
-
- void test_parseClassMember_field_namedOperator_withAssignment() {
- createParser('var operator = (5);');
- ClassMember member = parser.parseClassMember('C');
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<FieldDeclaration>());
- FieldDeclaration field = member;
- expect(field.covariantKeyword, isNull);
- expect(field.documentationComment, isNull);
- expect(field.metadata, hasLength(0));
- expect(field.staticKeyword, isNull);
- VariableDeclarationList list = field.fields;
- expect(list, isNotNull);
- NodeList<VariableDeclaration> variables = list.variables;
- expect(variables, hasLength(1));
- VariableDeclaration variable = variables[0];
- expect(variable.name, isNotNull);
- expect(variable.initializer, isNotNull);
- }
-
- void test_parseClassMember_field_namedSet() {
- createParser('var set;');
- ClassMember member = parser.parseClassMember('C');
+ void test_parseClassMember_field_namedSet() {
+ createParser('var set;');
+ ClassMember member = parser.parseClassMember('C');
expectNotNullIfNoErrors(member);
listener.assertNoErrors();
expect(member, new isInstanceOf<FieldDeclaration>());
@@ -7260,7181 +7020,7438 @@ void''');
expect(reference.offset, 15);
}
- void test_parseCompilationUnit_abstractAsPrefix_parameterized() {
- createParser('abstract<dynamic> _abstract = new abstract.A();');
- CompilationUnit unit = parser.parseCompilationUnit2();
- expectNotNullIfNoErrors(unit);
+ void test_parseConditionalExpression() {
+ createParser('x ? y : z');
+ ConditionalExpression expression = parser.parseConditionalExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(0));
- expect(unit.declarations, hasLength(1));
- }
-
- void test_parseCompilationUnit_builtIn_asFunctionName() {
- parseCompilationUnit('abstract(x) => 0;');
- parseCompilationUnit('as(x) => 0;');
- parseCompilationUnit('dynamic(x) => 0;');
- parseCompilationUnit('export(x) => 0;');
- parseCompilationUnit('external(x) => 0;');
- parseCompilationUnit('factory(x) => 0;');
- parseCompilationUnit('get(x) => 0;');
- parseCompilationUnit('implements(x) => 0;');
- parseCompilationUnit('import(x) => 0;');
- parseCompilationUnit('library(x) => 0;');
- parseCompilationUnit('operator(x) => 0;');
- parseCompilationUnit('part(x) => 0;');
- parseCompilationUnit('set(x) => 0;');
- parseCompilationUnit('static(x) => 0;');
- parseCompilationUnit('typedef(x) => 0;');
+ expect(expression.condition, isNotNull);
+ expect(expression.question, isNotNull);
+ expect(expression.thenExpression, isNotNull);
+ expect(expression.colon, isNotNull);
+ expect(expression.elseExpression, isNotNull);
}
- void test_parseCompilationUnit_directives_multiple() {
- createParser("library l;\npart 'a.dart';");
- CompilationUnit unit = parser.parseCompilationUnit2();
- expectNotNullIfNoErrors(unit);
+ void test_parseConfiguration_noOperator_dottedIdentifier() {
+ createParser("if (a.b) 'c.dart'");
+ Configuration configuration = parser.parseConfiguration();
+ expectNotNullIfNoErrors(configuration);
listener.assertNoErrors();
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(2));
- expect(unit.declarations, hasLength(0));
+ expect(configuration.ifKeyword, isNotNull);
+ expect(configuration.leftParenthesis, isNotNull);
+ expectDottedName(configuration.name, ["a", "b"]);
+ expect(configuration.equalToken, isNull);
+ expect(configuration.value, isNull);
+ expect(configuration.rightParenthesis, isNotNull);
+ expect(configuration.uri, isNotNull);
}
- void test_parseCompilationUnit_directives_single() {
- createParser('library l;');
- CompilationUnit unit = parser.parseCompilationUnit2();
- expectNotNullIfNoErrors(unit);
+ void test_parseConfiguration_noOperator_simpleIdentifier() {
+ createParser("if (a) 'b.dart'");
+ Configuration configuration = parser.parseConfiguration();
+ expectNotNullIfNoErrors(configuration);
listener.assertNoErrors();
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(1));
- expect(unit.declarations, hasLength(0));
+ expect(configuration.ifKeyword, isNotNull);
+ expect(configuration.leftParenthesis, isNotNull);
+ expectDottedName(configuration.name, ["a"]);
+ expect(configuration.equalToken, isNull);
+ expect(configuration.value, isNull);
+ expect(configuration.rightParenthesis, isNotNull);
+ expect(configuration.uri, isNotNull);
}
- void test_parseCompilationUnit_empty() {
- createParser('');
- CompilationUnit unit = parser.parseCompilationUnit2();
- expectNotNullIfNoErrors(unit);
+ void test_parseConfiguration_operator_dottedIdentifier() {
+ createParser("if (a.b == 'c') 'd.dart'");
+ Configuration configuration = parser.parseConfiguration();
+ expectNotNullIfNoErrors(configuration);
listener.assertNoErrors();
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(0));
- expect(unit.declarations, hasLength(0));
+ expect(configuration.ifKeyword, isNotNull);
+ expect(configuration.leftParenthesis, isNotNull);
+ expectDottedName(configuration.name, ["a", "b"]);
+ expect(configuration.equalToken, isNotNull);
+ expect(configuration.value, isNotNull);
+ expect(configuration.rightParenthesis, isNotNull);
+ expect(configuration.uri, isNotNull);
}
- void test_parseCompilationUnit_exportAsPrefix() {
- createParser('export.A _export = new export.A();');
- CompilationUnit unit = parser.parseCompilationUnit2();
- expectNotNullIfNoErrors(unit);
+ void test_parseConfiguration_operator_simpleIdentifier() {
+ createParser("if (a == 'b') 'c.dart'");
+ Configuration configuration = parser.parseConfiguration();
+ expectNotNullIfNoErrors(configuration);
listener.assertNoErrors();
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(0));
- expect(unit.declarations, hasLength(1));
+ expect(configuration.ifKeyword, isNotNull);
+ expect(configuration.leftParenthesis, isNotNull);
+ expectDottedName(configuration.name, ["a"]);
+ expect(configuration.equalToken, isNotNull);
+ expect(configuration.value, isNotNull);
+ expect(configuration.rightParenthesis, isNotNull);
+ expect(configuration.uri, isNotNull);
}
- void test_parseCompilationUnit_exportAsPrefix_parameterized() {
- createParser('export<dynamic> _export = new export.A();');
- CompilationUnit unit = parser.parseCompilationUnit2();
- expectNotNullIfNoErrors(unit);
+ void test_parseConstExpression_instanceCreation() {
+ createParser('const A()');
+ Expression expression = parser.parseConstExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(0));
- expect(unit.declarations, hasLength(1));
+ expect(expression, new isInstanceOf<InstanceCreationExpression>());
+ InstanceCreationExpression instanceCreation = expression;
+ expect(instanceCreation.keyword, isNotNull);
+ ConstructorName name = instanceCreation.constructorName;
+ expect(name, isNotNull);
+ expect(name.type, isNotNull);
+ expect(name.period, isNull);
+ expect(name.name, isNull);
+ expect(instanceCreation.argumentList, isNotNull);
}
- void test_parseCompilationUnit_operatorAsPrefix_parameterized() {
- createParser('operator<dynamic> _operator = new operator.A();');
- CompilationUnit unit = parser.parseCompilationUnit2();
- expectNotNullIfNoErrors(unit);
+ void test_parseConstExpression_listLiteral_typed() {
+ createParser('const <A> []');
+ Expression expression = parser.parseConstExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(0));
- expect(unit.declarations, hasLength(1));
+ expect(expression, new isInstanceOf<ListLiteral>());
+ ListLiteral literal = expression;
+ expect(literal.constKeyword, isNotNull);
+ expect(literal.typeArguments, isNotNull);
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.elements, hasLength(0));
+ expect(literal.rightBracket, isNotNull);
}
- void test_parseCompilationUnit_script() {
- createParser('#! /bin/dart');
- CompilationUnit unit = parser.parseCompilationUnit2();
- expectNotNullIfNoErrors(unit);
+ void test_parseConstExpression_listLiteral_typed_genericComment() {
+ enableGenericMethodComments = true;
+ createParser('const /*<A>*/ []');
+ Expression expression = parser.parseConstExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(unit.scriptTag, isNotNull);
- expect(unit.directives, hasLength(0));
- expect(unit.declarations, hasLength(0));
+ expect(expression, new isInstanceOf<ListLiteral>());
+ ListLiteral literal = expression;
+ expect(literal.constKeyword, isNotNull);
+ expect(literal.typeArguments, isNotNull);
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.elements, hasLength(0));
+ expect(literal.rightBracket, isNotNull);
}
- void test_parseCompilationUnit_skipFunctionBody_withInterpolation() {
- ParserTestCase.parseFunctionBodies = false;
- createParser('f() { "\${n}"; }');
- CompilationUnit unit = parser.parseCompilationUnit2();
- expectNotNullIfNoErrors(unit);
+ void test_parseConstExpression_listLiteral_untyped() {
+ createParser('const []');
+ Expression expression = parser.parseConstExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(unit.scriptTag, isNull);
- expect(unit.declarations, hasLength(1));
+ expect(expression, new isInstanceOf<ListLiteral>());
+ ListLiteral literal = expression;
+ expect(literal.constKeyword, isNotNull);
+ expect(literal.typeArguments, isNull);
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.elements, hasLength(0));
+ expect(literal.rightBracket, isNotNull);
}
- void test_parseCompilationUnit_topLevelDeclaration() {
- createParser('class A {}');
- CompilationUnit unit = parser.parseCompilationUnit2();
- expectNotNullIfNoErrors(unit);
+ void test_parseConstExpression_mapLiteral_typed() {
+ createParser('const <A, B> {}');
+ Expression expression = parser.parseConstExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(0));
- expect(unit.declarations, hasLength(1));
+ expect(expression, new isInstanceOf<MapLiteral>());
+ MapLiteral literal = expression;
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.entries, hasLength(0));
+ expect(literal.rightBracket, isNotNull);
+ expect(literal.typeArguments, isNotNull);
}
- void test_parseCompilationUnit_typedefAsPrefix() {
- createParser('typedef.A _typedef = new typedef.A();');
- CompilationUnit unit = parser.parseCompilationUnit2();
- expectNotNullIfNoErrors(unit);
+ void test_parseConstExpression_mapLiteral_typed_genericComment() {
+ enableGenericMethodComments = true;
+ createParser('const /*<A, B>*/ {}');
+ Expression expression = parser.parseConstExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(0));
- expect(unit.declarations, hasLength(1));
+ expect(expression, new isInstanceOf<MapLiteral>());
+ MapLiteral literal = expression;
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.entries, hasLength(0));
+ expect(literal.rightBracket, isNotNull);
+ expect(literal.typeArguments, isNotNull);
}
- void test_parseCompilationUnitMember_abstractAsPrefix() {
- createParser('abstract.A _abstract = new abstract.A();');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseConstExpression_mapLiteral_untyped() {
+ createParser('const {}');
+ Expression expression = parser.parseConstExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
- TopLevelVariableDeclaration declaration = member;
- expect(declaration.semicolon, isNotNull);
- expect(declaration.variables, isNotNull);
+ expect(expression, new isInstanceOf<MapLiteral>());
+ MapLiteral literal = expression;
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.entries, hasLength(0));
+ expect(literal.rightBracket, isNotNull);
+ expect(literal.typeArguments, isNull);
}
- void test_parseCompilationUnitMember_class() {
- createParser('class A {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassDeclaration>());
- ClassDeclaration declaration = member;
- expect(declaration.name.name, "A");
- expect(declaration.members, hasLength(0));
+ void test_parseConstructor() {
+ // TODO(brianwilkerson) Implement tests for this method.
}
- void test_parseCompilationUnitMember_classTypeAlias() {
- createParser('abstract class A = B with C;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
+ void test_parseConstructor_assert() {
+ enableAssertInitializer = true;
+ createParser('C(x, y) : _x = x, assert (x < y), _y = y;');
+ ClassMember member = parser.parseClassMember('C');
expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassTypeAlias>());
- ClassTypeAlias declaration = member;
- expect(declaration.name.name, "A");
- expect(declaration.abstractKeyword, isNotNull);
+ expect(member, new isInstanceOf<ConstructorDeclaration>());
+ ConstructorDeclaration constructor = member as ConstructorDeclaration;
+ NodeList<ConstructorInitializer> initializers = constructor.initializers;
+ expect(initializers, hasLength(3));
+ ConstructorInitializer initializer = initializers[1];
+ expect(initializer, new isInstanceOf<AssertInitializer>());
+ AssertInitializer assertInitializer = initializer;
+ expect(assertInitializer.condition, isNotNull);
+ expect(assertInitializer.message, isNull);
}
- void test_parseCompilationUnitMember_constVariable() {
- createParser('const int x = 0;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
+ void test_parseConstructor_with_pseudo_function_literal() {
+ // "(b) {}" should not be misinterpreted as a function literal even though
+ // it looks like one.
+ createParser('C() : a = (b) {}');
+ ClassMember member = parser.parseClassMember('C');
expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
- TopLevelVariableDeclaration declaration = member;
- expect(declaration.semicolon, isNotNull);
- expect(declaration.variables, isNotNull);
+ expect(member, new isInstanceOf<ConstructorDeclaration>());
+ ConstructorDeclaration constructor = member as ConstructorDeclaration;
+ NodeList<ConstructorInitializer> initializers = constructor.initializers;
+ expect(initializers, hasLength(1));
+ ConstructorInitializer initializer = initializers[0];
+ EngineTestCase.assertInstanceOf((obj) => obj is ConstructorFieldInitializer,
+ ConstructorFieldInitializer, initializer);
+ EngineTestCase.assertInstanceOf(
+ (obj) => obj is ParenthesizedExpression,
+ ParenthesizedExpression,
+ (initializer as ConstructorFieldInitializer).expression);
+ EngineTestCase.assertInstanceOf(
+ (obj) => obj is BlockFunctionBody, BlockFunctionBody, constructor.body);
}
- void test_parseCompilationUnitMember_finalVariable() {
- createParser('final x = 0;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
- TopLevelVariableDeclaration declaration = member;
- expect(declaration.semicolon, isNotNull);
- expect(declaration.variables, isNotNull);
- }
-
- void test_parseCompilationUnitMember_function_external_noType() {
- createParser('external f();');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseConstructorFieldInitializer_qualified() {
+ createParser('this.a = b');
+ ConstructorFieldInitializer initializer =
+ parser.parseConstructorFieldInitializer(true);
+ expectNotNullIfNoErrors(initializer);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.externalKeyword, isNotNull);
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNull);
+ expect(initializer.equals, isNotNull);
+ expect(initializer.expression, isNotNull);
+ expect(initializer.fieldName, isNotNull);
+ expect(initializer.thisKeyword, isNotNull);
+ expect(initializer.period, isNotNull);
}
- void test_parseCompilationUnitMember_function_external_type() {
- createParser('external int f();');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseConstructorFieldInitializer_unqualified() {
+ createParser('a = b');
+ ConstructorFieldInitializer initializer =
+ parser.parseConstructorFieldInitializer(false);
+ expectNotNullIfNoErrors(initializer);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.externalKeyword, isNotNull);
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNull);
+ expect(initializer.equals, isNotNull);
+ expect(initializer.expression, isNotNull);
+ expect(initializer.fieldName, isNotNull);
+ expect(initializer.thisKeyword, isNull);
+ expect(initializer.period, isNull);
}
- void test_parseCompilationUnitMember_function_generic_noReturnType() {
- createParser('f<E>() {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseConstructorName_named_noPrefix() {
+ createParser('A.n;');
+ ConstructorName name = parser.parseConstructorName();
+ expectNotNullIfNoErrors(name);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.returnType, isNull);
- expect(declaration.functionExpression.typeParameters, isNotNull);
+ expect(name.type, isNotNull);
+ expect(name.period, isNull);
+ expect(name.name, isNull);
}
- void
- test_parseCompilationUnitMember_function_generic_noReturnType_annotated() {
- createParser('f<@a E>() {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseConstructorName_named_prefixed() {
+ createParser('p.A.n;');
+ ConstructorName name = parser.parseConstructorName();
+ expectNotNullIfNoErrors(name);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.returnType, isNull);
- expect(declaration.functionExpression.typeParameters, isNotNull);
+ expect(name.type, isNotNull);
+ expect(name.period, isNotNull);
+ expect(name.name, isNotNull);
}
- void test_parseCompilationUnitMember_function_generic_returnType() {
- createParser('E f<E>() {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseConstructorName_unnamed_noPrefix() {
+ createParser('A;');
+ ConstructorName name = parser.parseConstructorName();
+ expectNotNullIfNoErrors(name);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.returnType, isNotNull);
- expect(declaration.functionExpression.typeParameters, isNotNull);
+ expect(name.type, isNotNull);
+ expect(name.period, isNull);
+ expect(name.name, isNull);
}
- void test_parseCompilationUnitMember_function_generic_void() {
- createParser('void f<T>(T t) {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseConstructorName_unnamed_prefixed() {
+ createParser('p.A;');
+ ConstructorName name = parser.parseConstructorName();
+ expectNotNullIfNoErrors(name);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNull);
+ expect(name.type, isNotNull);
+ expect(name.period, isNull);
+ expect(name.name, isNull);
}
- void test_parseCompilationUnitMember_function_noType() {
- createParser('f() {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNull);
+ void test_parseContinueStatement_label() {
+ createParser('continue foo;');
+ ContinueStatement statement = parser.parseContinueStatement();
+ expectNotNullIfNoErrors(statement);
+ listener.assertErrorsWithCodes([ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]);
+ expect(statement.continueKeyword, isNotNull);
+ expect(statement.label, isNotNull);
+ expect(statement.semicolon, isNotNull);
}
- void test_parseCompilationUnitMember_function_type() {
- createParser('int f() {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNull);
+ void test_parseContinueStatement_noLabel() {
+ createParser('continue;');
+ ContinueStatement statement = parser.parseContinueStatement();
+ expectNotNullIfNoErrors(statement);
+ listener.assertErrorsWithCodes([ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]);
+ expect(statement.continueKeyword, isNotNull);
+ expect(statement.label, isNull);
+ expect(statement.semicolon, isNotNull);
}
- void test_parseCompilationUnitMember_function_void() {
- createParser('void f() {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseDocumentationComment_block() {
+ createParser('/** */ class');
+ Comment comment = parser
+ .parseDocumentationComment(parser.parseDocumentationCommentTokens());
+ expectNotNullIfNoErrors(comment);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.returnType, isNotNull);
+ expect(comment.isBlock, isFalse);
+ expect(comment.isDocumentation, isTrue);
+ expect(comment.isEndOfLine, isFalse);
}
- void test_parseCompilationUnitMember_getter_external_noType() {
- createParser('external get p;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseDocumentationComment_block_withReference() {
+ createParser('/** [a] */ class');
+ Comment comment = parser
+ .parseDocumentationComment(parser.parseDocumentationCommentTokens());
+ expectNotNullIfNoErrors(comment);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.externalKeyword, isNotNull);
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
+ expect(comment.isBlock, isFalse);
+ expect(comment.isDocumentation, isTrue);
+ expect(comment.isEndOfLine, isFalse);
+ NodeList<CommentReference> references = comment.references;
+ expect(references, hasLength(1));
+ CommentReference reference = references[0];
+ expect(reference, isNotNull);
+ expect(reference.offset, 5);
}
- void test_parseCompilationUnitMember_getter_external_type() {
- createParser('external int get p;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseDocumentationComment_endOfLine() {
+ createParser('/// \n/// \n class');
+ Comment comment = parser
+ .parseDocumentationComment(parser.parseDocumentationCommentTokens());
+ expectNotNullIfNoErrors(comment);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.externalKeyword, isNotNull);
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
+ expect(comment.isBlock, isFalse);
+ expect(comment.isDocumentation, isTrue);
+ expect(comment.isEndOfLine, isFalse);
}
- void test_parseCompilationUnitMember_getter_noType() {
- createParser('get p => 0;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseDoStatement() {
+ createParser('do {} while (x);');
+ DoStatement statement = parser.parseDoStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
+ expect(statement.doKeyword, isNotNull);
+ expect(statement.body, isNotNull);
+ expect(statement.whileKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.condition, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.semicolon, isNotNull);
}
- void test_parseCompilationUnitMember_getter_type() {
- createParser('int get p => 0;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseDottedName_multiple() {
+ createParser('a.b.c');
+ DottedName name = parser.parseDottedName();
+ expectNotNullIfNoErrors(name);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
+ expectDottedName(name, ["a", "b", "c"]);
}
- void test_parseCompilationUnitMember_setter_external_noType() {
- createParser('external set p(v);');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseDottedName_single() {
+ createParser('a');
+ DottedName name = parser.parseDottedName();
+ expectNotNullIfNoErrors(name);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.externalKeyword, isNotNull);
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
+ expectDottedName(name, ["a"]);
}
- void test_parseCompilationUnitMember_setter_external_type() {
- createParser('external void set p(int v);');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseEmptyStatement() {
+ createParser(';');
+ EmptyStatement statement = parser.parseEmptyStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.externalKeyword, isNotNull);
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
+ expect(statement.semicolon, isNotNull);
}
- void test_parseCompilationUnitMember_setter_noType() {
- createParser('set p(v) {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
+ void test_parseEqualityExpression_normal() {
+ createParser('x == y');
+ BinaryExpression expression = parser.parseEqualityExpression();
+ expectNotNullIfNoErrors(expression);
+ listener.assertNoErrors();
+ expect(expression.leftOperand, isNotNull);
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.EQ_EQ);
+ expect(expression.rightOperand, isNotNull);
}
- void test_parseCompilationUnitMember_setter_type() {
- createParser('void set p(int v) {}');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
+ void test_parseEqualityExpression_super() {
+ createParser('super == y');
+ BinaryExpression expression = parser.parseEqualityExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionDeclaration>());
- FunctionDeclaration declaration = member;
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
- expect(declaration.returnType, isNotNull);
+ expect(expression.leftOperand, new isInstanceOf<SuperExpression>());
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.EQ_EQ);
+ expect(expression.rightOperand, isNotNull);
}
- void test_parseCompilationUnitMember_typeAlias_abstract() {
- createParser('abstract class C = S with M;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassTypeAlias>());
- ClassTypeAlias typeAlias = member;
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name.name, "C");
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.equals, isNotNull);
- expect(typeAlias.abstractKeyword, isNotNull);
- expect(typeAlias.superclass.name.name, "S");
- expect(typeAlias.withClause, isNotNull);
- expect(typeAlias.implementsClause, isNull);
- expect(typeAlias.semicolon, isNotNull);
+ void test_parseExpression_assign() {
+ // TODO(brianwilkerson) Implement more tests for this method.
+ Expression expression = parseExpression('x = y');
+ expect(expression, new isInstanceOf<AssignmentExpression>());
+ AssignmentExpression assignmentExpression = expression;
+ expect(assignmentExpression.leftHandSide, isNotNull);
+ expect(assignmentExpression.operator, isNotNull);
+ expect(assignmentExpression.operator.type, TokenType.EQ);
+ expect(assignmentExpression.rightHandSide, isNotNull);
}
- void test_parseCompilationUnitMember_typeAlias_generic() {
- createParser('class C<E> = S<E> with M<E> implements I<E>;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassTypeAlias>());
- ClassTypeAlias typeAlias = member;
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name.name, "C");
- expect(typeAlias.typeParameters.typeParameters, hasLength(1));
- expect(typeAlias.equals, isNotNull);
- expect(typeAlias.abstractKeyword, isNull);
- expect(typeAlias.superclass.name.name, "S");
- expect(typeAlias.withClause, isNotNull);
- expect(typeAlias.implementsClause, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
+ void test_parseExpression_assign_compound() {
+ enableLazyAssignmentOperators = true;
+ Expression expression = parseExpression('x ||= y');
+ expect(expression, new isInstanceOf<AssignmentExpression>());
+ AssignmentExpression assignmentExpression = expression;
+ expect(assignmentExpression.leftHandSide, isNotNull);
+ expect(assignmentExpression.operator, isNotNull);
+ expect(assignmentExpression.operator.type, TokenType.BAR_BAR_EQ);
+ expect(assignmentExpression.rightHandSide, isNotNull);
}
- void test_parseCompilationUnitMember_typeAlias_implements() {
- createParser('class C = S with M implements I;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassTypeAlias>());
- ClassTypeAlias typeAlias = member;
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name.name, "C");
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.equals, isNotNull);
- expect(typeAlias.abstractKeyword, isNull);
- expect(typeAlias.superclass.name.name, "S");
- expect(typeAlias.withClause, isNotNull);
- expect(typeAlias.implementsClause, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
+ void test_parseExpression_comparison() {
+ Expression expression = parseExpression('--a.b == c');
+ expect(expression, new isInstanceOf<BinaryExpression>());
+ BinaryExpression binaryExpression = expression;
+ expect(binaryExpression.leftOperand, isNotNull);
+ expect(binaryExpression.operator, isNotNull);
+ expect(binaryExpression.operator.type, TokenType.EQ_EQ);
+ expect(binaryExpression.rightOperand, isNotNull);
}
- void test_parseCompilationUnitMember_typeAlias_noImplements() {
- createParser('class C = S with M;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<ClassTypeAlias>());
- ClassTypeAlias typeAlias = member;
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name.name, "C");
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.equals, isNotNull);
- expect(typeAlias.abstractKeyword, isNull);
- expect(typeAlias.superclass.name.name, "S");
- expect(typeAlias.withClause, isNotNull);
- expect(typeAlias.implementsClause, isNull);
- expect(typeAlias.semicolon, isNotNull);
+ void test_parseExpression_function_async() {
+ Expression expression = parseExpression('() async {}');
+ expect(expression, new isInstanceOf<FunctionExpression>());
+ FunctionExpression functionExpression = expression;
+ expect(functionExpression.body, isNotNull);
+ expect(functionExpression.body.isAsynchronous, isTrue);
+ expect(functionExpression.body.isGenerator, isFalse);
+ expect(functionExpression.parameters, isNotNull);
}
- void test_parseCompilationUnitMember_typedef() {
- createParser('typedef F();');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<FunctionTypeAlias>());
- FunctionTypeAlias typeAlias = member;
- expect(typeAlias.name.name, "F");
- expect(typeAlias.parameters.parameters, hasLength(0));
+ void test_parseExpression_function_asyncStar() {
+ Expression expression = parseExpression('() async* {}');
+ expect(expression, new isInstanceOf<FunctionExpression>());
+ FunctionExpression functionExpression = expression;
+ expect(functionExpression.body, isNotNull);
+ expect(functionExpression.body.isAsynchronous, isTrue);
+ expect(functionExpression.body.isGenerator, isTrue);
+ expect(functionExpression.parameters, isNotNull);
}
- void test_parseCompilationUnitMember_variable() {
- createParser('var x = 0;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
- TopLevelVariableDeclaration declaration = member;
- expect(declaration.semicolon, isNotNull);
- expect(declaration.variables, isNotNull);
+ void test_parseExpression_function_sync() {
+ Expression expression = parseExpression('() {}');
+ expect(expression, new isInstanceOf<FunctionExpression>());
+ FunctionExpression functionExpression = expression;
+ expect(functionExpression.body, isNotNull);
+ expect(functionExpression.body.isAsynchronous, isFalse);
+ expect(functionExpression.body.isGenerator, isFalse);
+ expect(functionExpression.parameters, isNotNull);
}
- void test_parseCompilationUnitMember_variableGet() {
- createParser('String get = null;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
- TopLevelVariableDeclaration declaration = member;
- expect(declaration.semicolon, isNotNull);
- expect(declaration.variables, isNotNull);
+ void test_parseExpression_function_syncStar() {
+ Expression expression = parseExpression('() sync* {}');
+ expect(expression, new isInstanceOf<FunctionExpression>());
+ FunctionExpression functionExpression = expression;
+ expect(functionExpression.body, isNotNull);
+ expect(functionExpression.body.isAsynchronous, isFalse);
+ expect(functionExpression.body.isGenerator, isTrue);
+ expect(functionExpression.parameters, isNotNull);
}
- void test_parseCompilationUnitMember_variableSet() {
- createParser('String set = null;');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertNoErrors();
- expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
- TopLevelVariableDeclaration declaration = member;
- expect(declaration.semicolon, isNotNull);
- expect(declaration.variables, isNotNull);
+ void test_parseExpression_invokeFunctionExpression() {
+ Expression expression = parseExpression('(a) {return a + a;} (3)');
+ expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
+ FunctionExpressionInvocation invocation = expression;
+ expect(invocation.function, new isInstanceOf<FunctionExpression>());
+ FunctionExpression functionExpression =
+ invocation.function as FunctionExpression;
+ expect(functionExpression.parameters, isNotNull);
+ expect(functionExpression.body, isNotNull);
+ expect(invocation.typeArguments, isNull);
+ ArgumentList list = invocation.argumentList;
+ expect(list, isNotNull);
+ expect(list.arguments, hasLength(1));
}
- void test_parseConditionalExpression() {
- createParser('x ? y : z');
- ConditionalExpression expression = parser.parseConditionalExpression();
- expectNotNullIfNoErrors(expression);
- listener.assertNoErrors();
- expect(expression.condition, isNotNull);
- expect(expression.question, isNotNull);
- expect(expression.thenExpression, isNotNull);
- expect(expression.colon, isNotNull);
- expect(expression.elseExpression, isNotNull);
+ void test_parseExpression_nonAwait() {
+ Expression expression = parseExpression('await()');
+ expect(expression, new isInstanceOf<MethodInvocation>());
+ MethodInvocation invocation = expression;
+ expect(invocation.methodName.name, 'await');
+ expect(invocation.typeArguments, isNull);
+ expect(invocation.argumentList, isNotNull);
}
- void test_parseConfiguration_noOperator_dottedIdentifier() {
- createParser("if (a.b) 'c.dart'");
- Configuration configuration = parser.parseConfiguration();
- expectNotNullIfNoErrors(configuration);
- listener.assertNoErrors();
- expect(configuration.ifKeyword, isNotNull);
- expect(configuration.leftParenthesis, isNotNull);
- _expectDottedName(configuration.name, ["a", "b"]);
- expect(configuration.equalToken, isNull);
- expect(configuration.value, isNull);
- expect(configuration.rightParenthesis, isNotNull);
- expect(configuration.uri, isNotNull);
+ void test_parseExpression_superMethodInvocation() {
+ Expression expression = parseExpression('super.m()');
+ expect(expression, new isInstanceOf<MethodInvocation>());
+ MethodInvocation invocation = expression;
+ expect(invocation.target, isNotNull);
+ expect(invocation.methodName, isNotNull);
+ expect(invocation.typeArguments, isNull);
+ expect(invocation.argumentList, isNotNull);
}
- void test_parseConfiguration_noOperator_simpleIdentifier() {
- createParser("if (a) 'b.dart'");
- Configuration configuration = parser.parseConfiguration();
- expectNotNullIfNoErrors(configuration);
- listener.assertNoErrors();
- expect(configuration.ifKeyword, isNotNull);
- expect(configuration.leftParenthesis, isNotNull);
- _expectDottedName(configuration.name, ["a"]);
- expect(configuration.equalToken, isNull);
- expect(configuration.value, isNull);
- expect(configuration.rightParenthesis, isNotNull);
- expect(configuration.uri, isNotNull);
+ void test_parseExpression_superMethodInvocation_typeArgumentComments() {
+ enableGenericMethodComments = true;
+ Expression expression = parseExpression('super.m/*<E>*/()');
+ expect(expression, new isInstanceOf<MethodInvocation>());
+ MethodInvocation invocation = expression;
+ expect(invocation.target, isNotNull);
+ expect(invocation.methodName, isNotNull);
+ expect(invocation.typeArguments, isNotNull);
+ expect(invocation.argumentList, isNotNull);
}
- void test_parseConfiguration_operator_dottedIdentifier() {
- createParser("if (a.b == 'c') 'd.dart'");
- Configuration configuration = parser.parseConfiguration();
- expectNotNullIfNoErrors(configuration);
- listener.assertNoErrors();
- expect(configuration.ifKeyword, isNotNull);
- expect(configuration.leftParenthesis, isNotNull);
- _expectDottedName(configuration.name, ["a", "b"]);
- expect(configuration.equalToken, isNotNull);
- expect(configuration.value, isNotNull);
- expect(configuration.rightParenthesis, isNotNull);
- expect(configuration.uri, isNotNull);
+ void test_parseExpression_superMethodInvocation_typeArguments() {
+ Expression expression = parseExpression('super.m<E>()');
+ expect(expression, new isInstanceOf<MethodInvocation>());
+ MethodInvocation invocation = expression;
+ expect(invocation.target, isNotNull);
+ expect(invocation.methodName, isNotNull);
+ expect(invocation.typeArguments, isNotNull);
+ expect(invocation.argumentList, isNotNull);
}
- void test_parseConfiguration_operator_simpleIdentifier() {
- createParser("if (a == 'b') 'c.dart'");
- Configuration configuration = parser.parseConfiguration();
- expectNotNullIfNoErrors(configuration);
+ void test_parseExpressionList_multiple() {
+ createParser('1, 2, 3');
+ List<Expression> result = parser.parseExpressionList();
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(configuration.ifKeyword, isNotNull);
- expect(configuration.leftParenthesis, isNotNull);
- _expectDottedName(configuration.name, ["a"]);
- expect(configuration.equalToken, isNotNull);
- expect(configuration.value, isNotNull);
- expect(configuration.rightParenthesis, isNotNull);
- expect(configuration.uri, isNotNull);
+ expect(result, hasLength(3));
}
- void test_parseConstExpression_instanceCreation() {
- createParser('const A()');
- Expression expression = parser.parseConstExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseExpressionList_single() {
+ createParser('1');
+ List<Expression> result = parser.parseExpressionList();
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<InstanceCreationExpression>());
- InstanceCreationExpression instanceCreation = expression;
- expect(instanceCreation.keyword, isNotNull);
- ConstructorName name = instanceCreation.constructorName;
- expect(name, isNotNull);
- expect(name.type, isNotNull);
- expect(name.period, isNull);
- expect(name.name, isNull);
- expect(instanceCreation.argumentList, isNotNull);
+ expect(result, hasLength(1));
}
- void test_parseConstExpression_listLiteral_typed() {
- createParser('const <A> []');
- Expression expression = parser.parseConstExpression();
+ void test_parseExpressionWithoutCascade_assign() {
+ // TODO(brianwilkerson) Implement more tests for this method.
+ createParser('x = y');
+ Expression expression = parser.parseExpressionWithoutCascade();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<ListLiteral>());
- ListLiteral literal = expression;
- expect(literal.constKeyword, isNotNull);
- expect(literal.typeArguments, isNotNull);
- expect(literal.leftBracket, isNotNull);
- expect(literal.elements, hasLength(0));
- expect(literal.rightBracket, isNotNull);
+ expect(expression, new isInstanceOf<AssignmentExpression>());
+ AssignmentExpression assignmentExpression = expression;
+ expect(assignmentExpression.leftHandSide, isNotNull);
+ expect(assignmentExpression.operator, isNotNull);
+ expect(assignmentExpression.operator.type, TokenType.EQ);
+ expect(assignmentExpression.rightHandSide, isNotNull);
}
- void test_parseConstExpression_listLiteral_typed_genericComment() {
- enableGenericMethodComments = true;
- createParser('const /*<A>*/ []');
- Expression expression = parser.parseConstExpression();
+ void test_parseExpressionWithoutCascade_comparison() {
+ createParser('--a.b == c');
+ Expression expression = parser.parseExpressionWithoutCascade();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<ListLiteral>());
- ListLiteral literal = expression;
- expect(literal.constKeyword, isNotNull);
- expect(literal.typeArguments, isNotNull);
- expect(literal.leftBracket, isNotNull);
- expect(literal.elements, hasLength(0));
- expect(literal.rightBracket, isNotNull);
+ expect(expression, new isInstanceOf<BinaryExpression>());
+ BinaryExpression binaryExpression = expression;
+ expect(binaryExpression.leftOperand, isNotNull);
+ expect(binaryExpression.operator, isNotNull);
+ expect(binaryExpression.operator.type, TokenType.EQ_EQ);
+ expect(binaryExpression.rightOperand, isNotNull);
}
- void test_parseConstExpression_listLiteral_untyped() {
- createParser('const []');
- Expression expression = parser.parseConstExpression();
+ void test_parseExpressionWithoutCascade_superMethodInvocation() {
+ createParser('super.m()');
+ Expression expression = parser.parseExpressionWithoutCascade();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<ListLiteral>());
- ListLiteral literal = expression;
- expect(literal.constKeyword, isNotNull);
- expect(literal.typeArguments, isNull);
- expect(literal.leftBracket, isNotNull);
- expect(literal.elements, hasLength(0));
- expect(literal.rightBracket, isNotNull);
+ expect(expression, new isInstanceOf<MethodInvocation>());
+ MethodInvocation invocation = expression;
+ expect(invocation.target, isNotNull);
+ expect(invocation.methodName, isNotNull);
+ expect(invocation.typeArguments, isNull);
+ expect(invocation.argumentList, isNotNull);
}
- void test_parseConstExpression_mapLiteral_typed() {
- createParser('const <A, B> {}');
- Expression expression = parser.parseConstExpression();
+ void
+ test_parseExpressionWithoutCascade_superMethodInvocation_typeArgumentComments() {
+ enableGenericMethodComments = true;
+ createParser('super.m/*<E>*/()');
+ Expression expression = parser.parseExpressionWithoutCascade();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MapLiteral>());
- MapLiteral literal = expression;
- expect(literal.leftBracket, isNotNull);
- expect(literal.entries, hasLength(0));
- expect(literal.rightBracket, isNotNull);
- expect(literal.typeArguments, isNotNull);
+ expect(expression, new isInstanceOf<MethodInvocation>());
+ MethodInvocation invocation = expression;
+ expect(invocation.target, isNotNull);
+ expect(invocation.methodName, isNotNull);
+ expect(invocation.typeArguments, isNotNull);
+ expect(invocation.argumentList, isNotNull);
}
- void test_parseConstExpression_mapLiteral_typed_genericComment() {
- enableGenericMethodComments = true;
- createParser('const /*<A, B>*/ {}');
- Expression expression = parser.parseConstExpression();
+ void
+ test_parseExpressionWithoutCascade_superMethodInvocation_typeArguments() {
+ createParser('super.m<E>()');
+ Expression expression = parser.parseExpressionWithoutCascade();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MapLiteral>());
- MapLiteral literal = expression;
- expect(literal.leftBracket, isNotNull);
- expect(literal.entries, hasLength(0));
- expect(literal.rightBracket, isNotNull);
- expect(literal.typeArguments, isNotNull);
+ expect(expression, new isInstanceOf<MethodInvocation>());
+ MethodInvocation invocation = expression;
+ expect(invocation.target, isNotNull);
+ expect(invocation.methodName, isNotNull);
+ expect(invocation.typeArguments, isNotNull);
+ expect(invocation.argumentList, isNotNull);
}
- void test_parseConstExpression_mapLiteral_untyped() {
- createParser('const {}');
- Expression expression = parser.parseConstExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseExtendsClause() {
+ createParser('extends B');
+ ExtendsClause clause = parser.parseExtendsClause();
+ expectNotNullIfNoErrors(clause);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MapLiteral>());
- MapLiteral literal = expression;
- expect(literal.leftBracket, isNotNull);
- expect(literal.entries, hasLength(0));
- expect(literal.rightBracket, isNotNull);
- expect(literal.typeArguments, isNull);
+ expect(clause.extendsKeyword, isNotNull);
+ expect(clause.superclass, isNotNull);
+ expect(clause.superclass, new isInstanceOf<TypeName>());
}
- void test_parseConstructor() {
- // TODO(brianwilkerson) Implement tests for this method.
+ void test_parseFinalConstVarOrType_const_functionType() {
+ createParser('const int Function(int) f');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
+ listener.assertNoErrors();
+ Token keyword = result.keyword;
+ expect(keyword, isNotNull);
+ expect(keyword.type, TokenType.KEYWORD);
+ expect(keyword.keyword, Keyword.CONST);
+ expect(result.type, isNotNull);
}
- void test_parseConstructor_assert() {
- enableAssertInitializer = true;
- createParser('C(x, y) : _x = x, assert (x < y), _y = y;');
- ClassMember member = parser.parseClassMember('C');
- expectNotNullIfNoErrors(member);
+ void test_parseFinalConstVarOrType_const_namedType() {
+ createParser('const A a');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(member, new isInstanceOf<ConstructorDeclaration>());
- ConstructorDeclaration constructor = member as ConstructorDeclaration;
- NodeList<ConstructorInitializer> initializers = constructor.initializers;
- expect(initializers, hasLength(3));
- ConstructorInitializer initializer = initializers[1];
- expect(initializer, new isInstanceOf<AssertInitializer>());
- AssertInitializer assertInitializer = initializer;
- expect(assertInitializer.condition, isNotNull);
- expect(assertInitializer.message, isNull);
+ Token keyword = result.keyword;
+ expect(keyword, isNotNull);
+ expect(keyword.type, TokenType.KEYWORD);
+ expect(keyword.keyword, Keyword.CONST);
+ expect(result.type, isNotNull);
}
- void test_parseConstructor_with_pseudo_function_literal() {
- // "(b) {}" should not be misinterpreted as a function literal even though
- // it looks like one.
- createParser('C() : a = (b) {}');
- ClassMember member = parser.parseClassMember('C');
- expectNotNullIfNoErrors(member);
+ void test_parseFinalConstVarOrType_const_noType() {
+ createParser('const');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(member, new isInstanceOf<ConstructorDeclaration>());
- ConstructorDeclaration constructor = member as ConstructorDeclaration;
- NodeList<ConstructorInitializer> initializers = constructor.initializers;
- expect(initializers, hasLength(1));
- ConstructorInitializer initializer = initializers[0];
- EngineTestCase.assertInstanceOf((obj) => obj is ConstructorFieldInitializer,
- ConstructorFieldInitializer, initializer);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is ParenthesizedExpression,
- ParenthesizedExpression,
- (initializer as ConstructorFieldInitializer).expression);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BlockFunctionBody, BlockFunctionBody, constructor.body);
+ Token keyword = result.keyword;
+ expect(keyword, isNotNull);
+ expect(keyword.type, TokenType.KEYWORD);
+ expect(keyword.keyword, Keyword.CONST);
+ expect(result.type, isNull);
}
- void test_parseConstructorFieldInitializer_qualified() {
- createParser('this.a = b');
- ConstructorFieldInitializer initializer =
- parser.parseConstructorFieldInitializer(true);
- expectNotNullIfNoErrors(initializer);
+ void test_parseFinalConstVarOrType_final_functionType() {
+ createParser('final int Function(int) f');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(initializer.equals, isNotNull);
- expect(initializer.expression, isNotNull);
- expect(initializer.fieldName, isNotNull);
- expect(initializer.thisKeyword, isNotNull);
- expect(initializer.period, isNotNull);
+ Token keyword = result.keyword;
+ expect(keyword, isNotNull);
+ expect(keyword.type, TokenType.KEYWORD);
+ expect(keyword.keyword, Keyword.FINAL);
+ expect(result.type, isNotNull);
}
- void test_parseConstructorFieldInitializer_unqualified() {
- createParser('a = b');
- ConstructorFieldInitializer initializer =
- parser.parseConstructorFieldInitializer(false);
- expectNotNullIfNoErrors(initializer);
- listener.assertNoErrors();
- expect(initializer.equals, isNotNull);
- expect(initializer.expression, isNotNull);
- expect(initializer.fieldName, isNotNull);
- expect(initializer.thisKeyword, isNull);
- expect(initializer.period, isNull);
- }
-
- void test_parseConstructorName_named_noPrefix() {
- createParser('A.n;');
- ConstructorName name = parser.parseConstructorName();
- expectNotNullIfNoErrors(name);
+ void test_parseFinalConstVarOrType_final_namedType() {
+ createParser('final A a');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(name.type, isNotNull);
- expect(name.period, isNull);
- expect(name.name, isNull);
+ Token keyword = result.keyword;
+ expect(keyword, isNotNull);
+ expect(keyword.type, TokenType.KEYWORD);
+ expect(keyword.keyword, Keyword.FINAL);
+ expect(result.type, isNotNull);
}
- void test_parseConstructorName_named_prefixed() {
- createParser('p.A.n;');
- ConstructorName name = parser.parseConstructorName();
- expectNotNullIfNoErrors(name);
+ void test_parseFinalConstVarOrType_final_noType() {
+ createParser('final');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(name.type, isNotNull);
- expect(name.period, isNotNull);
- expect(name.name, isNotNull);
+ Token keyword = result.keyword;
+ expect(keyword, isNotNull);
+ expect(keyword.type, TokenType.KEYWORD);
+ expect(keyword.keyword, Keyword.FINAL);
+ expect(result.type, isNull);
}
- void test_parseConstructorName_unnamed_noPrefix() {
- createParser('A;');
- ConstructorName name = parser.parseConstructorName();
- expectNotNullIfNoErrors(name);
+ void test_parseFinalConstVarOrType_final_prefixedType() {
+ createParser('final p.A a');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(name.type, isNotNull);
- expect(name.period, isNull);
- expect(name.name, isNull);
+ Token keyword = result.keyword;
+ expect(keyword, isNotNull);
+ expect(keyword.type, TokenType.KEYWORD);
+ expect(keyword.keyword, Keyword.FINAL);
+ expect(result.type, isNotNull);
}
- void test_parseConstructorName_unnamed_prefixed() {
- createParser('p.A;');
- ConstructorName name = parser.parseConstructorName();
- expectNotNullIfNoErrors(name);
+ void test_parseFinalConstVarOrType_type_function() {
+ createParser('int Function(int) f');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(name.type, isNotNull);
- expect(name.period, isNull);
- expect(name.name, isNull);
- }
-
- void test_parseContinueStatement_label() {
- createParser('continue foo;');
- ContinueStatement statement = parser.parseContinueStatement();
- expectNotNullIfNoErrors(statement);
- listener.assertErrorsWithCodes([ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]);
- expect(statement.continueKeyword, isNotNull);
- expect(statement.label, isNotNull);
- expect(statement.semicolon, isNotNull);
+ expect(result.keyword, isNull);
+ expect(result.type, isNotNull);
}
- void test_parseContinueStatement_noLabel() {
- createParser('continue;');
- ContinueStatement statement = parser.parseContinueStatement();
- expectNotNullIfNoErrors(statement);
- listener.assertErrorsWithCodes([ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]);
- expect(statement.continueKeyword, isNotNull);
- expect(statement.label, isNull);
- expect(statement.semicolon, isNotNull);
+ void test_parseFinalConstVarOrType_type_parameterized() {
+ createParser('A<B> a');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
+ listener.assertNoErrors();
+ expect(result.keyword, isNull);
+ expect(result.type, isNotNull);
}
- void test_parseDirective_export() {
- createParser("export 'lib/lib.dart';");
- Directive directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseFinalConstVarOrType_type_prefixed() {
+ createParser('p.A a');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(directive, new isInstanceOf<ExportDirective>());
- ExportDirective exportDirective = directive;
- expect(exportDirective.keyword, isNotNull);
- expect(exportDirective.uri, isNotNull);
- expect(exportDirective.combinators, hasLength(0));
- expect(exportDirective.semicolon, isNotNull);
+ expect(result.keyword, isNull);
+ expect(result.type, isNotNull);
}
- void test_parseDirective_import() {
- createParser("import 'lib/lib.dart';");
- Directive directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseFinalConstVarOrType_type_prefixed_noIdentifier() {
+ createParser('p.A,');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(directive, new isInstanceOf<ImportDirective>());
- ImportDirective importDirective = directive;
- expect(importDirective.keyword, isNotNull);
- expect(importDirective.uri, isNotNull);
- expect(importDirective.asKeyword, isNull);
- expect(importDirective.prefix, isNull);
- expect(importDirective.combinators, hasLength(0));
- expect(importDirective.semicolon, isNotNull);
+ expect(result.keyword, isNull);
+ expect(result.type, isNotNull);
}
- void test_parseDirective_library() {
- createParser("library l;");
- Directive directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseFinalConstVarOrType_type_prefixedAndParameterized() {
+ createParser('p.A<B> a');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(directive, new isInstanceOf<LibraryDirective>());
- LibraryDirective libraryDirective = directive;
- expect(libraryDirective.libraryKeyword, isNotNull);
- expect(libraryDirective.name, isNotNull);
- expect(libraryDirective.semicolon, isNotNull);
+ expect(result.keyword, isNull);
+ expect(result.type, isNotNull);
}
- void test_parseDirective_part() {
- createParser("part 'lib/lib.dart';");
- Directive directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseFinalConstVarOrType_type_simple() {
+ createParser('A a');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(directive, new isInstanceOf<PartDirective>());
- PartDirective partDirective = directive;
- expect(partDirective.partKeyword, isNotNull);
- expect(partDirective.uri, isNotNull);
- expect(partDirective.semicolon, isNotNull);
+ expect(result.keyword, isNull);
+ expect(result.type, isNotNull);
}
- void test_parseDirective_partOf() {
- createParser("part of l;");
- Directive directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseFinalConstVarOrType_type_simple_noIdentifier_inFunctionType() {
+ createParser('A,');
+ FinalConstVarOrType result =
+ parser.parseFinalConstVarOrType(false, inFunctionType: true);
+ expectNotNullIfNoErrors(result);
listener.assertNoErrors();
- expect(directive, new isInstanceOf<PartOfDirective>());
- PartOfDirective partOfDirective = directive;
- expect(partOfDirective.partKeyword, isNotNull);
- expect(partOfDirective.ofKeyword, isNotNull);
- expect(partOfDirective.libraryName, isNotNull);
- expect(partOfDirective.semicolon, isNotNull);
+ expect(result.keyword, isNull);
+ expect(result.type, isNotNull);
}
- void test_parseDirectives_complete() {
- CompilationUnit unit =
- _parseDirectives("#! /bin/dart\nlibrary l;\nclass A {}");
- expect(unit.scriptTag, isNotNull);
- expect(unit.directives, hasLength(1));
+ void test_parseFinalConstVarOrType_var() {
+ createParser('var');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
+ listener.assertNoErrors();
+ Token keyword = result.keyword;
+ expect(keyword, isNotNull);
+ expect(keyword.type, TokenType.KEYWORD);
+ expect(keyword.keyword, Keyword.VAR);
+ expect(result.type, isNull);
}
- void test_parseDirectives_empty() {
- CompilationUnit unit = _parseDirectives("");
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(0));
+ void test_parseFinalConstVarOrType_void() {
+ createParser('void f()');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
+ listener.assertNoErrors();
+ expect(result.keyword, isNull);
+ expect(result.type, isNotNull);
}
- void test_parseDirectives_mixed() {
- CompilationUnit unit =
- _parseDirectives("library l; class A {} part 'foo.dart';");
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(1));
+ void test_parseFinalConstVarOrType_void_noIdentifier() {
+ createParser('void,');
+ FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
+ expectNotNullIfNoErrors(result);
+ listener.assertNoErrors();
+ expect(result.keyword, isNull);
+ expect(result.type, isNotNull);
}
- void test_parseDirectives_multiple() {
- CompilationUnit unit = _parseDirectives("library l;\npart 'a.dart';");
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(2));
+ void test_parseFormalParameter_covariant_final_named() {
+ ParameterKind kind = ParameterKind.NAMED;
+ createParser('covariant final a : null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
+ listener.assertNoErrors();
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseDirectives_script() {
- CompilationUnit unit = _parseDirectives("#! /bin/dart");
- expect(unit.scriptTag, isNotNull);
- expect(unit.directives, hasLength(0));
+ void test_parseFormalParameter_covariant_final_normal() {
+ ParameterKind kind = ParameterKind.REQUIRED;
+ createParser('covariant final a');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
+ listener.assertNoErrors();
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.covariantKeyword, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
}
- void test_parseDirectives_single() {
- CompilationUnit unit = _parseDirectives("library l;");
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(1));
- }
-
- void test_parseDirectives_topLevelDeclaration() {
- CompilationUnit unit = _parseDirectives("class A {}");
- expect(unit.scriptTag, isNull);
- expect(unit.directives, hasLength(0));
- }
-
- void test_parseDocumentationComment_block() {
- createParser('/** */ class');
- Comment comment = parser
- .parseDocumentationComment(parser.parseDocumentationCommentTokens());
- expectNotNullIfNoErrors(comment);
+ void test_parseFormalParameter_covariant_final_positional() {
+ ParameterKind kind = ParameterKind.POSITIONAL;
+ createParser('covariant final a = null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(comment.isBlock, isFalse);
- expect(comment.isDocumentation, isTrue);
- expect(comment.isEndOfLine, isFalse);
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseDocumentationComment_block_withReference() {
- createParser('/** [a] */ class');
- Comment comment = parser
- .parseDocumentationComment(parser.parseDocumentationCommentTokens());
- expectNotNullIfNoErrors(comment);
+ void test_parseFormalParameter_covariant_final_type_named() {
+ ParameterKind kind = ParameterKind.NAMED;
+ createParser('covariant final A a : null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(comment.isBlock, isFalse);
- expect(comment.isDocumentation, isTrue);
- expect(comment.isEndOfLine, isFalse);
- NodeList<CommentReference> references = comment.references;
- expect(references, hasLength(1));
- CommentReference reference = references[0];
- expect(reference, isNotNull);
- expect(reference.offset, 5);
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseDocumentationComment_endOfLine() {
- createParser('/// \n/// \n class');
- Comment comment = parser
- .parseDocumentationComment(parser.parseDocumentationCommentTokens());
- expectNotNullIfNoErrors(comment);
+ void test_parseFormalParameter_covariant_final_type_normal() {
+ ParameterKind kind = ParameterKind.REQUIRED;
+ createParser('covariant final A a');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(comment.isBlock, isFalse);
- expect(comment.isDocumentation, isTrue);
- expect(comment.isEndOfLine, isFalse);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.covariantKeyword, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
}
- void test_parseDoStatement() {
- createParser('do {} while (x);');
- DoStatement statement = parser.parseDoStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseFormalParameter_covariant_final_type_positional() {
+ ParameterKind kind = ParameterKind.POSITIONAL;
+ createParser('covariant final A a = null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(statement.doKeyword, isNotNull);
- expect(statement.body, isNotNull);
- expect(statement.whileKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.condition, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseDottedName_multiple() {
- createParser('a.b.c');
- DottedName name = parser.parseDottedName();
- expectNotNullIfNoErrors(name);
+ @failingTest
+ void test_parseFormalParameter_covariant_type_function() {
+ ParameterKind kind = ParameterKind.REQUIRED;
+ createParser('covariant String Function(int) a');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- _expectDottedName(name, ["a", "b", "c"]);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.covariantKeyword, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, new isInstanceOf<GenericFunctionType>());
+ expect(simpleParameter.kind, kind);
}
- void test_parseDottedName_single() {
- createParser('a');
- DottedName name = parser.parseDottedName();
- expectNotNullIfNoErrors(name);
+ void test_parseFormalParameter_covariant_type_named() {
+ ParameterKind kind = ParameterKind.NAMED;
+ createParser('covariant A a : null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- _expectDottedName(name, ["a"]);
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseEmptyStatement() {
- createParser(';');
- EmptyStatement statement = parser.parseEmptyStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseFormalParameter_covariant_type_normal() {
+ ParameterKind kind = ParameterKind.REQUIRED;
+ createParser('covariant A<B<C>> a');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(statement.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.covariantKeyword, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
}
- void test_parseEnumDeclaration_one() {
- createParser("enum E {ONE}");
- EnumDeclaration declaration = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(declaration);
+ void test_parseFormalParameter_covariant_type_positional() {
+ ParameterKind kind = ParameterKind.POSITIONAL;
+ createParser('covariant A a = null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(declaration.documentationComment, isNull);
- expect(declaration.enumKeyword, isNotNull);
- expect(declaration.leftBracket, isNotNull);
- expect(declaration.name, isNotNull);
- expect(declaration.constants, hasLength(1));
- expect(declaration.rightBracket, isNotNull);
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseEnumDeclaration_trailingComma() {
- createParser("enum E {ONE,}");
- EnumDeclaration declaration = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(declaration);
+ void test_parseFormalParameter_covariant_var_named() {
+ ParameterKind kind = ParameterKind.NAMED;
+ createParser('covariant var a : null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(declaration.documentationComment, isNull);
- expect(declaration.enumKeyword, isNotNull);
- expect(declaration.leftBracket, isNotNull);
- expect(declaration.name, isNotNull);
- expect(declaration.constants, hasLength(1));
- expect(declaration.rightBracket, isNotNull);
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseEnumDeclaration_two() {
- createParser("enum E {ONE, TWO}");
- EnumDeclaration declaration = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(declaration);
+ void test_parseFormalParameter_covariant_var_normal() {
+ ParameterKind kind = ParameterKind.REQUIRED;
+ createParser('covariant var a');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(declaration.documentationComment, isNull);
- expect(declaration.enumKeyword, isNotNull);
- expect(declaration.leftBracket, isNotNull);
- expect(declaration.name, isNotNull);
- expect(declaration.constants, hasLength(2));
- expect(declaration.rightBracket, isNotNull);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.covariantKeyword, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
}
- void test_parseEqualityExpression_normal() {
- createParser('x == y');
- BinaryExpression expression = parser.parseEqualityExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseFormalParameter_covariant_var_positional() {
+ ParameterKind kind = ParameterKind.POSITIONAL;
+ createParser('covariant var a = null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.leftOperand, isNotNull);
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.EQ_EQ);
- expect(expression.rightOperand, isNotNull);
- }
-
- void test_parseEqualityExpression_super() {
- createParser('super == y');
- BinaryExpression expression = parser.parseEqualityExpression();
- expectNotNullIfNoErrors(expression);
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
+ }
+
+ void test_parseFormalParameter_final_named() {
+ ParameterKind kind = ParameterKind.NAMED;
+ createParser('final a : null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.leftOperand, new isInstanceOf<SuperExpression>());
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.EQ_EQ);
- expect(expression.rightOperand, isNotNull);
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseExportDirective_configuration_multiple() {
- createParser("export 'lib/lib.dart' if (a) 'b.dart' if (c) 'd.dart';");
- ExportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseFormalParameter_final_normal() {
+ ParameterKind kind = ParameterKind.REQUIRED;
+ createParser('final a');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.configurations, hasLength(2));
- _expectDottedName(directive.configurations[0].name, ['a']);
- _expectDottedName(directive.configurations[1].name, ['c']);
- expect(directive.combinators, hasLength(0));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
}
- void test_parseExportDirective_configuration_single() {
- createParser("export 'lib/lib.dart' if (a.b == 'c.dart') '';");
- ExportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseFormalParameter_final_positional() {
+ ParameterKind kind = ParameterKind.POSITIONAL;
+ createParser('final a = null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.configurations, hasLength(1));
- _expectDottedName(directive.configurations[0].name, ['a', 'b']);
- expect(directive.combinators, hasLength(0));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseExportDirective_hide() {
- createParser("export 'lib/lib.dart' hide A, B;");
- ExportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseFormalParameter_final_type_named() {
+ ParameterKind kind = ParameterKind.NAMED;
+ createParser('final A a : null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.combinators, hasLength(1));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseExportDirective_hide_show() {
- createParser("export 'lib/lib.dart' hide A show B;");
- ExportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseFormalParameter_final_type_normal() {
+ ParameterKind kind = ParameterKind.REQUIRED;
+ createParser('final A a');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.combinators, hasLength(2));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
}
- void test_parseExportDirective_noCombinator() {
- createParser("export 'lib/lib.dart';");
- ExportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseFormalParameter_final_type_positional() {
+ ParameterKind kind = ParameterKind.POSITIONAL;
+ createParser('final A a = null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.combinators, hasLength(0));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseExportDirective_show() {
- createParser("export 'lib/lib.dart' show A, B;");
- ExportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ @failingTest
+ void test_parseFormalParameter_type_function() {
+ ParameterKind kind = ParameterKind.REQUIRED;
+ createParser('String Function(int) a');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.combinators, hasLength(1));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, new isInstanceOf<GenericFunctionType>());
+ expect(simpleParameter.kind, kind);
}
- void test_parseExportDirective_show_hide() {
- createParser("export 'lib/lib.dart' show B hide A;");
- ExportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseFormalParameter_type_named() {
+ ParameterKind kind = ParameterKind.NAMED;
+ createParser('A a : null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.combinators, hasLength(2));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseExpression_assign() {
- // TODO(brianwilkerson) Implement more tests for this method.
- Expression expression = parseExpression('x = y');
- expect(expression, new isInstanceOf<AssignmentExpression>());
- AssignmentExpression assignmentExpression = expression;
- expect(assignmentExpression.leftHandSide, isNotNull);
- expect(assignmentExpression.operator, isNotNull);
- expect(assignmentExpression.operator.type, TokenType.EQ);
- expect(assignmentExpression.rightHandSide, isNotNull);
+ void test_parseFormalParameter_type_normal() {
+ ParameterKind kind = ParameterKind.REQUIRED;
+ createParser('A a');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
+ listener.assertNoErrors();
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
}
- void test_parseExpression_assign_compound() {
- enableLazyAssignmentOperators = true;
- Expression expression = parseExpression('x ||= y');
- expect(expression, new isInstanceOf<AssignmentExpression>());
- AssignmentExpression assignmentExpression = expression;
- expect(assignmentExpression.leftHandSide, isNotNull);
- expect(assignmentExpression.operator, isNotNull);
- expect(assignmentExpression.operator.type, TokenType.BAR_BAR_EQ);
- expect(assignmentExpression.rightHandSide, isNotNull);
+ void test_parseFormalParameter_type_positional() {
+ ParameterKind kind = ParameterKind.POSITIONAL;
+ createParser('A a = null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
+ listener.assertNoErrors();
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseExpression_comparison() {
- Expression expression = parseExpression('--a.b == c');
- expect(expression, new isInstanceOf<BinaryExpression>());
- BinaryExpression binaryExpression = expression;
- expect(binaryExpression.leftOperand, isNotNull);
- expect(binaryExpression.operator, isNotNull);
- expect(binaryExpression.operator.type, TokenType.EQ_EQ);
- expect(binaryExpression.rightOperand, isNotNull);
- }
-
- void test_parseExpression_function_async() {
- Expression expression = parseExpression('() async {}');
- expect(expression, new isInstanceOf<FunctionExpression>());
- FunctionExpression functionExpression = expression;
- expect(functionExpression.body, isNotNull);
- expect(functionExpression.body.isAsynchronous, isTrue);
- expect(functionExpression.body.isGenerator, isFalse);
- expect(functionExpression.parameters, isNotNull);
+ void test_parseFormalParameter_var_named() {
+ ParameterKind kind = ParameterKind.NAMED;
+ createParser('var a : null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
+ listener.assertNoErrors();
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseExpression_function_asyncStar() {
- Expression expression = parseExpression('() async* {}');
- expect(expression, new isInstanceOf<FunctionExpression>());
- FunctionExpression functionExpression = expression;
- expect(functionExpression.body, isNotNull);
- expect(functionExpression.body.isAsynchronous, isTrue);
- expect(functionExpression.body.isGenerator, isTrue);
- expect(functionExpression.parameters, isNotNull);
+ void test_parseFormalParameter_var_normal() {
+ ParameterKind kind = ParameterKind.REQUIRED;
+ createParser('var a');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
+ listener.assertNoErrors();
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
}
- void test_parseExpression_function_sync() {
- Expression expression = parseExpression('() {}');
- expect(expression, new isInstanceOf<FunctionExpression>());
- FunctionExpression functionExpression = expression;
- expect(functionExpression.body, isNotNull);
- expect(functionExpression.body.isAsynchronous, isFalse);
- expect(functionExpression.body.isGenerator, isFalse);
- expect(functionExpression.parameters, isNotNull);
+ void test_parseFormalParameter_var_positional() {
+ ParameterKind kind = ParameterKind.POSITIONAL;
+ createParser('var a = null');
+ FormalParameter parameter = parser.parseFormalParameter(kind);
+ expectNotNullIfNoErrors(parameter);
+ listener.assertNoErrors();
+ expect(parameter, new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter defaultParameter = parameter;
+ SimpleFormalParameter simpleParameter =
+ defaultParameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
+ expect(defaultParameter.separator, isNotNull);
+ expect(defaultParameter.defaultValue, isNotNull);
+ expect(defaultParameter.kind, kind);
}
- void test_parseExpression_function_syncStar() {
- Expression expression = parseExpression('() sync* {}');
- expect(expression, new isInstanceOf<FunctionExpression>());
- FunctionExpression functionExpression = expression;
- expect(functionExpression.body, isNotNull);
- expect(functionExpression.body.isAsynchronous, isFalse);
- expect(functionExpression.body.isGenerator, isTrue);
- expect(functionExpression.parameters, isNotNull);
+ void test_parseFormalParameterList_empty() {
+ createParser('()');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
+ listener.assertNoErrors();
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNull);
+ expect(list.parameters, hasLength(0));
+ expect(list.rightDelimiter, isNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseExpression_invokeFunctionExpression() {
- Expression expression = parseExpression('(a) {return a + a;} (3)');
- expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
- FunctionExpressionInvocation invocation = expression;
- expect(invocation.function, new isInstanceOf<FunctionExpression>());
- FunctionExpression functionExpression =
- invocation.function as FunctionExpression;
- expect(functionExpression.parameters, isNotNull);
- expect(functionExpression.body, isNotNull);
- expect(invocation.typeArguments, isNull);
- ArgumentList list = invocation.argumentList;
- expect(list, isNotNull);
- expect(list.arguments, hasLength(1));
+ void test_parseFormalParameterList_named_multiple() {
+ createParser('({A a : 1, B b, C c : 3})');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
+ listener.assertNoErrors();
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNotNull);
+ expect(list.parameters, hasLength(3));
+ expect(list.rightDelimiter, isNotNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseExpression_nonAwait() {
- Expression expression = parseExpression('await()');
- expect(expression, new isInstanceOf<MethodInvocation>());
- MethodInvocation invocation = expression;
- expect(invocation.methodName.name, 'await');
- expect(invocation.typeArguments, isNull);
- expect(invocation.argumentList, isNotNull);
+ void test_parseFormalParameterList_named_single() {
+ createParser('({A a})');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
+ listener.assertNoErrors();
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNotNull);
+ expect(list.parameters, hasLength(1));
+ expect(list.rightDelimiter, isNotNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseExpression_superMethodInvocation() {
- Expression expression = parseExpression('super.m()');
- expect(expression, new isInstanceOf<MethodInvocation>());
- MethodInvocation invocation = expression;
- expect(invocation.target, isNotNull);
- expect(invocation.methodName, isNotNull);
- expect(invocation.typeArguments, isNull);
- expect(invocation.argumentList, isNotNull);
+ void test_parseFormalParameterList_named_trailing_comma() {
+ createParser('(A a, {B b,})');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
+ listener.assertNoErrors();
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNotNull);
+ expect(list.parameters, hasLength(2));
+ expect(list.rightDelimiter, isNotNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseExpression_superMethodInvocation_typeArgumentComments() {
- enableGenericMethodComments = true;
- Expression expression = parseExpression('super.m/*<E>*/()');
- expect(expression, new isInstanceOf<MethodInvocation>());
- MethodInvocation invocation = expression;
- expect(invocation.target, isNotNull);
- expect(invocation.methodName, isNotNull);
- expect(invocation.typeArguments, isNotNull);
- expect(invocation.argumentList, isNotNull);
+ void test_parseFormalParameterList_normal_multiple() {
+ createParser('(A a, B b, C c)');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
+ listener.assertNoErrors();
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNull);
+ expect(list.parameters, hasLength(3));
+ expect(list.rightDelimiter, isNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseExpression_superMethodInvocation_typeArguments() {
- Expression expression = parseExpression('super.m<E>()');
- expect(expression, new isInstanceOf<MethodInvocation>());
- MethodInvocation invocation = expression;
- expect(invocation.target, isNotNull);
- expect(invocation.methodName, isNotNull);
- expect(invocation.typeArguments, isNotNull);
- expect(invocation.argumentList, isNotNull);
+ void test_parseFormalParameterList_normal_named() {
+ createParser('(A a, {B b})');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
+ listener.assertNoErrors();
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNotNull);
+ expect(list.parameters, hasLength(2));
+ expect(list.rightDelimiter, isNotNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseExpressionList_multiple() {
- createParser('1, 2, 3');
- List<Expression> result = parser.parseExpressionList();
- expectNotNullIfNoErrors(result);
+ void test_parseFormalParameterList_normal_named_inFunctionType() {
+ createParser('(A, {B b})');
+ FormalParameterList list =
+ parser.parseFormalParameterList(inFunctionType: true);
+ expectNotNullIfNoErrors(list);
listener.assertNoErrors();
- expect(result, hasLength(3));
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNotNull);
+ expect(list.rightDelimiter, isNotNull);
+ expect(list.rightParenthesis, isNotNull);
+ NodeList<FormalParameter> parameters = list.parameters;
+ expect(parameters, hasLength(2));
+
+ expect(parameters[0], new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter required = parameters[0];
+ expect(required.identifier, isNull);
+ expect(required.type, new isInstanceOf<TypeName>());
+ expect((required.type as TypeName).name.name, 'A');
+
+ expect(parameters[1], new isInstanceOf<DefaultFormalParameter>());
+ DefaultFormalParameter named = parameters[1];
+ expect(named.identifier, isNotNull);
+ expect(named.parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simple = named.parameter;
+ expect(simple.type, new isInstanceOf<TypeName>());
+ expect((simple.type as TypeName).name.name, 'B');
}
- void test_parseExpressionList_single() {
- createParser('1');
- List<Expression> result = parser.parseExpressionList();
- expectNotNullIfNoErrors(result);
+ void test_parseFormalParameterList_normal_positional() {
+ createParser('(A a, [B b])');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
listener.assertNoErrors();
- expect(result, hasLength(1));
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNotNull);
+ expect(list.parameters, hasLength(2));
+ expect(list.rightDelimiter, isNotNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseExpressionWithoutCascade_assign() {
- // TODO(brianwilkerson) Implement more tests for this method.
- createParser('x = y');
- Expression expression = parser.parseExpressionWithoutCascade();
- expectNotNullIfNoErrors(expression);
+ void test_parseFormalParameterList_normal_single() {
+ createParser('(A a)');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<AssignmentExpression>());
- AssignmentExpression assignmentExpression = expression;
- expect(assignmentExpression.leftHandSide, isNotNull);
- expect(assignmentExpression.operator, isNotNull);
- expect(assignmentExpression.operator.type, TokenType.EQ);
- expect(assignmentExpression.rightHandSide, isNotNull);
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNull);
+ expect(list.parameters, hasLength(1));
+ expect(list.rightDelimiter, isNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseExpressionWithoutCascade_comparison() {
- createParser('--a.b == c');
- Expression expression = parser.parseExpressionWithoutCascade();
- expectNotNullIfNoErrors(expression);
- listener.assertNoErrors();
- expect(expression, new isInstanceOf<BinaryExpression>());
- BinaryExpression binaryExpression = expression;
- expect(binaryExpression.leftOperand, isNotNull);
- expect(binaryExpression.operator, isNotNull);
- expect(binaryExpression.operator.type, TokenType.EQ_EQ);
- expect(binaryExpression.rightOperand, isNotNull);
- }
-
- void test_parseExpressionWithoutCascade_superMethodInvocation() {
- createParser('super.m()');
- Expression expression = parser.parseExpressionWithoutCascade();
- expectNotNullIfNoErrors(expression);
+ void test_parseFormalParameterList_normal_single_Function() {
+ createParser('(Function f)');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MethodInvocation>());
- MethodInvocation invocation = expression;
- expect(invocation.target, isNotNull);
- expect(invocation.methodName, isNotNull);
- expect(invocation.typeArguments, isNull);
- expect(invocation.argumentList, isNotNull);
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNull);
+ expect(list.parameters, hasLength(1));
+ expect(list.rightDelimiter, isNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void
- test_parseExpressionWithoutCascade_superMethodInvocation_typeArgumentComments() {
- enableGenericMethodComments = true;
- createParser('super.m/*<E>*/()');
- Expression expression = parser.parseExpressionWithoutCascade();
- expectNotNullIfNoErrors(expression);
+ void test_parseFormalParameterList_normal_single_trailing_comma() {
+ createParser('(A a,)');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MethodInvocation>());
- MethodInvocation invocation = expression;
- expect(invocation.target, isNotNull);
- expect(invocation.methodName, isNotNull);
- expect(invocation.typeArguments, isNotNull);
- expect(invocation.argumentList, isNotNull);
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNull);
+ expect(list.parameters, hasLength(1));
+ expect(list.rightDelimiter, isNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void
- test_parseExpressionWithoutCascade_superMethodInvocation_typeArguments() {
- createParser('super.m<E>()');
- Expression expression = parser.parseExpressionWithoutCascade();
- expectNotNullIfNoErrors(expression);
+ void test_parseFormalParameterList_positional_multiple() {
+ createParser('([A a = null, B b, C c = null])');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MethodInvocation>());
- MethodInvocation invocation = expression;
- expect(invocation.target, isNotNull);
- expect(invocation.methodName, isNotNull);
- expect(invocation.typeArguments, isNotNull);
- expect(invocation.argumentList, isNotNull);
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNotNull);
+ expect(list.parameters, hasLength(3));
+ expect(list.rightDelimiter, isNotNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseExtendsClause() {
- createParser('extends B');
- ExtendsClause clause = parser.parseExtendsClause();
- expectNotNullIfNoErrors(clause);
+ void test_parseFormalParameterList_positional_single() {
+ createParser('([A a = null])');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
listener.assertNoErrors();
- expect(clause.extendsKeyword, isNotNull);
- expect(clause.superclass, isNotNull);
- expect(clause.superclass, new isInstanceOf<TypeName>());
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNotNull);
+ expect(list.parameters, hasLength(1));
+ expect(list.rightDelimiter, isNotNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseFinalConstVarOrType_const_functionType() {
- createParser('const int Function(int) f');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
+ void test_parseFormalParameterList_positional_trailing_comma() {
+ createParser('(A a, [B b,])');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
listener.assertNoErrors();
- Token keyword = result.keyword;
- expect(keyword, isNotNull);
- expect(keyword.type, TokenType.KEYWORD);
- expect(keyword.keyword, Keyword.CONST);
- expect(result.type, isNotNull);
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNotNull);
+ expect(list.parameters, hasLength(2));
+ expect(list.rightDelimiter, isNotNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseFinalConstVarOrType_const_namedType() {
- createParser('const A a');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
+ void test_parseFormalParameterList_prefixedType() {
+ createParser('(io.File f)');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
listener.assertNoErrors();
- Token keyword = result.keyword;
- expect(keyword, isNotNull);
- expect(keyword.type, TokenType.KEYWORD);
- expect(keyword.keyword, Keyword.CONST);
- expect(result.type, isNotNull);
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNull);
+ expect(list.parameters, hasLength(1));
+ expect(list.parameters[0].toSource(), 'io.File f');
+ expect(list.rightDelimiter, isNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseFinalConstVarOrType_const_noType() {
- createParser('const');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
- listener.assertNoErrors();
- Token keyword = result.keyword;
- expect(keyword, isNotNull);
- expect(keyword.type, TokenType.KEYWORD);
- expect(keyword.keyword, Keyword.CONST);
- expect(result.type, isNull);
+ void test_parseFormalParameterList_prefixedType_partial() {
+ createParser('(io.)');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
+ listener.assertErrorsWithCodes([
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNull);
+ expect(list.parameters, hasLength(1));
+ expect(list.parameters[0].toSource(), 'io. ');
+ expect(list.rightDelimiter, isNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseFinalConstVarOrType_final_functionType() {
- createParser('final int Function(int) f');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
- listener.assertNoErrors();
- Token keyword = result.keyword;
- expect(keyword, isNotNull);
- expect(keyword.type, TokenType.KEYWORD);
- expect(keyword.keyword, Keyword.FINAL);
- expect(result.type, isNotNull);
+ void test_parseFormalParameterList_prefixedType_partial2() {
+ createParser('(io.,a)');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
+ listener.assertErrorsWithCodes([
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ expect(list.leftParenthesis, isNotNull);
+ expect(list.leftDelimiter, isNull);
+ expect(list.parameters, hasLength(2));
+ expect(list.parameters[0].toSource(), 'io. ');
+ expect(list.parameters[1].toSource(), 'a');
+ expect(list.rightDelimiter, isNull);
+ expect(list.rightParenthesis, isNotNull);
}
- void test_parseFinalConstVarOrType_final_namedType() {
- createParser('final A a');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
+ void test_parseForStatement_each_await() {
+ createParser('await for (element in list) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- Token keyword = result.keyword;
- expect(keyword, isNotNull);
- expect(keyword.type, TokenType.KEYWORD);
- expect(keyword.keyword, Keyword.FINAL);
- expect(result.type, isNotNull);
+ expect(statement, new isInstanceOf<ForEachStatement>());
+ ForEachStatement forStatement = statement;
+ expect(forStatement.awaitKeyword, isNotNull);
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ expect(forStatement.loopVariable, isNull);
+ expect(forStatement.identifier, isNotNull);
+ expect(forStatement.inKeyword, isNotNull);
+ expect(forStatement.iterable, isNotNull);
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFinalConstVarOrType_final_noType() {
- createParser('final');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
+ void test_parseForStatement_each_identifier() {
+ createParser('for (element in list) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- Token keyword = result.keyword;
- expect(keyword, isNotNull);
- expect(keyword.type, TokenType.KEYWORD);
- expect(keyword.keyword, Keyword.FINAL);
- expect(result.type, isNull);
+ expect(statement, new isInstanceOf<ForEachStatement>());
+ ForEachStatement forStatement = statement;
+ expect(forStatement.awaitKeyword, isNull);
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ expect(forStatement.loopVariable, isNull);
+ expect(forStatement.identifier, isNotNull);
+ expect(forStatement.inKeyword, isNotNull);
+ expect(forStatement.iterable, isNotNull);
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFinalConstVarOrType_final_prefixedType() {
- createParser('final p.A a');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
+ void test_parseForStatement_each_noType_metadata() {
+ createParser('for (@A var element in list) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- Token keyword = result.keyword;
- expect(keyword, isNotNull);
- expect(keyword.type, TokenType.KEYWORD);
- expect(keyword.keyword, Keyword.FINAL);
- expect(result.type, isNotNull);
+ expect(statement, new isInstanceOf<ForEachStatement>());
+ ForEachStatement forStatement = statement;
+ expect(forStatement.awaitKeyword, isNull);
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ expect(forStatement.loopVariable, isNotNull);
+ expect(forStatement.loopVariable.metadata, hasLength(1));
+ expect(forStatement.identifier, isNull);
+ expect(forStatement.inKeyword, isNotNull);
+ expect(forStatement.iterable, isNotNull);
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFinalConstVarOrType_type_function() {
- createParser('int Function(int) f');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
+ void test_parseForStatement_each_type() {
+ createParser('for (A element in list) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(result.keyword, isNull);
- expect(result.type, isNotNull);
- }
-
- void test_parseFinalConstVarOrType_type_parameterized() {
- createParser('A<B> a');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
- listener.assertNoErrors();
- expect(result.keyword, isNull);
- expect(result.type, isNotNull);
+ expect(statement, new isInstanceOf<ForEachStatement>());
+ ForEachStatement forStatement = statement;
+ expect(forStatement.awaitKeyword, isNull);
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ expect(forStatement.loopVariable, isNotNull);
+ expect(forStatement.identifier, isNull);
+ expect(forStatement.inKeyword, isNotNull);
+ expect(forStatement.iterable, isNotNull);
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFinalConstVarOrType_type_prefixed() {
- createParser('p.A a');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
+ void test_parseForStatement_each_var() {
+ createParser('for (var element in list) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(result.keyword, isNull);
- expect(result.type, isNotNull);
+ expect(statement, new isInstanceOf<ForEachStatement>());
+ ForEachStatement forStatement = statement;
+ expect(forStatement.awaitKeyword, isNull);
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ expect(forStatement.loopVariable, isNotNull);
+ expect(forStatement.identifier, isNull);
+ expect(forStatement.inKeyword, isNotNull);
+ expect(forStatement.iterable, isNotNull);
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFinalConstVarOrType_type_prefixed_noIdentifier() {
- createParser('p.A,');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
+ void test_parseForStatement_loop_c() {
+ createParser('for (; i < count;) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(result.keyword, isNull);
- expect(result.type, isNotNull);
+ expect(statement, new isInstanceOf<ForStatement>());
+ ForStatement forStatement = statement;
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ expect(forStatement.variables, isNull);
+ expect(forStatement.initialization, isNull);
+ expect(forStatement.leftSeparator, isNotNull);
+ expect(forStatement.condition, isNotNull);
+ expect(forStatement.rightSeparator, isNotNull);
+ expect(forStatement.updaters, hasLength(0));
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFinalConstVarOrType_type_prefixedAndParameterized() {
- createParser('p.A<B> a');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
+ void test_parseForStatement_loop_cu() {
+ createParser('for (; i < count; i++) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(result.keyword, isNull);
- expect(result.type, isNotNull);
+ expect(statement, new isInstanceOf<ForStatement>());
+ ForStatement forStatement = statement;
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ expect(forStatement.variables, isNull);
+ expect(forStatement.initialization, isNull);
+ expect(forStatement.leftSeparator, isNotNull);
+ expect(forStatement.condition, isNotNull);
+ expect(forStatement.rightSeparator, isNotNull);
+ expect(forStatement.updaters, hasLength(1));
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFinalConstVarOrType_type_simple() {
- createParser('A a');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
+ void test_parseForStatement_loop_ecu() {
+ createParser('for (i--; i < count; i++) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(result.keyword, isNull);
- expect(result.type, isNotNull);
+ expect(statement, new isInstanceOf<ForStatement>());
+ ForStatement forStatement = statement;
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ expect(forStatement.variables, isNull);
+ expect(forStatement.initialization, isNotNull);
+ expect(forStatement.leftSeparator, isNotNull);
+ expect(forStatement.condition, isNotNull);
+ expect(forStatement.rightSeparator, isNotNull);
+ expect(forStatement.updaters, hasLength(1));
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFinalConstVarOrType_type_simple_noIdentifier_inFunctionType() {
- createParser('A,');
- FinalConstVarOrType result =
- parser.parseFinalConstVarOrType(false, inFunctionType: true);
- expectNotNullIfNoErrors(result);
+ void test_parseForStatement_loop_i() {
+ createParser('for (var i = 0;;) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(result.keyword, isNull);
- expect(result.type, isNotNull);
+ expect(statement, new isInstanceOf<ForStatement>());
+ ForStatement forStatement = statement;
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ VariableDeclarationList variables = forStatement.variables;
+ expect(variables, isNotNull);
+ expect(variables.metadata, hasLength(0));
+ expect(variables.variables, hasLength(1));
+ expect(forStatement.initialization, isNull);
+ expect(forStatement.leftSeparator, isNotNull);
+ expect(forStatement.condition, isNull);
+ expect(forStatement.rightSeparator, isNotNull);
+ expect(forStatement.updaters, hasLength(0));
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFinalConstVarOrType_var() {
- createParser('var');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
+ void test_parseForStatement_loop_i_withMetadata() {
+ createParser('for (@A var i = 0;;) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- Token keyword = result.keyword;
- expect(keyword, isNotNull);
- expect(keyword.type, TokenType.KEYWORD);
- expect(keyword.keyword, Keyword.VAR);
- expect(result.type, isNull);
+ expect(statement, new isInstanceOf<ForStatement>());
+ ForStatement forStatement = statement;
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ VariableDeclarationList variables = forStatement.variables;
+ expect(variables, isNotNull);
+ expect(variables.metadata, hasLength(1));
+ expect(variables.variables, hasLength(1));
+ expect(forStatement.initialization, isNull);
+ expect(forStatement.leftSeparator, isNotNull);
+ expect(forStatement.condition, isNull);
+ expect(forStatement.rightSeparator, isNotNull);
+ expect(forStatement.updaters, hasLength(0));
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFinalConstVarOrType_void() {
- createParser('void f()');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
+ void test_parseForStatement_loop_ic() {
+ createParser('for (var i = 0; i < count;) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(result.keyword, isNull);
- expect(result.type, isNotNull);
+ expect(statement, new isInstanceOf<ForStatement>());
+ ForStatement forStatement = statement;
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ VariableDeclarationList variables = forStatement.variables;
+ expect(variables, isNotNull);
+ expect(variables.variables, hasLength(1));
+ expect(forStatement.initialization, isNull);
+ expect(forStatement.leftSeparator, isNotNull);
+ expect(forStatement.condition, isNotNull);
+ expect(forStatement.rightSeparator, isNotNull);
+ expect(forStatement.updaters, hasLength(0));
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFinalConstVarOrType_void_noIdentifier() {
- createParser('void,');
- FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
- expectNotNullIfNoErrors(result);
+ void test_parseForStatement_loop_icu() {
+ createParser('for (var i = 0; i < count; i++) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(result.keyword, isNull);
- expect(result.type, isNotNull);
+ expect(statement, new isInstanceOf<ForStatement>());
+ ForStatement forStatement = statement;
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ VariableDeclarationList variables = forStatement.variables;
+ expect(variables, isNotNull);
+ expect(variables.variables, hasLength(1));
+ expect(forStatement.initialization, isNull);
+ expect(forStatement.leftSeparator, isNotNull);
+ expect(forStatement.condition, isNotNull);
+ expect(forStatement.rightSeparator, isNotNull);
+ expect(forStatement.updaters, hasLength(1));
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFormalParameter_covariant_final_named() {
- ParameterKind kind = ParameterKind.NAMED;
- createParser('covariant final a : null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseForStatement_loop_iicuu() {
+ createParser('for (int i = 0, j = count; i < j; i++, j--) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(statement, new isInstanceOf<ForStatement>());
+ ForStatement forStatement = statement;
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ VariableDeclarationList variables = forStatement.variables;
+ expect(variables, isNotNull);
+ expect(variables.variables, hasLength(2));
+ expect(forStatement.initialization, isNull);
+ expect(forStatement.leftSeparator, isNotNull);
+ expect(forStatement.condition, isNotNull);
+ expect(forStatement.rightSeparator, isNotNull);
+ expect(forStatement.updaters, hasLength(2));
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFormalParameter_covariant_final_normal() {
- ParameterKind kind = ParameterKind.REQUIRED;
- createParser('covariant final a');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseForStatement_loop_iu() {
+ createParser('for (var i = 0;; i++) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.covariantKeyword, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
+ expect(statement, new isInstanceOf<ForStatement>());
+ ForStatement forStatement = statement;
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ VariableDeclarationList variables = forStatement.variables;
+ expect(variables, isNotNull);
+ expect(variables.variables, hasLength(1));
+ expect(forStatement.initialization, isNull);
+ expect(forStatement.leftSeparator, isNotNull);
+ expect(forStatement.condition, isNull);
+ expect(forStatement.rightSeparator, isNotNull);
+ expect(forStatement.updaters, hasLength(1));
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFormalParameter_covariant_final_positional() {
- ParameterKind kind = ParameterKind.POSITIONAL;
- createParser('covariant final a = null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseForStatement_loop_u() {
+ createParser('for (;; i++) {}');
+ Statement statement = parser.parseForStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(statement, new isInstanceOf<ForStatement>());
+ ForStatement forStatement = statement;
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ expect(forStatement.variables, isNull);
+ expect(forStatement.initialization, isNull);
+ expect(forStatement.leftSeparator, isNotNull);
+ expect(forStatement.condition, isNull);
+ expect(forStatement.rightSeparator, isNotNull);
+ expect(forStatement.updaters, hasLength(1));
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
}
- void test_parseFormalParameter_covariant_final_type_named() {
- ParameterKind kind = ParameterKind.NAMED;
- createParser('covariant final A a : null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionBody_block() {
+ createParser('{}');
+ FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
+ expectNotNullIfNoErrors(functionBody);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(functionBody, new isInstanceOf<BlockFunctionBody>());
+ BlockFunctionBody body = functionBody;
+ expect(body.keyword, isNull);
+ expect(body.star, isNull);
+ expect(body.block, isNotNull);
+ expect(body.isAsynchronous, isFalse);
+ expect(body.isGenerator, isFalse);
+ expect(body.isSynchronous, isTrue);
}
- void test_parseFormalParameter_covariant_final_type_normal() {
- ParameterKind kind = ParameterKind.REQUIRED;
- createParser('covariant final A a');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionBody_block_async() {
+ createParser('async {}');
+ FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
+ expectNotNullIfNoErrors(functionBody);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.covariantKeyword, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
+ expect(functionBody, new isInstanceOf<BlockFunctionBody>());
+ BlockFunctionBody body = functionBody;
+ expect(body.keyword, isNotNull);
+ expect(body.keyword.lexeme, Parser.ASYNC);
+ expect(body.star, isNull);
+ expect(body.block, isNotNull);
+ expect(body.isAsynchronous, isTrue);
+ expect(body.isGenerator, isFalse);
+ expect(body.isSynchronous, isFalse);
}
- void test_parseFormalParameter_covariant_final_type_positional() {
- ParameterKind kind = ParameterKind.POSITIONAL;
- createParser('covariant final A a = null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionBody_block_asyncGenerator() {
+ createParser('async* {}');
+ FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
+ expectNotNullIfNoErrors(functionBody);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(functionBody, new isInstanceOf<BlockFunctionBody>());
+ BlockFunctionBody body = functionBody;
+ expect(body.keyword, isNotNull);
+ expect(body.keyword.lexeme, Parser.ASYNC);
+ expect(body.star, isNotNull);
+ expect(body.block, isNotNull);
+ expect(body.isAsynchronous, isTrue);
+ expect(body.isGenerator, isTrue);
+ expect(body.isSynchronous, isFalse);
}
- @failingTest
- void test_parseFormalParameter_covariant_type_function() {
- ParameterKind kind = ParameterKind.REQUIRED;
- createParser('covariant String Function(int) a');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionBody_block_syncGenerator() {
+ createParser('sync* {}');
+ FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
+ expectNotNullIfNoErrors(functionBody);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.covariantKeyword, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, new isInstanceOf<GenericFunctionType>());
- expect(simpleParameter.kind, kind);
+ expect(functionBody, new isInstanceOf<BlockFunctionBody>());
+ BlockFunctionBody body = functionBody;
+ expect(body.keyword, isNotNull);
+ expect(body.keyword.lexeme, Parser.SYNC);
+ expect(body.star, isNotNull);
+ expect(body.block, isNotNull);
+ expect(body.isAsynchronous, isFalse);
+ expect(body.isGenerator, isTrue);
+ expect(body.isSynchronous, isTrue);
}
- void test_parseFormalParameter_covariant_type_named() {
- ParameterKind kind = ParameterKind.NAMED;
- createParser('covariant A a : null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionBody_empty() {
+ createParser(';');
+ FunctionBody functionBody = parser.parseFunctionBody(true, null, false);
+ expectNotNullIfNoErrors(functionBody);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
+ EmptyFunctionBody body = functionBody;
+ expect(body.semicolon, isNotNull);
}
- void test_parseFormalParameter_covariant_type_normal() {
- ParameterKind kind = ParameterKind.REQUIRED;
- createParser('covariant A<B<C>> a');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionBody_expression() {
+ createParser('=> y;');
+ FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
+ expectNotNullIfNoErrors(functionBody);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.covariantKeyword, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
+ expect(functionBody, new isInstanceOf<ExpressionFunctionBody>());
+ ExpressionFunctionBody body = functionBody;
+ expect(body.keyword, isNull);
+ expect(body.functionDefinition, isNotNull);
+ expect(body.expression, isNotNull);
+ expect(body.semicolon, isNotNull);
+ expect(body.isAsynchronous, isFalse);
+ expect(body.isGenerator, isFalse);
+ expect(body.isSynchronous, isTrue);
}
- void test_parseFormalParameter_covariant_type_positional() {
- ParameterKind kind = ParameterKind.POSITIONAL;
- createParser('covariant A a = null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionBody_expression_async() {
+ createParser('async => y;');
+ FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
+ expectNotNullIfNoErrors(functionBody);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(functionBody, new isInstanceOf<ExpressionFunctionBody>());
+ ExpressionFunctionBody body = functionBody;
+ expect(body.keyword, isNotNull);
+ expect(body.keyword.lexeme, Parser.ASYNC);
+ expect(body.functionDefinition, isNotNull);
+ expect(body.expression, isNotNull);
+ expect(body.semicolon, isNotNull);
+ expect(body.isAsynchronous, isTrue);
+ expect(body.isGenerator, isFalse);
+ expect(body.isSynchronous, isFalse);
}
- void test_parseFormalParameter_covariant_var_named() {
- ParameterKind kind = ParameterKind.NAMED;
- createParser('covariant var a : null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionBody_nativeFunctionBody() {
+ createParser('native "str";');
+ FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
+ expectNotNullIfNoErrors(functionBody);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(functionBody, new isInstanceOf<NativeFunctionBody>());
+ NativeFunctionBody body = functionBody;
+ expect(body.nativeKeyword, isNotNull);
+ expect(body.stringLiteral, isNotNull);
+ expect(body.semicolon, isNotNull);
}
- void test_parseFormalParameter_covariant_var_normal() {
- ParameterKind kind = ParameterKind.REQUIRED;
- createParser('covariant var a');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionBody_skip_block() {
+ ParserTestCase.parseFunctionBodies = false;
+ createParser('{}');
+ FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
+ expectNotNullIfNoErrors(functionBody);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.covariantKeyword, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
+ expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
}
- void test_parseFormalParameter_covariant_var_positional() {
- ParameterKind kind = ParameterKind.POSITIONAL;
- createParser('covariant var a = null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
- listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ void test_parseFunctionBody_skip_block_invalid() {
+ ParserTestCase.parseFunctionBodies = false;
+ createParser('{');
+ FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
+ expectNotNullIfNoErrors(functionBody);
+ listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TOKEN]);
+ expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
}
- void test_parseFormalParameter_final_named() {
- ParameterKind kind = ParameterKind.NAMED;
- createParser('final a : null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionBody_skip_blocks() {
+ ParserTestCase.parseFunctionBodies = false;
+ createParser('{ {} }');
+ FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
+ expectNotNullIfNoErrors(functionBody);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
}
- void test_parseFormalParameter_final_normal() {
- ParameterKind kind = ParameterKind.REQUIRED;
- createParser('final a');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionBody_skip_expression() {
+ ParserTestCase.parseFunctionBodies = false;
+ createParser('=> y;');
+ FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
+ expectNotNullIfNoErrors(functionBody);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
+ expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
}
- void test_parseFormalParameter_final_positional() {
- ParameterKind kind = ParameterKind.POSITIONAL;
- createParser('final a = null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionDeclarationStatement() {
+ createParser('void f(int p) => p * 2;');
+ FunctionDeclarationStatement statement =
+ parser.parseFunctionDeclarationStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(statement.functionDeclaration, isNotNull);
}
- void test_parseFormalParameter_final_type_named() {
- ParameterKind kind = ParameterKind.NAMED;
- createParser('final A a : null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionDeclarationStatement_typeParameterComments() {
+ enableGenericMethodComments = true;
+ createParser('/*=E*/ f/*<E>*/(/*=E*/ p) => p * 2;');
+ FunctionDeclarationStatement statement =
+ parser.parseFunctionDeclarationStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ FunctionDeclaration f = statement.functionDeclaration;
+ expect(f, isNotNull);
+ expect(f.functionExpression.typeParameters, isNotNull);
+ expect(f.returnType, isNotNull);
+ SimpleFormalParameter p = f.functionExpression.parameters.parameters[0];
+ expect(p.type, isNotNull);
}
- void test_parseFormalParameter_final_type_normal() {
- ParameterKind kind = ParameterKind.REQUIRED;
- createParser('final A a');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionDeclarationStatement_typeParameters() {
+ createParser('E f<E>(E p) => p * 2;');
+ FunctionDeclarationStatement statement =
+ parser.parseFunctionDeclarationStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
+ expect(statement.functionDeclaration, isNotNull);
+ expect(statement.functionDeclaration.functionExpression.typeParameters,
+ isNotNull);
}
- void test_parseFormalParameter_final_type_positional() {
- ParameterKind kind = ParameterKind.POSITIONAL;
- createParser('final A a = null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionDeclarationStatement_typeParameters_noReturnType() {
+ createParser('f<E>(E p) => p * 2;');
+ FunctionDeclarationStatement statement =
+ parser.parseFunctionDeclarationStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(statement.functionDeclaration, isNotNull);
+ expect(statement.functionDeclaration.functionExpression.typeParameters,
+ isNotNull);
}
- @failingTest
- void test_parseFormalParameter_type_function() {
- ParameterKind kind = ParameterKind.REQUIRED;
- createParser('String Function(int) a');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionExpression_body_inExpression() {
+ createParser('(int i) => i++');
+ FunctionExpression expression = parser.parseFunctionExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, new isInstanceOf<GenericFunctionType>());
- expect(simpleParameter.kind, kind);
+ expect(expression.body, isNotNull);
+ expect(expression.typeParameters, isNull);
+ expect(expression.parameters, isNotNull);
+ expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
}
- void test_parseFormalParameter_type_named() {
- ParameterKind kind = ParameterKind.NAMED;
- createParser('A a : null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionExpression_typeParameterComments() {
+ enableGenericMethodComments = true;
+ createParser('/*<E>*/(/*=E*/ i) => i++');
+ FunctionExpression expression = parser.parseFunctionExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(expression.body, isNotNull);
+ expect(expression.typeParameters, isNotNull);
+ expect(expression.parameters, isNotNull);
+ expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
+ SimpleFormalParameter p = expression.parameters.parameters[0];
+ expect(p.type, isNotNull);
}
- void test_parseFormalParameter_type_normal() {
- ParameterKind kind = ParameterKind.REQUIRED;
- createParser('A a');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseFunctionExpression_typeParameters() {
+ createParser('<E>(E i) => i++');
+ FunctionExpression expression = parser.parseFunctionExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
+ expect(expression.body, isNotNull);
+ expect(expression.typeParameters, isNotNull);
+ expect(expression.parameters, isNotNull);
+ expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
}
- void test_parseFormalParameter_type_positional() {
- ParameterKind kind = ParameterKind.POSITIONAL;
- createParser('A a = null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseGetter_nonStatic() {
+ createParser('/// Doc\nT get a;');
+ MethodDeclaration method = parser.parseClassMember('C');
+ expectNotNullIfNoErrors(method);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(method.body, isNotNull);
+ expectCommentText(method.documentationComment, '/// Doc');
+ expect(method.externalKeyword, isNull);
+ expect(method.modifierKeyword, isNull);
+ expect(method.name, isNotNull);
+ expect(method.operatorKeyword, isNull);
+ expect(method.parameters, isNull);
+ expect(method.propertyKeyword, isNotNull);
+ expect((method.returnType as TypeName).name.name, 'T');
}
- void test_parseFormalParameter_var_named() {
- ParameterKind kind = ParameterKind.NAMED;
- createParser('var a : null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseGetter_static() {
+ createParser('/// Doc\nstatic T get a => 42;');
+ MethodDeclaration method = parser.parseClassMember('C');
+ expectNotNullIfNoErrors(method);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(method.body, isNotNull);
+ expectCommentText(method.documentationComment, '/// Doc');
+ expect(method.externalKeyword, isNull);
+ expect(method.modifierKeyword.lexeme, 'static');
+ expect(method.name, isNotNull);
+ expect(method.operatorKeyword, isNull);
+ expect(method.typeParameters, isNull);
+ expect(method.parameters, isNull);
+ expect(method.propertyKeyword, isNotNull);
+ expect((method.returnType as TypeName).name.name, 'T');
}
- void test_parseFormalParameter_var_normal() {
- ParameterKind kind = ParameterKind.REQUIRED;
- createParser('var a');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseIdentifierList_multiple() {
+ createParser('a, b, c');
+ List<SimpleIdentifier> list = parser.parseIdentifierList();
+ expectNotNullIfNoErrors(list);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
+ expect(list, hasLength(3));
}
- void test_parseFormalParameter_var_positional() {
- ParameterKind kind = ParameterKind.POSITIONAL;
- createParser('var a = null');
- FormalParameter parameter = parser.parseFormalParameter(kind);
- expectNotNullIfNoErrors(parameter);
+ void test_parseIdentifierList_single() {
+ createParser('a');
+ List<SimpleIdentifier> list = parser.parseIdentifierList();
+ expectNotNullIfNoErrors(list);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter defaultParameter = parameter;
- SimpleFormalParameter simpleParameter =
- defaultParameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
- expect(defaultParameter.separator, isNotNull);
- expect(defaultParameter.defaultValue, isNotNull);
- expect(defaultParameter.kind, kind);
+ expect(list, hasLength(1));
}
- void test_parseFormalParameterList_empty() {
- createParser('()');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
+ void test_parseIfStatement_else_block() {
+ createParser('if (x) {} else {}');
+ IfStatement statement = parser.parseIfStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNull);
- expect(list.parameters, hasLength(0));
- expect(list.rightDelimiter, isNull);
- expect(list.rightParenthesis, isNotNull);
+ expect(statement.ifKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.condition, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.thenStatement, isNotNull);
+ expect(statement.elseKeyword, isNotNull);
+ expect(statement.elseStatement, isNotNull);
}
- void test_parseFormalParameterList_named_multiple() {
- createParser('({A a : 1, B b, C c : 3})');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
+ void test_parseIfStatement_else_statement() {
+ createParser('if (x) f(x); else f(y);');
+ IfStatement statement = parser.parseIfStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNotNull);
- expect(list.parameters, hasLength(3));
- expect(list.rightDelimiter, isNotNull);
- expect(list.rightParenthesis, isNotNull);
+ expect(statement.ifKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.condition, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.thenStatement, isNotNull);
+ expect(statement.elseKeyword, isNotNull);
+ expect(statement.elseStatement, isNotNull);
}
- void test_parseFormalParameterList_named_single() {
- createParser('({A a})');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
+ void test_parseIfStatement_noElse_block() {
+ createParser('if (x) {}');
+ IfStatement statement = parser.parseIfStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNotNull);
- expect(list.parameters, hasLength(1));
- expect(list.rightDelimiter, isNotNull);
- expect(list.rightParenthesis, isNotNull);
+ expect(statement.ifKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.condition, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.thenStatement, isNotNull);
+ expect(statement.elseKeyword, isNull);
+ expect(statement.elseStatement, isNull);
}
- void test_parseFormalParameterList_named_trailing_comma() {
- createParser('(A a, {B b,})');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
+ void test_parseIfStatement_noElse_statement() {
+ createParser('if (x) f(x);');
+ IfStatement statement = parser.parseIfStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNotNull);
- expect(list.parameters, hasLength(2));
- expect(list.rightDelimiter, isNotNull);
- expect(list.rightParenthesis, isNotNull);
+ expect(statement.ifKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.condition, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.thenStatement, isNotNull);
+ expect(statement.elseKeyword, isNull);
+ expect(statement.elseStatement, isNull);
}
- void test_parseFormalParameterList_normal_multiple() {
- createParser('(A a, B b, C c)');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
+ void test_parseImplementsClause_multiple() {
+ createParser('implements A, B, C');
+ ImplementsClause clause = parser.parseImplementsClause();
+ expectNotNullIfNoErrors(clause);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNull);
- expect(list.parameters, hasLength(3));
- expect(list.rightDelimiter, isNull);
- expect(list.rightParenthesis, isNotNull);
+ expect(clause.interfaces, hasLength(3));
+ expect(clause.implementsKeyword, isNotNull);
}
- void test_parseFormalParameterList_normal_named() {
- createParser('(A a, {B b})');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
+ void test_parseImplementsClause_single() {
+ createParser('implements A');
+ ImplementsClause clause = parser.parseImplementsClause();
+ expectNotNullIfNoErrors(clause);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNotNull);
- expect(list.parameters, hasLength(2));
- expect(list.rightDelimiter, isNotNull);
- expect(list.rightParenthesis, isNotNull);
+ expect(clause.interfaces, hasLength(1));
+ expect(clause.implementsKeyword, isNotNull);
}
- void test_parseFormalParameterList_normal_named_inFunctionType() {
- createParser('(A, {B b})');
- FormalParameterList list =
- parser.parseFormalParameterList(inFunctionType: true);
- expectNotNullIfNoErrors(list);
+ void test_parseInitializedIdentifierList_type() {
+ createParser("/// Doc\nstatic T a = 1, b, c = 3;");
+ FieldDeclaration declaration = parser.parseClassMember('C');
+ expectNotNullIfNoErrors(declaration);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNotNull);
- expect(list.rightDelimiter, isNotNull);
- expect(list.rightParenthesis, isNotNull);
- NodeList<FormalParameter> parameters = list.parameters;
- expect(parameters, hasLength(2));
-
- expect(parameters[0], new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter required = parameters[0];
- expect(required.identifier, isNull);
- expect(required.type, new isInstanceOf<TypeName>());
- expect((required.type as TypeName).name.name, 'A');
-
- expect(parameters[1], new isInstanceOf<DefaultFormalParameter>());
- DefaultFormalParameter named = parameters[1];
- expect(named.identifier, isNotNull);
- expect(named.parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simple = named.parameter;
- expect(simple.type, new isInstanceOf<TypeName>());
- expect((simple.type as TypeName).name.name, 'B');
+ expectCommentText(declaration.documentationComment, '/// Doc');
+ VariableDeclarationList fields = declaration.fields;
+ expect(fields, isNotNull);
+ expect(fields.keyword, isNull);
+ expect((fields.type as TypeName).name.name, 'T');
+ expect(fields.variables, hasLength(3));
+ expect(declaration.staticKeyword.lexeme, 'static');
+ expect(declaration.semicolon, isNotNull);
}
- void test_parseFormalParameterList_normal_positional() {
- createParser('(A a, [B b])');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
- listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNotNull);
- expect(list.parameters, hasLength(2));
- expect(list.rightDelimiter, isNotNull);
- expect(list.rightParenthesis, isNotNull);
+ void test_parseInitializedIdentifierList_var() {
+ createParser('/// Doc\nstatic var a = 1, b, c = 3;');
+ FieldDeclaration declaration = parser.parseClassMember('C');
+ expectNotNullIfNoErrors(declaration);
+ listener.assertNoErrors();
+ expectCommentText(declaration.documentationComment, '/// Doc');
+ VariableDeclarationList fields = declaration.fields;
+ expect(fields, isNotNull);
+ expect(fields.keyword.lexeme, 'var');
+ expect(fields.type, isNull);
+ expect(fields.variables, hasLength(3));
+ expect(declaration.staticKeyword.lexeme, 'static');
+ expect(declaration.semicolon, isNotNull);
}
- void test_parseFormalParameterList_normal_single() {
- createParser('(A a)');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
+ void test_parseInstanceCreationExpression_qualifiedType() {
+ Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+ createParser('A.B()');
+ InstanceCreationExpression expression =
+ parser.parseInstanceCreationExpression(token);
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNull);
- expect(list.parameters, hasLength(1));
- expect(list.rightDelimiter, isNull);
- expect(list.rightParenthesis, isNotNull);
+ expect(expression.keyword, token);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ TypeName type = name.type;
+ expect(type, isNotNull);
+ expect(type.typeArguments, isNull);
+ expect(name.period, isNull);
+ expect(name.name, isNull);
+ expect(expression.argumentList, isNotNull);
}
- void test_parseFormalParameterList_normal_single_Function() {
- createParser('(Function f)');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
+ void test_parseInstanceCreationExpression_qualifiedType_named() {
+ Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+ createParser('A.B.c()');
+ InstanceCreationExpression expression =
+ parser.parseInstanceCreationExpression(token);
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNull);
- expect(list.parameters, hasLength(1));
- expect(list.rightDelimiter, isNull);
- expect(list.rightParenthesis, isNotNull);
+ expect(expression.keyword, token);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ TypeName type = name.type;
+ expect(type, isNotNull);
+ expect(type.typeArguments, isNull);
+ expect(name.period, isNotNull);
+ expect(name.name, isNotNull);
+ expect(expression.argumentList, isNotNull);
}
- void test_parseFormalParameterList_normal_single_trailing_comma() {
- createParser('(A a,)');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
+ void
+ test_parseInstanceCreationExpression_qualifiedType_named_typeParameterComment() {
+ enableGenericMethodComments = true;
+ Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+ createParser('A.B/*<E>*/.c()');
+ InstanceCreationExpression expression =
+ parser.parseInstanceCreationExpression(token);
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNull);
- expect(list.parameters, hasLength(1));
- expect(list.rightDelimiter, isNull);
- expect(list.rightParenthesis, isNotNull);
+ expect(expression.keyword, token);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ TypeName type = name.type;
+ expect(type, isNotNull);
+ expect(type.typeArguments.arguments, hasLength(1));
+ expect(name.period, isNotNull);
+ expect(name.name, isNotNull);
+ expect(expression.argumentList, isNotNull);
}
- void test_parseFormalParameterList_positional_multiple() {
- createParser('([A a = null, B b, C c = null])');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
+ void
+ test_parseInstanceCreationExpression_qualifiedType_named_typeParameters() {
+ Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+ createParser('A.B<E>.c()');
+ InstanceCreationExpression expression =
+ parser.parseInstanceCreationExpression(token);
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNotNull);
- expect(list.parameters, hasLength(3));
- expect(list.rightDelimiter, isNotNull);
- expect(list.rightParenthesis, isNotNull);
+ expect(expression.keyword, token);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ TypeName type = name.type;
+ expect(type, isNotNull);
+ expect(type.typeArguments.arguments, hasLength(1));
+ expect(name.period, isNotNull);
+ expect(name.name, isNotNull);
+ expect(expression.argumentList, isNotNull);
}
- void test_parseFormalParameterList_positional_single() {
- createParser('([A a = null])');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
+ void
+ test_parseInstanceCreationExpression_qualifiedType_typeParameterComment() {
+ enableGenericMethodComments = true;
+ Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+ createParser('A.B/*<E>*/()');
+ InstanceCreationExpression expression =
+ parser.parseInstanceCreationExpression(token);
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNotNull);
- expect(list.parameters, hasLength(1));
- expect(list.rightDelimiter, isNotNull);
- expect(list.rightParenthesis, isNotNull);
+ expect(expression.keyword, token);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ TypeName type = name.type;
+ expect(type, isNotNull);
+ expect(type.typeArguments.arguments, hasLength(1));
+ expect(name.period, isNull);
+ expect(name.name, isNull);
+ expect(expression.argumentList, isNotNull);
}
- void test_parseFormalParameterList_positional_trailing_comma() {
- createParser('(A a, [B b,])');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
+ void test_parseInstanceCreationExpression_qualifiedType_typeParameters() {
+ Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+ createParser('A.B<E>()');
+ InstanceCreationExpression expression =
+ parser.parseInstanceCreationExpression(token);
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNotNull);
- expect(list.parameters, hasLength(2));
- expect(list.rightDelimiter, isNotNull);
- expect(list.rightParenthesis, isNotNull);
+ expect(expression.keyword, token);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ TypeName type = name.type;
+ expect(type, isNotNull);
+ expect(type.typeArguments.arguments, hasLength(1));
+ expect(name.period, isNull);
+ expect(name.name, isNull);
+ expect(expression.argumentList, isNotNull);
}
- void test_parseFormalParameterList_prefixedType() {
- createParser('(io.File f)');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
+ void test_parseInstanceCreationExpression_type() {
+ Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+ createParser('A()');
+ InstanceCreationExpression expression =
+ parser.parseInstanceCreationExpression(token);
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNull);
- expect(list.parameters, hasLength(1));
- expect(list.parameters[0].toSource(), 'io.File f');
- expect(list.rightDelimiter, isNull);
- expect(list.rightParenthesis, isNotNull);
+ expect(expression.keyword, token);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ TypeName type = name.type;
+ expect(type, isNotNull);
+ expect(type.typeArguments, isNull);
+ expect(name.period, isNull);
+ expect(name.name, isNull);
+ expect(expression.argumentList, isNotNull);
}
- void test_parseFormalParameterList_prefixedType_partial() {
- createParser('(io.)');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
- listener.assertErrorsWithCodes([
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER
- ]);
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNull);
- expect(list.parameters, hasLength(1));
- expect(list.parameters[0].toSource(), 'io. ');
- expect(list.rightDelimiter, isNull);
- expect(list.rightParenthesis, isNotNull);
+ void test_parseInstanceCreationExpression_type_named() {
+ enableGenericMethodComments = true;
+ Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+ createParser('A.c()');
+ InstanceCreationExpression expression =
+ parser.parseInstanceCreationExpression(token);
+ expectNotNullIfNoErrors(expression);
+ listener.assertNoErrors();
+ expect(expression.keyword, token);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ TypeName type = name.type;
+ expect(type, isNotNull);
+ expect(type.typeArguments, isNull);
+ expect(name.period, isNull);
+ expect(name.name, isNull);
+ expect(expression.argumentList, isNotNull);
}
- void test_parseFormalParameterList_prefixedType_partial2() {
- createParser('(io.,a)');
- FormalParameterList list = parser.parseFormalParameterList();
- expectNotNullIfNoErrors(list);
- listener.assertErrorsWithCodes([
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER
- ]);
- expect(list.leftParenthesis, isNotNull);
- expect(list.leftDelimiter, isNull);
- expect(list.parameters, hasLength(2));
- expect(list.parameters[0].toSource(), 'io. ');
- expect(list.parameters[1].toSource(), 'a');
- expect(list.rightDelimiter, isNull);
- expect(list.rightParenthesis, isNotNull);
+ void test_parseInstanceCreationExpression_type_named_typeParameterComment() {
+ enableGenericMethodComments = true;
+ Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+ createParser('A/*<B>*/.c()');
+ InstanceCreationExpression expression =
+ parser.parseInstanceCreationExpression(token);
+ expectNotNullIfNoErrors(expression);
+ listener.assertNoErrors();
+ expect(expression.keyword, token);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ TypeName type = name.type;
+ expect(type, isNotNull);
+ expect(type.typeArguments.arguments, hasLength(1));
+ expect(name.period, isNotNull);
+ expect(name.name, isNotNull);
+ expect(expression.argumentList, isNotNull);
}
- void test_parseForStatement_each_await() {
- createParser('await for (element in list) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseInstanceCreationExpression_type_named_typeParameters() {
+ Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+ createParser('A<B>.c()');
+ InstanceCreationExpression expression =
+ parser.parseInstanceCreationExpression(token);
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForEachStatement>());
- ForEachStatement forStatement = statement;
- expect(forStatement.awaitKeyword, isNotNull);
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- expect(forStatement.loopVariable, isNull);
- expect(forStatement.identifier, isNotNull);
- expect(forStatement.inKeyword, isNotNull);
- expect(forStatement.iterable, isNotNull);
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(expression.keyword, token);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ TypeName type = name.type;
+ expect(type, isNotNull);
+ expect(type.typeArguments.arguments, hasLength(1));
+ expect(name.period, isNotNull);
+ expect(name.name, isNotNull);
+ expect(expression.argumentList, isNotNull);
}
- void test_parseForStatement_each_identifier() {
- createParser('for (element in list) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseInstanceCreationExpression_type_typeParameterComment() {
+ enableGenericMethodComments = true;
+ Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+ createParser('A/*<B>*/()');
+ InstanceCreationExpression expression =
+ parser.parseInstanceCreationExpression(token);
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForEachStatement>());
- ForEachStatement forStatement = statement;
- expect(forStatement.awaitKeyword, isNull);
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- expect(forStatement.loopVariable, isNull);
- expect(forStatement.identifier, isNotNull);
- expect(forStatement.inKeyword, isNotNull);
- expect(forStatement.iterable, isNotNull);
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(expression.keyword, token);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ TypeName type = name.type;
+ expect(type, isNotNull);
+ expect(type.typeArguments.arguments, hasLength(1));
+ expect(name.period, isNull);
+ expect(name.name, isNull);
+ expect(expression.argumentList, isNotNull);
}
- void test_parseForStatement_each_noType_metadata() {
- createParser('for (@A var element in list) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseInstanceCreationExpression_type_typeParameters() {
+ Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+ createParser('A<B>()');
+ InstanceCreationExpression expression =
+ parser.parseInstanceCreationExpression(token);
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForEachStatement>());
- ForEachStatement forStatement = statement;
- expect(forStatement.awaitKeyword, isNull);
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- expect(forStatement.loopVariable, isNotNull);
- expect(forStatement.loopVariable.metadata, hasLength(1));
- expect(forStatement.identifier, isNull);
- expect(forStatement.inKeyword, isNotNull);
- expect(forStatement.iterable, isNotNull);
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(expression.keyword, token);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ TypeName type = name.type;
+ expect(type, isNotNull);
+ expect(type.typeArguments.arguments, hasLength(1));
+ expect(name.period, isNull);
+ expect(name.name, isNull);
+ expect(expression.argumentList, isNotNull);
}
- void test_parseForStatement_each_type() {
- createParser('for (A element in list) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseInstanceCreationExpression_type_typeParameters_nullable() {
+ enableNnbd = true;
+ Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+ createParser('A<B?>()');
+ InstanceCreationExpression expression =
+ parser.parseInstanceCreationExpression(token);
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForEachStatement>());
- ForEachStatement forStatement = statement;
- expect(forStatement.awaitKeyword, isNull);
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- expect(forStatement.loopVariable, isNotNull);
- expect(forStatement.identifier, isNull);
- expect(forStatement.inKeyword, isNotNull);
- expect(forStatement.iterable, isNotNull);
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(expression.keyword, token);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ TypeName type = name.type;
+ expect(type, isNotNull);
+ expect(name.period, isNull);
+ expect(name.name, isNull);
+ expect(expression.argumentList, isNotNull);
+ NodeList<TypeAnnotation> arguments = type.typeArguments.arguments;
+ expect(arguments, hasLength(1));
+ expect((arguments[0] as TypeName).question, isNotNull);
}
- void test_parseForStatement_each_var() {
- createParser('for (var element in list) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseLibraryIdentifier_multiple() {
+ String name = "a.b.c";
+ createParser(name);
+ LibraryIdentifier identifier = parser.parseLibraryIdentifier();
+ expectNotNullIfNoErrors(identifier);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForEachStatement>());
- ForEachStatement forStatement = statement;
- expect(forStatement.awaitKeyword, isNull);
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- expect(forStatement.loopVariable, isNotNull);
- expect(forStatement.identifier, isNull);
- expect(forStatement.inKeyword, isNotNull);
- expect(forStatement.iterable, isNotNull);
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(identifier.name, name);
}
- void test_parseForStatement_loop_c() {
- createParser('for (; i < count;) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseLibraryIdentifier_single() {
+ String name = "a";
+ createParser(name);
+ LibraryIdentifier identifier = parser.parseLibraryIdentifier();
+ expectNotNullIfNoErrors(identifier);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForStatement>());
- ForStatement forStatement = statement;
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- expect(forStatement.variables, isNull);
- expect(forStatement.initialization, isNull);
- expect(forStatement.leftSeparator, isNotNull);
- expect(forStatement.condition, isNotNull);
- expect(forStatement.rightSeparator, isNotNull);
- expect(forStatement.updaters, hasLength(0));
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(identifier.name, name);
}
- void test_parseForStatement_loop_cu() {
- createParser('for (; i < count; i++) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseListLiteral_empty_oneToken() {
+ Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
+ TypeArgumentList typeArguments = null;
+ createParser('[]');
+ ListLiteral literal = parser.parseListLiteral(token, typeArguments);
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForStatement>());
- ForStatement forStatement = statement;
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- expect(forStatement.variables, isNull);
- expect(forStatement.initialization, isNull);
- expect(forStatement.leftSeparator, isNotNull);
- expect(forStatement.condition, isNotNull);
- expect(forStatement.rightSeparator, isNotNull);
- expect(forStatement.updaters, hasLength(1));
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(literal.constKeyword, token);
+ expect(literal.typeArguments, typeArguments);
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.elements, hasLength(0));
+ expect(literal.rightBracket, isNotNull);
}
- void test_parseForStatement_loop_ecu() {
- createParser('for (i--; i < count; i++) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseListLiteral_empty_oneToken_withComment() {
+ Token token = null;
+ TypeArgumentList typeArguments = null;
+ createParser('/* 0 */ []');
+ ListLiteral literal = parser.parseListLiteral(token, typeArguments);
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForStatement>());
- ForStatement forStatement = statement;
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- expect(forStatement.variables, isNull);
- expect(forStatement.initialization, isNotNull);
- expect(forStatement.leftSeparator, isNotNull);
- expect(forStatement.condition, isNotNull);
- expect(forStatement.rightSeparator, isNotNull);
- expect(forStatement.updaters, hasLength(1));
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(literal.constKeyword, token);
+ expect(literal.typeArguments, typeArguments);
+ Token leftBracket = literal.leftBracket;
+ expect(leftBracket, isNotNull);
+ expect(leftBracket.precedingComments, isNotNull);
+ expect(literal.elements, hasLength(0));
+ expect(literal.rightBracket, isNotNull);
}
- void test_parseForStatement_loop_i() {
- createParser('for (var i = 0;;) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseListLiteral_empty_twoTokens() {
+ Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
+ TypeArgumentList typeArguments = null;
+ createParser('[ ]');
+ ListLiteral literal = parser.parseListLiteral(token, typeArguments);
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForStatement>());
- ForStatement forStatement = statement;
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- VariableDeclarationList variables = forStatement.variables;
- expect(variables, isNotNull);
- expect(variables.metadata, hasLength(0));
- expect(variables.variables, hasLength(1));
- expect(forStatement.initialization, isNull);
- expect(forStatement.leftSeparator, isNotNull);
- expect(forStatement.condition, isNull);
- expect(forStatement.rightSeparator, isNotNull);
- expect(forStatement.updaters, hasLength(0));
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(literal.constKeyword, token);
+ expect(literal.typeArguments, typeArguments);
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.elements, hasLength(0));
+ expect(literal.rightBracket, isNotNull);
}
- void test_parseForStatement_loop_i_withMetadata() {
- createParser('for (@A var i = 0;;) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
- listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForStatement>());
- ForStatement forStatement = statement;
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- VariableDeclarationList variables = forStatement.variables;
- expect(variables, isNotNull);
- expect(variables.metadata, hasLength(1));
- expect(variables.variables, hasLength(1));
- expect(forStatement.initialization, isNull);
- expect(forStatement.leftSeparator, isNotNull);
- expect(forStatement.condition, isNull);
- expect(forStatement.rightSeparator, isNotNull);
- expect(forStatement.updaters, hasLength(0));
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ void test_parseListLiteral_multiple() {
+ createParser('[1, 2, 3]');
+ ListLiteral literal = parser.parseListLiteral(null, null);
+ expectNotNullIfNoErrors(literal);
+ listener.assertNoErrors();
+ expect(literal.constKeyword, isNull);
+ expect(literal.typeArguments, isNull);
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.elements, hasLength(3));
+ expect(literal.rightBracket, isNotNull);
}
- void test_parseForStatement_loop_ic() {
- createParser('for (var i = 0; i < count;) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseListLiteral_single() {
+ createParser('[1]');
+ ListLiteral literal = parser.parseListLiteral(null, null);
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForStatement>());
- ForStatement forStatement = statement;
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- VariableDeclarationList variables = forStatement.variables;
- expect(variables, isNotNull);
- expect(variables.variables, hasLength(1));
- expect(forStatement.initialization, isNull);
- expect(forStatement.leftSeparator, isNotNull);
- expect(forStatement.condition, isNotNull);
- expect(forStatement.rightSeparator, isNotNull);
- expect(forStatement.updaters, hasLength(0));
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(literal.constKeyword, isNull);
+ expect(literal.typeArguments, isNull);
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.elements, hasLength(1));
+ expect(literal.rightBracket, isNotNull);
}
- void test_parseForStatement_loop_icu() {
- createParser('for (var i = 0; i < count; i++) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseListOrMapLiteral_list_noType() {
+ createParser('[1]');
+ TypedLiteral literal = parser.parseListOrMapLiteral(null);
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForStatement>());
- ForStatement forStatement = statement;
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- VariableDeclarationList variables = forStatement.variables;
- expect(variables, isNotNull);
- expect(variables.variables, hasLength(1));
- expect(forStatement.initialization, isNull);
- expect(forStatement.leftSeparator, isNotNull);
- expect(forStatement.condition, isNotNull);
- expect(forStatement.rightSeparator, isNotNull);
- expect(forStatement.updaters, hasLength(1));
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(literal, new isInstanceOf<ListLiteral>());
+ ListLiteral listLiteral = literal;
+ expect(listLiteral.constKeyword, isNull);
+ expect(listLiteral.typeArguments, isNull);
+ expect(listLiteral.leftBracket, isNotNull);
+ expect(listLiteral.elements, hasLength(1));
+ expect(listLiteral.rightBracket, isNotNull);
}
- void test_parseForStatement_loop_iicuu() {
- createParser('for (int i = 0, j = count; i < j; i++, j--) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseListOrMapLiteral_list_type() {
+ createParser('<int> [1]');
+ TypedLiteral literal = parser.parseListOrMapLiteral(null);
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForStatement>());
- ForStatement forStatement = statement;
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- VariableDeclarationList variables = forStatement.variables;
- expect(variables, isNotNull);
- expect(variables.variables, hasLength(2));
- expect(forStatement.initialization, isNull);
- expect(forStatement.leftSeparator, isNotNull);
- expect(forStatement.condition, isNotNull);
- expect(forStatement.rightSeparator, isNotNull);
- expect(forStatement.updaters, hasLength(2));
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(literal, new isInstanceOf<ListLiteral>());
+ ListLiteral listLiteral = literal;
+ expect(listLiteral.constKeyword, isNull);
+ expect(listLiteral.typeArguments, isNotNull);
+ expect(listLiteral.leftBracket, isNotNull);
+ expect(listLiteral.elements, hasLength(1));
+ expect(listLiteral.rightBracket, isNotNull);
}
- void test_parseForStatement_loop_iu() {
- createParser('for (var i = 0;; i++) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseListOrMapLiteral_map_noType() {
+ createParser("{'1' : 1}");
+ TypedLiteral literal = parser.parseListOrMapLiteral(null);
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForStatement>());
- ForStatement forStatement = statement;
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- VariableDeclarationList variables = forStatement.variables;
- expect(variables, isNotNull);
- expect(variables.variables, hasLength(1));
- expect(forStatement.initialization, isNull);
- expect(forStatement.leftSeparator, isNotNull);
- expect(forStatement.condition, isNull);
- expect(forStatement.rightSeparator, isNotNull);
- expect(forStatement.updaters, hasLength(1));
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(literal, new isInstanceOf<MapLiteral>());
+ MapLiteral mapLiteral = literal;
+ expect(mapLiteral.constKeyword, isNull);
+ expect(mapLiteral.typeArguments, isNull);
+ expect(mapLiteral.leftBracket, isNotNull);
+ expect(mapLiteral.entries, hasLength(1));
+ expect(mapLiteral.rightBracket, isNotNull);
}
- void test_parseForStatement_loop_u() {
- createParser('for (;; i++) {}');
- Statement statement = parser.parseForStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseListOrMapLiteral_map_type() {
+ createParser("<String, int> {'1' : 1}");
+ TypedLiteral literal = parser.parseListOrMapLiteral(null);
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ForStatement>());
- ForStatement forStatement = statement;
- expect(forStatement.forKeyword, isNotNull);
- expect(forStatement.leftParenthesis, isNotNull);
- expect(forStatement.variables, isNull);
- expect(forStatement.initialization, isNull);
- expect(forStatement.leftSeparator, isNotNull);
- expect(forStatement.condition, isNull);
- expect(forStatement.rightSeparator, isNotNull);
- expect(forStatement.updaters, hasLength(1));
- expect(forStatement.rightParenthesis, isNotNull);
- expect(forStatement.body, isNotNull);
+ expect(literal, new isInstanceOf<MapLiteral>());
+ MapLiteral mapLiteral = literal;
+ expect(mapLiteral.constKeyword, isNull);
+ expect(mapLiteral.typeArguments, isNotNull);
+ expect(mapLiteral.leftBracket, isNotNull);
+ expect(mapLiteral.entries, hasLength(1));
+ expect(mapLiteral.rightBracket, isNotNull);
}
- void test_parseFunctionBody_block() {
- createParser('{}');
- FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
- expectNotNullIfNoErrors(functionBody);
+ void test_parseLogicalAndExpression() {
+ createParser('x && y');
+ Expression expression = parser.parseLogicalAndExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(functionBody, new isInstanceOf<BlockFunctionBody>());
- BlockFunctionBody body = functionBody;
- expect(body.keyword, isNull);
- expect(body.star, isNull);
- expect(body.block, isNotNull);
- expect(body.isAsynchronous, isFalse);
- expect(body.isGenerator, isFalse);
- expect(body.isSynchronous, isTrue);
+ expect(expression, new isInstanceOf<BinaryExpression>());
+ BinaryExpression binaryExpression = expression;
+ expect(binaryExpression.leftOperand, isNotNull);
+ expect(binaryExpression.operator, isNotNull);
+ expect(binaryExpression.operator.type, TokenType.AMPERSAND_AMPERSAND);
+ expect(binaryExpression.rightOperand, isNotNull);
}
- void test_parseFunctionBody_block_async() {
- createParser('async {}');
- FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
- expectNotNullIfNoErrors(functionBody);
+ void test_parseLogicalOrExpression() {
+ createParser('x || y');
+ Expression expression = parser.parseLogicalOrExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(functionBody, new isInstanceOf<BlockFunctionBody>());
- BlockFunctionBody body = functionBody;
- expect(body.keyword, isNotNull);
- expect(body.keyword.lexeme, Parser.ASYNC);
- expect(body.star, isNull);
- expect(body.block, isNotNull);
- expect(body.isAsynchronous, isTrue);
- expect(body.isGenerator, isFalse);
- expect(body.isSynchronous, isFalse);
+ expect(expression, new isInstanceOf<BinaryExpression>());
+ BinaryExpression binaryExpression = expression;
+ expect(binaryExpression.leftOperand, isNotNull);
+ expect(binaryExpression.operator, isNotNull);
+ expect(binaryExpression.operator.type, TokenType.BAR_BAR);
+ expect(binaryExpression.rightOperand, isNotNull);
}
- void test_parseFunctionBody_block_asyncGenerator() {
- createParser('async* {}');
- FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
- expectNotNullIfNoErrors(functionBody);
+ void test_parseMapLiteral_empty() {
+ Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
+ TypeArgumentList typeArguments = AstTestFactory.typeArgumentList(
+ [AstTestFactory.typeName4("String"), AstTestFactory.typeName4("int")]);
+ createParser('{}');
+ MapLiteral literal = parser.parseMapLiteral(token, typeArguments);
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(functionBody, new isInstanceOf<BlockFunctionBody>());
- BlockFunctionBody body = functionBody;
- expect(body.keyword, isNotNull);
- expect(body.keyword.lexeme, Parser.ASYNC);
- expect(body.star, isNotNull);
- expect(body.block, isNotNull);
- expect(body.isAsynchronous, isTrue);
- expect(body.isGenerator, isTrue);
- expect(body.isSynchronous, isFalse);
+ expect(literal.constKeyword, token);
+ expect(literal.typeArguments, typeArguments);
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.entries, hasLength(0));
+ expect(literal.rightBracket, isNotNull);
}
- void test_parseFunctionBody_block_syncGenerator() {
- createParser('sync* {}');
- FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
- expectNotNullIfNoErrors(functionBody);
+ void test_parseMapLiteral_multiple() {
+ createParser("{'a' : b, 'x' : y}");
+ MapLiteral literal = parser.parseMapLiteral(null, null);
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(functionBody, new isInstanceOf<BlockFunctionBody>());
- BlockFunctionBody body = functionBody;
- expect(body.keyword, isNotNull);
- expect(body.keyword.lexeme, Parser.SYNC);
- expect(body.star, isNotNull);
- expect(body.block, isNotNull);
- expect(body.isAsynchronous, isFalse);
- expect(body.isGenerator, isTrue);
- expect(body.isSynchronous, isTrue);
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.entries, hasLength(2));
+ expect(literal.rightBracket, isNotNull);
}
- void test_parseFunctionBody_empty() {
- createParser(';');
- FunctionBody functionBody = parser.parseFunctionBody(true, null, false);
- expectNotNullIfNoErrors(functionBody);
+ void test_parseMapLiteral_single() {
+ createParser("{'x' : y}");
+ MapLiteral literal = parser.parseMapLiteral(null, null);
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
- EmptyFunctionBody body = functionBody;
- expect(body.semicolon, isNotNull);
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.entries, hasLength(1));
+ expect(literal.rightBracket, isNotNull);
}
- void test_parseFunctionBody_expression() {
- createParser('=> y;');
- FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
- expectNotNullIfNoErrors(functionBody);
+ void test_parseMapLiteralEntry_complex() {
+ createParser('2 + 2 : y');
+ MapLiteralEntry entry = parser.parseMapLiteralEntry();
+ expectNotNullIfNoErrors(entry);
listener.assertNoErrors();
- expect(functionBody, new isInstanceOf<ExpressionFunctionBody>());
- ExpressionFunctionBody body = functionBody;
- expect(body.keyword, isNull);
- expect(body.functionDefinition, isNotNull);
- expect(body.expression, isNotNull);
- expect(body.semicolon, isNotNull);
- expect(body.isAsynchronous, isFalse);
- expect(body.isGenerator, isFalse);
- expect(body.isSynchronous, isTrue);
+ expect(entry.key, isNotNull);
+ expect(entry.separator, isNotNull);
+ expect(entry.value, isNotNull);
}
- void test_parseFunctionBody_expression_async() {
- createParser('async => y;');
- FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
- expectNotNullIfNoErrors(functionBody);
+ void test_parseMapLiteralEntry_int() {
+ createParser('0 : y');
+ MapLiteralEntry entry = parser.parseMapLiteralEntry();
+ expectNotNullIfNoErrors(entry);
listener.assertNoErrors();
- expect(functionBody, new isInstanceOf<ExpressionFunctionBody>());
- ExpressionFunctionBody body = functionBody;
- expect(body.keyword, isNotNull);
- expect(body.keyword.lexeme, Parser.ASYNC);
- expect(body.functionDefinition, isNotNull);
- expect(body.expression, isNotNull);
- expect(body.semicolon, isNotNull);
- expect(body.isAsynchronous, isTrue);
- expect(body.isGenerator, isFalse);
- expect(body.isSynchronous, isFalse);
+ expect(entry.key, isNotNull);
+ expect(entry.separator, isNotNull);
+ expect(entry.value, isNotNull);
}
- void test_parseFunctionBody_nativeFunctionBody() {
- createParser('native "str";');
- FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
- expectNotNullIfNoErrors(functionBody);
+ void test_parseMapLiteralEntry_string() {
+ createParser("'x' : y");
+ MapLiteralEntry entry = parser.parseMapLiteralEntry();
+ expectNotNullIfNoErrors(entry);
listener.assertNoErrors();
- expect(functionBody, new isInstanceOf<NativeFunctionBody>());
- NativeFunctionBody body = functionBody;
- expect(body.nativeKeyword, isNotNull);
- expect(body.stringLiteral, isNotNull);
- expect(body.semicolon, isNotNull);
+ expect(entry.key, isNotNull);
+ expect(entry.separator, isNotNull);
+ expect(entry.value, isNotNull);
}
- void test_parseFunctionBody_skip_block() {
- ParserTestCase.parseFunctionBodies = false;
- createParser('{}');
- FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
- expectNotNullIfNoErrors(functionBody);
+ void test_parseModifiers_abstract() {
+ createParser('abstract A');
+ Modifiers modifiers = parser.parseModifiers();
+ expectNotNullIfNoErrors(modifiers);
listener.assertNoErrors();
- expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
+ expect(modifiers.abstractKeyword, isNotNull);
}
- void test_parseFunctionBody_skip_block_invalid() {
- ParserTestCase.parseFunctionBodies = false;
- createParser('{');
- FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
- expectNotNullIfNoErrors(functionBody);
- listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TOKEN]);
- expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
+ void test_parseModifiers_const() {
+ createParser('const A');
+ Modifiers modifiers = parser.parseModifiers();
+ expectNotNullIfNoErrors(modifiers);
+ listener.assertNoErrors();
+ expect(modifiers.constKeyword, isNotNull);
}
- void test_parseFunctionBody_skip_blocks() {
- ParserTestCase.parseFunctionBodies = false;
- createParser('{ {} }');
- FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
- expectNotNullIfNoErrors(functionBody);
+ void test_parseModifiers_covariant() {
+ createParser('covariant A');
+ Modifiers modifiers = parser.parseModifiers();
+ expectNotNullIfNoErrors(modifiers);
listener.assertNoErrors();
- expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
+ expect(modifiers.covariantKeyword, isNotNull);
}
- void test_parseFunctionBody_skip_expression() {
- ParserTestCase.parseFunctionBodies = false;
- createParser('=> y;');
- FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
- expectNotNullIfNoErrors(functionBody);
+ void test_parseModifiers_external() {
+ createParser('external A');
+ Modifiers modifiers = parser.parseModifiers();
+ expectNotNullIfNoErrors(modifiers);
listener.assertNoErrors();
- expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
+ expect(modifiers.externalKeyword, isNotNull);
}
- void test_parseFunctionDeclaration_function() {
- createParser('/// Doc\nT f() {}');
- FunctionDeclaration declaration = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(declaration);
+ void test_parseModifiers_factory() {
+ createParser('factory A');
+ Modifiers modifiers = parser.parseModifiers();
+ expectNotNullIfNoErrors(modifiers);
listener.assertNoErrors();
- _expectCommentText(declaration.documentationComment, '/// Doc');
- expect((declaration.returnType as TypeName).name.name, 'T');
- expect(declaration.name, isNotNull);
- FunctionExpression expression = declaration.functionExpression;
- expect(expression, isNotNull);
- expect(expression.body, isNotNull);
- expect(expression.typeParameters, isNull);
- expect(expression.parameters, isNotNull);
- expect(declaration.propertyKeyword, isNull);
+ expect(modifiers.factoryKeyword, isNotNull);
}
- void test_parseFunctionDeclaration_functionWithTypeParameters() {
- createParser('/// Doc\nT f<E>() {}');
- FunctionDeclaration declaration = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(declaration);
+ void test_parseModifiers_final() {
+ createParser('final A');
+ Modifiers modifiers = parser.parseModifiers();
+ expectNotNullIfNoErrors(modifiers);
listener.assertNoErrors();
- _expectCommentText(declaration.documentationComment, '/// Doc');
- expect((declaration.returnType as TypeName).name.name, 'T');
- expect(declaration.name, isNotNull);
- FunctionExpression expression = declaration.functionExpression;
- expect(expression, isNotNull);
- expect(expression.body, isNotNull);
- expect(expression.typeParameters, isNotNull);
- expect(expression.parameters, isNotNull);
- expect(declaration.propertyKeyword, isNull);
+ expect(modifiers.finalKeyword, isNotNull);
}
- void test_parseFunctionDeclaration_functionWithTypeParameters_comment() {
- enableGenericMethodComments = true;
- createParser('/// Doc\nT f/*<E>*/() {}');
- FunctionDeclaration declaration = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(declaration);
+ void test_parseModifiers_static() {
+ createParser('static A');
+ Modifiers modifiers = parser.parseModifiers();
+ expectNotNullIfNoErrors(modifiers);
listener.assertNoErrors();
- _expectCommentText(declaration.documentationComment, '/// Doc');
- expect((declaration.returnType as TypeName).name.name, 'T');
- expect(declaration.name, isNotNull);
- FunctionExpression expression = declaration.functionExpression;
- expect(expression, isNotNull);
- expect(expression.body, isNotNull);
- expect(expression.typeParameters, isNotNull);
- expect(expression.parameters, isNotNull);
- expect(declaration.propertyKeyword, isNull);
+ expect(modifiers.staticKeyword, isNotNull);
}
- void test_parseFunctionDeclaration_getter() {
- createParser('/// Doc\nT get p => 0;');
- FunctionDeclaration declaration = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(declaration);
+ void test_parseModifiers_var() {
+ createParser('var A');
+ Modifiers modifiers = parser.parseModifiers();
+ expectNotNullIfNoErrors(modifiers);
listener.assertNoErrors();
- _expectCommentText(declaration.documentationComment, '/// Doc');
- expect((declaration.returnType as TypeName).name.name, 'T');
- expect(declaration.name, isNotNull);
- FunctionExpression expression = declaration.functionExpression;
- expect(expression, isNotNull);
- expect(expression.body, isNotNull);
- expect(expression.typeParameters, isNull);
- expect(expression.parameters, isNull);
- expect(declaration.propertyKeyword, isNotNull);
+ expect(modifiers.varKeyword, isNotNull);
}
- void test_parseFunctionDeclaration_setter() {
- createParser('/// Doc\nT set p(v) {}');
- FunctionDeclaration declaration = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(declaration);
+ void test_parseMultiplicativeExpression_normal() {
+ createParser('x * y');
+ Expression expression = parser.parseMultiplicativeExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- _expectCommentText(declaration.documentationComment, '/// Doc');
- expect((declaration.returnType as TypeName).name.name, 'T');
- expect(declaration.name, isNotNull);
- FunctionExpression expression = declaration.functionExpression;
- expect(expression, isNotNull);
- expect(expression.body, isNotNull);
- expect(expression.typeParameters, isNull);
- expect(expression.parameters, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
+ expect(expression, new isInstanceOf<BinaryExpression>());
+ BinaryExpression binaryExpression = expression;
+ expect(binaryExpression.leftOperand, isNotNull);
+ expect(binaryExpression.operator, isNotNull);
+ expect(binaryExpression.operator.type, TokenType.STAR);
+ expect(binaryExpression.rightOperand, isNotNull);
}
- void test_parseFunctionDeclarationStatement() {
- createParser('void f(int p) => p * 2;');
- FunctionDeclarationStatement statement =
- parser.parseFunctionDeclarationStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseMultiplicativeExpression_super() {
+ createParser('super * y');
+ Expression expression = parser.parseMultiplicativeExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement.functionDeclaration, isNotNull);
+ expect(expression, new isInstanceOf<BinaryExpression>());
+ BinaryExpression binaryExpression = expression;
+ expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
+ expect(binaryExpression.operator, isNotNull);
+ expect(binaryExpression.operator.type, TokenType.STAR);
+ expect(binaryExpression.rightOperand, isNotNull);
}
- void test_parseFunctionDeclarationStatement_typeParameterComments() {
- enableGenericMethodComments = true;
- createParser('/*=E*/ f/*<E>*/(/*=E*/ p) => p * 2;');
- FunctionDeclarationStatement statement =
- parser.parseFunctionDeclarationStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseNewExpression() {
+ createParser('new A()');
+ InstanceCreationExpression expression = parser.parseNewExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- FunctionDeclaration f = statement.functionDeclaration;
- expect(f, isNotNull);
- expect(f.functionExpression.typeParameters, isNotNull);
- expect(f.returnType, isNotNull);
- SimpleFormalParameter p = f.functionExpression.parameters.parameters[0];
- expect(p.type, isNotNull);
+ expect(expression.keyword, isNotNull);
+ ConstructorName name = expression.constructorName;
+ expect(name, isNotNull);
+ expect(name.type, isNotNull);
+ expect(name.period, isNull);
+ expect(name.name, isNull);
+ expect(expression.argumentList, isNotNull);
}
- void test_parseFunctionDeclarationStatement_typeParameters() {
- createParser('E f<E>(E p) => p * 2;');
- FunctionDeclarationStatement statement =
- parser.parseFunctionDeclarationStatement();
+ void test_parseNonLabeledStatement_const_list_empty() {
+ createParser('const [];');
+ Statement statement = parser.parseNonLabeledStatement();
expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(statement.functionDeclaration, isNotNull);
- expect(statement.functionDeclaration.functionExpression.typeParameters,
- isNotNull);
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ expect(expressionStatement.expression, isNotNull);
}
- void test_parseFunctionDeclarationStatement_typeParameters_noReturnType() {
- createParser('f<E>(E p) => p * 2;');
- FunctionDeclarationStatement statement =
- parser.parseFunctionDeclarationStatement();
+ void test_parseNonLabeledStatement_const_list_nonEmpty() {
+ createParser('const [1, 2];');
+ Statement statement = parser.parseNonLabeledStatement();
expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(statement.functionDeclaration, isNotNull);
- expect(statement.functionDeclaration.functionExpression.typeParameters,
- isNotNull);
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ expect(expressionStatement.expression, isNotNull);
}
- void test_parseFunctionExpression_body_inExpression() {
- createParser('(int i) => i++');
- FunctionExpression expression = parser.parseFunctionExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseNonLabeledStatement_const_map_empty() {
+ createParser('const {};');
+ Statement statement = parser.parseNonLabeledStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression.body, isNotNull);
- expect(expression.typeParameters, isNull);
- expect(expression.parameters, isNotNull);
- expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ expect(expressionStatement.expression, isNotNull);
}
- void test_parseFunctionExpression_typeParameterComments() {
- enableGenericMethodComments = true;
- createParser('/*<E>*/(/*=E*/ i) => i++');
- FunctionExpression expression = parser.parseFunctionExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseNonLabeledStatement_const_map_nonEmpty() {
+ // TODO(brianwilkerson) Implement more tests for this method.
+ createParser("const {'a' : 1};");
+ Statement statement = parser.parseNonLabeledStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression.body, isNotNull);
- expect(expression.typeParameters, isNotNull);
- expect(expression.parameters, isNotNull);
- expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
- SimpleFormalParameter p = expression.parameters.parameters[0];
- expect(p.type, isNotNull);
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ expect(expressionStatement.expression, isNotNull);
}
- void test_parseFunctionExpression_typeParameters() {
- createParser('<E>(E i) => i++');
- FunctionExpression expression = parser.parseFunctionExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseNonLabeledStatement_const_object() {
+ createParser('const A();');
+ Statement statement = parser.parseNonLabeledStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression.body, isNotNull);
- expect(expression.typeParameters, isNotNull);
- expect(expression.parameters, isNotNull);
- expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ expect(expressionStatement.expression, isNotNull);
}
- @failingTest
- void test_parseGenericTypeAlias_noTypeParameters() {
- createParser('F = int Function(int);');
- GenericTypeAlias alias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(alias);
+ void test_parseNonLabeledStatement_const_object_named_typeParameters() {
+ createParser('const A<B>.c();');
+ Statement statement = parser.parseNonLabeledStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(alias.name, isNotNull);
- expect(alias.name.name, 'F');
- expect(alias.typeParameters, isNull);
- expect(alias.equals, isNotNull);
- expect(alias.functionType, isNotNull);
- expect(alias.semicolon, isNotNull);
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ expect(expressionStatement.expression, isNotNull);
}
- @failingTest
- void test_parseGenericTypeAlias_typeParameters() {
- createParser('F<T> = T Function(T);');
- GenericTypeAlias alias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(alias);
+ void test_parseNonLabeledStatement_constructorInvocation() {
+ createParser('new C().m();');
+ Statement statement = parser.parseNonLabeledStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(alias.name, isNotNull);
- expect(alias.name.name, 'F');
- expect(alias.typeParameters, isNotNull);
- expect(alias.equals, isNotNull);
- expect(alias.functionType, isNotNull);
- expect(alias.semicolon, isNotNull);
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ expect(expressionStatement.expression, isNotNull);
}
- void test_parseGetter_nonStatic() {
- createParser('/// Doc\nT get a;');
- MethodDeclaration method = parser.parseClassMember('C');
- expectNotNullIfNoErrors(method);
+ void test_parseNonLabeledStatement_false() {
+ createParser('false;');
+ Statement statement = parser.parseNonLabeledStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(method.body, isNotNull);
- _expectCommentText(method.documentationComment, '/// Doc');
- expect(method.externalKeyword, isNull);
- expect(method.modifierKeyword, isNull);
- expect(method.name, isNotNull);
- expect(method.operatorKeyword, isNull);
- expect(method.parameters, isNull);
- expect(method.propertyKeyword, isNotNull);
- expect((method.returnType as TypeName).name.name, 'T');
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ expect(expressionStatement.expression, isNotNull);
}
- void test_parseGetter_static() {
- createParser('/// Doc\nstatic T get a => 42;');
- MethodDeclaration method = parser.parseClassMember('C');
- expectNotNullIfNoErrors(method);
+ void test_parseNonLabeledStatement_functionDeclaration() {
+ createParser('f() {};');
+ Statement statement = parser.parseNonLabeledStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(method.body, isNotNull);
- _expectCommentText(method.documentationComment, '/// Doc');
- expect(method.externalKeyword, isNull);
- expect(method.modifierKeyword.lexeme, 'static');
- expect(method.name, isNotNull);
- expect(method.operatorKeyword, isNull);
- expect(method.typeParameters, isNull);
- expect(method.parameters, isNull);
- expect(method.propertyKeyword, isNotNull);
- expect((method.returnType as TypeName).name.name, 'T');
}
- void test_parseIdentifierList_multiple() {
- createParser('a, b, c');
- List<SimpleIdentifier> list = parser.parseIdentifierList();
- expectNotNullIfNoErrors(list);
+ void test_parseNonLabeledStatement_functionDeclaration_arguments() {
+ createParser('f(void g()) {};');
+ Statement statement = parser.parseNonLabeledStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(list, hasLength(3));
}
- void test_parseIdentifierList_single() {
- createParser('a');
- List<SimpleIdentifier> list = parser.parseIdentifierList();
- expectNotNullIfNoErrors(list);
+ void test_parseNonLabeledStatement_functionExpressionIndex() {
+ createParser('() {}[0] = null;');
+ Statement statement = parser.parseNonLabeledStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(list, hasLength(1));
}
- void test_parseIfStatement_else_block() {
- createParser('if (x) {} else {}');
- IfStatement statement = parser.parseIfStatement();
+ void test_parseNonLabeledStatement_functionInvocation() {
+ createParser('f();');
+ Statement statement = parser.parseNonLabeledStatement();
expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(statement.ifKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.condition, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.thenStatement, isNotNull);
- expect(statement.elseKeyword, isNotNull);
- expect(statement.elseStatement, isNotNull);
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ expect(expressionStatement.expression, isNotNull);
}
- void test_parseIfStatement_else_statement() {
- createParser('if (x) f(x); else f(y);');
- IfStatement statement = parser.parseIfStatement();
+ void test_parseNonLabeledStatement_invokeFunctionExpression() {
+ createParser('(a) {return a + a;} (3);');
+ Statement statement = parser.parseNonLabeledStatement();
expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(statement.ifKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.condition, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.thenStatement, isNotNull);
- expect(statement.elseKeyword, isNotNull);
- expect(statement.elseStatement, isNotNull);
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ EngineTestCase.assertInstanceOf(
+ (obj) => obj is FunctionExpressionInvocation,
+ FunctionExpressionInvocation,
+ expressionStatement.expression);
+ FunctionExpressionInvocation invocation =
+ expressionStatement.expression as FunctionExpressionInvocation;
+ EngineTestCase.assertInstanceOf((obj) => obj is FunctionExpression,
+ FunctionExpression, invocation.function);
+ FunctionExpression expression = invocation.function as FunctionExpression;
+ expect(expression.parameters, isNotNull);
+ expect(expression.body, isNotNull);
+ expect(invocation.typeArguments, isNull);
+ ArgumentList list = invocation.argumentList;
+ expect(list, isNotNull);
+ expect(list.arguments, hasLength(1));
}
- void test_parseIfStatement_noElse_block() {
- createParser('if (x) {}');
- IfStatement statement = parser.parseIfStatement();
+ void test_parseNonLabeledStatement_null() {
+ createParser('null;');
+ Statement statement = parser.parseNonLabeledStatement();
expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(statement.ifKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.condition, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.thenStatement, isNotNull);
- expect(statement.elseKeyword, isNull);
- expect(statement.elseStatement, isNull);
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ expect(expressionStatement.expression, isNotNull);
}
- void test_parseIfStatement_noElse_statement() {
- createParser('if (x) f(x);');
- IfStatement statement = parser.parseIfStatement();
+ void test_parseNonLabeledStatement_startingWithBuiltInIdentifier() {
+ createParser('library.getName();');
+ Statement statement = parser.parseNonLabeledStatement();
expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(statement.ifKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.condition, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.thenStatement, isNotNull);
- expect(statement.elseKeyword, isNull);
- expect(statement.elseStatement, isNull);
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ expect(expressionStatement.expression, isNotNull);
}
- void test_parseImplementsClause_multiple() {
- createParser('implements A, B, C');
- ImplementsClause clause = parser.parseImplementsClause();
- expectNotNullIfNoErrors(clause);
+ void test_parseNonLabeledStatement_true() {
+ createParser('true;');
+ Statement statement = parser.parseNonLabeledStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(clause.interfaces, hasLength(3));
- expect(clause.implementsKeyword, isNotNull);
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ expect(expressionStatement.expression, isNotNull);
}
- void test_parseImplementsClause_single() {
- createParser('implements A');
- ImplementsClause clause = parser.parseImplementsClause();
- expectNotNullIfNoErrors(clause);
+ void test_parseNonLabeledStatement_typeCast() {
+ createParser('double.NAN as num;');
+ Statement statement = parser.parseNonLabeledStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(clause.interfaces, hasLength(1));
- expect(clause.implementsKeyword, isNotNull);
+ expect(statement, new isInstanceOf<ExpressionStatement>());
+ ExpressionStatement expressionStatement = statement;
+ expect(expressionStatement.expression, isNotNull);
}
- void test_parseImportDirective_configuration_multiple() {
- createParser("import 'lib/lib.dart' if (a) 'b.dart' if (c) 'd.dart';");
- ImportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseNormalFormalParameter_field_const_noType() {
+ createParser('const this.a)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.configurations, hasLength(2));
- _expectDottedName(directive.configurations[0].name, ['a']);
- _expectDottedName(directive.configurations[1].name, ['c']);
- expect(directive.deferredKeyword, isNull);
- expect(directive.asKeyword, isNull);
- expect(directive.prefix, isNull);
- expect(directive.combinators, hasLength(0));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<FieldFormalParameter>());
+ FieldFormalParameter fieldParameter = parameter;
+ expect(fieldParameter.keyword, isNotNull);
+ expect(fieldParameter.type, isNull);
+ expect(fieldParameter.identifier, isNotNull);
+ expect(fieldParameter.parameters, isNull);
}
- void test_parseImportDirective_configuration_single() {
- createParser("import 'lib/lib.dart' if (a.b == 'c.dart') '';");
- ImportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseNormalFormalParameter_field_const_type() {
+ createParser('const A this.a)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.configurations, hasLength(1));
- _expectDottedName(directive.configurations[0].name, ['a', 'b']);
- expect(directive.deferredKeyword, isNull);
- expect(directive.asKeyword, isNull);
- expect(directive.prefix, isNull);
- expect(directive.combinators, hasLength(0));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<FieldFormalParameter>());
+ FieldFormalParameter fieldParameter = parameter;
+ expect(fieldParameter.keyword, isNotNull);
+ expect(fieldParameter.type, isNotNull);
+ expect(fieldParameter.identifier, isNotNull);
+ expect(fieldParameter.parameters, isNull);
}
- void test_parseImportDirective_deferred() {
- createParser("import 'lib/lib.dart' deferred as a;");
- ImportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseNormalFormalParameter_field_final_noType() {
+ createParser('final this.a)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.deferredKeyword, isNotNull);
- expect(directive.asKeyword, isNotNull);
- expect(directive.prefix, isNotNull);
- expect(directive.combinators, hasLength(0));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<FieldFormalParameter>());
+ FieldFormalParameter fieldParameter = parameter;
+ expect(fieldParameter.keyword, isNotNull);
+ expect(fieldParameter.type, isNull);
+ expect(fieldParameter.identifier, isNotNull);
+ expect(fieldParameter.parameters, isNull);
}
- void test_parseImportDirective_hide() {
- createParser("import 'lib/lib.dart' hide A, B;");
- ImportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseNormalFormalParameter_field_final_type() {
+ createParser('final A this.a)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.deferredKeyword, isNull);
- expect(directive.asKeyword, isNull);
- expect(directive.prefix, isNull);
- expect(directive.combinators, hasLength(1));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<FieldFormalParameter>());
+ FieldFormalParameter fieldParameter = parameter;
+ expect(fieldParameter.keyword, isNotNull);
+ expect(fieldParameter.type, isNotNull);
+ expect(fieldParameter.identifier, isNotNull);
+ expect(fieldParameter.parameters, isNull);
}
- void test_parseImportDirective_noCombinator() {
- createParser("import 'lib/lib.dart';");
- ImportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseNormalFormalParameter_field_function_nested() {
+ createParser('this.a(B b))');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.deferredKeyword, isNull);
- expect(directive.asKeyword, isNull);
- expect(directive.prefix, isNull);
- expect(directive.combinators, hasLength(0));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<FieldFormalParameter>());
+ FieldFormalParameter fieldParameter = parameter;
+ expect(fieldParameter.keyword, isNull);
+ expect(fieldParameter.type, isNull);
+ expect(fieldParameter.identifier, isNotNull);
+ FormalParameterList parameterList = fieldParameter.parameters;
+ expect(parameterList, isNotNull);
+ expect(parameterList.parameters, hasLength(1));
}
- void test_parseImportDirective_prefix() {
- createParser("import 'lib/lib.dart' as a;");
- ImportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseNormalFormalParameter_field_function_noNested() {
+ createParser('this.a())');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.deferredKeyword, isNull);
- expect(directive.asKeyword, isNotNull);
- expect(directive.prefix, isNotNull);
- expect(directive.combinators, hasLength(0));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<FieldFormalParameter>());
+ FieldFormalParameter fieldParameter = parameter;
+ expect(fieldParameter.keyword, isNull);
+ expect(fieldParameter.type, isNull);
+ expect(fieldParameter.identifier, isNotNull);
+ FormalParameterList parameterList = fieldParameter.parameters;
+ expect(parameterList, isNotNull);
+ expect(parameterList.parameters, hasLength(0));
}
- void test_parseImportDirective_prefix_hide_show() {
- createParser("import 'lib/lib.dart' as a hide A show B;");
- ImportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseNormalFormalParameter_field_noType() {
+ createParser('this.a)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.deferredKeyword, isNull);
- expect(directive.asKeyword, isNotNull);
- expect(directive.prefix, isNotNull);
- expect(directive.combinators, hasLength(2));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<FieldFormalParameter>());
+ FieldFormalParameter fieldParameter = parameter;
+ expect(fieldParameter.keyword, isNull);
+ expect(fieldParameter.type, isNull);
+ expect(fieldParameter.identifier, isNotNull);
+ expect(fieldParameter.parameters, isNull);
}
- void test_parseImportDirective_prefix_show_hide() {
- createParser("import 'lib/lib.dart' as a show B hide A;");
- ImportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseNormalFormalParameter_field_type() {
+ createParser('A this.a)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.deferredKeyword, isNull);
- expect(directive.asKeyword, isNotNull);
- expect(directive.prefix, isNotNull);
- expect(directive.combinators, hasLength(2));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<FieldFormalParameter>());
+ FieldFormalParameter fieldParameter = parameter;
+ expect(fieldParameter.keyword, isNull);
+ expect(fieldParameter.type, isNotNull);
+ expect(fieldParameter.identifier, isNotNull);
+ expect(fieldParameter.parameters, isNull);
}
- void test_parseImportDirective_show() {
- createParser("import 'lib/lib.dart' show A, B;");
- ImportDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseNormalFormalParameter_field_var() {
+ createParser('var this.a)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.keyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.deferredKeyword, isNull);
- expect(directive.asKeyword, isNull);
- expect(directive.prefix, isNull);
- expect(directive.combinators, hasLength(1));
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<FieldFormalParameter>());
+ FieldFormalParameter fieldParameter = parameter;
+ expect(fieldParameter.keyword, isNotNull);
+ expect(fieldParameter.type, isNull);
+ expect(fieldParameter.identifier, isNotNull);
+ expect(fieldParameter.parameters, isNull);
}
- void test_parseInitializedIdentifierList_type() {
- createParser("/// Doc\nstatic T a = 1, b, c = 3;");
- FieldDeclaration declaration = parser.parseClassMember('C');
- expectNotNullIfNoErrors(declaration);
+ void test_parseNormalFormalParameter_function_noType() {
+ createParser('a())');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- _expectCommentText(declaration.documentationComment, '/// Doc');
- VariableDeclarationList fields = declaration.fields;
- expect(fields, isNotNull);
- expect(fields.keyword, isNull);
- expect((fields.type as TypeName).name.name, 'T');
- expect(fields.variables, hasLength(3));
- expect(declaration.staticKeyword.lexeme, 'static');
- expect(declaration.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNull);
+ expect(functionParameter.parameters, isNotNull);
}
- void test_parseInitializedIdentifierList_var() {
- createParser('/// Doc\nstatic var a = 1, b, c = 3;');
- FieldDeclaration declaration = parser.parseClassMember('C');
- expectNotNullIfNoErrors(declaration);
+ void test_parseNormalFormalParameter_function_noType_nullable() {
+ enableNnbd = true;
+ createParser('a()?)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- _expectCommentText(declaration.documentationComment, '/// Doc');
- VariableDeclarationList fields = declaration.fields;
- expect(fields, isNotNull);
- expect(fields.keyword.lexeme, 'var');
- expect(fields.type, isNull);
- expect(fields.variables, hasLength(3));
- expect(declaration.staticKeyword.lexeme, 'static');
- expect(declaration.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNull);
+ expect(functionParameter.parameters, isNotNull);
+ expect(functionParameter.question, isNotNull);
}
- void test_parseInstanceCreationExpression_qualifiedType() {
- Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
- createParser('A.B()');
- InstanceCreationExpression expression =
- parser.parseInstanceCreationExpression(token);
- expectNotNullIfNoErrors(expression);
+ void test_parseNormalFormalParameter_function_noType_typeParameterComments() {
+ enableGenericMethodComments = true;
+ createParser('a/*<E>*/())');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.keyword, token);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- TypeName type = name.type;
- expect(type, isNotNull);
- expect(type.typeArguments, isNull);
- expect(name.period, isNull);
- expect(name.name, isNull);
- expect(expression.argumentList, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNotNull);
+ expect(functionParameter.parameters, isNotNull);
}
- void test_parseInstanceCreationExpression_qualifiedType_named() {
- Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
- createParser('A.B.c()');
- InstanceCreationExpression expression =
- parser.parseInstanceCreationExpression(token);
- expectNotNullIfNoErrors(expression);
+ void test_parseNormalFormalParameter_function_noType_typeParameters() {
+ createParser('a<E>())');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.keyword, token);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- TypeName type = name.type;
- expect(type, isNotNull);
- expect(type.typeArguments, isNull);
- expect(name.period, isNotNull);
- expect(name.name, isNotNull);
- expect(expression.argumentList, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNotNull);
+ expect(functionParameter.parameters, isNotNull);
+ expect(functionParameter.question, isNull);
+ expect(functionParameter.question, isNull);
}
void
- test_parseInstanceCreationExpression_qualifiedType_named_typeParameterComment() {
- enableGenericMethodComments = true;
- Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
- createParser('A.B/*<E>*/.c()');
- InstanceCreationExpression expression =
- parser.parseInstanceCreationExpression(token);
- expectNotNullIfNoErrors(expression);
+ test_parseNormalFormalParameter_function_noType_typeParameters_nullable() {
+ enableNnbd = true;
+ createParser('a<E>()?)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.keyword, token);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- TypeName type = name.type;
- expect(type, isNotNull);
- expect(type.typeArguments.arguments, hasLength(1));
- expect(name.period, isNotNull);
- expect(name.name, isNotNull);
- expect(expression.argumentList, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNotNull);
+ expect(functionParameter.parameters, isNotNull);
+ expect(functionParameter.question, isNotNull);
}
- void
- test_parseInstanceCreationExpression_qualifiedType_named_typeParameters() {
- Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
- createParser('A.B<E>.c()');
- InstanceCreationExpression expression =
- parser.parseInstanceCreationExpression(token);
- expectNotNullIfNoErrors(expression);
+ void test_parseNormalFormalParameter_function_type() {
+ createParser('A a())');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.keyword, token);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- TypeName type = name.type;
- expect(type, isNotNull);
- expect(type.typeArguments.arguments, hasLength(1));
- expect(name.period, isNotNull);
- expect(name.name, isNotNull);
- expect(expression.argumentList, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNotNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNull);
+ expect(functionParameter.parameters, isNotNull);
+ expect(functionParameter.question, isNull);
}
- void
- test_parseInstanceCreationExpression_qualifiedType_typeParameterComment() {
+ void test_parseNormalFormalParameter_function_type_nullable() {
+ enableNnbd = true;
+ createParser('A a()?)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
+ listener.assertNoErrors();
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNotNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNull);
+ expect(functionParameter.parameters, isNotNull);
+ expect(functionParameter.question, isNotNull);
+ }
+
+ void test_parseNormalFormalParameter_function_type_typeParameterComments() {
enableGenericMethodComments = true;
- Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
- createParser('A.B/*<E>*/()');
- InstanceCreationExpression expression =
- parser.parseInstanceCreationExpression(token);
- expectNotNullIfNoErrors(expression);
+ createParser('A a/*<E>*/())');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.keyword, token);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- TypeName type = name.type;
- expect(type, isNotNull);
- expect(type.typeArguments.arguments, hasLength(1));
- expect(name.period, isNull);
- expect(name.name, isNull);
- expect(expression.argumentList, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNotNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNotNull);
+ expect(functionParameter.parameters, isNotNull);
+ expect(functionParameter.question, isNull);
}
- void test_parseInstanceCreationExpression_qualifiedType_typeParameters() {
- Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
- createParser('A.B<E>()');
- InstanceCreationExpression expression =
- parser.parseInstanceCreationExpression(token);
- expectNotNullIfNoErrors(expression);
+ void test_parseNormalFormalParameter_function_type_typeParameters() {
+ createParser('A a<E>())');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.keyword, token);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- TypeName type = name.type;
- expect(type, isNotNull);
- expect(type.typeArguments.arguments, hasLength(1));
- expect(name.period, isNull);
- expect(name.name, isNull);
- expect(expression.argumentList, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNotNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNotNull);
+ expect(functionParameter.parameters, isNotNull);
+ expect(functionParameter.question, isNull);
}
- void test_parseInstanceCreationExpression_type() {
- Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
- createParser('A()');
- InstanceCreationExpression expression =
- parser.parseInstanceCreationExpression(token);
- expectNotNullIfNoErrors(expression);
+ void test_parseNormalFormalParameter_function_type_typeParameters_nullable() {
+ enableNnbd = true;
+ createParser('A a<E>()?)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.keyword, token);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- TypeName type = name.type;
- expect(type, isNotNull);
- expect(type.typeArguments, isNull);
- expect(name.period, isNull);
- expect(name.name, isNull);
- expect(expression.argumentList, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNotNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNotNull);
+ expect(functionParameter.parameters, isNotNull);
+ expect(functionParameter.question, isNotNull);
}
- void test_parseInstanceCreationExpression_type_named() {
- enableGenericMethodComments = true;
- Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
- createParser('A.c()');
- InstanceCreationExpression expression =
- parser.parseInstanceCreationExpression(token);
- expectNotNullIfNoErrors(expression);
+ void test_parseNormalFormalParameter_function_void() {
+ createParser('void a())');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.keyword, token);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- TypeName type = name.type;
- expect(type, isNotNull);
- expect(type.typeArguments, isNull);
- expect(name.period, isNull);
- expect(name.name, isNull);
- expect(expression.argumentList, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNotNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNull);
+ expect(functionParameter.parameters, isNotNull);
+ expect(functionParameter.question, isNull);
}
- void test_parseInstanceCreationExpression_type_named_typeParameterComment() {
- enableGenericMethodComments = true;
- Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
- createParser('A/*<B>*/.c()');
- InstanceCreationExpression expression =
- parser.parseInstanceCreationExpression(token);
- expectNotNullIfNoErrors(expression);
+ void test_parseNormalFormalParameter_function_void_nullable() {
+ enableNnbd = true;
+ createParser('void a()?)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.keyword, token);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- TypeName type = name.type;
- expect(type, isNotNull);
- expect(type.typeArguments.arguments, hasLength(1));
- expect(name.period, isNotNull);
- expect(name.name, isNotNull);
- expect(expression.argumentList, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNotNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNull);
+ expect(functionParameter.parameters, isNotNull);
+ expect(functionParameter.question, isNotNull);
}
- void test_parseInstanceCreationExpression_type_named_typeParameters() {
- Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
- createParser('A<B>.c()');
- InstanceCreationExpression expression =
- parser.parseInstanceCreationExpression(token);
- expectNotNullIfNoErrors(expression);
+ void test_parseNormalFormalParameter_function_void_typeParameterComments() {
+ enableGenericMethodComments = true;
+ createParser('void a/*<E>*/())');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.keyword, token);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- TypeName type = name.type;
- expect(type, isNotNull);
- expect(type.typeArguments.arguments, hasLength(1));
- expect(name.period, isNotNull);
- expect(name.name, isNotNull);
- expect(expression.argumentList, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNotNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNotNull);
+ expect(functionParameter.parameters, isNotNull);
+ expect(functionParameter.question, isNull);
}
- void test_parseInstanceCreationExpression_type_typeParameterComment() {
- enableGenericMethodComments = true;
- Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
- createParser('A/*<B>*/()');
- InstanceCreationExpression expression =
- parser.parseInstanceCreationExpression(token);
- expectNotNullIfNoErrors(expression);
+ void test_parseNormalFormalParameter_function_void_typeParameters() {
+ createParser('void a<E>())');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.keyword, token);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- TypeName type = name.type;
- expect(type, isNotNull);
- expect(type.typeArguments.arguments, hasLength(1));
- expect(name.period, isNull);
- expect(name.name, isNull);
- expect(expression.argumentList, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNotNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNotNull);
+ expect(functionParameter.parameters, isNotNull);
+ expect(functionParameter.question, isNull);
}
- void test_parseInstanceCreationExpression_type_typeParameters() {
- Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
- createParser('A<B>()');
- InstanceCreationExpression expression =
- parser.parseInstanceCreationExpression(token);
- expectNotNullIfNoErrors(expression);
+ void test_parseNormalFormalParameter_function_void_typeParameters_nullable() {
+ enableNnbd = true;
+ createParser('void a<E>()?)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.keyword, token);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- TypeName type = name.type;
- expect(type, isNotNull);
- expect(type.typeArguments.arguments, hasLength(1));
- expect(name.period, isNull);
- expect(name.name, isNull);
- expect(expression.argumentList, isNotNull);
+ expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
+ FunctionTypedFormalParameter functionParameter = parameter;
+ expect(functionParameter.returnType, isNotNull);
+ expect(functionParameter.identifier, isNotNull);
+ expect(functionParameter.typeParameters, isNotNull);
+ expect(functionParameter.parameters, isNotNull);
+ expect(functionParameter.question, isNotNull);
}
- void test_parseInstanceCreationExpression_type_typeParameters_nullable() {
- enableNnbd = true;
- Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
- createParser('A<B?>()');
- InstanceCreationExpression expression =
- parser.parseInstanceCreationExpression(token);
- expectNotNullIfNoErrors(expression);
+ void test_parseNormalFormalParameter_simple_const_noType() {
+ createParser('const a)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(expression.keyword, token);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- TypeName type = name.type;
- expect(type, isNotNull);
- expect(name.period, isNull);
- expect(name.name, isNull);
- expect(expression.argumentList, isNotNull);
- NodeList<TypeAnnotation> arguments = type.typeArguments.arguments;
- expect(arguments, hasLength(1));
- expect((arguments[0] as TypeName).question, isNotNull);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.identifier, isNotNull);
}
- void test_parseLibraryDirective() {
- createParser('library l;');
- LibraryDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseNormalFormalParameter_simple_const_type() {
+ createParser('const A a)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(directive.libraryKeyword, isNotNull);
- expect(directive.name, isNotNull);
- expect(directive.semicolon, isNotNull);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
}
- void test_parseLibraryIdentifier_multiple() {
- String name = "a.b.c";
- createParser(name);
- LibraryIdentifier identifier = parser.parseLibraryIdentifier();
- expectNotNullIfNoErrors(identifier);
+ void test_parseNormalFormalParameter_simple_final_noType() {
+ createParser('final a)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(identifier.name, name);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.identifier, isNotNull);
}
- void test_parseLibraryIdentifier_single() {
- String name = "a";
- createParser(name);
- LibraryIdentifier identifier = parser.parseLibraryIdentifier();
- expectNotNullIfNoErrors(identifier);
+ void test_parseNormalFormalParameter_simple_final_type() {
+ createParser('final A a)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(identifier.name, name);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
}
- void test_parseListLiteral_empty_oneToken() {
- Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
- TypeArgumentList typeArguments = null;
- createParser('[]');
- ListLiteral literal = parser.parseListLiteral(token, typeArguments);
- expectNotNullIfNoErrors(literal);
+ void test_parseNormalFormalParameter_simple_noName() {
+ createParser('a)');
+ NormalFormalParameter parameter =
+ parser.parseNormalFormalParameter(inFunctionType: true);
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(literal.constKeyword, token);
- expect(literal.typeArguments, typeArguments);
- expect(literal.leftBracket, isNotNull);
- expect(literal.elements, hasLength(0));
- expect(literal.rightBracket, isNotNull);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.identifier, isNull);
}
- void test_parseListLiteral_empty_oneToken_withComment() {
- Token token = null;
- TypeArgumentList typeArguments = null;
- createParser('/* 0 */ []');
- ListLiteral literal = parser.parseListLiteral(token, typeArguments);
- expectNotNullIfNoErrors(literal);
+ void test_parseNormalFormalParameter_simple_noType() {
+ createParser('a)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(literal.constKeyword, token);
- expect(literal.typeArguments, typeArguments);
- Token leftBracket = literal.leftBracket;
- expect(leftBracket, isNotNull);
- expect(leftBracket.precedingComments, isNotNull);
- expect(literal.elements, hasLength(0));
- expect(literal.rightBracket, isNotNull);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.identifier, isNotNull);
}
- void test_parseListLiteral_empty_twoTokens() {
- Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
- TypeArgumentList typeArguments = null;
- createParser('[ ]');
- ListLiteral literal = parser.parseListLiteral(token, typeArguments);
- expectNotNullIfNoErrors(literal);
+ void test_parseNormalFormalParameter_simple_noType_namedCovariant() {
+ createParser('covariant)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(literal.constKeyword, token);
- expect(literal.typeArguments, typeArguments);
- expect(literal.leftBracket, isNotNull);
- expect(literal.elements, hasLength(0));
- expect(literal.rightBracket, isNotNull);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.covariantKeyword, isNull);
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.identifier, isNotNull);
}
- void test_parseListLiteral_multiple() {
- createParser('[1, 2, 3]');
- ListLiteral literal = parser.parseListLiteral(null, null);
- expectNotNullIfNoErrors(literal);
+ void test_parseNormalFormalParameter_simple_type() {
+ createParser('A a)');
+ NormalFormalParameter parameter = parser.parseNormalFormalParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(literal.constKeyword, isNull);
- expect(literal.typeArguments, isNull);
- expect(literal.leftBracket, isNotNull);
- expect(literal.elements, hasLength(3));
- expect(literal.rightBracket, isNotNull);
+ expect(parameter, new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter simpleParameter = parameter;
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.identifier, isNotNull);
}
- void test_parseListLiteral_single() {
- createParser('[1]');
- ListLiteral literal = parser.parseListLiteral(null, null);
- expectNotNullIfNoErrors(literal);
+ void test_parseOperator() {
+ createParser('/// Doc\nT operator +(A a);');
+ MethodDeclaration method = parser.parseClassMember('C');
+ expectNotNullIfNoErrors(method);
listener.assertNoErrors();
- expect(literal.constKeyword, isNull);
- expect(literal.typeArguments, isNull);
- expect(literal.leftBracket, isNotNull);
- expect(literal.elements, hasLength(1));
- expect(literal.rightBracket, isNotNull);
+ expect(method.body, isNotNull);
+ expectCommentText(method.documentationComment, '/// Doc');
+ expect(method.externalKeyword, isNull);
+ expect(method.modifierKeyword, isNull);
+ expect(method.name, isNotNull);
+ expect(method.operatorKeyword, isNotNull);
+ expect(method.typeParameters, isNull);
+ expect(method.parameters, isNotNull);
+ expect(method.propertyKeyword, isNull);
+ expect((method.returnType as TypeName).name.name, 'T');
}
- void test_parseListOrMapLiteral_list_noType() {
- createParser('[1]');
- TypedLiteral literal = parser.parseListOrMapLiteral(null);
- expectNotNullIfNoErrors(literal);
- listener.assertNoErrors();
- expect(literal, new isInstanceOf<ListLiteral>());
- ListLiteral listLiteral = literal;
- expect(listLiteral.constKeyword, isNull);
- expect(listLiteral.typeArguments, isNull);
- expect(listLiteral.leftBracket, isNotNull);
- expect(listLiteral.elements, hasLength(1));
- expect(listLiteral.rightBracket, isNotNull);
+ void test_parseOptionalReturnType() {
+ // TODO(brianwilkerson) Implement tests for this method.
}
- void test_parseListOrMapLiteral_list_type() {
- createParser('<int> [1]');
- TypedLiteral literal = parser.parseListOrMapLiteral(null);
- expectNotNullIfNoErrors(literal);
+ void test_parsePostfixExpression_decrement() {
+ createParser('i--');
+ Expression expression = parser.parsePostfixExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(literal, new isInstanceOf<ListLiteral>());
- ListLiteral listLiteral = literal;
- expect(listLiteral.constKeyword, isNull);
- expect(listLiteral.typeArguments, isNotNull);
- expect(listLiteral.leftBracket, isNotNull);
- expect(listLiteral.elements, hasLength(1));
- expect(listLiteral.rightBracket, isNotNull);
+ expect(expression, new isInstanceOf<PostfixExpression>());
+ PostfixExpression postfixExpression = expression;
+ expect(postfixExpression.operand, isNotNull);
+ expect(postfixExpression.operator, isNotNull);
+ expect(postfixExpression.operator.type, TokenType.MINUS_MINUS);
}
- void test_parseListOrMapLiteral_map_noType() {
- createParser("{'1' : 1}");
- TypedLiteral literal = parser.parseListOrMapLiteral(null);
- expectNotNullIfNoErrors(literal);
+ void test_parsePostfixExpression_increment() {
+ createParser('i++');
+ Expression expression = parser.parsePostfixExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(literal, new isInstanceOf<MapLiteral>());
- MapLiteral mapLiteral = literal;
- expect(mapLiteral.constKeyword, isNull);
- expect(mapLiteral.typeArguments, isNull);
- expect(mapLiteral.leftBracket, isNotNull);
- expect(mapLiteral.entries, hasLength(1));
- expect(mapLiteral.rightBracket, isNotNull);
+ expect(expression, new isInstanceOf<PostfixExpression>());
+ PostfixExpression postfixExpression = expression;
+ expect(postfixExpression.operand, isNotNull);
+ expect(postfixExpression.operator, isNotNull);
+ expect(postfixExpression.operator.type, TokenType.PLUS_PLUS);
}
- void test_parseListOrMapLiteral_map_type() {
- createParser("<String, int> {'1' : 1}");
- TypedLiteral literal = parser.parseListOrMapLiteral(null);
- expectNotNullIfNoErrors(literal);
+ void test_parsePostfixExpression_none_indexExpression() {
+ createParser('a[0]');
+ Expression expression = parser.parsePostfixExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(literal, new isInstanceOf<MapLiteral>());
- MapLiteral mapLiteral = literal;
- expect(mapLiteral.constKeyword, isNull);
- expect(mapLiteral.typeArguments, isNotNull);
- expect(mapLiteral.leftBracket, isNotNull);
- expect(mapLiteral.entries, hasLength(1));
- expect(mapLiteral.rightBracket, isNotNull);
+ expect(expression, new isInstanceOf<IndexExpression>());
+ IndexExpression indexExpression = expression;
+ expect(indexExpression.target, isNotNull);
+ expect(indexExpression.index, isNotNull);
}
- void test_parseLogicalAndExpression() {
- createParser('x && y');
- Expression expression = parser.parseLogicalAndExpression();
+ void test_parsePostfixExpression_none_methodInvocation() {
+ createParser('a.m()');
+ Expression expression = parser.parsePostfixExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<BinaryExpression>());
- BinaryExpression binaryExpression = expression;
- expect(binaryExpression.leftOperand, isNotNull);
- expect(binaryExpression.operator, isNotNull);
- expect(binaryExpression.operator.type, TokenType.AMPERSAND_AMPERSAND);
- expect(binaryExpression.rightOperand, isNotNull);
+ expect(expression, new isInstanceOf<MethodInvocation>());
+ MethodInvocation methodInvocation = expression;
+ expect(methodInvocation.target, isNotNull);
+ expect(methodInvocation.operator.type, TokenType.PERIOD);
+ expect(methodInvocation.methodName, isNotNull);
+ expect(methodInvocation.typeArguments, isNull);
+ expect(methodInvocation.argumentList, isNotNull);
}
- void test_parseLogicalOrExpression() {
- createParser('x || y');
- Expression expression = parser.parseLogicalOrExpression();
+ void test_parsePostfixExpression_none_methodInvocation_question_dot() {
+ createParser('a?.m()');
+ Expression expression = parser.parsePostfixExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<BinaryExpression>());
- BinaryExpression binaryExpression = expression;
- expect(binaryExpression.leftOperand, isNotNull);
- expect(binaryExpression.operator, isNotNull);
- expect(binaryExpression.operator.type, TokenType.BAR_BAR);
- expect(binaryExpression.rightOperand, isNotNull);
+ expect(expression, new isInstanceOf<MethodInvocation>());
+ MethodInvocation methodInvocation = expression;
+ expect(methodInvocation.target, isNotNull);
+ expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
+ expect(methodInvocation.methodName, isNotNull);
+ expect(methodInvocation.typeArguments, isNull);
+ expect(methodInvocation.argumentList, isNotNull);
}
- void test_parseMapLiteral_empty() {
- Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
- TypeArgumentList typeArguments = AstTestFactory.typeArgumentList(
- [AstTestFactory.typeName4("String"), AstTestFactory.typeName4("int")]);
- createParser('{}');
- MapLiteral literal = parser.parseMapLiteral(token, typeArguments);
- expectNotNullIfNoErrors(literal);
+ void
+ test_parsePostfixExpression_none_methodInvocation_question_dot_typeArgumentComments() {
+ enableGenericMethodComments = true;
+ createParser('a?.m/*<E>*/()');
+ Expression expression = parser.parsePostfixExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(literal.constKeyword, token);
- expect(literal.typeArguments, typeArguments);
- expect(literal.leftBracket, isNotNull);
- expect(literal.entries, hasLength(0));
- expect(literal.rightBracket, isNotNull);
+ expect(expression, new isInstanceOf<MethodInvocation>());
+ MethodInvocation methodInvocation = expression;
+ expect(methodInvocation.target, isNotNull);
+ expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
+ expect(methodInvocation.methodName, isNotNull);
+ expect(methodInvocation.typeArguments, isNotNull);
+ expect(methodInvocation.argumentList, isNotNull);
}
- void test_parseMapLiteral_multiple() {
- createParser("{'a' : b, 'x' : y}");
- MapLiteral literal = parser.parseMapLiteral(null, null);
- expectNotNullIfNoErrors(literal);
+ void
+ test_parsePostfixExpression_none_methodInvocation_question_dot_typeArguments() {
+ createParser('a?.m<E>()');
+ Expression expression = parser.parsePostfixExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(literal.leftBracket, isNotNull);
- expect(literal.entries, hasLength(2));
- expect(literal.rightBracket, isNotNull);
+ expect(expression, new isInstanceOf<MethodInvocation>());
+ MethodInvocation methodInvocation = expression;
+ expect(methodInvocation.target, isNotNull);
+ expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
+ expect(methodInvocation.methodName, isNotNull);
+ expect(methodInvocation.typeArguments, isNotNull);
+ expect(methodInvocation.argumentList, isNotNull);
}
- void test_parseMapLiteral_single() {
- createParser("{'x' : y}");
- MapLiteral literal = parser.parseMapLiteral(null, null);
- expectNotNullIfNoErrors(literal);
+ void
+ test_parsePostfixExpression_none_methodInvocation_typeArgumentComments() {
+ enableGenericMethodComments = true;
+ createParser('a.m/*<E>*/()');
+ Expression expression = parser.parsePostfixExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(literal.leftBracket, isNotNull);
- expect(literal.entries, hasLength(1));
- expect(literal.rightBracket, isNotNull);
+ expect(expression, new isInstanceOf<MethodInvocation>());
+ MethodInvocation methodInvocation = expression;
+ expect(methodInvocation.target, isNotNull);
+ expect(methodInvocation.operator.type, TokenType.PERIOD);
+ expect(methodInvocation.methodName, isNotNull);
+ expect(methodInvocation.typeArguments, isNotNull);
+ expect(methodInvocation.argumentList, isNotNull);
}
- void test_parseMapLiteralEntry_complex() {
- createParser('2 + 2 : y');
- MapLiteralEntry entry = parser.parseMapLiteralEntry();
- expectNotNullIfNoErrors(entry);
+ void test_parsePostfixExpression_none_methodInvocation_typeArguments() {
+ createParser('a.m<E>()');
+ Expression expression = parser.parsePostfixExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(entry.key, isNotNull);
- expect(entry.separator, isNotNull);
- expect(entry.value, isNotNull);
+ expect(expression, new isInstanceOf<MethodInvocation>());
+ MethodInvocation methodInvocation = expression;
+ expect(methodInvocation.target, isNotNull);
+ expect(methodInvocation.operator.type, TokenType.PERIOD);
+ expect(methodInvocation.methodName, isNotNull);
+ expect(methodInvocation.typeArguments, isNotNull);
+ expect(methodInvocation.argumentList, isNotNull);
}
- void test_parseMapLiteralEntry_int() {
- createParser('0 : y');
- MapLiteralEntry entry = parser.parseMapLiteralEntry();
- expectNotNullIfNoErrors(entry);
+ void test_parsePostfixExpression_none_propertyAccess() {
+ createParser('a.b');
+ Expression expression = parser.parsePostfixExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(entry.key, isNotNull);
- expect(entry.separator, isNotNull);
- expect(entry.value, isNotNull);
+ expect(expression, new isInstanceOf<PrefixedIdentifier>());
+ PrefixedIdentifier identifier = expression;
+ expect(identifier.prefix, isNotNull);
+ expect(identifier.identifier, isNotNull);
}
- void test_parseMapLiteralEntry_string() {
- createParser("'x' : y");
- MapLiteralEntry entry = parser.parseMapLiteralEntry();
- expectNotNullIfNoErrors(entry);
+ void test_parsePrefixedIdentifier_noPrefix() {
+ String lexeme = "bar";
+ createParser(lexeme);
+ Identifier identifier = parser.parsePrefixedIdentifier();
+ expectNotNullIfNoErrors(identifier);
listener.assertNoErrors();
- expect(entry.key, isNotNull);
- expect(entry.separator, isNotNull);
- expect(entry.value, isNotNull);
+ expect(identifier, new isInstanceOf<SimpleIdentifier>());
+ SimpleIdentifier simpleIdentifier = identifier;
+ expect(simpleIdentifier.token, isNotNull);
+ expect(simpleIdentifier.name, lexeme);
}
- void test_parseModifiers_abstract() {
- createParser('abstract A');
- Modifiers modifiers = parser.parseModifiers();
- expectNotNullIfNoErrors(modifiers);
+ void test_parsePrefixedIdentifier_prefix() {
+ String lexeme = "foo.bar";
+ createParser(lexeme);
+ Identifier identifier = parser.parsePrefixedIdentifier();
+ expectNotNullIfNoErrors(identifier);
listener.assertNoErrors();
- expect(modifiers.abstractKeyword, isNotNull);
+ expect(identifier, new isInstanceOf<PrefixedIdentifier>());
+ PrefixedIdentifier prefixedIdentifier = identifier;
+ expect(prefixedIdentifier.prefix.name, "foo");
+ expect(prefixedIdentifier.period, isNotNull);
+ expect(prefixedIdentifier.identifier.name, "bar");
}
- void test_parseModifiers_const() {
- createParser('const A');
- Modifiers modifiers = parser.parseModifiers();
- expectNotNullIfNoErrors(modifiers);
+ void test_parsePrimaryExpression_const() {
+ createParser('const A()');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(modifiers.constKeyword, isNotNull);
+ expect(expression, isNotNull);
}
- void test_parseModifiers_covariant() {
- createParser('covariant A');
- Modifiers modifiers = parser.parseModifiers();
- expectNotNullIfNoErrors(modifiers);
+ void test_parsePrimaryExpression_double() {
+ String doubleLiteral = "3.2e4";
+ createParser(doubleLiteral);
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(modifiers.covariantKeyword, isNotNull);
+ expect(expression, new isInstanceOf<DoubleLiteral>());
+ DoubleLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, double.parse(doubleLiteral));
}
- void test_parseModifiers_external() {
- createParser('external A');
- Modifiers modifiers = parser.parseModifiers();
- expectNotNullIfNoErrors(modifiers);
+ void test_parsePrimaryExpression_false() {
+ createParser('false');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(modifiers.externalKeyword, isNotNull);
+ expect(expression, new isInstanceOf<BooleanLiteral>());
+ BooleanLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, isFalse);
}
- void test_parseModifiers_factory() {
- createParser('factory A');
- Modifiers modifiers = parser.parseModifiers();
- expectNotNullIfNoErrors(modifiers);
+ void test_parsePrimaryExpression_function_arguments() {
+ createParser('(int i) => i + 1');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(modifiers.factoryKeyword, isNotNull);
+ expect(expression, new isInstanceOf<FunctionExpression>());
+ FunctionExpression functionExpression = expression;
+ expect(functionExpression.parameters, isNotNull);
+ expect(functionExpression.body, isNotNull);
}
- void test_parseModifiers_final() {
- createParser('final A');
- Modifiers modifiers = parser.parseModifiers();
- expectNotNullIfNoErrors(modifiers);
+ void test_parsePrimaryExpression_function_noArguments() {
+ createParser('() => 42');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(modifiers.finalKeyword, isNotNull);
+ expect(expression, new isInstanceOf<FunctionExpression>());
+ FunctionExpression functionExpression = expression;
+ expect(functionExpression.parameters, isNotNull);
+ expect(functionExpression.body, isNotNull);
}
- void test_parseModifiers_static() {
- createParser('static A');
- Modifiers modifiers = parser.parseModifiers();
- expectNotNullIfNoErrors(modifiers);
+ void test_parsePrimaryExpression_genericFunctionExpression() {
+ createParser('<X, Y>(Map<X, Y> m, X x) => m[x]');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(modifiers.staticKeyword, isNotNull);
+ expect(expression, new isInstanceOf<FunctionExpression>());
+ FunctionExpression function = expression;
+ expect(function.typeParameters, isNotNull);
}
- void test_parseModifiers_var() {
- createParser('var A');
- Modifiers modifiers = parser.parseModifiers();
- expectNotNullIfNoErrors(modifiers);
+ void test_parsePrimaryExpression_hex() {
+ String hexLiteral = "3F";
+ createParser('0x$hexLiteral');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(modifiers.varKeyword, isNotNull);
+ expect(expression, new isInstanceOf<IntegerLiteral>());
+ IntegerLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, int.parse(hexLiteral, radix: 16));
}
- void test_parseMultiplicativeExpression_normal() {
- createParser('x * y');
- Expression expression = parser.parseMultiplicativeExpression();
+ void test_parsePrimaryExpression_identifier() {
+ createParser('a');
+ Expression expression = parser.parsePrimaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<BinaryExpression>());
- BinaryExpression binaryExpression = expression;
- expect(binaryExpression.leftOperand, isNotNull);
- expect(binaryExpression.operator, isNotNull);
- expect(binaryExpression.operator.type, TokenType.STAR);
- expect(binaryExpression.rightOperand, isNotNull);
+ expect(expression, new isInstanceOf<SimpleIdentifier>());
+ SimpleIdentifier identifier = expression;
+ expect(identifier, isNotNull);
}
- void test_parseMultiplicativeExpression_super() {
- createParser('super * y');
- Expression expression = parser.parseMultiplicativeExpression();
+ void test_parsePrimaryExpression_int() {
+ String intLiteral = "472";
+ createParser(intLiteral);
+ Expression expression = parser.parsePrimaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<BinaryExpression>());
- BinaryExpression binaryExpression = expression;
- expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
- expect(binaryExpression.operator, isNotNull);
- expect(binaryExpression.operator.type, TokenType.STAR);
- expect(binaryExpression.rightOperand, isNotNull);
+ expect(expression, new isInstanceOf<IntegerLiteral>());
+ IntegerLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, int.parse(intLiteral));
}
- void test_parseNewExpression() {
- createParser('new A()');
- InstanceCreationExpression expression = parser.parseNewExpression();
+ void test_parsePrimaryExpression_listLiteral() {
+ createParser('[ ]');
+ Expression expression = parser.parsePrimaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression.keyword, isNotNull);
- ConstructorName name = expression.constructorName;
- expect(name, isNotNull);
- expect(name.type, isNotNull);
- expect(name.period, isNull);
- expect(name.name, isNull);
- expect(expression.argumentList, isNotNull);
+ expect(expression, new isInstanceOf<ListLiteral>());
+ ListLiteral literal = expression;
+ expect(literal, isNotNull);
}
- void test_parseNonLabeledStatement_const_list_empty() {
- createParser('const [];');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_listLiteral_index() {
+ createParser('[]');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- expect(expressionStatement.expression, isNotNull);
+ expect(expression, new isInstanceOf<ListLiteral>());
+ ListLiteral literal = expression;
+ expect(literal, isNotNull);
}
- void test_parseNonLabeledStatement_const_list_nonEmpty() {
- createParser('const [1, 2];');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_listLiteral_typed() {
+ createParser('<A>[ ]');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- expect(expressionStatement.expression, isNotNull);
+ expect(expression, new isInstanceOf<ListLiteral>());
+ ListLiteral literal = expression;
+ expect(literal.typeArguments, isNotNull);
+ expect(literal.typeArguments.arguments, hasLength(1));
}
- void test_parseNonLabeledStatement_const_map_empty() {
- createParser('const {};');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_listLiteral_typed_genericComment() {
+ enableGenericMethodComments = true;
+ createParser('/*<A>*/[ ]');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- expect(expressionStatement.expression, isNotNull);
+ expect(expression, new isInstanceOf<ListLiteral>());
+ ListLiteral literal = expression;
+ expect(literal.typeArguments, isNotNull);
+ expect(literal.typeArguments.arguments, hasLength(1));
}
- void test_parseNonLabeledStatement_const_map_nonEmpty() {
- // TODO(brianwilkerson) Implement more tests for this method.
- createParser("const {'a' : 1};");
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_mapLiteral() {
+ createParser('{}');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- expect(expressionStatement.expression, isNotNull);
+ expect(expression, new isInstanceOf<MapLiteral>());
+ MapLiteral literal = expression;
+ expect(literal.typeArguments, isNull);
+ expect(literal, isNotNull);
}
- void test_parseNonLabeledStatement_const_object() {
- createParser('const A();');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_mapLiteral_typed() {
+ createParser('<A, B>{}');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- expect(expressionStatement.expression, isNotNull);
+ expect(expression, new isInstanceOf<MapLiteral>());
+ MapLiteral literal = expression;
+ expect(literal.typeArguments, isNotNull);
+ expect(literal.typeArguments.arguments, hasLength(2));
}
- void test_parseNonLabeledStatement_const_object_named_typeParameters() {
- createParser('const A<B>.c();');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_mapLiteral_typed_genericComment() {
+ enableGenericMethodComments = true;
+ createParser('/*<A, B>*/{}');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- expect(expressionStatement.expression, isNotNull);
+ expect(expression, new isInstanceOf<MapLiteral>());
+ MapLiteral literal = expression;
+ expect(literal.typeArguments, isNotNull);
+ expect(literal.typeArguments.arguments, hasLength(2));
}
- void test_parseNonLabeledStatement_constructorInvocation() {
- createParser('new C().m();');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_new() {
+ createParser('new A()');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- expect(expressionStatement.expression, isNotNull);
+ expect(expression, new isInstanceOf<InstanceCreationExpression>());
+ InstanceCreationExpression creation = expression;
+ expect(creation, isNotNull);
}
- void test_parseNonLabeledStatement_false() {
- createParser('false;');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_null() {
+ createParser('null');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- expect(expressionStatement.expression, isNotNull);
+ expect(expression, new isInstanceOf<NullLiteral>());
+ NullLiteral literal = expression;
+ expect(literal.literal, isNotNull);
}
- void test_parseNonLabeledStatement_functionDeclaration() {
- createParser('f() {};');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_parenthesized() {
+ createParser('(x)');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
+ expect(expression, new isInstanceOf<ParenthesizedExpression>());
+ ParenthesizedExpression parens = expression;
+ expect(parens, isNotNull);
}
- void test_parseNonLabeledStatement_functionDeclaration_arguments() {
- createParser('f(void g()) {};');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_string() {
+ createParser('"string"');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
+ expect(literal.isMultiline, isFalse);
+ expect(literal.isRaw, isFalse);
+ expect(literal.value, "string");
}
- void test_parseNonLabeledStatement_functionExpressionIndex() {
- createParser('() {}[0] = null;');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_string_multiline() {
+ createParser("'''string'''");
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
+ expect(literal.isMultiline, isTrue);
+ expect(literal.isRaw, isFalse);
+ expect(literal.value, "string");
}
- void test_parseNonLabeledStatement_functionInvocation() {
- createParser('f();');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_string_raw() {
+ createParser("r'string'");
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- expect(expressionStatement.expression, isNotNull);
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
+ expect(literal.isMultiline, isFalse);
+ expect(literal.isRaw, isTrue);
+ expect(literal.value, "string");
}
- void test_parseNonLabeledStatement_invokeFunctionExpression() {
- createParser('(a) {return a + a;} (3);');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_super() {
+ createParser('super.x');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionExpressionInvocation,
- FunctionExpressionInvocation,
- expressionStatement.expression);
- FunctionExpressionInvocation invocation =
- expressionStatement.expression as FunctionExpressionInvocation;
- EngineTestCase.assertInstanceOf((obj) => obj is FunctionExpression,
- FunctionExpression, invocation.function);
- FunctionExpression expression = invocation.function as FunctionExpression;
- expect(expression.parameters, isNotNull);
- expect(expression.body, isNotNull);
- expect(invocation.typeArguments, isNull);
- ArgumentList list = invocation.argumentList;
- expect(list, isNotNull);
- expect(list.arguments, hasLength(1));
+ expect(expression, new isInstanceOf<PropertyAccess>());
+ PropertyAccess propertyAccess = expression;
+ expect(propertyAccess.target is SuperExpression, isTrue);
+ expect(propertyAccess.operator, isNotNull);
+ expect(propertyAccess.operator.type, TokenType.PERIOD);
+ expect(propertyAccess.propertyName, isNotNull);
}
- void test_parseNonLabeledStatement_null() {
- createParser('null;');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_this() {
+ createParser('this');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- expect(expressionStatement.expression, isNotNull);
+ expect(expression, new isInstanceOf<ThisExpression>());
+ ThisExpression thisExpression = expression;
+ expect(thisExpression.thisKeyword, isNotNull);
}
- void test_parseNonLabeledStatement_startingWithBuiltInIdentifier() {
- createParser('library.getName();');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parsePrimaryExpression_true() {
+ createParser('true');
+ Expression expression = parser.parsePrimaryExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- expect(expressionStatement.expression, isNotNull);
+ expect(expression, new isInstanceOf<BooleanLiteral>());
+ BooleanLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, isTrue);
}
- void test_parseNonLabeledStatement_true() {
- createParser('true;');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
- listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- expect(expressionStatement.expression, isNotNull);
+ void test_Parser() {
+ expect(new Parser(null, null), isNotNull);
}
- void test_parseNonLabeledStatement_typeCast() {
- createParser('double.NAN as num;');
- Statement statement = parser.parseNonLabeledStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseRedirectingConstructorInvocation_named() {
+ createParser('this.a()');
+ RedirectingConstructorInvocation invocation =
+ parser.parseRedirectingConstructorInvocation(true);
+ expectNotNullIfNoErrors(invocation);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<ExpressionStatement>());
- ExpressionStatement expressionStatement = statement;
- expect(expressionStatement.expression, isNotNull);
+ expect(invocation.argumentList, isNotNull);
+ expect(invocation.constructorName, isNotNull);
+ expect(invocation.thisKeyword, isNotNull);
+ expect(invocation.period, isNotNull);
}
- void test_parseNormalFormalParameter_field_const_noType() {
- createParser('const this.a)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseRedirectingConstructorInvocation_unnamed() {
+ createParser('this()');
+ RedirectingConstructorInvocation invocation =
+ parser.parseRedirectingConstructorInvocation(false);
+ expectNotNullIfNoErrors(invocation);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FieldFormalParameter>());
- FieldFormalParameter fieldParameter = parameter;
- expect(fieldParameter.keyword, isNotNull);
- expect(fieldParameter.type, isNull);
- expect(fieldParameter.identifier, isNotNull);
- expect(fieldParameter.parameters, isNull);
+ expect(invocation.argumentList, isNotNull);
+ expect(invocation.constructorName, isNull);
+ expect(invocation.thisKeyword, isNotNull);
+ expect(invocation.period, isNull);
}
- void test_parseNormalFormalParameter_field_const_type() {
- createParser('const A this.a)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ @failingTest
+ void test_parseRelationalExpression_as_functionType_noReturnType() {
+ createParser('x as Function(int)');
+ Expression expression = parser.parseRelationalExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FieldFormalParameter>());
- FieldFormalParameter fieldParameter = parameter;
- expect(fieldParameter.keyword, isNotNull);
- expect(fieldParameter.type, isNotNull);
- expect(fieldParameter.identifier, isNotNull);
- expect(fieldParameter.parameters, isNull);
+ expect(expression, new isInstanceOf<AsExpression>());
+ AsExpression asExpression = expression;
+ expect(asExpression.expression, isNotNull);
+ expect(asExpression.asOperator, isNotNull);
+ expect(asExpression.type, new isInstanceOf<GenericFunctionType>());
}
- void test_parseNormalFormalParameter_field_final_noType() {
- createParser('final this.a)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ @failingTest
+ void test_parseRelationalExpression_as_functionType_returnType() {
+ createParser('x as String Function(int)');
+ Expression expression = parser.parseRelationalExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FieldFormalParameter>());
- FieldFormalParameter fieldParameter = parameter;
- expect(fieldParameter.keyword, isNotNull);
- expect(fieldParameter.type, isNull);
- expect(fieldParameter.identifier, isNotNull);
- expect(fieldParameter.parameters, isNull);
+ expect(expression, new isInstanceOf<AsExpression>());
+ AsExpression asExpression = expression;
+ expect(asExpression.expression, isNotNull);
+ expect(asExpression.asOperator, isNotNull);
+ expect(asExpression.type, new isInstanceOf<GenericFunctionType>());
}
- void test_parseNormalFormalParameter_field_final_type() {
- createParser('final A this.a)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseRelationalExpression_as_generic() {
+ createParser('x as C<D>');
+ Expression expression = parser.parseRelationalExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FieldFormalParameter>());
- FieldFormalParameter fieldParameter = parameter;
- expect(fieldParameter.keyword, isNotNull);
- expect(fieldParameter.type, isNotNull);
- expect(fieldParameter.identifier, isNotNull);
- expect(fieldParameter.parameters, isNull);
+ expect(expression, new isInstanceOf<AsExpression>());
+ AsExpression asExpression = expression;
+ expect(asExpression.expression, isNotNull);
+ expect(asExpression.asOperator, isNotNull);
+ expect(asExpression.type, new isInstanceOf<TypeName>());
}
- void test_parseNormalFormalParameter_field_function_nested() {
- createParser('this.a(B b))');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseRelationalExpression_as_nullable() {
+ enableNnbd = true;
+ createParser('x as Y?)');
+ Expression expression = parser.parseRelationalExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FieldFormalParameter>());
- FieldFormalParameter fieldParameter = parameter;
- expect(fieldParameter.keyword, isNull);
- expect(fieldParameter.type, isNull);
- expect(fieldParameter.identifier, isNotNull);
- FormalParameterList parameterList = fieldParameter.parameters;
- expect(parameterList, isNotNull);
- expect(parameterList.parameters, hasLength(1));
+ expect(expression, new isInstanceOf<AsExpression>());
+ AsExpression asExpression = expression;
+ expect(asExpression.expression, isNotNull);
+ expect(asExpression.asOperator, isNotNull);
+ expect(asExpression.type, new isInstanceOf<TypeName>());
}
- void test_parseNormalFormalParameter_field_function_noNested() {
- createParser('this.a())');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseRelationalExpression_as_simple() {
+ createParser('x as Y');
+ Expression expression = parser.parseRelationalExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FieldFormalParameter>());
- FieldFormalParameter fieldParameter = parameter;
- expect(fieldParameter.keyword, isNull);
- expect(fieldParameter.type, isNull);
- expect(fieldParameter.identifier, isNotNull);
- FormalParameterList parameterList = fieldParameter.parameters;
- expect(parameterList, isNotNull);
- expect(parameterList.parameters, hasLength(0));
+ expect(expression, new isInstanceOf<AsExpression>());
+ AsExpression asExpression = expression;
+ expect(asExpression.expression, isNotNull);
+ expect(asExpression.asOperator, isNotNull);
+ expect(asExpression.type, new isInstanceOf<TypeName>());
}
- void test_parseNormalFormalParameter_field_noType() {
- createParser('this.a)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseRelationalExpression_as_simple_function() {
+ createParser('x as Function');
+ Expression expression = parser.parseRelationalExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FieldFormalParameter>());
- FieldFormalParameter fieldParameter = parameter;
- expect(fieldParameter.keyword, isNull);
- expect(fieldParameter.type, isNull);
- expect(fieldParameter.identifier, isNotNull);
- expect(fieldParameter.parameters, isNull);
+ expect(expression, new isInstanceOf<AsExpression>());
+ AsExpression asExpression = expression;
+ expect(asExpression.expression, isNotNull);
+ expect(asExpression.asOperator, isNotNull);
+ expect(asExpression.type, new isInstanceOf<TypeName>());
}
- void test_parseNormalFormalParameter_field_type() {
- createParser('A this.a)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseRelationalExpression_is() {
+ createParser('x is y');
+ Expression expression = parser.parseRelationalExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FieldFormalParameter>());
- FieldFormalParameter fieldParameter = parameter;
- expect(fieldParameter.keyword, isNull);
- expect(fieldParameter.type, isNotNull);
- expect(fieldParameter.identifier, isNotNull);
- expect(fieldParameter.parameters, isNull);
+ expect(expression, new isInstanceOf<IsExpression>());
+ IsExpression isExpression = expression;
+ expect(isExpression.expression, isNotNull);
+ expect(isExpression.isOperator, isNotNull);
+ expect(isExpression.notOperator, isNull);
+ expect(isExpression.type, isNotNull);
}
- void test_parseNormalFormalParameter_field_var() {
- createParser('var this.a)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseRelationalExpression_is_nullable() {
+ enableNnbd = true;
+ createParser('x is y?)');
+ Expression expression = parser.parseRelationalExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FieldFormalParameter>());
- FieldFormalParameter fieldParameter = parameter;
- expect(fieldParameter.keyword, isNotNull);
- expect(fieldParameter.type, isNull);
- expect(fieldParameter.identifier, isNotNull);
- expect(fieldParameter.parameters, isNull);
+ expect(expression, new isInstanceOf<IsExpression>());
+ IsExpression isExpression = expression;
+ expect(isExpression.expression, isNotNull);
+ expect(isExpression.isOperator, isNotNull);
+ expect(isExpression.notOperator, isNull);
+ expect(isExpression.type, isNotNull);
}
- void test_parseNormalFormalParameter_function_noType() {
- createParser('a())');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseRelationalExpression_isNot() {
+ createParser('x is! y');
+ Expression expression = parser.parseRelationalExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNull);
- expect(functionParameter.parameters, isNotNull);
+ expect(expression, new isInstanceOf<IsExpression>());
+ IsExpression isExpression = expression;
+ expect(isExpression.expression, isNotNull);
+ expect(isExpression.isOperator, isNotNull);
+ expect(isExpression.notOperator, isNotNull);
+ expect(isExpression.type, isNotNull);
}
- void test_parseNormalFormalParameter_function_noType_nullable() {
- enableNnbd = true;
- createParser('a()?)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseRelationalExpression_normal() {
+ createParser('x < y');
+ Expression expression = parser.parseRelationalExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNull);
- expect(functionParameter.parameters, isNotNull);
- expect(functionParameter.question, isNotNull);
+ expect(expression, new isInstanceOf<BinaryExpression>());
+ BinaryExpression binaryExpression = expression;
+ expect(binaryExpression.leftOperand, isNotNull);
+ expect(binaryExpression.operator, isNotNull);
+ expect(binaryExpression.operator.type, TokenType.LT);
+ expect(binaryExpression.rightOperand, isNotNull);
}
- void test_parseNormalFormalParameter_function_noType_typeParameterComments() {
- enableGenericMethodComments = true;
- createParser('a/*<E>*/())');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseRelationalExpression_super() {
+ createParser('super < y');
+ Expression expression = parser.parseRelationalExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNotNull);
- expect(functionParameter.parameters, isNotNull);
+ expect(expression, new isInstanceOf<BinaryExpression>());
+ BinaryExpression binaryExpression = expression;
+ expect(binaryExpression.leftOperand, isNotNull);
+ expect(binaryExpression.operator, isNotNull);
+ expect(binaryExpression.operator.type, TokenType.LT);
+ expect(binaryExpression.rightOperand, isNotNull);
}
- void test_parseNormalFormalParameter_function_noType_typeParameters() {
- createParser('a<E>())');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseRethrowExpression() {
+ createParser('rethrow;');
+ RethrowExpression expression = parser.parseRethrowExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNotNull);
- expect(functionParameter.parameters, isNotNull);
- expect(functionParameter.question, isNull);
- expect(functionParameter.question, isNull);
+ expect(expression.rethrowKeyword, isNotNull);
}
- void
- test_parseNormalFormalParameter_function_noType_typeParameters_nullable() {
- enableNnbd = true;
- createParser('a<E>()?)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseReturnStatement_noValue() {
+ createParser('return;');
+ ReturnStatement statement = parser.parseReturnStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNotNull);
- expect(functionParameter.parameters, isNotNull);
- expect(functionParameter.question, isNotNull);
+ expect(statement.returnKeyword, isNotNull);
+ expect(statement.expression, isNull);
+ expect(statement.semicolon, isNotNull);
}
- void test_parseNormalFormalParameter_function_type() {
- createParser('A a())');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseReturnStatement_value() {
+ createParser('return x;');
+ ReturnStatement statement = parser.parseReturnStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNotNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNull);
- expect(functionParameter.parameters, isNotNull);
- expect(functionParameter.question, isNull);
+ expect(statement.returnKeyword, isNotNull);
+ expect(statement.expression, isNotNull);
+ expect(statement.semicolon, isNotNull);
}
- void test_parseNormalFormalParameter_function_type_nullable() {
- enableNnbd = true;
- createParser('A a()?)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ @failingTest
+ void test_parseReturnType_function() {
+ createParser('A<B> Function<B>(B)');
+ GenericFunctionType type = parser.parseReturnType(false);
+ expectNotNullIfNoErrors(type);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNotNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNull);
- expect(functionParameter.parameters, isNotNull);
- expect(functionParameter.question, isNotNull);
+ expect(type.returnType, isNotNull);
+ expect(type.typeParameters, isNotNull);
+ expect(type.parameters, isNotNull);
}
- void test_parseNormalFormalParameter_function_type_typeParameterComments() {
- enableGenericMethodComments = true;
- createParser('A a/*<E>*/())');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseReturnType_named() {
+ createParser('A<B>');
+ TypeName typeName = parser.parseReturnType(false);
+ expectNotNullIfNoErrors(typeName);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNotNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNotNull);
- expect(functionParameter.parameters, isNotNull);
- expect(functionParameter.question, isNull);
+ expect(typeName.name, isNotNull);
+ expect(typeName.typeArguments, isNotNull);
}
- void test_parseNormalFormalParameter_function_type_typeParameters() {
- createParser('A a<E>())');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseReturnType_void() {
+ createParser('void');
+ TypeName typeName = parser.parseReturnType(false);
+ expectNotNullIfNoErrors(typeName);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNotNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNotNull);
- expect(functionParameter.parameters, isNotNull);
- expect(functionParameter.question, isNull);
+ expect(typeName.name, isNotNull);
+ expect(typeName.typeArguments, isNull);
}
- void test_parseNormalFormalParameter_function_type_typeParameters_nullable() {
- enableNnbd = true;
- createParser('A a<E>()?)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseSetter_nonStatic() {
+ createParser('/// Doc\nT set a(var x);');
+ MethodDeclaration method = parser.parseClassMember('C');
+ expectNotNullIfNoErrors(method);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNotNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNotNull);
- expect(functionParameter.parameters, isNotNull);
- expect(functionParameter.question, isNotNull);
+ expect(method.body, isNotNull);
+ expectCommentText(method.documentationComment, '/// Doc');
+ expect(method.externalKeyword, isNull);
+ expect(method.modifierKeyword, isNull);
+ expect(method.name, isNotNull);
+ expect(method.operatorKeyword, isNull);
+ expect(method.typeParameters, isNull);
+ expect(method.parameters, isNotNull);
+ expect(method.propertyKeyword, isNotNull);
+ expect((method.returnType as TypeName).name.name, 'T');
}
- void test_parseNormalFormalParameter_function_void() {
- createParser('void a())');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseSetter_static() {
+ createParser('/// Doc\nstatic T set a(var x) {}');
+ MethodDeclaration method = parser.parseClassMember('C');
+ expectNotNullIfNoErrors(method);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNotNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNull);
- expect(functionParameter.parameters, isNotNull);
- expect(functionParameter.question, isNull);
- }
-
- void test_parseNormalFormalParameter_function_void_nullable() {
- enableNnbd = true;
- createParser('void a()?)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
- listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNotNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNull);
- expect(functionParameter.parameters, isNotNull);
- expect(functionParameter.question, isNotNull);
+ expect(method.body, isNotNull);
+ expectCommentText(method.documentationComment, '/// Doc');
+ expect(method.externalKeyword, isNull);
+ expect(method.modifierKeyword.lexeme, 'static');
+ expect(method.name, isNotNull);
+ expect(method.operatorKeyword, isNull);
+ expect(method.typeParameters, isNull);
+ expect(method.parameters, isNotNull);
+ expect(method.propertyKeyword, isNotNull);
+ expect((method.returnType as TypeName).name.name, 'T');
}
- void test_parseNormalFormalParameter_function_void_typeParameterComments() {
- enableGenericMethodComments = true;
- createParser('void a/*<E>*/())');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseShiftExpression_normal() {
+ createParser('x << y');
+ BinaryExpression expression = parser.parseShiftExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNotNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNotNull);
- expect(functionParameter.parameters, isNotNull);
- expect(functionParameter.question, isNull);
+ expect(expression.leftOperand, isNotNull);
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.LT_LT);
+ expect(expression.rightOperand, isNotNull);
}
- void test_parseNormalFormalParameter_function_void_typeParameters() {
- createParser('void a<E>())');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseShiftExpression_super() {
+ createParser('super << y');
+ BinaryExpression expression = parser.parseShiftExpression();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNotNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNotNull);
- expect(functionParameter.parameters, isNotNull);
- expect(functionParameter.question, isNull);
+ expect(expression.leftOperand, isNotNull);
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.LT_LT);
+ expect(expression.rightOperand, isNotNull);
}
- void test_parseNormalFormalParameter_function_void_typeParameters_nullable() {
- enableNnbd = true;
- createParser('void a<E>()?)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
- listener.assertNoErrors();
- expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
- FunctionTypedFormalParameter functionParameter = parameter;
- expect(functionParameter.returnType, isNotNull);
- expect(functionParameter.identifier, isNotNull);
- expect(functionParameter.typeParameters, isNotNull);
- expect(functionParameter.parameters, isNotNull);
- expect(functionParameter.question, isNotNull);
+ void test_parseSimpleIdentifier1_normalIdentifier() {
+ // TODO(brianwilkerson) Implement tests for this method.
}
- void test_parseNormalFormalParameter_simple_const_noType() {
- createParser('const a)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseSimpleIdentifier_builtInIdentifier() {
+ String lexeme = "as";
+ createParser(lexeme);
+ SimpleIdentifier identifier = parser.parseSimpleIdentifier();
+ expectNotNullIfNoErrors(identifier);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.identifier, isNotNull);
+ expect(identifier.token, isNotNull);
+ expect(identifier.name, lexeme);
}
- void test_parseNormalFormalParameter_simple_const_type() {
- createParser('const A a)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseSimpleIdentifier_normalIdentifier() {
+ String lexeme = "foo";
+ createParser(lexeme);
+ SimpleIdentifier identifier = parser.parseSimpleIdentifier();
+ expectNotNullIfNoErrors(identifier);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
+ expect(identifier.token, isNotNull);
+ expect(identifier.name, lexeme);
}
- void test_parseNormalFormalParameter_simple_final_noType() {
- createParser('final a)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
- listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.identifier, isNotNull);
+ void test_parseStatement_emptyTypeArgumentList() {
+ createParser('C<> c;');
+ Statement statement = parser.parseStatement2();
+ expectNotNullIfNoErrors(statement);
+ listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TYPE_NAME]);
+ expect(statement, new isInstanceOf<VariableDeclarationStatement>());
+ VariableDeclarationStatement declaration = statement;
+ VariableDeclarationList variables = declaration.variables;
+ TypeName type = variables.type;
+ TypeArgumentList argumentList = type.typeArguments;
+ expect(argumentList.leftBracket, isNotNull);
+ expect(argumentList.arguments, hasLength(1));
+ expect(argumentList.arguments[0].isSynthetic, isTrue);
+ expect(argumentList.rightBracket, isNotNull);
}
- void test_parseNormalFormalParameter_simple_final_type() {
- createParser('final A a)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseStatement_functionDeclaration_noReturnType() {
+ createParser('f(a, b) {};');
+ Statement statement = parser.parseStatement2();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
+ expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
+ FunctionDeclarationStatement declaration = statement;
+ expect(declaration.functionDeclaration, isNotNull);
}
- void test_parseNormalFormalParameter_simple_noName() {
- createParser('a)');
- NormalFormalParameter parameter =
- parser.parseNormalFormalParameter(inFunctionType: true);
- expectNotNullIfNoErrors(parameter);
+ void
+ test_parseStatement_functionDeclaration_noReturnType_typeParameterComments() {
+ enableGenericMethodComments = true;
+ createParser('f/*<E>*/(a, b) {};');
+ Statement statement = parser.parseStatement2();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.identifier, isNull);
+ expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
+ FunctionDeclarationStatement declaration = statement;
+ expect(declaration.functionDeclaration, isNotNull);
+ expect(declaration.functionDeclaration.functionExpression.typeParameters,
+ isNotNull);
}
- void test_parseNormalFormalParameter_simple_noType() {
- createParser('a)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseStatement_functionDeclaration_noReturnType_typeParameters() {
+ createParser('f<E>(a, b) {};');
+ Statement statement = parser.parseStatement2();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.identifier, isNotNull);
+ expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
+ FunctionDeclarationStatement declaration = statement;
+ expect(declaration.functionDeclaration, isNotNull);
}
- void test_parseNormalFormalParameter_simple_noType_namedCovariant() {
- createParser('covariant)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseStatement_functionDeclaration_returnType() {
+ // TODO(brianwilkerson) Implement more tests for this method.
+ createParser('int f(a, b) {};');
+ Statement statement = parser.parseStatement2();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.covariantKeyword, isNull);
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.identifier, isNotNull);
+ expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
+ FunctionDeclarationStatement declaration = statement;
+ expect(declaration.functionDeclaration, isNotNull);
}
- void test_parseNormalFormalParameter_simple_type() {
- createParser('A a)');
- NormalFormalParameter parameter = parser.parseNormalFormalParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseStatement_functionDeclaration_returnType_typeParameters() {
+ createParser('int f<E>(a, b) {};');
+ Statement statement = parser.parseStatement2();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(parameter, new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter simpleParameter = parameter;
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.identifier, isNotNull);
+ expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
+ FunctionDeclarationStatement declaration = statement;
+ expect(declaration.functionDeclaration, isNotNull);
}
- void test_parseOperator() {
- createParser('/// Doc\nT operator +(A a);');
- MethodDeclaration method = parser.parseClassMember('C');
- expectNotNullIfNoErrors(method);
+ void test_parseStatement_mulipleLabels() {
+ createParser('l: m: return x;');
+ Statement statement = parser.parseStatement2();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(method.body, isNotNull);
- _expectCommentText(method.documentationComment, '/// Doc');
- expect(method.externalKeyword, isNull);
- expect(method.modifierKeyword, isNull);
- expect(method.name, isNotNull);
- expect(method.operatorKeyword, isNotNull);
- expect(method.typeParameters, isNull);
- expect(method.parameters, isNotNull);
- expect(method.propertyKeyword, isNull);
- expect((method.returnType as TypeName).name.name, 'T');
- }
-
- void test_parseOptionalReturnType() {
- // TODO(brianwilkerson) Implement tests for this method.
+ expect(statement, new isInstanceOf<LabeledStatement>());
+ LabeledStatement labeledStatement = statement;
+ expect(labeledStatement.labels, hasLength(2));
+ expect(labeledStatement.statement, isNotNull);
}
- void test_parsePartDirective() {
- createParser("part 'lib/lib.dart';");
- PartDirective directive = parseFullDirective();
- expectNotNullIfNoErrors(directive);
+ void test_parseStatement_noLabels() {
+ createParser('return x;');
+ Statement statement = parser.parseStatement2();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(directive.partKeyword, isNotNull);
- expect(directive.uri, isNotNull);
- expect(directive.semicolon, isNotNull);
}
- void test_parsePartOfDirective_name() {
- enableUriInPartOf = true;
- createParser("part of l;");
- PartOfDirective directive = parseFullDirective();
- expect(directive.partKeyword, isNotNull);
- expect(directive.ofKeyword, isNotNull);
- expect(directive.libraryName, isNotNull);
- expect(directive.uri, isNull);
- expect(directive.semicolon, isNotNull);
+ void test_parseStatement_singleLabel() {
+ createParser('l: return x;');
+ Statement statement = parser.parseStatement2();
+ expectNotNullIfNoErrors(statement);
+ listener.assertNoErrors();
+ expect(statement, new isInstanceOf<LabeledStatement>());
+ LabeledStatement labeledStatement = statement;
+ expect(labeledStatement.labels, hasLength(1));
+ expect(labeledStatement.labels[0].label.inDeclarationContext(), isTrue);
+ expect(labeledStatement.statement, isNotNull);
}
- void test_parsePartOfDirective_uri() {
- enableUriInPartOf = true;
- createParser("part of 'lib.dart';");
- PartOfDirective directive = parseFullDirective();
- expect(directive.partKeyword, isNotNull);
- expect(directive.ofKeyword, isNotNull);
- expect(directive.libraryName, isNull);
- expect(directive.uri, isNotNull);
- expect(directive.semicolon, isNotNull);
+ void test_parseStatements_multiple() {
+ List<Statement> statements = parseStatements("return; return;", 2);
+ expect(statements, hasLength(2));
}
- void test_parsePostfixExpression_decrement() {
- createParser('i--');
- Expression expression = parser.parsePostfixExpression();
- expectNotNullIfNoErrors(expression);
- listener.assertNoErrors();
- expect(expression, new isInstanceOf<PostfixExpression>());
- PostfixExpression postfixExpression = expression;
- expect(postfixExpression.operand, isNotNull);
- expect(postfixExpression.operator, isNotNull);
- expect(postfixExpression.operator.type, TokenType.MINUS_MINUS);
+ void test_parseStatements_single() {
+ List<Statement> statements = parseStatements("return;", 1);
+ expect(statements, hasLength(1));
}
- void test_parsePostfixExpression_increment() {
- createParser('i++');
- Expression expression = parser.parsePostfixExpression();
+ void test_parseStringLiteral_adjacent() {
+ createParser("'a' 'b'");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<PostfixExpression>());
- PostfixExpression postfixExpression = expression;
- expect(postfixExpression.operand, isNotNull);
- expect(postfixExpression.operator, isNotNull);
- expect(postfixExpression.operator.type, TokenType.PLUS_PLUS);
+ expect(expression, new isInstanceOf<AdjacentStrings>());
+ AdjacentStrings literal = expression;
+ NodeList<StringLiteral> strings = literal.strings;
+ expect(strings, hasLength(2));
+ StringLiteral firstString = strings[0];
+ StringLiteral secondString = strings[1];
+ expect((firstString as SimpleStringLiteral).value, "a");
+ expect((secondString as SimpleStringLiteral).value, "b");
}
- void test_parsePostfixExpression_none_indexExpression() {
- createParser('a[0]');
- Expression expression = parser.parsePostfixExpression();
+ void test_parseStringLiteral_endsWithInterpolation() {
+ createParser(r"'x$y'");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<IndexExpression>());
- IndexExpression indexExpression = expression;
- expect(indexExpression.target, isNotNull);
- expect(indexExpression.index, isNotNull);
+ expect(expression, new isInstanceOf<StringInterpolation>());
+ StringInterpolation interpolation = expression;
+ expect(interpolation.elements, hasLength(3));
+ expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
+ InterpolationString element0 = interpolation.elements[0];
+ expect(element0.value, 'x');
+ expect(
+ interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
+ InterpolationExpression element1 = interpolation.elements[1];
+ expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
+ expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
+ InterpolationString element2 = interpolation.elements[2];
+ expect(element2.value, '');
}
- void test_parsePostfixExpression_none_methodInvocation() {
- createParser('a.m()');
- Expression expression = parser.parsePostfixExpression();
+ void test_parseStringLiteral_interpolated() {
+ createParser("'a \${b} c \$this d'");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MethodInvocation>());
- MethodInvocation methodInvocation = expression;
- expect(methodInvocation.target, isNotNull);
- expect(methodInvocation.operator.type, TokenType.PERIOD);
- expect(methodInvocation.methodName, isNotNull);
- expect(methodInvocation.typeArguments, isNull);
- expect(methodInvocation.argumentList, isNotNull);
+ expect(expression, new isInstanceOf<StringInterpolation>());
+ StringInterpolation literal = expression;
+ NodeList<InterpolationElement> elements = literal.elements;
+ expect(elements, hasLength(5));
+ expect(elements[0] is InterpolationString, isTrue);
+ expect(elements[1] is InterpolationExpression, isTrue);
+ expect(elements[2] is InterpolationString, isTrue);
+ expect(elements[3] is InterpolationExpression, isTrue);
+ expect(elements[4] is InterpolationString, isTrue);
}
- void test_parsePostfixExpression_none_methodInvocation_question_dot() {
- createParser('a?.m()');
- Expression expression = parser.parsePostfixExpression();
+ void test_parseStringLiteral_multiline_encodedSpace() {
+ createParser("'''\\x20\na'''");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MethodInvocation>());
- MethodInvocation methodInvocation = expression;
- expect(methodInvocation.target, isNotNull);
- expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
- expect(methodInvocation.methodName, isNotNull);
- expect(methodInvocation.typeArguments, isNull);
- expect(methodInvocation.argumentList, isNotNull);
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, " \na");
}
- void
- test_parsePostfixExpression_none_methodInvocation_question_dot_typeArgumentComments() {
- enableGenericMethodComments = true;
- createParser('a?.m/*<E>*/()');
- Expression expression = parser.parsePostfixExpression();
+ void test_parseStringLiteral_multiline_endsWithInterpolation() {
+ createParser(r"'''x$y'''");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MethodInvocation>());
- MethodInvocation methodInvocation = expression;
- expect(methodInvocation.target, isNotNull);
- expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
- expect(methodInvocation.methodName, isNotNull);
- expect(methodInvocation.typeArguments, isNotNull);
- expect(methodInvocation.argumentList, isNotNull);
+ expect(expression, new isInstanceOf<StringInterpolation>());
+ StringInterpolation interpolation = expression;
+ expect(interpolation.elements, hasLength(3));
+ expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
+ InterpolationString element0 = interpolation.elements[0];
+ expect(element0.value, 'x');
+ expect(
+ interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
+ InterpolationExpression element1 = interpolation.elements[1];
+ expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
+ expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
+ InterpolationString element2 = interpolation.elements[2];
+ expect(element2.value, '');
}
- void
- test_parsePostfixExpression_none_methodInvocation_question_dot_typeArguments() {
- createParser('a?.m<E>()');
- Expression expression = parser.parsePostfixExpression();
+ void test_parseStringLiteral_multiline_escapedBackslash() {
+ createParser("'''\\\\\na'''");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MethodInvocation>());
- MethodInvocation methodInvocation = expression;
- expect(methodInvocation.target, isNotNull);
- expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
- expect(methodInvocation.methodName, isNotNull);
- expect(methodInvocation.typeArguments, isNotNull);
- expect(methodInvocation.argumentList, isNotNull);
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, "\\\na");
}
- void
- test_parsePostfixExpression_none_methodInvocation_typeArgumentComments() {
- enableGenericMethodComments = true;
- createParser('a.m/*<E>*/()');
- Expression expression = parser.parsePostfixExpression();
+ void test_parseStringLiteral_multiline_escapedBackslash_raw() {
+ createParser("r'''\\\\\na'''");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MethodInvocation>());
- MethodInvocation methodInvocation = expression;
- expect(methodInvocation.target, isNotNull);
- expect(methodInvocation.operator.type, TokenType.PERIOD);
- expect(methodInvocation.methodName, isNotNull);
- expect(methodInvocation.typeArguments, isNotNull);
- expect(methodInvocation.argumentList, isNotNull);
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, "\\\\\na");
}
- void test_parsePostfixExpression_none_methodInvocation_typeArguments() {
- createParser('a.m<E>()');
- Expression expression = parser.parsePostfixExpression();
+ void test_parseStringLiteral_multiline_escapedEolMarker() {
+ createParser("'''\\\na'''");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MethodInvocation>());
- MethodInvocation methodInvocation = expression;
- expect(methodInvocation.target, isNotNull);
- expect(methodInvocation.operator.type, TokenType.PERIOD);
- expect(methodInvocation.methodName, isNotNull);
- expect(methodInvocation.typeArguments, isNotNull);
- expect(methodInvocation.argumentList, isNotNull);
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, "a");
}
- void test_parsePostfixExpression_none_propertyAccess() {
- createParser('a.b');
- Expression expression = parser.parsePostfixExpression();
+ void test_parseStringLiteral_multiline_escapedEolMarker_raw() {
+ createParser("r'''\\\na'''");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<PrefixedIdentifier>());
- PrefixedIdentifier identifier = expression;
- expect(identifier.prefix, isNotNull);
- expect(identifier.identifier, isNotNull);
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, "a");
}
- void test_parsePrefixedIdentifier_noPrefix() {
- String lexeme = "bar";
- createParser(lexeme);
- Identifier identifier = parser.parsePrefixedIdentifier();
- expectNotNullIfNoErrors(identifier);
+ void test_parseStringLiteral_multiline_escapedSpaceAndEolMarker() {
+ createParser("'''\\ \\\na'''");
+ Expression expression = parser.parseStringLiteral();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(identifier, new isInstanceOf<SimpleIdentifier>());
- SimpleIdentifier simpleIdentifier = identifier;
- expect(simpleIdentifier.token, isNotNull);
- expect(simpleIdentifier.name, lexeme);
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, "a");
}
- void test_parsePrefixedIdentifier_prefix() {
- String lexeme = "foo.bar";
- createParser(lexeme);
- Identifier identifier = parser.parsePrefixedIdentifier();
- expectNotNullIfNoErrors(identifier);
+ void test_parseStringLiteral_multiline_escapedSpaceAndEolMarker_raw() {
+ createParser("r'''\\ \\\na'''");
+ Expression expression = parser.parseStringLiteral();
+ expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(identifier, new isInstanceOf<PrefixedIdentifier>());
- PrefixedIdentifier prefixedIdentifier = identifier;
- expect(prefixedIdentifier.prefix.name, "foo");
- expect(prefixedIdentifier.period, isNotNull);
- expect(prefixedIdentifier.identifier.name, "bar");
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, "a");
}
- void test_parsePrimaryExpression_const() {
- createParser('const A()');
- Expression expression = parser.parsePrimaryExpression();
- expectNotNullIfNoErrors(expression);
- listener.assertNoErrors();
- expect(expression, isNotNull);
- }
-
- void test_parsePrimaryExpression_double() {
- String doubleLiteral = "3.2e4";
- createParser(doubleLiteral);
- Expression expression = parser.parsePrimaryExpression();
+ void test_parseStringLiteral_multiline_escapedTab() {
+ createParser("'''\\t\na'''");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<DoubleLiteral>());
- DoubleLiteral literal = expression;
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
expect(literal.literal, isNotNull);
- expect(literal.value, double.parse(doubleLiteral));
+ expect(literal.value, "\t\na");
}
- void test_parsePrimaryExpression_false() {
- createParser('false');
- Expression expression = parser.parsePrimaryExpression();
+ void test_parseStringLiteral_multiline_escapedTab_raw() {
+ createParser("r'''\\t\na'''");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<BooleanLiteral>());
- BooleanLiteral literal = expression;
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
expect(literal.literal, isNotNull);
- expect(literal.value, isFalse);
+ expect(literal.value, "\\t\na");
}
- void test_parsePrimaryExpression_function_arguments() {
- createParser('(int i) => i + 1');
- Expression expression = parser.parsePrimaryExpression();
+ void test_parseStringLiteral_multiline_quoteAfterInterpolation() {
+ createParser(r"""'''$x'y'''""");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<FunctionExpression>());
- FunctionExpression functionExpression = expression;
- expect(functionExpression.parameters, isNotNull);
- expect(functionExpression.body, isNotNull);
+ expect(expression, new isInstanceOf<StringInterpolation>());
+ StringInterpolation interpolation = expression;
+ expect(interpolation.elements, hasLength(3));
+ expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
+ InterpolationString element0 = interpolation.elements[0];
+ expect(element0.value, '');
+ expect(
+ interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
+ InterpolationExpression element1 = interpolation.elements[1];
+ expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
+ expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
+ InterpolationString element2 = interpolation.elements[2];
+ expect(element2.value, "'y");
}
- void test_parsePrimaryExpression_function_noArguments() {
- createParser('() => 42');
- Expression expression = parser.parsePrimaryExpression();
+ void test_parseStringLiteral_multiline_startsWithInterpolation() {
+ createParser(r"'''${x}y'''");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<FunctionExpression>());
- FunctionExpression functionExpression = expression;
- expect(functionExpression.parameters, isNotNull);
- expect(functionExpression.body, isNotNull);
+ expect(expression, new isInstanceOf<StringInterpolation>());
+ StringInterpolation interpolation = expression;
+ expect(interpolation.elements, hasLength(3));
+ expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
+ InterpolationString element0 = interpolation.elements[0];
+ expect(element0.value, '');
+ expect(
+ interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
+ InterpolationExpression element1 = interpolation.elements[1];
+ expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
+ expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
+ InterpolationString element2 = interpolation.elements[2];
+ expect(element2.value, 'y');
}
- void test_parsePrimaryExpression_genericFunctionExpression() {
- createParser('<X, Y>(Map<X, Y> m, X x) => m[x]');
- Expression expression = parser.parsePrimaryExpression();
+ void test_parseStringLiteral_multiline_twoSpaces() {
+ createParser("''' \na'''");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<FunctionExpression>());
- FunctionExpression function = expression;
- expect(function.typeParameters, isNotNull);
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, "a");
}
- void test_parsePrimaryExpression_hex() {
- String hexLiteral = "3F";
- createParser('0x$hexLiteral');
- Expression expression = parser.parsePrimaryExpression();
+ void test_parseStringLiteral_multiline_twoSpaces_raw() {
+ createParser("r''' \na'''");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<IntegerLiteral>());
- IntegerLiteral literal = expression;
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
expect(literal.literal, isNotNull);
- expect(literal.value, int.parse(hexLiteral, radix: 16));
+ expect(literal.value, "a");
}
- void test_parsePrimaryExpression_identifier() {
- createParser('a');
- Expression expression = parser.parsePrimaryExpression();
+ void test_parseStringLiteral_multiline_untrimmed() {
+ createParser("''' a\nb'''");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleIdentifier>());
- SimpleIdentifier identifier = expression;
- expect(identifier, isNotNull);
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, " a\nb");
}
- void test_parsePrimaryExpression_int() {
- String intLiteral = "472";
- createParser(intLiteral);
- Expression expression = parser.parsePrimaryExpression();
+ void test_parseStringLiteral_quoteAfterInterpolation() {
+ createParser(r"""'$x"'""");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<IntegerLiteral>());
- IntegerLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, int.parse(intLiteral));
+ expect(expression, new isInstanceOf<StringInterpolation>());
+ StringInterpolation interpolation = expression;
+ expect(interpolation.elements, hasLength(3));
+ expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
+ InterpolationString element0 = interpolation.elements[0];
+ expect(element0.value, '');
+ expect(
+ interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
+ InterpolationExpression element1 = interpolation.elements[1];
+ expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
+ expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
+ InterpolationString element2 = interpolation.elements[2];
+ expect(element2.value, '"');
}
- void test_parsePrimaryExpression_listLiteral() {
- createParser('[ ]');
- Expression expression = parser.parsePrimaryExpression();
+ void test_parseStringLiteral_single() {
+ createParser("'a'");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<ListLiteral>());
- ListLiteral literal = expression;
- expect(literal, isNotNull);
+ expect(expression, new isInstanceOf<SimpleStringLiteral>());
+ SimpleStringLiteral literal = expression;
+ expect(literal.literal, isNotNull);
+ expect(literal.value, "a");
}
- void test_parsePrimaryExpression_listLiteral_index() {
- createParser('[]');
- Expression expression = parser.parsePrimaryExpression();
+ void test_parseStringLiteral_startsWithInterpolation() {
+ createParser(r"'${x}y'");
+ Expression expression = parser.parseStringLiteral();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<ListLiteral>());
- ListLiteral literal = expression;
- expect(literal, isNotNull);
+ expect(expression, new isInstanceOf<StringInterpolation>());
+ StringInterpolation interpolation = expression;
+ expect(interpolation.elements, hasLength(3));
+ expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
+ InterpolationString element0 = interpolation.elements[0];
+ expect(element0.value, '');
+ expect(
+ interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
+ InterpolationExpression element1 = interpolation.elements[1];
+ expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
+ expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
+ InterpolationString element2 = interpolation.elements[2];
+ expect(element2.value, 'y');
}
- void test_parsePrimaryExpression_listLiteral_typed() {
- createParser('<A>[ ]');
- Expression expression = parser.parsePrimaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseSuperConstructorInvocation_named() {
+ createParser('super.a()');
+ SuperConstructorInvocation invocation =
+ parser.parseSuperConstructorInvocation();
+ expectNotNullIfNoErrors(invocation);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<ListLiteral>());
- ListLiteral literal = expression;
- expect(literal.typeArguments, isNotNull);
- expect(literal.typeArguments.arguments, hasLength(1));
+ expect(invocation.argumentList, isNotNull);
+ expect(invocation.constructorName, isNotNull);
+ expect(invocation.superKeyword, isNotNull);
+ expect(invocation.period, isNotNull);
}
- void test_parsePrimaryExpression_listLiteral_typed_genericComment() {
- enableGenericMethodComments = true;
- createParser('/*<A>*/[ ]');
- Expression expression = parser.parsePrimaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseSuperConstructorInvocation_unnamed() {
+ createParser('super()');
+ SuperConstructorInvocation invocation =
+ parser.parseSuperConstructorInvocation();
+ expectNotNullIfNoErrors(invocation);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<ListLiteral>());
- ListLiteral literal = expression;
- expect(literal.typeArguments, isNotNull);
- expect(literal.typeArguments.arguments, hasLength(1));
+ expect(invocation.argumentList, isNotNull);
+ expect(invocation.constructorName, isNull);
+ expect(invocation.superKeyword, isNotNull);
+ expect(invocation.period, isNull);
}
- void test_parsePrimaryExpression_mapLiteral() {
- createParser('{}');
- Expression expression = parser.parsePrimaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseSwitchStatement_case() {
+ createParser('switch (a) {case 1: return "I";}');
+ SwitchStatement statement = parser.parseSwitchStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MapLiteral>());
- MapLiteral literal = expression;
- expect(literal.typeArguments, isNull);
- expect(literal, isNotNull);
+ expect(statement.switchKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.expression, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.leftBracket, isNotNull);
+ expect(statement.members, hasLength(1));
+ expect(statement.rightBracket, isNotNull);
}
- void test_parsePrimaryExpression_mapLiteral_typed() {
- createParser('<A, B>{}');
- Expression expression = parser.parsePrimaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseSwitchStatement_empty() {
+ createParser('switch (a) {}');
+ SwitchStatement statement = parser.parseSwitchStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MapLiteral>());
- MapLiteral literal = expression;
- expect(literal.typeArguments, isNotNull);
- expect(literal.typeArguments.arguments, hasLength(2));
+ expect(statement.switchKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.expression, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.leftBracket, isNotNull);
+ expect(statement.members, hasLength(0));
+ expect(statement.rightBracket, isNotNull);
}
- void test_parsePrimaryExpression_mapLiteral_typed_genericComment() {
- enableGenericMethodComments = true;
- createParser('/*<A, B>*/{}');
- Expression expression = parser.parsePrimaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseSwitchStatement_labeledCase() {
+ createParser('switch (a) {l1: l2: l3: case(1):}');
+ SwitchStatement statement = parser.parseSwitchStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<MapLiteral>());
- MapLiteral literal = expression;
- expect(literal.typeArguments, isNotNull);
- expect(literal.typeArguments.arguments, hasLength(2));
+ expect(statement.switchKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.expression, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.leftBracket, isNotNull);
+ expect(statement.members, hasLength(1));
+ {
+ List<Label> labels = statement.members[0].labels;
+ expect(labels, hasLength(3));
+ expect(labels[0].label.inDeclarationContext(), isTrue);
+ expect(labels[1].label.inDeclarationContext(), isTrue);
+ expect(labels[2].label.inDeclarationContext(), isTrue);
+ }
+ expect(statement.rightBracket, isNotNull);
}
- void test_parsePrimaryExpression_new() {
- createParser('new A()');
- Expression expression = parser.parsePrimaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseSwitchStatement_labeledDefault() {
+ createParser('switch (a) {l1: l2: l3: default:}');
+ SwitchStatement statement = parser.parseSwitchStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<InstanceCreationExpression>());
- InstanceCreationExpression creation = expression;
- expect(creation, isNotNull);
+ expect(statement.switchKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.expression, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.leftBracket, isNotNull);
+ expect(statement.members, hasLength(1));
+ {
+ List<Label> labels = statement.members[0].labels;
+ expect(labels, hasLength(3));
+ expect(labels[0].label.inDeclarationContext(), isTrue);
+ expect(labels[1].label.inDeclarationContext(), isTrue);
+ expect(labels[2].label.inDeclarationContext(), isTrue);
+ }
+ expect(statement.rightBracket, isNotNull);
}
- void test_parsePrimaryExpression_null() {
- createParser('null');
- Expression expression = parser.parsePrimaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseSwitchStatement_labeledStatementInCase() {
+ createParser('switch (a) {case 0: f(); l1: g(); break;}');
+ SwitchStatement statement = parser.parseSwitchStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<NullLiteral>());
- NullLiteral literal = expression;
- expect(literal.literal, isNotNull);
+ expect(statement.switchKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.expression, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.leftBracket, isNotNull);
+ expect(statement.members, hasLength(1));
+ expect(statement.members[0].statements, hasLength(3));
+ expect(statement.rightBracket, isNotNull);
}
- void test_parsePrimaryExpression_parenthesized() {
- createParser('(x)');
- Expression expression = parser.parsePrimaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseSymbolLiteral_builtInIdentifier() {
+ createParser('#dynamic.static.abstract');
+ SymbolLiteral literal = parser.parseSymbolLiteral();
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<ParenthesizedExpression>());
- ParenthesizedExpression parens = expression;
- expect(parens, isNotNull);
+ expect(literal.poundSign, isNotNull);
+ List<Token> components = literal.components;
+ expect(components, hasLength(3));
+ expect(components[0].lexeme, "dynamic");
+ expect(components[1].lexeme, "static");
+ expect(components[2].lexeme, "abstract");
}
- void test_parsePrimaryExpression_string() {
- createParser('"string"');
- Expression expression = parser.parsePrimaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseSymbolLiteral_multiple() {
+ createParser('#a.b.c');
+ SymbolLiteral literal = parser.parseSymbolLiteral();
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.isMultiline, isFalse);
- expect(literal.isRaw, isFalse);
- expect(literal.value, "string");
+ expect(literal.poundSign, isNotNull);
+ List<Token> components = literal.components;
+ expect(components, hasLength(3));
+ expect(components[0].lexeme, "a");
+ expect(components[1].lexeme, "b");
+ expect(components[2].lexeme, "c");
}
- void test_parsePrimaryExpression_string_multiline() {
- createParser("'''string'''");
- Expression expression = parser.parsePrimaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseSymbolLiteral_operator() {
+ createParser('#==');
+ SymbolLiteral literal = parser.parseSymbolLiteral();
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.isMultiline, isTrue);
- expect(literal.isRaw, isFalse);
- expect(literal.value, "string");
+ expect(literal.poundSign, isNotNull);
+ List<Token> components = literal.components;
+ expect(components, hasLength(1));
+ expect(components[0].lexeme, "==");
}
- void test_parsePrimaryExpression_string_raw() {
- createParser("r'string'");
- Expression expression = parser.parsePrimaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseSymbolLiteral_single() {
+ createParser('#a');
+ SymbolLiteral literal = parser.parseSymbolLiteral();
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.isMultiline, isFalse);
- expect(literal.isRaw, isTrue);
- expect(literal.value, "string");
+ expect(literal.poundSign, isNotNull);
+ List<Token> components = literal.components;
+ expect(components, hasLength(1));
+ expect(components[0].lexeme, "a");
}
- void test_parsePrimaryExpression_super() {
- createParser('super.x');
- Expression expression = parser.parsePrimaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseSymbolLiteral_void() {
+ createParser('#void');
+ SymbolLiteral literal = parser.parseSymbolLiteral();
+ expectNotNullIfNoErrors(literal);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<PropertyAccess>());
- PropertyAccess propertyAccess = expression;
- expect(propertyAccess.target is SuperExpression, isTrue);
- expect(propertyAccess.operator, isNotNull);
- expect(propertyAccess.operator.type, TokenType.PERIOD);
- expect(propertyAccess.propertyName, isNotNull);
+ expect(literal.poundSign, isNotNull);
+ List<Token> components = literal.components;
+ expect(components, hasLength(1));
+ expect(components[0].lexeme, "void");
}
- void test_parsePrimaryExpression_this() {
- createParser('this');
- Expression expression = parser.parsePrimaryExpression();
+ void test_parseThrowExpression() {
+ createParser('throw x;');
+ Expression expression = parser.parseThrowExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<ThisExpression>());
- ThisExpression thisExpression = expression;
- expect(thisExpression.thisKeyword, isNotNull);
+ expect(expression, new isInstanceOf<ThrowExpression>());
+ ThrowExpression throwExpression = expression;
+ expect(throwExpression.throwKeyword, isNotNull);
+ expect(throwExpression.expression, isNotNull);
}
- void test_parsePrimaryExpression_true() {
- createParser('true');
- Expression expression = parser.parsePrimaryExpression();
+ void test_parseThrowExpressionWithoutCascade() {
+ createParser('throw x;');
+ Expression expression = parser.parseThrowExpressionWithoutCascade();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<BooleanLiteral>());
- BooleanLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, isTrue);
- }
-
- void test_Parser() {
- expect(new Parser(null, null), isNotNull);
+ expect(expression, new isInstanceOf<ThrowExpression>());
+ ThrowExpression throwExpression = expression;
+ expect(throwExpression.throwKeyword, isNotNull);
+ expect(throwExpression.expression, isNotNull);
}
- void test_parseRedirectingConstructorInvocation_named() {
- createParser('this.a()');
- RedirectingConstructorInvocation invocation =
- parser.parseRedirectingConstructorInvocation(true);
- expectNotNullIfNoErrors(invocation);
+ void test_parseTryStatement_catch() {
+ createParser('try {} catch (e) {}');
+ TryStatement statement = parser.parseTryStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(invocation.argumentList, isNotNull);
- expect(invocation.constructorName, isNotNull);
- expect(invocation.thisKeyword, isNotNull);
- expect(invocation.period, isNotNull);
+ expect(statement.tryKeyword, isNotNull);
+ expect(statement.body, isNotNull);
+ NodeList<CatchClause> catchClauses = statement.catchClauses;
+ expect(catchClauses, hasLength(1));
+ CatchClause clause = catchClauses[0];
+ expect(clause.onKeyword, isNull);
+ expect(clause.exceptionType, isNull);
+ expect(clause.catchKeyword, isNotNull);
+ expect(clause.exceptionParameter, isNotNull);
+ expect(clause.comma, isNull);
+ expect(clause.stackTraceParameter, isNull);
+ expect(clause.body, isNotNull);
+ expect(statement.finallyKeyword, isNull);
+ expect(statement.finallyBlock, isNull);
}
- void test_parseRedirectingConstructorInvocation_unnamed() {
- createParser('this()');
- RedirectingConstructorInvocation invocation =
- parser.parseRedirectingConstructorInvocation(false);
- expectNotNullIfNoErrors(invocation);
+ void test_parseTryStatement_catch_finally() {
+ createParser('try {} catch (e, s) {} finally {}');
+ TryStatement statement = parser.parseTryStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(invocation.argumentList, isNotNull);
- expect(invocation.constructorName, isNull);
- expect(invocation.thisKeyword, isNotNull);
- expect(invocation.period, isNull);
+ expect(statement.tryKeyword, isNotNull);
+ expect(statement.body, isNotNull);
+ NodeList<CatchClause> catchClauses = statement.catchClauses;
+ expect(catchClauses, hasLength(1));
+ CatchClause clause = catchClauses[0];
+ expect(clause.onKeyword, isNull);
+ expect(clause.exceptionType, isNull);
+ expect(clause.catchKeyword, isNotNull);
+ expect(clause.exceptionParameter, isNotNull);
+ expect(clause.comma, isNotNull);
+ expect(clause.stackTraceParameter, isNotNull);
+ expect(clause.body, isNotNull);
+ expect(statement.finallyKeyword, isNotNull);
+ expect(statement.finallyBlock, isNotNull);
}
- @failingTest
- void test_parseRelationalExpression_as_functionType_noReturnType() {
- createParser('x as Function(int)');
- Expression expression = parser.parseRelationalExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseTryStatement_finally() {
+ createParser('try {} finally {}');
+ TryStatement statement = parser.parseTryStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<AsExpression>());
- AsExpression asExpression = expression;
- expect(asExpression.expression, isNotNull);
- expect(asExpression.asOperator, isNotNull);
- expect(asExpression.type, new isInstanceOf<GenericFunctionType>());
+ expect(statement.tryKeyword, isNotNull);
+ expect(statement.body, isNotNull);
+ expect(statement.catchClauses, hasLength(0));
+ expect(statement.finallyKeyword, isNotNull);
+ expect(statement.finallyBlock, isNotNull);
}
- @failingTest
- void test_parseRelationalExpression_as_functionType_returnType() {
- createParser('x as String Function(int)');
- Expression expression = parser.parseRelationalExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseTryStatement_multiple() {
+ createParser('try {} on NPE catch (e) {} on Error {} catch (e) {}');
+ TryStatement statement = parser.parseTryStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<AsExpression>());
- AsExpression asExpression = expression;
- expect(asExpression.expression, isNotNull);
- expect(asExpression.asOperator, isNotNull);
- expect(asExpression.type, new isInstanceOf<GenericFunctionType>());
+ expect(statement.tryKeyword, isNotNull);
+ expect(statement.body, isNotNull);
+ expect(statement.catchClauses, hasLength(3));
+ expect(statement.finallyKeyword, isNull);
+ expect(statement.finallyBlock, isNull);
}
- void test_parseRelationalExpression_as_generic() {
- createParser('x as C<D>');
- Expression expression = parser.parseRelationalExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseTryStatement_on() {
+ createParser('try {} on Error {}');
+ TryStatement statement = parser.parseTryStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<AsExpression>());
- AsExpression asExpression = expression;
- expect(asExpression.expression, isNotNull);
- expect(asExpression.asOperator, isNotNull);
- expect(asExpression.type, new isInstanceOf<TypeName>());
+ expect(statement.tryKeyword, isNotNull);
+ expect(statement.body, isNotNull);
+ NodeList<CatchClause> catchClauses = statement.catchClauses;
+ expect(catchClauses, hasLength(1));
+ CatchClause clause = catchClauses[0];
+ expect(clause.onKeyword, isNotNull);
+ expect(clause.exceptionType, isNotNull);
+ expect(clause.catchKeyword, isNull);
+ expect(clause.exceptionParameter, isNull);
+ expect(clause.comma, isNull);
+ expect(clause.stackTraceParameter, isNull);
+ expect(clause.body, isNotNull);
+ expect(statement.finallyKeyword, isNull);
+ expect(statement.finallyBlock, isNull);
}
- void test_parseRelationalExpression_as_nullable() {
- enableNnbd = true;
- createParser('x as Y?)');
- Expression expression = parser.parseRelationalExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseTryStatement_on_catch() {
+ createParser('try {} on Error catch (e, s) {}');
+ TryStatement statement = parser.parseTryStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<AsExpression>());
- AsExpression asExpression = expression;
- expect(asExpression.expression, isNotNull);
- expect(asExpression.asOperator, isNotNull);
- expect(asExpression.type, new isInstanceOf<TypeName>());
+ expect(statement.tryKeyword, isNotNull);
+ expect(statement.body, isNotNull);
+ NodeList<CatchClause> catchClauses = statement.catchClauses;
+ expect(catchClauses, hasLength(1));
+ CatchClause clause = catchClauses[0];
+ expect(clause.onKeyword, isNotNull);
+ expect(clause.exceptionType, isNotNull);
+ expect(clause.catchKeyword, isNotNull);
+ expect(clause.exceptionParameter, isNotNull);
+ expect(clause.comma, isNotNull);
+ expect(clause.stackTraceParameter, isNotNull);
+ expect(clause.body, isNotNull);
+ expect(statement.finallyKeyword, isNull);
+ expect(statement.finallyBlock, isNull);
}
- void test_parseRelationalExpression_as_simple() {
- createParser('x as Y');
- Expression expression = parser.parseRelationalExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseTryStatement_on_catch_finally() {
+ createParser('try {} on Error catch (e, s) {} finally {}');
+ TryStatement statement = parser.parseTryStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<AsExpression>());
- AsExpression asExpression = expression;
- expect(asExpression.expression, isNotNull);
- expect(asExpression.asOperator, isNotNull);
- expect(asExpression.type, new isInstanceOf<TypeName>());
+ expect(statement.tryKeyword, isNotNull);
+ expect(statement.body, isNotNull);
+ NodeList<CatchClause> catchClauses = statement.catchClauses;
+ expect(catchClauses, hasLength(1));
+ CatchClause clause = catchClauses[0];
+ expect(clause.onKeyword, isNotNull);
+ expect(clause.exceptionType, isNotNull);
+ expect(clause.catchKeyword, isNotNull);
+ expect(clause.exceptionParameter, isNotNull);
+ expect(clause.comma, isNotNull);
+ expect(clause.stackTraceParameter, isNotNull);
+ expect(clause.body, isNotNull);
+ expect(statement.finallyKeyword, isNotNull);
+ expect(statement.finallyBlock, isNotNull);
}
- void test_parseRelationalExpression_as_simple_function() {
- createParser('x as Function');
- Expression expression = parser.parseRelationalExpression();
- expectNotNullIfNoErrors(expression);
+ @failingTest
+ void test_parseTypeAnnotation_function_noReturnType_noParameters() {
+ createParser('Function() v');
+ GenericFunctionType functionType = parser.parseTypeAnnotation(false);
+ expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<AsExpression>());
- AsExpression asExpression = expression;
- expect(asExpression.expression, isNotNull);
- expect(asExpression.asOperator, isNotNull);
- expect(asExpression.type, new isInstanceOf<TypeName>());
+ expect(functionType.returnType, isNull);
+ expect(functionType.functionKeyword, isNotNull);
+ expect(functionType.typeParameters, isNull);
+ FormalParameterList parameterList = functionType.parameters;
+ expect(parameterList, isNotNull);
+ expect(parameterList.parameters, hasLength(0));
}
- void test_parseRelationalExpression_is() {
- createParser('x is y');
- Expression expression = parser.parseRelationalExpression();
- expectNotNullIfNoErrors(expression);
+ @failingTest
+ void test_parseTypeAnnotation_function_noReturnType_parameters() {
+ createParser('Function(int, int) v');
+ GenericFunctionType functionType = parser.parseTypeAnnotation(false);
+ expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<IsExpression>());
- IsExpression isExpression = expression;
- expect(isExpression.expression, isNotNull);
- expect(isExpression.isOperator, isNotNull);
- expect(isExpression.notOperator, isNull);
- expect(isExpression.type, isNotNull);
- }
+ expect(functionType.returnType, isNull);
+ expect(functionType.functionKeyword, isNotNull);
+ expect(functionType.typeParameters, isNull);
+ FormalParameterList parameterList = functionType.parameters;
+ expect(parameterList, isNotNull);
+ NodeList<FormalParameter> parameters = parameterList.parameters;
+ expect(parameters, hasLength(2));
- void test_parseRelationalExpression_is_nullable() {
- enableNnbd = true;
- createParser('x is y?)');
- Expression expression = parser.parseRelationalExpression();
- expectNotNullIfNoErrors(expression);
- listener.assertNoErrors();
- expect(expression, new isInstanceOf<IsExpression>());
- IsExpression isExpression = expression;
- expect(isExpression.expression, isNotNull);
- expect(isExpression.isOperator, isNotNull);
- expect(isExpression.notOperator, isNull);
- expect(isExpression.type, isNotNull);
+ expect(parameters[0], new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter parameter = parameters[0];
+ expect(parameter.identifier, isNull);
+ expect(parameter.type, new isInstanceOf<TypeName>());
+ expect((parameter.type as TypeName).name.name, 'int');
+
+ expect(parameters[1], new isInstanceOf<SimpleFormalParameter>());
+ parameter = parameters[1];
+ expect(parameter.identifier, isNull);
+ expect(parameter.type, new isInstanceOf<TypeName>());
+ expect((parameter.type as TypeName).name.name, 'int');
}
- void test_parseRelationalExpression_isNot() {
- createParser('x is! y');
- Expression expression = parser.parseRelationalExpression();
- expectNotNullIfNoErrors(expression);
+ @failingTest
+ void test_parseTypeAnnotation_function_noReturnType_typeParameters() {
+ createParser('Function<S, T>()');
+ GenericFunctionType functionType = parser.parseTypeAnnotation(false);
+ expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<IsExpression>());
- IsExpression isExpression = expression;
- expect(isExpression.expression, isNotNull);
- expect(isExpression.isOperator, isNotNull);
- expect(isExpression.notOperator, isNotNull);
- expect(isExpression.type, isNotNull);
+ expect(functionType.returnType, isNull);
+ expect(functionType.functionKeyword, isNotNull);
+ TypeParameterList typeParameters = functionType.typeParameters;
+ expect(typeParameters, isNotNull);
+ expect(typeParameters.typeParameters, hasLength(2));
+ FormalParameterList parameterList = functionType.parameters;
+ expect(parameterList, isNotNull);
+ expect(parameterList.parameters, hasLength(0));
}
- void test_parseRelationalExpression_normal() {
- createParser('x < y');
- Expression expression = parser.parseRelationalExpression();
- expectNotNullIfNoErrors(expression);
+ @failingTest
+ void
+ test_parseTypeAnnotation_function_noReturnType_typeParameters_parameters() {
+ createParser('Function<T>(String, {T t})');
+ GenericFunctionType functionType = parser.parseTypeAnnotation(false);
+ expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<BinaryExpression>());
- BinaryExpression binaryExpression = expression;
- expect(binaryExpression.leftOperand, isNotNull);
- expect(binaryExpression.operator, isNotNull);
- expect(binaryExpression.operator.type, TokenType.LT);
- expect(binaryExpression.rightOperand, isNotNull);
+ expect(functionType.returnType, isNull);
+ expect(functionType.functionKeyword, isNotNull);
+ TypeParameterList typeParameters = functionType.typeParameters;
+ expect(typeParameters, isNotNull);
+ expect(typeParameters.typeParameters, hasLength(1));
+ FormalParameterList parameterList = functionType.parameters;
+ expect(parameterList, isNotNull);
+ expect(parameterList.parameters, hasLength(2));
}
- void test_parseRelationalExpression_super() {
- createParser('super < y');
- Expression expression = parser.parseRelationalExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseTypeAnnotation_function_returnType_classFunction() {
+ createParser('Function v');
+ TypeName functionType = parser.parseTypeAnnotation(false);
+ expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<BinaryExpression>());
- BinaryExpression binaryExpression = expression;
- expect(binaryExpression.leftOperand, isNotNull);
- expect(binaryExpression.operator, isNotNull);
- expect(binaryExpression.operator.type, TokenType.LT);
- expect(binaryExpression.rightOperand, isNotNull);
}
- void test_parseRethrowExpression() {
- createParser('rethrow;');
- RethrowExpression expression = parser.parseRethrowExpression();
- expectNotNullIfNoErrors(expression);
+ @failingTest
+ void test_parseTypeAnnotation_function_returnType_function() {
+ createParser('A Function(B, C) Function(D) v');
+ // TODO(scheglov) improve the test to verify also the node properties
+ var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
+ expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
- expect(expression.rethrowKeyword, isNotNull);
}
- void test_parseReturnStatement_noValue() {
- createParser('return;');
- ReturnStatement statement = parser.parseReturnStatement();
- expectNotNullIfNoErrors(statement);
+ @failingTest
+ void test_parseTypeAnnotation_function_returnType_noParameters() {
+ createParser('List<int> Function()');
+ GenericFunctionType functionType = parser.parseTypeAnnotation(false);
+ expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
- expect(statement.returnKeyword, isNotNull);
- expect(statement.expression, isNull);
- expect(statement.semicolon, isNotNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.functionKeyword, isNotNull);
+ expect(functionType.typeParameters, isNull);
+ FormalParameterList parameterList = functionType.parameters;
+ expect(parameterList, isNotNull);
+ expect(parameterList.parameters, hasLength(0));
}
- void test_parseReturnStatement_value() {
- createParser('return x;');
- ReturnStatement statement = parser.parseReturnStatement();
- expectNotNullIfNoErrors(statement);
+ @failingTest
+ void test_parseTypeAnnotation_function_returnType_parameters() {
+ createParser('List<int> Function(String s, int i)');
+ GenericFunctionType functionType = parser.parseTypeAnnotation(false);
+ expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
- expect(statement.returnKeyword, isNotNull);
- expect(statement.expression, isNotNull);
- expect(statement.semicolon, isNotNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.functionKeyword, isNotNull);
+ expect(functionType.typeParameters, isNull);
+ FormalParameterList parameterList = functionType.parameters;
+ expect(parameterList, isNotNull);
+ NodeList<FormalParameter> parameters = parameterList.parameters;
+ expect(parameters, hasLength(2));
+
+ expect(parameters[0], new isInstanceOf<SimpleFormalParameter>());
+ SimpleFormalParameter parameter = parameters[0];
+ expect(parameter.identifier, isNotNull);
+ expect(parameter.identifier.name, 's');
+ expect(parameter.type, new isInstanceOf<TypeName>());
+ expect((parameter.type as TypeName).name.name, 'String');
+
+ expect(parameters[1], new isInstanceOf<SimpleFormalParameter>());
+ parameter = parameters[1];
+ expect(parameter.identifier, isNotNull);
+ expect(parameter.identifier.name, 'i');
+ expect(parameter.type, new isInstanceOf<TypeName>());
+ expect((parameter.type as TypeName).name.name, 'int');
}
@failingTest
- void test_parseReturnType_function() {
- createParser('A<B> Function<B>(B)');
- GenericFunctionType type = parser.parseReturnType(false);
- expectNotNullIfNoErrors(type);
+ void test_parseTypeAnnotation_function_returnType_simple() {
+ createParser('A Function(B, C) v');
+ // TODO(scheglov) improve the test to verify also the node properties
+ var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
+ expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
- expect(type.returnType, isNotNull);
- expect(type.typeParameters, isNotNull);
- expect(type.parameters, isNotNull);
}
- void test_parseReturnType_named() {
- createParser('A<B>');
- TypeName typeName = parser.parseReturnType(false);
- expectNotNullIfNoErrors(typeName);
+ @failingTest
+ void test_parseTypeAnnotation_function_returnType_typeParameters() {
+ createParser('List<T> Function<T>()');
+ GenericFunctionType functionType = parser.parseTypeAnnotation(false);
+ expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
- expect(typeName.name, isNotNull);
- expect(typeName.typeArguments, isNotNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.functionKeyword, isNotNull);
+ TypeParameterList typeParameters = functionType.typeParameters;
+ expect(typeParameters, isNotNull);
+ expect(typeParameters.typeParameters, hasLength(1));
+ FormalParameterList parameterList = functionType.parameters;
+ expect(parameterList, isNotNull);
+ expect(parameterList.parameters, hasLength(0));
}
- void test_parseReturnType_void() {
- createParser('void');
- TypeName typeName = parser.parseReturnType(false);
- expectNotNullIfNoErrors(typeName);
+ @failingTest
+ void
+ test_parseTypeAnnotation_function_returnType_typeParameters_parameters() {
+ createParser('List<T> Function<T>(String s, [T])');
+ GenericFunctionType functionType = parser.parseTypeAnnotation(false);
+ expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
- expect(typeName.name, isNotNull);
- expect(typeName.typeArguments, isNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.functionKeyword, isNotNull);
+ TypeParameterList typeParameters = functionType.typeParameters;
+ expect(typeParameters, isNotNull);
+ expect(typeParameters.typeParameters, hasLength(1));
+ FormalParameterList parameterList = functionType.parameters;
+ expect(parameterList, isNotNull);
+ expect(parameterList.parameters, hasLength(2));
}
- void test_parseSetter_nonStatic() {
- createParser('/// Doc\nT set a(var x);');
- MethodDeclaration method = parser.parseClassMember('C');
- expectNotNullIfNoErrors(method);
+ @failingTest
+ void test_parseTypeAnnotation_function_returnType_withArguments() {
+ createParser('A<B> Function(C) v');
+ // TODO(scheglov) improve this test to verify also the node properties
+ var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
+ expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
- expect(method.body, isNotNull);
- _expectCommentText(method.documentationComment, '/// Doc');
- expect(method.externalKeyword, isNull);
- expect(method.modifierKeyword, isNull);
- expect(method.name, isNotNull);
- expect(method.operatorKeyword, isNull);
- expect(method.typeParameters, isNull);
- expect(method.parameters, isNotNull);
- expect(method.propertyKeyword, isNotNull);
- expect((method.returnType as TypeName).name.name, 'T');
}
- void test_parseSetter_static() {
- createParser('/// Doc\nstatic T set a(var x) {}');
- MethodDeclaration method = parser.parseClassMember('C');
- expectNotNullIfNoErrors(method);
+ void test_parseTypeAnnotation_named() {
+ createParser('A<B> v');
+ TypeName typeName = parser.parseTypeAnnotation(false);
+ expectNotNullIfNoErrors(typeName);
listener.assertNoErrors();
- expect(method.body, isNotNull);
- _expectCommentText(method.documentationComment, '/// Doc');
- expect(method.externalKeyword, isNull);
- expect(method.modifierKeyword.lexeme, 'static');
- expect(method.name, isNotNull);
- expect(method.operatorKeyword, isNull);
- expect(method.typeParameters, isNull);
- expect(method.parameters, isNotNull);
- expect(method.propertyKeyword, isNotNull);
- expect((method.returnType as TypeName).name.name, 'T');
}
- void test_parseShiftExpression_normal() {
- createParser('x << y');
- BinaryExpression expression = parser.parseShiftExpression();
- expectNotNullIfNoErrors(expression);
- listener.assertNoErrors();
- expect(expression.leftOperand, isNotNull);
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.LT_LT);
- expect(expression.rightOperand, isNotNull);
+ void test_parseTypeArgumentList_empty() {
+ createParser('<>');
+ TypeArgumentList argumentList = parser.parseTypeArgumentList();
+ expectNotNullIfNoErrors(argumentList);
+ listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TYPE_NAME]);
+ expect(argumentList.leftBracket, isNotNull);
+ expect(argumentList.arguments, hasLength(1));
+ expect(argumentList.rightBracket, isNotNull);
}
- void test_parseShiftExpression_super() {
- createParser('super << y');
- BinaryExpression expression = parser.parseShiftExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseTypeArgumentList_multiple() {
+ createParser('<int, int, int>');
+ TypeArgumentList argumentList = parser.parseTypeArgumentList();
+ expectNotNullIfNoErrors(argumentList);
listener.assertNoErrors();
- expect(expression.leftOperand, isNotNull);
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.LT_LT);
- expect(expression.rightOperand, isNotNull);
+ expect(argumentList.leftBracket, isNotNull);
+ expect(argumentList.arguments, hasLength(3));
+ expect(argumentList.rightBracket, isNotNull);
}
- void test_parseSimpleIdentifier1_normalIdentifier() {
- // TODO(brianwilkerson) Implement tests for this method.
+ void test_parseTypeArgumentList_nested() {
+ createParser('<A<B>>');
+ TypeArgumentList argumentList = parser.parseTypeArgumentList();
+ expectNotNullIfNoErrors(argumentList);
+ listener.assertNoErrors();
+ expect(argumentList.leftBracket, isNotNull);
+ expect(argumentList.arguments, hasLength(1));
+ TypeName argument = argumentList.arguments[0];
+ expect(argument, isNotNull);
+ TypeArgumentList innerList = argument.typeArguments;
+ expect(innerList, isNotNull);
+ expect(innerList.arguments, hasLength(1));
+ expect(argumentList.rightBracket, isNotNull);
}
- void test_parseSimpleIdentifier_builtInIdentifier() {
- String lexeme = "as";
- createParser(lexeme);
- SimpleIdentifier identifier = parser.parseSimpleIdentifier();
- expectNotNullIfNoErrors(identifier);
+ void test_parseTypeArgumentList_nested_withComment_double() {
+ createParser('<A<B /* 0 */ >>');
+ TypeArgumentList argumentList = parser.parseTypeArgumentList();
+ expectNotNullIfNoErrors(argumentList);
listener.assertNoErrors();
- expect(identifier.token, isNotNull);
- expect(identifier.name, lexeme);
+ expect(argumentList.leftBracket, isNotNull);
+ expect(argumentList.rightBracket, isNotNull);
+ expect(argumentList.arguments, hasLength(1));
+
+ TypeName argument = argumentList.arguments[0];
+ expect(argument, isNotNull);
+
+ TypeArgumentList innerList = argument.typeArguments;
+ expect(innerList, isNotNull);
+ expect(innerList.leftBracket, isNotNull);
+ expect(innerList.arguments, hasLength(1));
+ expect(innerList.rightBracket, isNotNull);
+ expect(innerList.rightBracket.precedingComments, isNotNull);
}
- void test_parseSimpleIdentifier_normalIdentifier() {
- String lexeme = "foo";
- createParser(lexeme);
- SimpleIdentifier identifier = parser.parseSimpleIdentifier();
- expectNotNullIfNoErrors(identifier);
+ void test_parseTypeArgumentList_nested_withComment_tripple() {
+ createParser('<A<B<C /* 0 */ >>>');
+ TypeArgumentList argumentList = parser.parseTypeArgumentList();
+ expectNotNullIfNoErrors(argumentList);
listener.assertNoErrors();
- expect(identifier.token, isNotNull);
- expect(identifier.name, lexeme);
+ expect(argumentList.leftBracket, isNotNull);
+ expect(argumentList.rightBracket, isNotNull);
+ expect(argumentList.arguments, hasLength(1));
+
+ TypeName argument = argumentList.arguments[0];
+ expect(argument, isNotNull);
+
+ TypeArgumentList innerList = argument.typeArguments;
+ expect(innerList, isNotNull);
+ expect(innerList.leftBracket, isNotNull);
+ expect(innerList.arguments, hasLength(1));
+ expect(innerList.rightBracket, isNotNull);
+
+ TypeName innerArgument = innerList.arguments[0];
+ expect(innerArgument, isNotNull);
+
+ TypeArgumentList innerInnerList = innerArgument.typeArguments;
+ expect(innerInnerList, isNotNull);
+ expect(innerInnerList.leftBracket, isNotNull);
+ expect(innerInnerList.arguments, hasLength(1));
+ expect(innerInnerList.rightBracket, isNotNull);
+ expect(innerInnerList.rightBracket.precedingComments, isNotNull);
}
- void test_parseStatement_emptyTypeArgumentList() {
- createParser('C<> c;');
- Statement statement = parser.parseStatement2();
- expectNotNullIfNoErrors(statement);
- listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TYPE_NAME]);
- expect(statement, new isInstanceOf<VariableDeclarationStatement>());
- VariableDeclarationStatement declaration = statement;
- VariableDeclarationList variables = declaration.variables;
- TypeName type = variables.type;
- TypeArgumentList argumentList = type.typeArguments;
+ void test_parseTypeArgumentList_single() {
+ createParser('<int>');
+ TypeArgumentList argumentList = parser.parseTypeArgumentList();
+ expectNotNullIfNoErrors(argumentList);
+ listener.assertNoErrors();
expect(argumentList.leftBracket, isNotNull);
expect(argumentList.arguments, hasLength(1));
- expect(argumentList.arguments[0].isSynthetic, isTrue);
expect(argumentList.rightBracket, isNotNull);
}
- void test_parseStatement_functionDeclaration_noReturnType() {
- createParser('f(a, b) {};');
- Statement statement = parser.parseStatement2();
- expectNotNullIfNoErrors(statement);
+ void test_parseTypeName_parameterized() {
+ createParser('List<int>');
+ TypeName typeName = parser.parseTypeName(false);
+ expectNotNullIfNoErrors(typeName);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
- FunctionDeclarationStatement declaration = statement;
- expect(declaration.functionDeclaration, isNotNull);
+ expect(typeName.name, isNotNull);
+ expect(typeName.typeArguments, isNotNull);
+ expect(typeName.question, isNull);
}
- void
- test_parseStatement_functionDeclaration_noReturnType_typeParameterComments() {
- enableGenericMethodComments = true;
- createParser('f/*<E>*/(a, b) {};');
- Statement statement = parser.parseStatement2();
- expectNotNullIfNoErrors(statement);
+ void test_parseTypeName_parameterized_nullable() {
+ enableNnbd = true;
+ createParser('List<int>?');
+ TypeName typeName = parser.parseTypeName(false);
+ expectNotNullIfNoErrors(typeName);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
- FunctionDeclarationStatement declaration = statement;
- expect(declaration.functionDeclaration, isNotNull);
- expect(declaration.functionDeclaration.functionExpression.typeParameters,
- isNotNull);
+ expect(typeName.name, isNotNull);
+ expect(typeName.typeArguments, isNotNull);
+ expect(typeName.question, isNotNull);
}
- void test_parseStatement_functionDeclaration_noReturnType_typeParameters() {
- createParser('f<E>(a, b) {};');
- Statement statement = parser.parseStatement2();
- expectNotNullIfNoErrors(statement);
+ void test_parseTypeName_simple() {
+ createParser('int');
+ TypeName typeName = parser.parseTypeName(false);
+ expectNotNullIfNoErrors(typeName);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
- FunctionDeclarationStatement declaration = statement;
- expect(declaration.functionDeclaration, isNotNull);
+ expect(typeName.name, isNotNull);
+ expect(typeName.typeArguments, isNull);
+ expect(typeName.question, isNull);
}
- void test_parseStatement_functionDeclaration_returnType() {
- // TODO(brianwilkerson) Implement more tests for this method.
- createParser('int f(a, b) {};');
- Statement statement = parser.parseStatement2();
- expectNotNullIfNoErrors(statement);
+ void test_parseTypeName_simple_nullable() {
+ enableNnbd = true;
+ createParser('String?');
+ TypeName typeName = parser.parseTypeName(false);
+ expectNotNullIfNoErrors(typeName);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
- FunctionDeclarationStatement declaration = statement;
- expect(declaration.functionDeclaration, isNotNull);
+ expect(typeName.name, isNotNull);
+ expect(typeName.typeArguments, isNull);
+ expect(typeName.question, isNotNull);
}
- void test_parseStatement_functionDeclaration_returnType_typeParameters() {
- createParser('int f<E>(a, b) {};');
- Statement statement = parser.parseStatement2();
- expectNotNullIfNoErrors(statement);
+ @failingTest
+ void test_parseTypeParameter_bounded_functionType_noReturn() {
+ createParser('A extends Function(int)');
+ TypeParameter parameter = parser.parseTypeParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
- FunctionDeclarationStatement declaration = statement;
- expect(declaration.functionDeclaration, isNotNull);
+ expect(parameter.bound, new isInstanceOf<GenericFunctionType>());
+ expect(parameter.extendsKeyword, isNotNull);
+ expect(parameter.name, isNotNull);
}
- void test_parseStatement_mulipleLabels() {
- createParser('l: m: return x;');
- Statement statement = parser.parseStatement2();
- expectNotNullIfNoErrors(statement);
+ @failingTest
+ void test_parseTypeParameter_bounded_functionType_return() {
+ createParser('A extends String Function(int)');
+ TypeParameter parameter = parser.parseTypeParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<LabeledStatement>());
- LabeledStatement labeledStatement = statement;
- expect(labeledStatement.labels, hasLength(2));
- expect(labeledStatement.statement, isNotNull);
+ expect(parameter.bound, new isInstanceOf<GenericFunctionType>());
+ expect(parameter.extendsKeyword, isNotNull);
+ expect(parameter.name, isNotNull);
}
- void test_parseStatement_noLabels() {
- createParser('return x;');
- Statement statement = parser.parseStatement2();
- expectNotNullIfNoErrors(statement);
+ void test_parseTypeParameter_bounded_generic() {
+ createParser('A extends B<C>');
+ TypeParameter parameter = parser.parseTypeParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
+ expect(parameter.bound, new isInstanceOf<TypeName>());
+ expect(parameter.extendsKeyword, isNotNull);
+ expect(parameter.name, isNotNull);
}
- void test_parseStatement_singleLabel() {
- createParser('l: return x;');
- Statement statement = parser.parseStatement2();
- expectNotNullIfNoErrors(statement);
+ void test_parseTypeParameter_bounded_nullable() {
+ enableNnbd = true;
+ createParser('A extends B?');
+ TypeParameter parameter = parser.parseTypeParameter();
+ expectNotNullIfNoErrors(parameter);
listener.assertNoErrors();
- expect(statement, new isInstanceOf<LabeledStatement>());
- LabeledStatement labeledStatement = statement;
- expect(labeledStatement.labels, hasLength(1));
- expect(labeledStatement.labels[0].label.inDeclarationContext(), isTrue);
- expect(labeledStatement.statement, isNotNull);
+ expect(parameter.bound, new isInstanceOf<TypeName>());
+ expect(parameter.extendsKeyword, isNotNull);
+ expect(parameter.name, isNotNull);
+ TypeName bound = parameter.bound;
+ expect(bound, isNotNull);
+ expect(bound.question, isNotNull);
}
- void test_parseStatements_multiple() {
- List<Statement> statements = parseStatements("return; return;", 2);
- expect(statements, hasLength(2));
+ void test_parseTypeParameter_bounded_simple() {
+ createParser('A extends B');
+ TypeParameter parameter = parser.parseTypeParameter();
+ expectNotNullIfNoErrors(parameter);
+ listener.assertNoErrors();
+ expect(parameter.bound, new isInstanceOf<TypeName>());
+ expect(parameter.extendsKeyword, isNotNull);
+ expect(parameter.name, isNotNull);
}
- void test_parseStatements_single() {
- List<Statement> statements = parseStatements("return;", 1);
- expect(statements, hasLength(1));
+ void test_parseTypeParameter_simple() {
+ createParser('A');
+ TypeParameter parameter = parser.parseTypeParameter();
+ expectNotNullIfNoErrors(parameter);
+ listener.assertNoErrors();
+ expect(parameter.bound, isNull);
+ expect(parameter.extendsKeyword, isNull);
+ expect(parameter.name, isNotNull);
}
- void test_parseStringLiteral_adjacent() {
- createParser("'a' 'b'");
- Expression expression = parser.parseStringLiteral();
- expectNotNullIfNoErrors(expression);
+ void test_parseTypeParameterList_multiple() {
+ createParser('<A, B extends C, D>');
+ TypeParameterList parameterList = parser.parseTypeParameterList();
+ expectNotNullIfNoErrors(parameterList);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<AdjacentStrings>());
- AdjacentStrings literal = expression;
- NodeList<StringLiteral> strings = literal.strings;
- expect(strings, hasLength(2));
- StringLiteral firstString = strings[0];
- StringLiteral secondString = strings[1];
- expect((firstString as SimpleStringLiteral).value, "a");
- expect((secondString as SimpleStringLiteral).value, "b");
+ expect(parameterList.leftBracket, isNotNull);
+ expect(parameterList.rightBracket, isNotNull);
+ expect(parameterList.typeParameters, hasLength(3));
}
- void test_parseStringLiteral_endsWithInterpolation() {
- createParser(r"'x$y'");
- Expression expression = parser.parseStringLiteral();
- expectNotNullIfNoErrors(expression);
+ void test_parseTypeParameterList_parameterizedWithTrailingEquals() {
+ createParser('<A extends B<E>>=');
+ TypeParameterList parameterList = parser.parseTypeParameterList();
+ expectNotNullIfNoErrors(parameterList);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<StringInterpolation>());
- StringInterpolation interpolation = expression;
- expect(interpolation.elements, hasLength(3));
- expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
- InterpolationString element0 = interpolation.elements[0];
- expect(element0.value, 'x');
- expect(
- interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
- InterpolationExpression element1 = interpolation.elements[1];
- expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
- expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
- InterpolationString element2 = interpolation.elements[2];
- expect(element2.value, '');
+ expect(parameterList.leftBracket, isNotNull);
+ expect(parameterList.rightBracket, isNotNull);
+ expect(parameterList.typeParameters, hasLength(1));
}
- void test_parseStringLiteral_interpolated() {
- createParser("'a \${b} c \$this d'");
- Expression expression = parser.parseStringLiteral();
- expectNotNullIfNoErrors(expression);
+ void test_parseTypeParameterList_single() {
+ createParser('<<A>');
+ TypeParameterList parameterList = parser.parseTypeParameterList();
+ expectNotNullIfNoErrors(parameterList);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<StringInterpolation>());
- StringInterpolation literal = expression;
- NodeList<InterpolationElement> elements = literal.elements;
- expect(elements, hasLength(5));
- expect(elements[0] is InterpolationString, isTrue);
- expect(elements[1] is InterpolationExpression, isTrue);
- expect(elements[2] is InterpolationString, isTrue);
- expect(elements[3] is InterpolationExpression, isTrue);
- expect(elements[4] is InterpolationString, isTrue);
+ expect(parameterList.leftBracket, isNotNull);
+ expect(parameterList.rightBracket, isNotNull);
+ expect(parameterList.typeParameters, hasLength(1));
}
- void test_parseStringLiteral_multiline_encodedSpace() {
- createParser("'''\\x20\na'''");
- Expression expression = parser.parseStringLiteral();
- expectNotNullIfNoErrors(expression);
+ void test_parseTypeParameterList_withTrailingEquals() {
+ createParser('<A>=');
+ TypeParameterList parameterList = parser.parseTypeParameterList();
+ expectNotNullIfNoErrors(parameterList);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, " \na");
+ expect(parameterList.leftBracket, isNotNull);
+ expect(parameterList.rightBracket, isNotNull);
+ expect(parameterList.typeParameters, hasLength(1));
}
- void test_parseStringLiteral_multiline_endsWithInterpolation() {
- createParser(r"'''x$y'''");
- Expression expression = parser.parseStringLiteral();
+ void test_parseUnaryExpression_decrement_normal() {
+ createParser('--x');
+ PrefixExpression expression = parser.parseUnaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<StringInterpolation>());
- StringInterpolation interpolation = expression;
- expect(interpolation.elements, hasLength(3));
- expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
- InterpolationString element0 = interpolation.elements[0];
- expect(element0.value, 'x');
- expect(
- interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
- InterpolationExpression element1 = interpolation.elements[1];
- expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
- expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
- InterpolationString element2 = interpolation.elements[2];
- expect(element2.value, '');
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.MINUS_MINUS);
+ expect(expression.operand, isNotNull);
}
- void test_parseStringLiteral_multiline_escapedBackslash() {
- createParser("'''\\\\\na'''");
- Expression expression = parser.parseStringLiteral();
+ void test_parseUnaryExpression_decrement_super() {
+ createParser('--super');
+ PrefixExpression expression = parser.parseUnaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, "\\\na");
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.MINUS);
+ Expression innerExpression = expression.operand;
+ expect(innerExpression, isNotNull);
+ expect(innerExpression is PrefixExpression, isTrue);
+ PrefixExpression operand = innerExpression as PrefixExpression;
+ expect(operand.operator, isNotNull);
+ expect(operand.operator.type, TokenType.MINUS);
+ expect(operand.operand, isNotNull);
}
- void test_parseStringLiteral_multiline_escapedBackslash_raw() {
- createParser("r'''\\\\\na'''");
- Expression expression = parser.parseStringLiteral();
+ void test_parseUnaryExpression_decrement_super_propertyAccess() {
+ createParser('--super.x');
+ PrefixExpression expression = parser.parseUnaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, "\\\\\na");
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.MINUS_MINUS);
+ expect(expression.operand, isNotNull);
+ PropertyAccess operand = expression.operand as PropertyAccess;
+ expect(operand.target is SuperExpression, isTrue);
+ expect(operand.propertyName.name, "x");
}
- void test_parseStringLiteral_multiline_escapedEolMarker() {
- createParser("'''\\\na'''");
- Expression expression = parser.parseStringLiteral();
+ void test_parseUnaryExpression_decrement_super_withComment() {
+ createParser('/* 0 */ --super');
+ PrefixExpression expression = parser.parseUnaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, "a");
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.MINUS);
+ expect(expression.operator.precedingComments, isNotNull);
+ Expression innerExpression = expression.operand;
+ expect(innerExpression, isNotNull);
+ expect(innerExpression is PrefixExpression, isTrue);
+ PrefixExpression operand = innerExpression as PrefixExpression;
+ expect(operand.operator, isNotNull);
+ expect(operand.operator.type, TokenType.MINUS);
+ expect(operand.operand, isNotNull);
}
- void test_parseStringLiteral_multiline_escapedEolMarker_raw() {
- createParser("r'''\\\na'''");
- Expression expression = parser.parseStringLiteral();
+ void test_parseUnaryExpression_increment_normal() {
+ createParser('++x');
+ PrefixExpression expression = parser.parseUnaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, "a");
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.PLUS_PLUS);
+ expect(expression.operand, isNotNull);
}
- void test_parseStringLiteral_multiline_escapedSpaceAndEolMarker() {
- createParser("'''\\ \\\na'''");
- Expression expression = parser.parseStringLiteral();
+ void test_parseUnaryExpression_increment_super_index() {
+ createParser('++super[0]');
+ PrefixExpression expression = parser.parseUnaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, "a");
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.PLUS_PLUS);
+ expect(expression.operand, isNotNull);
+ IndexExpression operand = expression.operand as IndexExpression;
+ expect(operand.realTarget is SuperExpression, isTrue);
+ expect(operand.index is IntegerLiteral, isTrue);
}
- void test_parseStringLiteral_multiline_escapedSpaceAndEolMarker_raw() {
- createParser("r'''\\ \\\na'''");
- Expression expression = parser.parseStringLiteral();
+ void test_parseUnaryExpression_increment_super_propertyAccess() {
+ createParser('++super.x');
+ PrefixExpression expression = parser.parseUnaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, "a");
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.PLUS_PLUS);
+ expect(expression.operand, isNotNull);
+ PropertyAccess operand = expression.operand as PropertyAccess;
+ expect(operand.target is SuperExpression, isTrue);
+ expect(operand.propertyName.name, "x");
}
- void test_parseStringLiteral_multiline_escapedTab() {
- createParser("'''\\t\na'''");
- Expression expression = parser.parseStringLiteral();
+ void test_parseUnaryExpression_minus_normal() {
+ createParser('-x');
+ PrefixExpression expression = parser.parseUnaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, "\t\na");
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.MINUS);
+ expect(expression.operand, isNotNull);
}
- void test_parseStringLiteral_multiline_escapedTab_raw() {
- createParser("r'''\\t\na'''");
- Expression expression = parser.parseStringLiteral();
+ void test_parseUnaryExpression_minus_super() {
+ createParser('-super');
+ PrefixExpression expression = parser.parseUnaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, "\\t\na");
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.MINUS);
+ expect(expression.operand, isNotNull);
}
- void test_parseStringLiteral_multiline_quoteAfterInterpolation() {
- createParser(r"""'''$x'y'''""");
- Expression expression = parser.parseStringLiteral();
+ void test_parseUnaryExpression_not_normal() {
+ createParser('!x');
+ PrefixExpression expression = parser.parseUnaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<StringInterpolation>());
- StringInterpolation interpolation = expression;
- expect(interpolation.elements, hasLength(3));
- expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
- InterpolationString element0 = interpolation.elements[0];
- expect(element0.value, '');
- expect(
- interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
- InterpolationExpression element1 = interpolation.elements[1];
- expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
- expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
- InterpolationString element2 = interpolation.elements[2];
- expect(element2.value, "'y");
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.BANG);
+ expect(expression.operand, isNotNull);
}
- void test_parseStringLiteral_multiline_startsWithInterpolation() {
- createParser(r"'''${x}y'''");
- Expression expression = parser.parseStringLiteral();
+ void test_parseUnaryExpression_not_super() {
+ createParser('!super');
+ PrefixExpression expression = parser.parseUnaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<StringInterpolation>());
- StringInterpolation interpolation = expression;
- expect(interpolation.elements, hasLength(3));
- expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
- InterpolationString element0 = interpolation.elements[0];
- expect(element0.value, '');
- expect(
- interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
- InterpolationExpression element1 = interpolation.elements[1];
- expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
- expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
- InterpolationString element2 = interpolation.elements[2];
- expect(element2.value, 'y');
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.BANG);
+ expect(expression.operand, isNotNull);
}
- void test_parseStringLiteral_multiline_twoSpaces() {
- createParser("''' \na'''");
- Expression expression = parser.parseStringLiteral();
+ void test_parseUnaryExpression_tilda_normal() {
+ createParser('~x');
+ PrefixExpression expression = parser.parseUnaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, "a");
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.TILDE);
+ expect(expression.operand, isNotNull);
}
- void test_parseStringLiteral_multiline_twoSpaces_raw() {
- createParser("r''' \na'''");
- Expression expression = parser.parseStringLiteral();
+ void test_parseUnaryExpression_tilda_super() {
+ createParser('~super');
+ PrefixExpression expression = parser.parseUnaryExpression();
expectNotNullIfNoErrors(expression);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, "a");
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.TILDE);
+ expect(expression.operand, isNotNull);
}
- void test_parseStringLiteral_multiline_untrimmed() {
- createParser("''' a\nb'''");
- Expression expression = parser.parseStringLiteral();
- expectNotNullIfNoErrors(expression);
+ void test_parseVariableDeclaration_equals() {
+ createParser('a = b');
+ VariableDeclaration declaration = parser.parseVariableDeclaration();
+ expectNotNullIfNoErrors(declaration);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, " a\nb");
+ expect(declaration.name, isNotNull);
+ expect(declaration.equals, isNotNull);
+ expect(declaration.initializer, isNotNull);
}
- void test_parseStringLiteral_quoteAfterInterpolation() {
- createParser(r"""'$x"'""");
- Expression expression = parser.parseStringLiteral();
- expectNotNullIfNoErrors(expression);
+ void test_parseVariableDeclaration_noEquals() {
+ createParser('a');
+ VariableDeclaration declaration = parser.parseVariableDeclaration();
+ expectNotNullIfNoErrors(declaration);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<StringInterpolation>());
- StringInterpolation interpolation = expression;
- expect(interpolation.elements, hasLength(3));
- expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
- InterpolationString element0 = interpolation.elements[0];
- expect(element0.value, '');
- expect(
- interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
- InterpolationExpression element1 = interpolation.elements[1];
- expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
- expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
- InterpolationString element2 = interpolation.elements[2];
- expect(element2.value, '"');
+ expect(declaration.name, isNotNull);
+ expect(declaration.equals, isNull);
+ expect(declaration.initializer, isNull);
}
- void test_parseStringLiteral_single() {
- createParser("'a'");
- Expression expression = parser.parseStringLiteral();
- expectNotNullIfNoErrors(expression);
+ void test_parseVariableDeclarationListAfterMetadata_const_noType() {
+ createParser('const a');
+ VariableDeclarationList declarationList =
+ parseFullVariableDeclarationList();
+ expectNotNullIfNoErrors(declarationList);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<SimpleStringLiteral>());
- SimpleStringLiteral literal = expression;
- expect(literal.literal, isNotNull);
- expect(literal.value, "a");
+ expect(declarationList.keyword, isNotNull);
+ expect(declarationList.type, isNull);
+ expect(declarationList.variables, hasLength(1));
}
- void test_parseStringLiteral_startsWithInterpolation() {
- createParser(r"'${x}y'");
- Expression expression = parser.parseStringLiteral();
- expectNotNullIfNoErrors(expression);
+ void test_parseVariableDeclarationListAfterMetadata_const_type() {
+ createParser('const A a');
+ VariableDeclarationList declarationList =
+ parseFullVariableDeclarationList();
+ expectNotNullIfNoErrors(declarationList);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<StringInterpolation>());
- StringInterpolation interpolation = expression;
- expect(interpolation.elements, hasLength(3));
- expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
- InterpolationString element0 = interpolation.elements[0];
- expect(element0.value, '');
- expect(
- interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
- InterpolationExpression element1 = interpolation.elements[1];
- expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
- expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
- InterpolationString element2 = interpolation.elements[2];
- expect(element2.value, 'y');
+ expect(declarationList.keyword, isNotNull);
+ expect(declarationList.type, isNotNull);
+ expect(declarationList.variables, hasLength(1));
}
- void test_parseSuperConstructorInvocation_named() {
- createParser('super.a()');
- SuperConstructorInvocation invocation =
- parser.parseSuperConstructorInvocation();
- expectNotNullIfNoErrors(invocation);
- listener.assertNoErrors();
- expect(invocation.argumentList, isNotNull);
- expect(invocation.constructorName, isNotNull);
- expect(invocation.superKeyword, isNotNull);
- expect(invocation.period, isNotNull);
+ void test_parseVariableDeclarationListAfterMetadata_final_noType() {
+ createParser('final a');
+ VariableDeclarationList declarationList =
+ parseFullVariableDeclarationList();
+ expectNotNullIfNoErrors(declarationList);
+ listener.assertNoErrors();
+ expect(declarationList.keyword, isNotNull);
+ expect(declarationList.type, isNull);
+ expect(declarationList.variables, hasLength(1));
}
- void test_parseSuperConstructorInvocation_unnamed() {
- createParser('super()');
- SuperConstructorInvocation invocation =
- parser.parseSuperConstructorInvocation();
- expectNotNullIfNoErrors(invocation);
+ void test_parseVariableDeclarationListAfterMetadata_final_type() {
+ createParser('final A a');
+ VariableDeclarationList declarationList =
+ parseFullVariableDeclarationList();
+ expectNotNullIfNoErrors(declarationList);
listener.assertNoErrors();
- expect(invocation.argumentList, isNotNull);
- expect(invocation.constructorName, isNull);
- expect(invocation.superKeyword, isNotNull);
- expect(invocation.period, isNull);
+ expect(declarationList.keyword, isNotNull);
+ expect(declarationList.type, isNotNull);
+ expect(declarationList.variables, hasLength(1));
}
- void test_parseSwitchStatement_case() {
- createParser('switch (a) {case 1: return "I";}');
- SwitchStatement statement = parser.parseSwitchStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseVariableDeclarationListAfterMetadata_final_typeComment() {
+ enableGenericMethodComments = true;
+ createParser('final/*=T*/ x');
+ VariableDeclarationList declarationList =
+ parseFullVariableDeclarationList();
+ expectNotNullIfNoErrors(declarationList);
listener.assertNoErrors();
- expect(statement.switchKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.expression, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.leftBracket, isNotNull);
- expect(statement.members, hasLength(1));
- expect(statement.rightBracket, isNotNull);
+ expect((declarationList.type as TypeName).name.name, 'T');
+ expect(declarationList.isFinal, true);
}
- void test_parseSwitchStatement_empty() {
- createParser('switch (a) {}');
- SwitchStatement statement = parser.parseSwitchStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseVariableDeclarationListAfterMetadata_type_multiple() {
+ createParser('A a, b, c');
+ VariableDeclarationList declarationList =
+ parseFullVariableDeclarationList();
+ expectNotNullIfNoErrors(declarationList);
listener.assertNoErrors();
- expect(statement.switchKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.expression, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.leftBracket, isNotNull);
- expect(statement.members, hasLength(0));
- expect(statement.rightBracket, isNotNull);
+ expect(declarationList.keyword, isNull);
+ expect(declarationList.type, isNotNull);
+ expect(declarationList.variables, hasLength(3));
}
- void test_parseSwitchStatement_labeledCase() {
- createParser('switch (a) {l1: l2: l3: case(1):}');
- SwitchStatement statement = parser.parseSwitchStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseVariableDeclarationListAfterMetadata_type_single() {
+ createParser('A a');
+ VariableDeclarationList declarationList =
+ parseFullVariableDeclarationList();
+ expectNotNullIfNoErrors(declarationList);
listener.assertNoErrors();
- expect(statement.switchKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.expression, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.leftBracket, isNotNull);
- expect(statement.members, hasLength(1));
- {
- List<Label> labels = statement.members[0].labels;
- expect(labels, hasLength(3));
- expect(labels[0].label.inDeclarationContext(), isTrue);
- expect(labels[1].label.inDeclarationContext(), isTrue);
- expect(labels[2].label.inDeclarationContext(), isTrue);
- }
- expect(statement.rightBracket, isNotNull);
+ expect(declarationList.keyword, isNull);
+ expect(declarationList.type, isNotNull);
+ expect(declarationList.variables, hasLength(1));
}
- void test_parseSwitchStatement_labeledDefault() {
- createParser('switch (a) {l1: l2: l3: default:}');
- SwitchStatement statement = parser.parseSwitchStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseVariableDeclarationListAfterMetadata_var_multiple() {
+ createParser('var a, b, c');
+ VariableDeclarationList declarationList =
+ parseFullVariableDeclarationList();
+ expectNotNullIfNoErrors(declarationList);
listener.assertNoErrors();
- expect(statement.switchKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.expression, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.leftBracket, isNotNull);
- expect(statement.members, hasLength(1));
- {
- List<Label> labels = statement.members[0].labels;
- expect(labels, hasLength(3));
- expect(labels[0].label.inDeclarationContext(), isTrue);
- expect(labels[1].label.inDeclarationContext(), isTrue);
- expect(labels[2].label.inDeclarationContext(), isTrue);
- }
- expect(statement.rightBracket, isNotNull);
+ expect(declarationList.keyword, isNotNull);
+ expect(declarationList.type, isNull);
+ expect(declarationList.variables, hasLength(3));
}
- void test_parseSwitchStatement_labeledStatementInCase() {
- createParser('switch (a) {case 0: f(); l1: g(); break;}');
- SwitchStatement statement = parser.parseSwitchStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseVariableDeclarationListAfterMetadata_var_single() {
+ createParser('var a');
+ VariableDeclarationList declarationList =
+ parseFullVariableDeclarationList();
+ expectNotNullIfNoErrors(declarationList);
listener.assertNoErrors();
- expect(statement.switchKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.expression, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.leftBracket, isNotNull);
- expect(statement.members, hasLength(1));
- expect(statement.members[0].statements, hasLength(3));
- expect(statement.rightBracket, isNotNull);
+ expect(declarationList.keyword, isNotNull);
+ expect(declarationList.type, isNull);
+ expect(declarationList.variables, hasLength(1));
}
- void test_parseSymbolLiteral_builtInIdentifier() {
- createParser('#dynamic.static.abstract');
- SymbolLiteral literal = parser.parseSymbolLiteral();
- expectNotNullIfNoErrors(literal);
+ void test_parseVariableDeclarationListAfterMetadata_var_typeComment() {
+ enableGenericMethodComments = true;
+ createParser('var/*=T*/ x');
+ VariableDeclarationList declarationList =
+ parseFullVariableDeclarationList();
+ expectNotNullIfNoErrors(declarationList);
listener.assertNoErrors();
- expect(literal.poundSign, isNotNull);
- List<Token> components = literal.components;
- expect(components, hasLength(3));
- expect(components[0].lexeme, "dynamic");
- expect(components[1].lexeme, "static");
- expect(components[2].lexeme, "abstract");
+ expect((declarationList.type as TypeName).name.name, 'T');
+ expect(declarationList.keyword, isNull);
}
- void test_parseSymbolLiteral_multiple() {
- createParser('#a.b.c');
- SymbolLiteral literal = parser.parseSymbolLiteral();
- expectNotNullIfNoErrors(literal);
+ void test_parseVariableDeclarationListAfterType_type() {
+ createParser('T a');
+ VariableDeclarationList declarationList =
+ parseFullVariableDeclarationList();
+ expectNotNullIfNoErrors(declarationList);
listener.assertNoErrors();
- expect(literal.poundSign, isNotNull);
- List<Token> components = literal.components;
- expect(components, hasLength(3));
- expect(components[0].lexeme, "a");
- expect(components[1].lexeme, "b");
- expect(components[2].lexeme, "c");
+ expect(declarationList.keyword, isNull);
+ expect((declarationList.type as TypeName).name.name, 'T');
+ expect(declarationList.variables, hasLength(1));
}
- void test_parseSymbolLiteral_operator() {
- createParser('#==');
- SymbolLiteral literal = parser.parseSymbolLiteral();
- expectNotNullIfNoErrors(literal);
+ void test_parseVariableDeclarationListAfterType_var() {
+ createParser('var a, b, c');
+ VariableDeclarationList declarationList =
+ parseFullVariableDeclarationList();
+ expectNotNullIfNoErrors(declarationList);
listener.assertNoErrors();
- expect(literal.poundSign, isNotNull);
- List<Token> components = literal.components;
- expect(components, hasLength(1));
- expect(components[0].lexeme, "==");
+ expect(declarationList.keyword.lexeme, 'var');
+ expect(declarationList.type, isNull);
+ expect(declarationList.variables, hasLength(3));
}
- void test_parseSymbolLiteral_single() {
- createParser('#a');
- SymbolLiteral literal = parser.parseSymbolLiteral();
- expectNotNullIfNoErrors(literal);
+ void test_parseVariableDeclarationStatementAfterMetadata_multiple() {
+ createParser('var x, y, z;');
+ VariableDeclarationStatement statement = parser.parseStatement2();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(literal.poundSign, isNotNull);
- List<Token> components = literal.components;
- expect(components, hasLength(1));
- expect(components[0].lexeme, "a");
+ expect(statement.semicolon, isNotNull);
+ VariableDeclarationList variableList = statement.variables;
+ expect(variableList, isNotNull);
+ expect(variableList.variables, hasLength(3));
}
- void test_parseSymbolLiteral_void() {
- createParser('#void');
- SymbolLiteral literal = parser.parseSymbolLiteral();
- expectNotNullIfNoErrors(literal);
+ void test_parseVariableDeclarationStatementAfterMetadata_single() {
+ createParser('var x;');
+ VariableDeclarationStatement statement = parser.parseStatement2();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(literal.poundSign, isNotNull);
- List<Token> components = literal.components;
- expect(components, hasLength(1));
- expect(components[0].lexeme, "void");
+ expect(statement.semicolon, isNotNull);
+ VariableDeclarationList variableList = statement.variables;
+ expect(variableList, isNotNull);
+ expect(variableList.variables, hasLength(1));
}
- void test_parseThrowExpression() {
- createParser('throw x;');
- Expression expression = parser.parseThrowExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseWhileStatement() {
+ createParser('while (x) {}');
+ WhileStatement statement = parser.parseWhileStatement();
+ expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<ThrowExpression>());
- ThrowExpression throwExpression = expression;
- expect(throwExpression.throwKeyword, isNotNull);
- expect(throwExpression.expression, isNotNull);
+ expect(statement.whileKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.condition, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
}
- void test_parseThrowExpressionWithoutCascade() {
- createParser('throw x;');
- Expression expression = parser.parseThrowExpressionWithoutCascade();
- expectNotNullIfNoErrors(expression);
+ void test_parseWithClause_multiple() {
+ createParser('with A, B, C');
+ WithClause clause = parser.parseWithClause();
+ expectNotNullIfNoErrors(clause);
listener.assertNoErrors();
- expect(expression, new isInstanceOf<ThrowExpression>());
- ThrowExpression throwExpression = expression;
- expect(throwExpression.throwKeyword, isNotNull);
- expect(throwExpression.expression, isNotNull);
+ expect(clause.withKeyword, isNotNull);
+ expect(clause.mixinTypes, hasLength(3));
}
- void test_parseTryStatement_catch() {
- createParser('try {} catch (e) {}');
- TryStatement statement = parser.parseTryStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseWithClause_single() {
+ createParser('with M');
+ WithClause clause = parser.parseWithClause();
+ expectNotNullIfNoErrors(clause);
listener.assertNoErrors();
- expect(statement.tryKeyword, isNotNull);
- expect(statement.body, isNotNull);
- NodeList<CatchClause> catchClauses = statement.catchClauses;
- expect(catchClauses, hasLength(1));
- CatchClause clause = catchClauses[0];
- expect(clause.onKeyword, isNull);
- expect(clause.exceptionType, isNull);
- expect(clause.catchKeyword, isNotNull);
- expect(clause.exceptionParameter, isNotNull);
- expect(clause.comma, isNull);
- expect(clause.stackTraceParameter, isNull);
- expect(clause.body, isNotNull);
- expect(statement.finallyKeyword, isNull);
- expect(statement.finallyBlock, isNull);
+ expect(clause.withKeyword, isNotNull);
+ expect(clause.mixinTypes, hasLength(1));
}
- void test_parseTryStatement_catch_finally() {
- createParser('try {} catch (e, s) {} finally {}');
- TryStatement statement = parser.parseTryStatement();
+ void test_parseYieldStatement_each() {
+ createParser('yield* x;');
+ YieldStatement statement = parser.parseYieldStatement();
expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(statement.tryKeyword, isNotNull);
- expect(statement.body, isNotNull);
- NodeList<CatchClause> catchClauses = statement.catchClauses;
- expect(catchClauses, hasLength(1));
- CatchClause clause = catchClauses[0];
- expect(clause.onKeyword, isNull);
- expect(clause.exceptionType, isNull);
- expect(clause.catchKeyword, isNotNull);
- expect(clause.exceptionParameter, isNotNull);
- expect(clause.comma, isNotNull);
- expect(clause.stackTraceParameter, isNotNull);
- expect(clause.body, isNotNull);
- expect(statement.finallyKeyword, isNotNull);
- expect(statement.finallyBlock, isNotNull);
+ expect(statement.yieldKeyword, isNotNull);
+ expect(statement.star, isNotNull);
+ expect(statement.expression, isNotNull);
+ expect(statement.semicolon, isNotNull);
}
- void test_parseTryStatement_finally() {
- createParser('try {} finally {}');
- TryStatement statement = parser.parseTryStatement();
+ void test_parseYieldStatement_normal() {
+ createParser('yield x;');
+ YieldStatement statement = parser.parseYieldStatement();
expectNotNullIfNoErrors(statement);
listener.assertNoErrors();
- expect(statement.tryKeyword, isNotNull);
- expect(statement.body, isNotNull);
- expect(statement.catchClauses, hasLength(0));
- expect(statement.finallyKeyword, isNotNull);
- expect(statement.finallyBlock, isNotNull);
+ expect(statement.yieldKeyword, isNotNull);
+ expect(statement.star, isNull);
+ expect(statement.expression, isNotNull);
+ expect(statement.semicolon, isNotNull);
}
- void test_parseTryStatement_multiple() {
- createParser('try {} on NPE catch (e) {} on Error {} catch (e) {}');
- TryStatement statement = parser.parseTryStatement();
- expectNotNullIfNoErrors(statement);
- listener.assertNoErrors();
- expect(statement.tryKeyword, isNotNull);
- expect(statement.body, isNotNull);
- expect(statement.catchClauses, hasLength(3));
- expect(statement.finallyKeyword, isNull);
- expect(statement.finallyBlock, isNull);
+ void test_skipPrefixedIdentifier_invalid() {
+ createParser('+');
+ Token following = parser.skipPrefixedIdentifier(parser.currentToken);
+ expect(following, isNull);
}
- void test_parseTryStatement_on() {
- createParser('try {} on Error {}');
- TryStatement statement = parser.parseTryStatement();
- expectNotNullIfNoErrors(statement);
- listener.assertNoErrors();
- expect(statement.tryKeyword, isNotNull);
- expect(statement.body, isNotNull);
- NodeList<CatchClause> catchClauses = statement.catchClauses;
- expect(catchClauses, hasLength(1));
- CatchClause clause = catchClauses[0];
- expect(clause.onKeyword, isNotNull);
- expect(clause.exceptionType, isNotNull);
- expect(clause.catchKeyword, isNull);
- expect(clause.exceptionParameter, isNull);
- expect(clause.comma, isNull);
- expect(clause.stackTraceParameter, isNull);
- expect(clause.body, isNotNull);
- expect(statement.finallyKeyword, isNull);
- expect(statement.finallyBlock, isNull);
+ void test_skipPrefixedIdentifier_notPrefixed() {
+ createParser('a +');
+ Token following = parser.skipPrefixedIdentifier(parser.currentToken);
+ expect(following, isNotNull);
+ expect(following.type, TokenType.PLUS);
}
- void test_parseTryStatement_on_catch() {
- createParser('try {} on Error catch (e, s) {}');
- TryStatement statement = parser.parseTryStatement();
- expectNotNullIfNoErrors(statement);
- listener.assertNoErrors();
- expect(statement.tryKeyword, isNotNull);
- expect(statement.body, isNotNull);
- NodeList<CatchClause> catchClauses = statement.catchClauses;
- expect(catchClauses, hasLength(1));
- CatchClause clause = catchClauses[0];
- expect(clause.onKeyword, isNotNull);
- expect(clause.exceptionType, isNotNull);
- expect(clause.catchKeyword, isNotNull);
- expect(clause.exceptionParameter, isNotNull);
- expect(clause.comma, isNotNull);
- expect(clause.stackTraceParameter, isNotNull);
- expect(clause.body, isNotNull);
- expect(statement.finallyKeyword, isNull);
- expect(statement.finallyBlock, isNull);
+ void test_skipPrefixedIdentifier_prefixed() {
+ createParser('a.b +');
+ Token following = parser.skipPrefixedIdentifier(parser.currentToken);
+ expect(following, isNotNull);
+ expect(following.type, TokenType.PLUS);
}
- void test_parseTryStatement_on_catch_finally() {
- createParser('try {} on Error catch (e, s) {} finally {}');
- TryStatement statement = parser.parseTryStatement();
- expectNotNullIfNoErrors(statement);
- listener.assertNoErrors();
- expect(statement.tryKeyword, isNotNull);
- expect(statement.body, isNotNull);
- NodeList<CatchClause> catchClauses = statement.catchClauses;
- expect(catchClauses, hasLength(1));
- CatchClause clause = catchClauses[0];
- expect(clause.onKeyword, isNotNull);
- expect(clause.exceptionType, isNotNull);
- expect(clause.catchKeyword, isNotNull);
- expect(clause.exceptionParameter, isNotNull);
- expect(clause.comma, isNotNull);
- expect(clause.stackTraceParameter, isNotNull);
- expect(clause.body, isNotNull);
- expect(statement.finallyKeyword, isNotNull);
- expect(statement.finallyBlock, isNotNull);
+ void test_skipReturnType_invalid() {
+ createParser('+');
+ Token following = parser.skipReturnType(parser.currentToken);
+ expect(following, isNull);
}
- void test_parseTypeAlias_function_noParameters() {
- createParser('typedef bool F();');
- FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.parameters, isNotNull);
- expect(typeAlias.returnType, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
- expect(typeAlias.typeParameters, isNull);
+ void test_skipReturnType_type() {
+ createParser('C +');
+ Token following = parser.skipReturnType(parser.currentToken);
+ expect(following, isNotNull);
+ expect(following.type, TokenType.PLUS);
}
- void test_parseTypeAlias_function_noReturnType() {
- createParser('typedef F();');
- FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.parameters, isNotNull);
- expect(typeAlias.returnType, isNull);
- expect(typeAlias.semicolon, isNotNull);
- expect(typeAlias.typeParameters, isNull);
+ void test_skipReturnType_void() {
+ createParser('void +');
+ Token following = parser.skipReturnType(parser.currentToken);
+ expect(following, isNotNull);
+ expect(following.type, TokenType.PLUS);
}
- void test_parseTypeAlias_function_parameterizedReturnType() {
- createParser('typedef A<B> F();');
- FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.parameters, isNotNull);
- expect(typeAlias.returnType, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
- expect(typeAlias.typeParameters, isNull);
+ void test_skipSimpleIdentifier_identifier() {
+ createParser('i +');
+ Token following = parser.skipSimpleIdentifier(parser.currentToken);
+ expect(following, isNotNull);
+ expect(following.type, TokenType.PLUS);
}
- void test_parseTypeAlias_function_parameters() {
- createParser('typedef bool F(Object value);');
- FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.parameters, isNotNull);
- expect(typeAlias.returnType, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
- expect(typeAlias.typeParameters, isNull);
+ void test_skipSimpleIdentifier_invalid() {
+ createParser('9 +');
+ Token following = parser.skipSimpleIdentifier(parser.currentToken);
+ expect(following, isNull);
}
- void test_parseTypeAlias_function_typeParameters() {
- createParser('typedef bool F<E>();');
- FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.parameters, isNotNull);
- expect(typeAlias.returnType, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
- expect(typeAlias.typeParameters, isNotNull);
+ void test_skipSimpleIdentifier_pseudoKeyword() {
+ createParser('as +');
+ Token following = parser.skipSimpleIdentifier(parser.currentToken);
+ expect(following, isNotNull);
+ expect(following.type, TokenType.PLUS);
}
- void test_parseTypeAlias_function_voidReturnType() {
- createParser('typedef void F();');
- FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.parameters, isNotNull);
- expect(typeAlias.returnType, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
- expect(typeAlias.typeParameters, isNull);
+ void test_skipStringLiteral_adjacent() {
+ createParser("'a' 'b' +");
+ Token following = parser.skipStringLiteral(parser.currentToken);
+ expect(following, isNotNull);
+ expect(following.type, TokenType.PLUS);
}
- @failingTest
- void test_parseTypeAlias_genericFunction_noParameters() {
- createParser('typedef F = bool Function();');
- GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.semicolon, isNotNull);
- GenericFunctionType functionType = typeAlias.functionType;
- expect(functionType, isNotNull);
- expect(functionType.parameters, isNotNull);
- expect(functionType.returnType, isNotNull);
- expect(functionType.typeParameters, isNull);
+ void test_skipStringLiteral_interpolated() {
+ createParser("'a\${b}c' +");
+ Token following = parser.skipStringLiteral(parser.currentToken);
+ expect(following, isNotNull);
+ expect(following.type, TokenType.PLUS);
}
- @failingTest
- void test_parseTypeAlias_genericFunction_noReturnType() {
- createParser('typedef F = Function();');
- GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.semicolon, isNotNull);
- GenericFunctionType functionType = typeAlias.functionType;
- expect(functionType, isNotNull);
- expect(functionType.parameters, isNotNull);
- expect(functionType.returnType, isNull);
- expect(functionType.typeParameters, isNull);
+ void test_skipStringLiteral_invalid() {
+ createParser('a');
+ Token following = parser.skipStringLiteral(parser.currentToken);
+ expect(following, isNull);
}
- @failingTest
- void test_parseTypeAlias_genericFunction_parameterizedReturnType() {
- createParser('typedef F = A<B> Function();');
- GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.semicolon, isNotNull);
- GenericFunctionType functionType = typeAlias.functionType;
- expect(functionType, isNotNull);
- expect(functionType.parameters, isNotNull);
- expect(functionType.returnType, isNotNull);
- expect(functionType.typeParameters, isNull);
+ void test_skipStringLiteral_single() {
+ createParser("'a' +");
+ Token following = parser.skipStringLiteral(parser.currentToken);
+ expect(following, isNotNull);
+ expect(following.type, TokenType.PLUS);
}
- @failingTest
- void test_parseTypeAlias_genericFunction_parameters() {
- createParser('typedef F = bool Function(Object value);');
- GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.semicolon, isNotNull);
- GenericFunctionType functionType = typeAlias.functionType;
- expect(functionType, isNotNull);
- expect(functionType.parameters, isNotNull);
- expect(functionType.returnType, isNotNull);
- expect(functionType.typeParameters, isNull);
+ void test_skipTypeArgumentList_invalid() {
+ createParser('+');
+ Token following = parser.skipTypeArgumentList(parser.currentToken);
+ expect(following, isNull);
}
- @failingTest
- void test_parseTypeAlias_genericFunction_typeParameters() {
- createParser('typedef F = bool Function<E>();');
- GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.semicolon, isNotNull);
- GenericFunctionType functionType = typeAlias.functionType;
- expect(functionType, isNotNull);
- expect(functionType.parameters, isNotNull);
- expect(functionType.returnType, isNotNull);
- expect(functionType.typeParameters, isNotNull);
+ void test_skipTypeArgumentList_multiple() {
+ createParser('<E, F, G> +');
+ Token following = parser.skipTypeArgumentList(parser.currentToken);
+ expect(following, isNotNull);
+ expect(following.type, TokenType.PLUS);
}
- @failingTest
- void test_parseTypeAlias_genericFunction_typeParameters_noParameters() {
- createParser('typedef F<T> = bool Function();');
- GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
- GenericFunctionType functionType = typeAlias.functionType;
- expect(functionType, isNotNull);
- expect(functionType.parameters, isNotNull);
- expect(functionType.returnType, isNotNull);
- expect(functionType.typeParameters, isNull);
+ void test_skipTypeArgumentList_single() {
+ createParser('<E> +');
+ Token following = parser.skipTypeArgumentList(parser.currentToken);
+ expect(following, isNotNull);
+ expect(following.type, TokenType.PLUS);
}
- @failingTest
- void test_parseTypeAlias_genericFunction_typeParameters_noReturnType() {
- createParser('typedef F<T> = Function();');
- GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
- GenericFunctionType functionType = typeAlias.functionType;
- expect(functionType, isNotNull);
- expect(functionType.parameters, isNotNull);
- expect(functionType.returnType, isNull);
- expect(functionType.typeParameters, isNull);
+ void test_skipTypeName_invalid() {
+ createParser('+');
+ Token following = parser.skipTypeName(parser.currentToken);
+ expect(following, isNull);
}
- @failingTest
- void
- test_parseTypeAlias_genericFunction_typeParameters_parameterizedReturnType() {
- createParser('typedef F<T> = A<B> Function();');
- GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
- GenericFunctionType functionType = typeAlias.functionType;
- expect(functionType, isNotNull);
- expect(functionType.parameters, isNotNull);
- expect(functionType.returnType, isNotNull);
- expect(functionType.typeParameters, isNull);
+ void test_skipTypeName_parameterized() {
+ createParser('C<E<F<G>>> +');
+ Token following = parser.skipTypeName(parser.currentToken);
+ expect(following, isNotNull);
+ expect(following.type, TokenType.PLUS);
}
- @failingTest
- void test_parseTypeAlias_genericFunction_typeParameters_parameters() {
- createParser('typedef F<T> = bool Function(Object value);');
- GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
- GenericFunctionType functionType = typeAlias.functionType;
- expect(functionType, isNotNull);
- expect(functionType.parameters, isNotNull);
- expect(functionType.returnType, isNotNull);
- expect(functionType.typeParameters, isNull);
+ void test_skipTypeName_simple() {
+ createParser('C +');
+ Token following = parser.skipTypeName(parser.currentToken);
+ expect(following, isNotNull);
+ expect(following.type, TokenType.PLUS);
}
- @failingTest
- void test_parseTypeAlias_genericFunction_typeParameters_typeParameters() {
- createParser('typedef F<T> = bool Function<E>();');
- GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
+ /**
+ * Invoke the method [Parser.computeStringValue] with the given argument.
+ *
+ * @param lexeme the argument to the method
+ * @param first `true` if this is the first token in a string literal
+ * @param last `true` if this is the last token in a string literal
+ * @return the result of invoking the method
+ * @throws Exception if the method could not be invoked or throws an exception
+ */
+ String _computeStringValue(String lexeme, bool first, bool last) {
+ createParser('');
+ String value = parser.computeStringValue(lexeme, first, last);
listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
- GenericFunctionType functionType = typeAlias.functionType;
- expect(functionType, isNotNull);
- expect(functionType.parameters, isNotNull);
- expect(functionType.returnType, isNotNull);
- expect(functionType.typeParameters, isNotNull);
+ return value;
}
- @failingTest
- void test_parseTypeAlias_genericFunction_typeParameters_voidReturnType() {
- createParser('typedef F<T> = void Function();');
- GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
- GenericFunctionType functionType = typeAlias.functionType;
- expect(functionType, isNotNull);
- expect(functionType.parameters, isNotNull);
- expect(functionType.returnType, isNotNull);
- expect(functionType.typeParameters, isNull);
+ /**
+ * Invoke the method [Parser.isFunctionDeclaration] with the parser set to the token
+ * stream produced by scanning the given source.
+ *
+ * @param source the source to be scanned to produce the token stream being tested
+ * @return the result of invoking the method
+ * @throws Exception if the method could not be invoked or throws an exception
+ */
+ bool _isFunctionDeclaration(String source) {
+ createParser(source);
+ bool result = parser.isFunctionDeclaration();
+ expectNotNullIfNoErrors(result);
+ return result;
}
- @failingTest
- void test_parseTypeAlias_genericFunction_voidReturnType() {
- createParser('typedef F = void Function();');
- GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(typeAlias);
- listener.assertNoErrors();
- expect(typeAlias.typedefKeyword, isNotNull);
- expect(typeAlias.name, isNotNull);
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.semicolon, isNotNull);
- GenericFunctionType functionType = typeAlias.functionType;
- expect(functionType, isNotNull);
- expect(functionType.parameters, isNotNull);
- expect(functionType.returnType, isNotNull);
- expect(functionType.typeParameters, isNull);
+ /**
+ * Invoke the method [Parser.isFunctionExpression] with the parser set to the token stream
+ * produced by scanning the given source.
+ *
+ * @param source the source to be scanned to produce the token stream being tested
+ * @return the result of invoking the method
+ * @throws Exception if the method could not be invoked or throws an exception
+ */
+ bool _isFunctionExpression(String source) {
+ createParser(source);
+ return parser.isFunctionExpression(parser.currentToken);
}
- @failingTest
- void test_parseTypeAnnotation_function_noReturnType_noParameters() {
- createParser('Function() v');
- GenericFunctionType functionType = parser.parseTypeAnnotation(false);
- expectNotNullIfNoErrors(functionType);
- listener.assertNoErrors();
- expect(functionType.returnType, isNull);
- expect(functionType.functionKeyword, isNotNull);
- expect(functionType.typeParameters, isNull);
- FormalParameterList parameterList = functionType.parameters;
- expect(parameterList, isNotNull);
- expect(parameterList.parameters, hasLength(0));
+ /**
+ * Invoke the method [Parser.isInitializedVariableDeclaration] with the parser set to the
+ * token stream produced by scanning the given source.
+ *
+ * @param source the source to be scanned to produce the token stream being tested
+ * @return the result of invoking the method
+ * @throws Exception if the method could not be invoked or throws an exception
+ */
+ bool _isInitializedVariableDeclaration(String source) {
+ createParser(source);
+ bool result = parser.isInitializedVariableDeclaration();
+ expectNotNullIfNoErrors(result);
+ return result;
}
- @failingTest
- void test_parseTypeAnnotation_function_noReturnType_parameters() {
- createParser('Function(int, int) v');
- GenericFunctionType functionType = parser.parseTypeAnnotation(false);
- expectNotNullIfNoErrors(functionType);
- listener.assertNoErrors();
- expect(functionType.returnType, isNull);
- expect(functionType.functionKeyword, isNotNull);
- expect(functionType.typeParameters, isNull);
- FormalParameterList parameterList = functionType.parameters;
- expect(parameterList, isNotNull);
- NodeList<FormalParameter> parameters = parameterList.parameters;
- expect(parameters, hasLength(2));
-
- expect(parameters[0], new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter parameter = parameters[0];
- expect(parameter.identifier, isNull);
- expect(parameter.type, new isInstanceOf<TypeName>());
- expect((parameter.type as TypeName).name.name, 'int');
-
- expect(parameters[1], new isInstanceOf<SimpleFormalParameter>());
- parameter = parameters[1];
- expect(parameter.identifier, isNull);
- expect(parameter.type, new isInstanceOf<TypeName>());
- expect((parameter.type as TypeName).name.name, 'int');
+ /**
+ * Invoke the method [Parser.isSwitchMember] with the parser set to the token stream
+ * produced by scanning the given source.
+ *
+ * @param source the source to be scanned to produce the token stream being tested
+ * @return the result of invoking the method
+ * @throws Exception if the method could not be invoked or throws an exception
+ */
+ bool _isSwitchMember(String source) {
+ createParser(source);
+ bool result = parser.isSwitchMember();
+ expectNotNullIfNoErrors(result);
+ return result;
}
+}
- @failingTest
- void test_parseTypeAnnotation_function_noReturnType_typeParameters() {
- createParser('Function<S, T>()');
- GenericFunctionType functionType = parser.parseTypeAnnotation(false);
- expectNotNullIfNoErrors(functionType);
- listener.assertNoErrors();
- expect(functionType.returnType, isNull);
- expect(functionType.functionKeyword, isNotNull);
- TypeParameterList typeParameters = functionType.typeParameters;
- expect(typeParameters, isNotNull);
- expect(typeParameters.typeParameters, hasLength(2));
- FormalParameterList parameterList = functionType.parameters;
- expect(parameterList, isNotNull);
- expect(parameterList.parameters, hasLength(0));
+/**
+ * Tests which exercise the parser using a complete compilation unit or
+ * compilation unit member.
+ */
+@reflectiveTest
+class TopLevelParserTest extends ParserTestCase {
+ void test_function_literal_allowed_at_toplevel() {
+ parseCompilationUnit("var x = () {};");
}
- @failingTest
void
- test_parseTypeAnnotation_function_noReturnType_typeParameters_parameters() {
- createParser('Function<T>(String, {T t})');
- GenericFunctionType functionType = parser.parseTypeAnnotation(false);
- expectNotNullIfNoErrors(functionType);
- listener.assertNoErrors();
- expect(functionType.returnType, isNull);
- expect(functionType.functionKeyword, isNotNull);
- TypeParameterList typeParameters = functionType.typeParameters;
- expect(typeParameters, isNotNull);
- expect(typeParameters.typeParameters, hasLength(1));
- FormalParameterList parameterList = functionType.parameters;
- expect(parameterList, isNotNull);
- expect(parameterList.parameters, hasLength(2));
+ test_function_literal_allowed_in_ArgumentList_in_ConstructorFieldInitializer() {
+ parseCompilationUnit("class C { C() : a = f(() {}); }");
}
- void test_parseTypeAnnotation_function_returnType_classFunction() {
- createParser('Function v');
- TypeName functionType = parser.parseTypeAnnotation(false);
- expectNotNullIfNoErrors(functionType);
- listener.assertNoErrors();
+ void
+ test_function_literal_allowed_in_IndexExpression_in_ConstructorFieldInitializer() {
+ parseCompilationUnit("class C { C() : a = x[() {}]; }");
}
- @failingTest
- void test_parseTypeAnnotation_function_returnType_function() {
- createParser('A Function(B, C) Function(D) v');
- // TODO(scheglov) improve the test to verify also the node properties
- var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
- expectNotNullIfNoErrors(functionType);
- listener.assertNoErrors();
+ void
+ test_function_literal_allowed_in_ListLiteral_in_ConstructorFieldInitializer() {
+ parseCompilationUnit("class C { C() : a = [() {}]; }");
}
- @failingTest
- void test_parseTypeAnnotation_function_returnType_noParameters() {
- createParser('List<int> Function()');
- GenericFunctionType functionType = parser.parseTypeAnnotation(false);
- expectNotNullIfNoErrors(functionType);
- listener.assertNoErrors();
- expect(functionType.returnType, isNotNull);
- expect(functionType.functionKeyword, isNotNull);
- expect(functionType.typeParameters, isNull);
- FormalParameterList parameterList = functionType.parameters;
- expect(parameterList, isNotNull);
- expect(parameterList.parameters, hasLength(0));
+ void
+ test_function_literal_allowed_in_MapLiteral_in_ConstructorFieldInitializer() {
+ parseCompilationUnit("class C { C() : a = {'key': () {}}; }");
}
- @failingTest
- void test_parseTypeAnnotation_function_returnType_parameters() {
- createParser('List<int> Function(String s, int i)');
- GenericFunctionType functionType = parser.parseTypeAnnotation(false);
- expectNotNullIfNoErrors(functionType);
- listener.assertNoErrors();
- expect(functionType.returnType, isNotNull);
- expect(functionType.functionKeyword, isNotNull);
- expect(functionType.typeParameters, isNull);
- FormalParameterList parameterList = functionType.parameters;
- expect(parameterList, isNotNull);
- NodeList<FormalParameter> parameters = parameterList.parameters;
- expect(parameters, hasLength(2));
-
- expect(parameters[0], new isInstanceOf<SimpleFormalParameter>());
- SimpleFormalParameter parameter = parameters[0];
- expect(parameter.identifier, isNotNull);
- expect(parameter.identifier.name, 's');
- expect(parameter.type, new isInstanceOf<TypeName>());
- expect((parameter.type as TypeName).name.name, 'String');
+ void
+ test_function_literal_allowed_in_ParenthesizedExpression_in_ConstructorFieldInitializer() {
+ parseCompilationUnit("class C { C() : a = (() {}); }");
+ }
- expect(parameters[1], new isInstanceOf<SimpleFormalParameter>());
- parameter = parameters[1];
- expect(parameter.identifier, isNotNull);
- expect(parameter.identifier.name, 'i');
- expect(parameter.type, new isInstanceOf<TypeName>());
- expect((parameter.type as TypeName).name.name, 'int');
+ void
+ test_function_literal_allowed_in_StringInterpolation_in_ConstructorFieldInitializer() {
+ parseCompilationUnit("class C { C() : a = \"\${(){}}\"; }");
}
- @failingTest
- void test_parseTypeAnnotation_function_returnType_simple() {
- createParser('A Function(B, C) v');
- // TODO(scheglov) improve the test to verify also the node properties
- var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
- expectNotNullIfNoErrors(functionType);
- listener.assertNoErrors();
+ void test_import_as_show() {
+ parseCompilationUnit("import 'dart:math' as M show E;");
}
- @failingTest
- void test_parseTypeAnnotation_function_returnType_typeParameters() {
- createParser('List<T> Function<T>()');
- GenericFunctionType functionType = parser.parseTypeAnnotation(false);
- expectNotNullIfNoErrors(functionType);
- listener.assertNoErrors();
- expect(functionType.returnType, isNotNull);
- expect(functionType.functionKeyword, isNotNull);
- TypeParameterList typeParameters = functionType.typeParameters;
- expect(typeParameters, isNotNull);
- expect(typeParameters.typeParameters, hasLength(1));
- FormalParameterList parameterList = functionType.parameters;
- expect(parameterList, isNotNull);
- expect(parameterList.parameters, hasLength(0));
+ void test_import_show_hide() {
+ parseCompilationUnit(
+ "import 'import1_lib.dart' show hide, show hide ugly;");
}
- @failingTest
- void
- test_parseTypeAnnotation_function_returnType_typeParameters_parameters() {
- createParser('List<T> Function<T>(String s, [T])');
- GenericFunctionType functionType = parser.parseTypeAnnotation(false);
- expectNotNullIfNoErrors(functionType);
+ void test_parseClassDeclaration_abstract() {
+ createParser('abstract class A {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(functionType.returnType, isNotNull);
- expect(functionType.functionKeyword, isNotNull);
- TypeParameterList typeParameters = functionType.typeParameters;
- expect(typeParameters, isNotNull);
- expect(typeParameters.typeParameters, hasLength(1));
- FormalParameterList parameterList = functionType.parameters;
- expect(parameterList, isNotNull);
- expect(parameterList.parameters, hasLength(2));
+ expect(member, new isInstanceOf<ClassDeclaration>());
+ ClassDeclaration declaration = member;
+ expect(declaration.documentationComment, isNull);
+ expect(declaration.abstractKeyword, isNotNull);
+ expect(declaration.extendsClause, isNull);
+ expect(declaration.implementsClause, isNull);
+ expect(declaration.classKeyword, isNotNull);
+ expect(declaration.leftBracket, isNotNull);
+ expect(declaration.name, isNotNull);
+ expect(declaration.members, hasLength(0));
+ expect(declaration.rightBracket, isNotNull);
+ expect(declaration.typeParameters, isNull);
}
- @failingTest
- void test_parseTypeAnnotation_function_returnType_withArguments() {
- createParser('A<B> Function(C) v');
- // TODO(scheglov) improve this test to verify also the node properties
- var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
- expectNotNullIfNoErrors(functionType);
+ void test_parseClassDeclaration_empty() {
+ createParser('class A {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
+ expect(member, new isInstanceOf<ClassDeclaration>());
+ ClassDeclaration declaration = member;
+ expect(declaration.documentationComment, isNull);
+ expect(declaration.abstractKeyword, isNull);
+ expect(declaration.extendsClause, isNull);
+ expect(declaration.implementsClause, isNull);
+ expect(declaration.classKeyword, isNotNull);
+ expect(declaration.leftBracket, isNotNull);
+ expect(declaration.name, isNotNull);
+ expect(declaration.members, hasLength(0));
+ expect(declaration.rightBracket, isNotNull);
+ expect(declaration.typeParameters, isNull);
}
- void test_parseTypeAnnotation_named() {
- createParser('A<B> v');
- TypeName typeName = parser.parseTypeAnnotation(false);
- expectNotNullIfNoErrors(typeName);
+ void test_parseClassDeclaration_extends() {
+ createParser('class A extends B {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
+ expect(member, new isInstanceOf<ClassDeclaration>());
+ ClassDeclaration declaration = member;
+ expect(declaration.documentationComment, isNull);
+ expect(declaration.abstractKeyword, isNull);
+ expect(declaration.extendsClause, isNotNull);
+ expect(declaration.implementsClause, isNull);
+ expect(declaration.classKeyword, isNotNull);
+ expect(declaration.leftBracket, isNotNull);
+ expect(declaration.name, isNotNull);
+ expect(declaration.members, hasLength(0));
+ expect(declaration.rightBracket, isNotNull);
+ expect(declaration.typeParameters, isNull);
}
- void test_parseTypeArgumentList_empty() {
- createParser('<>');
- TypeArgumentList argumentList = parser.parseTypeArgumentList();
- expectNotNullIfNoErrors(argumentList);
- listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TYPE_NAME]);
- expect(argumentList.leftBracket, isNotNull);
- expect(argumentList.arguments, hasLength(1));
- expect(argumentList.rightBracket, isNotNull);
+ void test_parseClassDeclaration_extendsAndImplements() {
+ createParser('class A extends B implements C {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
+ listener.assertNoErrors();
+ expect(member, new isInstanceOf<ClassDeclaration>());
+ ClassDeclaration declaration = member;
+ expect(declaration.documentationComment, isNull);
+ expect(declaration.abstractKeyword, isNull);
+ expect(declaration.extendsClause, isNotNull);
+ expect(declaration.implementsClause, isNotNull);
+ expect(declaration.classKeyword, isNotNull);
+ expect(declaration.leftBracket, isNotNull);
+ expect(declaration.name, isNotNull);
+ expect(declaration.members, hasLength(0));
+ expect(declaration.rightBracket, isNotNull);
+ expect(declaration.typeParameters, isNull);
}
- void test_parseTypeArgumentList_multiple() {
- createParser('<int, int, int>');
- TypeArgumentList argumentList = parser.parseTypeArgumentList();
- expectNotNullIfNoErrors(argumentList);
+ void test_parseClassDeclaration_extendsAndWith() {
+ createParser('class A extends B with C {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(argumentList.leftBracket, isNotNull);
- expect(argumentList.arguments, hasLength(3));
- expect(argumentList.rightBracket, isNotNull);
+ expect(member, new isInstanceOf<ClassDeclaration>());
+ ClassDeclaration declaration = member;
+ expect(declaration.documentationComment, isNull);
+ expect(declaration.abstractKeyword, isNull);
+ expect(declaration.classKeyword, isNotNull);
+ expect(declaration.name, isNotNull);
+ expect(declaration.typeParameters, isNull);
+ expect(declaration.extendsClause, isNotNull);
+ expect(declaration.withClause, isNotNull);
+ expect(declaration.implementsClause, isNull);
+ expect(declaration.leftBracket, isNotNull);
+ expect(declaration.members, hasLength(0));
+ expect(declaration.rightBracket, isNotNull);
}
- void test_parseTypeArgumentList_nested() {
- createParser('<A<B>>');
- TypeArgumentList argumentList = parser.parseTypeArgumentList();
- expectNotNullIfNoErrors(argumentList);
+ void test_parseClassDeclaration_extendsAndWithAndImplements() {
+ createParser('class A extends B with C implements D {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(argumentList.leftBracket, isNotNull);
- expect(argumentList.arguments, hasLength(1));
- TypeName argument = argumentList.arguments[0];
- expect(argument, isNotNull);
- TypeArgumentList innerList = argument.typeArguments;
- expect(innerList, isNotNull);
- expect(innerList.arguments, hasLength(1));
- expect(argumentList.rightBracket, isNotNull);
+ expect(member, new isInstanceOf<ClassDeclaration>());
+ ClassDeclaration declaration = member;
+ expect(declaration.documentationComment, isNull);
+ expect(declaration.abstractKeyword, isNull);
+ expect(declaration.classKeyword, isNotNull);
+ expect(declaration.name, isNotNull);
+ expect(declaration.typeParameters, isNull);
+ expect(declaration.extendsClause, isNotNull);
+ expect(declaration.withClause, isNotNull);
+ expect(declaration.implementsClause, isNotNull);
+ expect(declaration.leftBracket, isNotNull);
+ expect(declaration.members, hasLength(0));
+ expect(declaration.rightBracket, isNotNull);
}
- void test_parseTypeArgumentList_nested_withComment_double() {
- createParser('<A<B /* 0 */ >>');
- TypeArgumentList argumentList = parser.parseTypeArgumentList();
- expectNotNullIfNoErrors(argumentList);
+ void test_parseClassDeclaration_implements() {
+ createParser('class A implements C {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(argumentList.leftBracket, isNotNull);
- expect(argumentList.rightBracket, isNotNull);
- expect(argumentList.arguments, hasLength(1));
-
- TypeName argument = argumentList.arguments[0];
- expect(argument, isNotNull);
-
- TypeArgumentList innerList = argument.typeArguments;
- expect(innerList, isNotNull);
- expect(innerList.leftBracket, isNotNull);
- expect(innerList.arguments, hasLength(1));
- expect(innerList.rightBracket, isNotNull);
- expect(innerList.rightBracket.precedingComments, isNotNull);
+ expect(member, new isInstanceOf<ClassDeclaration>());
+ ClassDeclaration declaration = member;
+ expect(declaration.documentationComment, isNull);
+ expect(declaration.abstractKeyword, isNull);
+ expect(declaration.extendsClause, isNull);
+ expect(declaration.implementsClause, isNotNull);
+ expect(declaration.classKeyword, isNotNull);
+ expect(declaration.leftBracket, isNotNull);
+ expect(declaration.name, isNotNull);
+ expect(declaration.members, hasLength(0));
+ expect(declaration.rightBracket, isNotNull);
+ expect(declaration.typeParameters, isNull);
}
- void test_parseTypeArgumentList_nested_withComment_tripple() {
- createParser('<A<B<C /* 0 */ >>>');
- TypeArgumentList argumentList = parser.parseTypeArgumentList();
- expectNotNullIfNoErrors(argumentList);
+ void test_parseClassDeclaration_native() {
+ createParser('class A native "nativeValue" {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(argumentList.leftBracket, isNotNull);
- expect(argumentList.rightBracket, isNotNull);
- expect(argumentList.arguments, hasLength(1));
-
- TypeName argument = argumentList.arguments[0];
- expect(argument, isNotNull);
-
- TypeArgumentList innerList = argument.typeArguments;
- expect(innerList, isNotNull);
- expect(innerList.leftBracket, isNotNull);
- expect(innerList.arguments, hasLength(1));
- expect(innerList.rightBracket, isNotNull);
-
- TypeName innerArgument = innerList.arguments[0];
- expect(innerArgument, isNotNull);
-
- TypeArgumentList innerInnerList = innerArgument.typeArguments;
- expect(innerInnerList, isNotNull);
- expect(innerInnerList.leftBracket, isNotNull);
- expect(innerInnerList.arguments, hasLength(1));
- expect(innerInnerList.rightBracket, isNotNull);
- expect(innerInnerList.rightBracket.precedingComments, isNotNull);
+ expect(member, new isInstanceOf<ClassDeclaration>());
+ ClassDeclaration declaration = member;
+ NativeClause nativeClause = declaration.nativeClause;
+ expect(nativeClause, isNotNull);
+ expect(nativeClause.nativeKeyword, isNotNull);
+ expect(nativeClause.name.stringValue, "nativeValue");
+ expect(nativeClause.beginToken, same(nativeClause.nativeKeyword));
+ expect(nativeClause.endToken, same(nativeClause.name.endToken));
}
- void test_parseTypeArgumentList_single() {
- createParser('<int>');
- TypeArgumentList argumentList = parser.parseTypeArgumentList();
- expectNotNullIfNoErrors(argumentList);
+ void test_parseClassDeclaration_nonEmpty() {
+ createParser('class A {var f;}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(argumentList.leftBracket, isNotNull);
- expect(argumentList.arguments, hasLength(1));
- expect(argumentList.rightBracket, isNotNull);
+ expect(member, new isInstanceOf<ClassDeclaration>());
+ ClassDeclaration declaration = member;
+ expect(declaration.documentationComment, isNull);
+ expect(declaration.abstractKeyword, isNull);
+ expect(declaration.extendsClause, isNull);
+ expect(declaration.implementsClause, isNull);
+ expect(declaration.classKeyword, isNotNull);
+ expect(declaration.leftBracket, isNotNull);
+ expect(declaration.name, isNotNull);
+ expect(declaration.members, hasLength(1));
+ expect(declaration.rightBracket, isNotNull);
+ expect(declaration.typeParameters, isNull);
}
- void test_parseTypeName_parameterized() {
- createParser('List<int>');
- TypeName typeName = parser.parseTypeName(false);
- expectNotNullIfNoErrors(typeName);
+ void test_parseClassDeclaration_typeAlias_implementsC() {
+ createParser('class A = Object with B implements C;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(typeName.name, isNotNull);
- expect(typeName.typeArguments, isNotNull);
- expect(typeName.question, isNull);
+ expect(member, new isInstanceOf<ClassTypeAlias>());
+ ClassTypeAlias typeAlias = member;
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.withClause, isNotNull);
+ expect(typeAlias.implementsClause, isNotNull);
+ expect(typeAlias.implementsClause.implementsKeyword, isNotNull);
+ expect(typeAlias.implementsClause.interfaces.length, 1);
+ expect(typeAlias.semicolon, isNotNull);
}
- void test_parseTypeName_parameterized_nullable() {
- enableNnbd = true;
- createParser('List<int>?');
- TypeName typeName = parser.parseTypeName(false);
- expectNotNullIfNoErrors(typeName);
+ void test_parseClassDeclaration_typeAlias_withB() {
+ createParser('class A = Object with B;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(typeName.name, isNotNull);
- expect(typeName.typeArguments, isNotNull);
- expect(typeName.question, isNotNull);
+ expect(member, new isInstanceOf<ClassTypeAlias>());
+ ClassTypeAlias typeAlias = member;
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.withClause, isNotNull);
+ expect(typeAlias.withClause.withKeyword, isNotNull);
+ expect(typeAlias.withClause.mixinTypes.length, 1);
+ expect(typeAlias.implementsClause, isNull);
+ expect(typeAlias.semicolon, isNotNull);
}
- void test_parseTypeName_simple() {
- createParser('int');
- TypeName typeName = parser.parseTypeName(false);
- expectNotNullIfNoErrors(typeName);
+ void test_parseClassDeclaration_typeParameters() {
+ createParser('class A<B> {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(typeName.name, isNotNull);
- expect(typeName.typeArguments, isNull);
- expect(typeName.question, isNull);
+ expect(member, new isInstanceOf<ClassDeclaration>());
+ ClassDeclaration declaration = member;
+ expect(declaration.documentationComment, isNull);
+ expect(declaration.abstractKeyword, isNull);
+ expect(declaration.extendsClause, isNull);
+ expect(declaration.implementsClause, isNull);
+ expect(declaration.classKeyword, isNotNull);
+ expect(declaration.leftBracket, isNotNull);
+ expect(declaration.name, isNotNull);
+ expect(declaration.members, hasLength(0));
+ expect(declaration.rightBracket, isNotNull);
+ expect(declaration.typeParameters, isNotNull);
+ expect(declaration.typeParameters.typeParameters, hasLength(1));
}
- void test_parseTypeName_simple_nullable() {
- enableNnbd = true;
- createParser('String?');
- TypeName typeName = parser.parseTypeName(false);
- expectNotNullIfNoErrors(typeName);
+ void test_parseCompilationUnit_abstractAsPrefix_parameterized() {
+ createParser('abstract<dynamic> _abstract = new abstract.A();');
+ CompilationUnit unit = parser.parseCompilationUnit2();
+ expectNotNullIfNoErrors(unit);
listener.assertNoErrors();
- expect(typeName.name, isNotNull);
- expect(typeName.typeArguments, isNull);
- expect(typeName.question, isNotNull);
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(0));
+ expect(unit.declarations, hasLength(1));
}
- @failingTest
- void test_parseTypeParameter_bounded_functionType_noReturn() {
- createParser('A extends Function(int)');
- TypeParameter parameter = parser.parseTypeParameter();
- expectNotNullIfNoErrors(parameter);
- listener.assertNoErrors();
- expect(parameter.bound, new isInstanceOf<GenericFunctionType>());
- expect(parameter.extendsKeyword, isNotNull);
- expect(parameter.name, isNotNull);
+ void test_parseCompilationUnit_builtIn_asFunctionName() {
+ parseCompilationUnit('abstract(x) => 0;');
+ parseCompilationUnit('as(x) => 0;');
+ parseCompilationUnit('dynamic(x) => 0;');
+ parseCompilationUnit('export(x) => 0;');
+ parseCompilationUnit('external(x) => 0;');
+ parseCompilationUnit('factory(x) => 0;');
+ parseCompilationUnit('get(x) => 0;');
+ parseCompilationUnit('implements(x) => 0;');
+ parseCompilationUnit('import(x) => 0;');
+ parseCompilationUnit('library(x) => 0;');
+ parseCompilationUnit('operator(x) => 0;');
+ parseCompilationUnit('part(x) => 0;');
+ parseCompilationUnit('set(x) => 0;');
+ parseCompilationUnit('static(x) => 0;');
+ parseCompilationUnit('typedef(x) => 0;');
}
- @failingTest
- void test_parseTypeParameter_bounded_functionType_return() {
- createParser('A extends String Function(int)');
- TypeParameter parameter = parser.parseTypeParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseCompilationUnit_directives_multiple() {
+ createParser("library l;\npart 'a.dart';");
+ CompilationUnit unit = parser.parseCompilationUnit2();
+ expectNotNullIfNoErrors(unit);
listener.assertNoErrors();
- expect(parameter.bound, new isInstanceOf<GenericFunctionType>());
- expect(parameter.extendsKeyword, isNotNull);
- expect(parameter.name, isNotNull);
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(2));
+ expect(unit.declarations, hasLength(0));
}
- void test_parseTypeParameter_bounded_generic() {
- createParser('A extends B<C>');
- TypeParameter parameter = parser.parseTypeParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseCompilationUnit_directives_single() {
+ createParser('library l;');
+ CompilationUnit unit = parser.parseCompilationUnit2();
+ expectNotNullIfNoErrors(unit);
listener.assertNoErrors();
- expect(parameter.bound, new isInstanceOf<TypeName>());
- expect(parameter.extendsKeyword, isNotNull);
- expect(parameter.name, isNotNull);
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(1));
+ expect(unit.declarations, hasLength(0));
}
- void test_parseTypeParameter_bounded_nullable() {
- enableNnbd = true;
- createParser('A extends B?');
- TypeParameter parameter = parser.parseTypeParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseCompilationUnit_empty() {
+ createParser('');
+ CompilationUnit unit = parser.parseCompilationUnit2();
+ expectNotNullIfNoErrors(unit);
listener.assertNoErrors();
- expect(parameter.bound, new isInstanceOf<TypeName>());
- expect(parameter.extendsKeyword, isNotNull);
- expect(parameter.name, isNotNull);
- TypeName bound = parameter.bound;
- expect(bound, isNotNull);
- expect(bound.question, isNotNull);
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(0));
+ expect(unit.declarations, hasLength(0));
}
- void test_parseTypeParameter_bounded_simple() {
- createParser('A extends B');
- TypeParameter parameter = parser.parseTypeParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseCompilationUnit_exportAsPrefix() {
+ createParser('export.A _export = new export.A();');
+ CompilationUnit unit = parser.parseCompilationUnit2();
+ expectNotNullIfNoErrors(unit);
listener.assertNoErrors();
- expect(parameter.bound, new isInstanceOf<TypeName>());
- expect(parameter.extendsKeyword, isNotNull);
- expect(parameter.name, isNotNull);
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(0));
+ expect(unit.declarations, hasLength(1));
}
- void test_parseTypeParameter_simple() {
- createParser('A');
- TypeParameter parameter = parser.parseTypeParameter();
- expectNotNullIfNoErrors(parameter);
+ void test_parseCompilationUnit_exportAsPrefix_parameterized() {
+ createParser('export<dynamic> _export = new export.A();');
+ CompilationUnit unit = parser.parseCompilationUnit2();
+ expectNotNullIfNoErrors(unit);
listener.assertNoErrors();
- expect(parameter.bound, isNull);
- expect(parameter.extendsKeyword, isNull);
- expect(parameter.name, isNotNull);
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(0));
+ expect(unit.declarations, hasLength(1));
}
- void test_parseTypeParameterList_multiple() {
- createParser('<A, B extends C, D>');
- TypeParameterList parameterList = parser.parseTypeParameterList();
- expectNotNullIfNoErrors(parameterList);
+ void test_parseCompilationUnit_operatorAsPrefix_parameterized() {
+ createParser('operator<dynamic> _operator = new operator.A();');
+ CompilationUnit unit = parser.parseCompilationUnit2();
+ expectNotNullIfNoErrors(unit);
listener.assertNoErrors();
- expect(parameterList.leftBracket, isNotNull);
- expect(parameterList.rightBracket, isNotNull);
- expect(parameterList.typeParameters, hasLength(3));
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(0));
+ expect(unit.declarations, hasLength(1));
}
- void test_parseTypeParameterList_parameterizedWithTrailingEquals() {
- createParser('<A extends B<E>>=');
- TypeParameterList parameterList = parser.parseTypeParameterList();
- expectNotNullIfNoErrors(parameterList);
+ void test_parseCompilationUnit_script() {
+ createParser('#! /bin/dart');
+ CompilationUnit unit = parser.parseCompilationUnit2();
+ expectNotNullIfNoErrors(unit);
listener.assertNoErrors();
- expect(parameterList.leftBracket, isNotNull);
- expect(parameterList.rightBracket, isNotNull);
- expect(parameterList.typeParameters, hasLength(1));
+ expect(unit.scriptTag, isNotNull);
+ expect(unit.directives, hasLength(0));
+ expect(unit.declarations, hasLength(0));
}
- void test_parseTypeParameterList_single() {
- createParser('<<A>');
- TypeParameterList parameterList = parser.parseTypeParameterList();
- expectNotNullIfNoErrors(parameterList);
+ void test_parseCompilationUnit_skipFunctionBody_withInterpolation() {
+ ParserTestCase.parseFunctionBodies = false;
+ createParser('f() { "\${n}"; }');
+ CompilationUnit unit = parser.parseCompilationUnit2();
+ expectNotNullIfNoErrors(unit);
listener.assertNoErrors();
- expect(parameterList.leftBracket, isNotNull);
- expect(parameterList.rightBracket, isNotNull);
- expect(parameterList.typeParameters, hasLength(1));
+ expect(unit.scriptTag, isNull);
+ expect(unit.declarations, hasLength(1));
}
- void test_parseTypeParameterList_withTrailingEquals() {
- createParser('<A>=');
- TypeParameterList parameterList = parser.parseTypeParameterList();
- expectNotNullIfNoErrors(parameterList);
+ void test_parseCompilationUnit_topLevelDeclaration() {
+ createParser('class A {}');
+ CompilationUnit unit = parser.parseCompilationUnit2();
+ expectNotNullIfNoErrors(unit);
listener.assertNoErrors();
- expect(parameterList.leftBracket, isNotNull);
- expect(parameterList.rightBracket, isNotNull);
- expect(parameterList.typeParameters, hasLength(1));
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(0));
+ expect(unit.declarations, hasLength(1));
}
- void test_parseUnaryExpression_decrement_normal() {
- createParser('--x');
- PrefixExpression expression = parser.parseUnaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseCompilationUnit_typedefAsPrefix() {
+ createParser('typedef.A _typedef = new typedef.A();');
+ CompilationUnit unit = parser.parseCompilationUnit2();
+ expectNotNullIfNoErrors(unit);
listener.assertNoErrors();
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.MINUS_MINUS);
- expect(expression.operand, isNotNull);
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(0));
+ expect(unit.declarations, hasLength(1));
}
- void test_parseUnaryExpression_decrement_super() {
- createParser('--super');
- PrefixExpression expression = parser.parseUnaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseCompilationUnitMember_abstractAsPrefix() {
+ createParser('abstract.A _abstract = new abstract.A();');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.MINUS);
- Expression innerExpression = expression.operand;
- expect(innerExpression, isNotNull);
- expect(innerExpression is PrefixExpression, isTrue);
- PrefixExpression operand = innerExpression as PrefixExpression;
- expect(operand.operator, isNotNull);
- expect(operand.operator.type, TokenType.MINUS);
- expect(operand.operand, isNotNull);
+ expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
+ TopLevelVariableDeclaration declaration = member;
+ expect(declaration.semicolon, isNotNull);
+ expect(declaration.variables, isNotNull);
}
- void test_parseUnaryExpression_decrement_super_propertyAccess() {
- createParser('--super.x');
- PrefixExpression expression = parser.parseUnaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseCompilationUnitMember_class() {
+ createParser('class A {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.MINUS_MINUS);
- expect(expression.operand, isNotNull);
- PropertyAccess operand = expression.operand as PropertyAccess;
- expect(operand.target is SuperExpression, isTrue);
- expect(operand.propertyName.name, "x");
+ expect(member, new isInstanceOf<ClassDeclaration>());
+ ClassDeclaration declaration = member;
+ expect(declaration.name.name, "A");
+ expect(declaration.members, hasLength(0));
}
- void test_parseUnaryExpression_decrement_super_withComment() {
- createParser('/* 0 */ --super');
- PrefixExpression expression = parser.parseUnaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseCompilationUnitMember_classTypeAlias() {
+ createParser('abstract class A = B with C;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.MINUS);
- expect(expression.operator.precedingComments, isNotNull);
- Expression innerExpression = expression.operand;
- expect(innerExpression, isNotNull);
- expect(innerExpression is PrefixExpression, isTrue);
- PrefixExpression operand = innerExpression as PrefixExpression;
- expect(operand.operator, isNotNull);
- expect(operand.operator.type, TokenType.MINUS);
- expect(operand.operand, isNotNull);
+ expect(member, new isInstanceOf<ClassTypeAlias>());
+ ClassTypeAlias declaration = member;
+ expect(declaration.name.name, "A");
+ expect(declaration.abstractKeyword, isNotNull);
}
- void test_parseUnaryExpression_increment_normal() {
- createParser('++x');
- PrefixExpression expression = parser.parseUnaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseCompilationUnitMember_constVariable() {
+ createParser('const int x = 0;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.PLUS_PLUS);
- expect(expression.operand, isNotNull);
+ expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
+ TopLevelVariableDeclaration declaration = member;
+ expect(declaration.semicolon, isNotNull);
+ expect(declaration.variables, isNotNull);
}
- void test_parseUnaryExpression_increment_super_index() {
- createParser('++super[0]');
- PrefixExpression expression = parser.parseUnaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseCompilationUnitMember_finalVariable() {
+ createParser('final x = 0;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.PLUS_PLUS);
- expect(expression.operand, isNotNull);
- IndexExpression operand = expression.operand as IndexExpression;
- expect(operand.realTarget is SuperExpression, isTrue);
- expect(operand.index is IntegerLiteral, isTrue);
- }
-
- void test_parseUnaryExpression_increment_super_propertyAccess() {
- createParser('++super.x');
- PrefixExpression expression = parser.parseUnaryExpression();
- expectNotNullIfNoErrors(expression);
- listener.assertNoErrors();
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.PLUS_PLUS);
- expect(expression.operand, isNotNull);
- PropertyAccess operand = expression.operand as PropertyAccess;
- expect(operand.target is SuperExpression, isTrue);
- expect(operand.propertyName.name, "x");
+ expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
+ TopLevelVariableDeclaration declaration = member;
+ expect(declaration.semicolon, isNotNull);
+ expect(declaration.variables, isNotNull);
}
- void test_parseUnaryExpression_minus_normal() {
- createParser('-x');
- PrefixExpression expression = parser.parseUnaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseCompilationUnitMember_function_external_noType() {
+ createParser('external f();');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.MINUS);
- expect(expression.operand, isNotNull);
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.externalKeyword, isNotNull);
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNull);
}
- void test_parseUnaryExpression_minus_super() {
- createParser('-super');
- PrefixExpression expression = parser.parseUnaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseCompilationUnitMember_function_external_type() {
+ createParser('external int f();');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.MINUS);
- expect(expression.operand, isNotNull);
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.externalKeyword, isNotNull);
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNull);
}
- void test_parseUnaryExpression_not_normal() {
- createParser('!x');
- PrefixExpression expression = parser.parseUnaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseCompilationUnitMember_function_generic_noReturnType() {
+ createParser('f<E>() {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.BANG);
- expect(expression.operand, isNotNull);
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.returnType, isNull);
+ expect(declaration.functionExpression.typeParameters, isNotNull);
}
- void test_parseUnaryExpression_not_super() {
- createParser('!super');
- PrefixExpression expression = parser.parseUnaryExpression();
- expectNotNullIfNoErrors(expression);
+ void
+ test_parseCompilationUnitMember_function_generic_noReturnType_annotated() {
+ createParser('f<@a E>() {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.BANG);
- expect(expression.operand, isNotNull);
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.returnType, isNull);
+ expect(declaration.functionExpression.typeParameters, isNotNull);
}
- void test_parseUnaryExpression_tilda_normal() {
- createParser('~x');
- PrefixExpression expression = parser.parseUnaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseCompilationUnitMember_function_generic_returnType() {
+ createParser('E f<E>() {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.TILDE);
- expect(expression.operand, isNotNull);
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.returnType, isNotNull);
+ expect(declaration.functionExpression.typeParameters, isNotNull);
}
- void test_parseUnaryExpression_tilda_super() {
- createParser('~super');
- PrefixExpression expression = parser.parseUnaryExpression();
- expectNotNullIfNoErrors(expression);
+ void test_parseCompilationUnitMember_function_generic_void() {
+ createParser('void f<T>(T t) {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.TILDE);
- expect(expression.operand, isNotNull);
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNull);
}
- void test_parseVariableDeclaration_equals() {
- createParser('a = b');
- VariableDeclaration declaration = parser.parseVariableDeclaration();
- expectNotNullIfNoErrors(declaration);
+ void test_parseCompilationUnitMember_function_noType() {
+ createParser('f() {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(declaration.name, isNotNull);
- expect(declaration.equals, isNotNull);
- expect(declaration.initializer, isNotNull);
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNull);
}
- void test_parseVariableDeclaration_noEquals() {
- createParser('a');
- VariableDeclaration declaration = parser.parseVariableDeclaration();
- expectNotNullIfNoErrors(declaration);
+ void test_parseCompilationUnitMember_function_type() {
+ createParser('int f() {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(declaration.name, isNotNull);
- expect(declaration.equals, isNull);
- expect(declaration.initializer, isNull);
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNull);
}
- void test_parseVariableDeclarationListAfterMetadata_const_noType() {
- createParser('const a');
- VariableDeclarationList declarationList =
- parseFullVariableDeclarationList();
- expectNotNullIfNoErrors(declarationList);
+ void test_parseCompilationUnitMember_function_void() {
+ createParser('void f() {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(declarationList.keyword, isNotNull);
- expect(declarationList.type, isNull);
- expect(declarationList.variables, hasLength(1));
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.returnType, isNotNull);
}
- void test_parseVariableDeclarationListAfterMetadata_const_type() {
- createParser('const A a');
- VariableDeclarationList declarationList =
- parseFullVariableDeclarationList();
- expectNotNullIfNoErrors(declarationList);
+ void test_parseCompilationUnitMember_getter_external_noType() {
+ createParser('external get p;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(declarationList.keyword, isNotNull);
- expect(declarationList.type, isNotNull);
- expect(declarationList.variables, hasLength(1));
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.externalKeyword, isNotNull);
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
}
- void test_parseVariableDeclarationListAfterMetadata_final_noType() {
- createParser('final a');
- VariableDeclarationList declarationList =
- parseFullVariableDeclarationList();
- expectNotNullIfNoErrors(declarationList);
+ void test_parseCompilationUnitMember_getter_external_type() {
+ createParser('external int get p;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(declarationList.keyword, isNotNull);
- expect(declarationList.type, isNull);
- expect(declarationList.variables, hasLength(1));
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.externalKeyword, isNotNull);
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
}
- void test_parseVariableDeclarationListAfterMetadata_final_type() {
- createParser('final A a');
- VariableDeclarationList declarationList =
- parseFullVariableDeclarationList();
- expectNotNullIfNoErrors(declarationList);
+ void test_parseCompilationUnitMember_getter_noType() {
+ createParser('get p => 0;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(declarationList.keyword, isNotNull);
- expect(declarationList.type, isNotNull);
- expect(declarationList.variables, hasLength(1));
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
}
- void test_parseVariableDeclarationListAfterMetadata_final_typeComment() {
- enableGenericMethodComments = true;
- createParser('final/*=T*/ x');
- VariableDeclarationList declarationList =
- parseFullVariableDeclarationList();
- expectNotNullIfNoErrors(declarationList);
+ void test_parseCompilationUnitMember_getter_type() {
+ createParser('int get p => 0;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect((declarationList.type as TypeName).name.name, 'T');
- expect(declarationList.isFinal, true);
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
}
- void test_parseVariableDeclarationListAfterMetadata_type_multiple() {
- createParser('A a, b, c');
- VariableDeclarationList declarationList =
- parseFullVariableDeclarationList();
- expectNotNullIfNoErrors(declarationList);
+ void test_parseCompilationUnitMember_setter_external_noType() {
+ createParser('external set p(v);');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(declarationList.keyword, isNull);
- expect(declarationList.type, isNotNull);
- expect(declarationList.variables, hasLength(3));
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.externalKeyword, isNotNull);
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
}
- void test_parseVariableDeclarationListAfterMetadata_type_single() {
- createParser('A a');
- VariableDeclarationList declarationList =
- parseFullVariableDeclarationList();
- expectNotNullIfNoErrors(declarationList);
+ void test_parseCompilationUnitMember_setter_external_type() {
+ createParser('external void set p(int v);');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(declarationList.keyword, isNull);
- expect(declarationList.type, isNotNull);
- expect(declarationList.variables, hasLength(1));
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.externalKeyword, isNotNull);
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
}
- void test_parseVariableDeclarationListAfterMetadata_var_multiple() {
- createParser('var a, b, c');
- VariableDeclarationList declarationList =
- parseFullVariableDeclarationList();
- expectNotNullIfNoErrors(declarationList);
+ void test_parseCompilationUnitMember_setter_noType() {
+ createParser('set p(v) {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(declarationList.keyword, isNotNull);
- expect(declarationList.type, isNull);
- expect(declarationList.variables, hasLength(3));
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
}
- void test_parseVariableDeclarationListAfterMetadata_var_single() {
- createParser('var a');
- VariableDeclarationList declarationList =
- parseFullVariableDeclarationList();
- expectNotNullIfNoErrors(declarationList);
+ void test_parseCompilationUnitMember_setter_type() {
+ createParser('void set p(int v) {}');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(declarationList.keyword, isNotNull);
- expect(declarationList.type, isNull);
- expect(declarationList.variables, hasLength(1));
+ expect(member, new isInstanceOf<FunctionDeclaration>());
+ FunctionDeclaration declaration = member;
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
+ expect(declaration.returnType, isNotNull);
}
- void test_parseVariableDeclarationListAfterMetadata_var_typeComment() {
- enableGenericMethodComments = true;
- createParser('var/*=T*/ x');
- VariableDeclarationList declarationList =
- parseFullVariableDeclarationList();
- expectNotNullIfNoErrors(declarationList);
+ void test_parseCompilationUnitMember_typeAlias_abstract() {
+ createParser('abstract class C = S with M;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect((declarationList.type as TypeName).name.name, 'T');
- expect(declarationList.keyword, isNull);
+ expect(member, new isInstanceOf<ClassTypeAlias>());
+ ClassTypeAlias typeAlias = member;
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name.name, "C");
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.equals, isNotNull);
+ expect(typeAlias.abstractKeyword, isNotNull);
+ expect(typeAlias.superclass.name.name, "S");
+ expect(typeAlias.withClause, isNotNull);
+ expect(typeAlias.implementsClause, isNull);
+ expect(typeAlias.semicolon, isNotNull);
}
- void test_parseVariableDeclarationListAfterType_type() {
- createParser('T a');
- VariableDeclarationList declarationList =
- parseFullVariableDeclarationList();
- expectNotNullIfNoErrors(declarationList);
+ void test_parseCompilationUnitMember_typeAlias_generic() {
+ createParser('class C<E> = S<E> with M<E> implements I<E>;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(declarationList.keyword, isNull);
- expect((declarationList.type as TypeName).name.name, 'T');
- expect(declarationList.variables, hasLength(1));
+ expect(member, new isInstanceOf<ClassTypeAlias>());
+ ClassTypeAlias typeAlias = member;
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name.name, "C");
+ expect(typeAlias.typeParameters.typeParameters, hasLength(1));
+ expect(typeAlias.equals, isNotNull);
+ expect(typeAlias.abstractKeyword, isNull);
+ expect(typeAlias.superclass.name.name, "S");
+ expect(typeAlias.withClause, isNotNull);
+ expect(typeAlias.implementsClause, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
}
- void test_parseVariableDeclarationListAfterType_var() {
- createParser('var a, b, c');
- VariableDeclarationList declarationList =
- parseFullVariableDeclarationList();
- expectNotNullIfNoErrors(declarationList);
+ void test_parseCompilationUnitMember_typeAlias_implements() {
+ createParser('class C = S with M implements I;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(declarationList.keyword.lexeme, 'var');
- expect(declarationList.type, isNull);
- expect(declarationList.variables, hasLength(3));
+ expect(member, new isInstanceOf<ClassTypeAlias>());
+ ClassTypeAlias typeAlias = member;
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name.name, "C");
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.equals, isNotNull);
+ expect(typeAlias.abstractKeyword, isNull);
+ expect(typeAlias.superclass.name.name, "S");
+ expect(typeAlias.withClause, isNotNull);
+ expect(typeAlias.implementsClause, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
}
- void test_parseVariableDeclarationStatementAfterMetadata_multiple() {
- createParser('var x, y, z;');
- VariableDeclarationStatement statement = parser.parseStatement2();
- expectNotNullIfNoErrors(statement);
+ void test_parseCompilationUnitMember_typeAlias_noImplements() {
+ createParser('class C = S with M;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(statement.semicolon, isNotNull);
- VariableDeclarationList variableList = statement.variables;
- expect(variableList, isNotNull);
- expect(variableList.variables, hasLength(3));
+ expect(member, new isInstanceOf<ClassTypeAlias>());
+ ClassTypeAlias typeAlias = member;
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name.name, "C");
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.equals, isNotNull);
+ expect(typeAlias.abstractKeyword, isNull);
+ expect(typeAlias.superclass.name.name, "S");
+ expect(typeAlias.withClause, isNotNull);
+ expect(typeAlias.implementsClause, isNull);
+ expect(typeAlias.semicolon, isNotNull);
}
- void test_parseVariableDeclarationStatementAfterMetadata_single() {
- createParser('var x;');
- VariableDeclarationStatement statement = parser.parseStatement2();
- expectNotNullIfNoErrors(statement);
+ void test_parseCompilationUnitMember_typedef() {
+ createParser('typedef F();');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(statement.semicolon, isNotNull);
- VariableDeclarationList variableList = statement.variables;
- expect(variableList, isNotNull);
- expect(variableList.variables, hasLength(1));
+ expect(member, new isInstanceOf<FunctionTypeAlias>());
+ FunctionTypeAlias typeAlias = member;
+ expect(typeAlias.name.name, "F");
+ expect(typeAlias.parameters.parameters, hasLength(0));
}
- void test_parseWhileStatement() {
- createParser('while (x) {}');
- WhileStatement statement = parser.parseWhileStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseCompilationUnitMember_variable() {
+ createParser('var x = 0;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(statement.whileKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.condition, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
+ expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
+ TopLevelVariableDeclaration declaration = member;
+ expect(declaration.semicolon, isNotNull);
+ expect(declaration.variables, isNotNull);
}
- void test_parseWithClause_multiple() {
- createParser('with A, B, C');
- WithClause clause = parser.parseWithClause();
- expectNotNullIfNoErrors(clause);
+ void test_parseCompilationUnitMember_variableGet() {
+ createParser('String get = null;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(clause.withKeyword, isNotNull);
- expect(clause.mixinTypes, hasLength(3));
+ expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
+ TopLevelVariableDeclaration declaration = member;
+ expect(declaration.semicolon, isNotNull);
+ expect(declaration.variables, isNotNull);
}
- void test_parseWithClause_single() {
- createParser('with M');
- WithClause clause = parser.parseWithClause();
- expectNotNullIfNoErrors(clause);
+ void test_parseCompilationUnitMember_variableSet() {
+ createParser('String set = null;');
+ CompilationUnitMember member = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(member);
listener.assertNoErrors();
- expect(clause.withKeyword, isNotNull);
- expect(clause.mixinTypes, hasLength(1));
+ expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
+ TopLevelVariableDeclaration declaration = member;
+ expect(declaration.semicolon, isNotNull);
+ expect(declaration.variables, isNotNull);
}
- void test_parseYieldStatement_each() {
- createParser('yield* x;');
- YieldStatement statement = parser.parseYieldStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseDirective_export() {
+ createParser("export 'lib/lib.dart';");
+ Directive directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
listener.assertNoErrors();
- expect(statement.yieldKeyword, isNotNull);
- expect(statement.star, isNotNull);
- expect(statement.expression, isNotNull);
- expect(statement.semicolon, isNotNull);
+ expect(directive, new isInstanceOf<ExportDirective>());
+ ExportDirective exportDirective = directive;
+ expect(exportDirective.keyword, isNotNull);
+ expect(exportDirective.uri, isNotNull);
+ expect(exportDirective.combinators, hasLength(0));
+ expect(exportDirective.semicolon, isNotNull);
}
- void test_parseYieldStatement_normal() {
- createParser('yield x;');
- YieldStatement statement = parser.parseYieldStatement();
- expectNotNullIfNoErrors(statement);
+ void test_parseDirective_import() {
+ createParser("import 'lib/lib.dart';");
+ Directive directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
listener.assertNoErrors();
- expect(statement.yieldKeyword, isNotNull);
- expect(statement.star, isNull);
- expect(statement.expression, isNotNull);
- expect(statement.semicolon, isNotNull);
+ expect(directive, new isInstanceOf<ImportDirective>());
+ ImportDirective importDirective = directive;
+ expect(importDirective.keyword, isNotNull);
+ expect(importDirective.uri, isNotNull);
+ expect(importDirective.asKeyword, isNull);
+ expect(importDirective.prefix, isNull);
+ expect(importDirective.combinators, hasLength(0));
+ expect(importDirective.semicolon, isNotNull);
}
- void test_skipPrefixedIdentifier_invalid() {
- createParser('+');
- Token following = parser.skipPrefixedIdentifier(parser.currentToken);
- expect(following, isNull);
+ void test_parseDirective_library() {
+ createParser("library l;");
+ Directive directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive, new isInstanceOf<LibraryDirective>());
+ LibraryDirective libraryDirective = directive;
+ expect(libraryDirective.libraryKeyword, isNotNull);
+ expect(libraryDirective.name, isNotNull);
+ expect(libraryDirective.semicolon, isNotNull);
}
- void test_skipPrefixedIdentifier_notPrefixed() {
- createParser('a +');
- Token following = parser.skipPrefixedIdentifier(parser.currentToken);
- expect(following, isNotNull);
- expect(following.type, TokenType.PLUS);
+ void test_parseDirective_part() {
+ createParser("part 'lib/lib.dart';");
+ Directive directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive, new isInstanceOf<PartDirective>());
+ PartDirective partDirective = directive;
+ expect(partDirective.partKeyword, isNotNull);
+ expect(partDirective.uri, isNotNull);
+ expect(partDirective.semicolon, isNotNull);
}
- void test_skipPrefixedIdentifier_prefixed() {
- createParser('a.b +');
- Token following = parser.skipPrefixedIdentifier(parser.currentToken);
- expect(following, isNotNull);
- expect(following.type, TokenType.PLUS);
- }
-
- void test_skipReturnType_invalid() {
- createParser('+');
- Token following = parser.skipReturnType(parser.currentToken);
- expect(following, isNull);
+ void test_parseDirective_partOf() {
+ createParser("part of l;");
+ Directive directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive, new isInstanceOf<PartOfDirective>());
+ PartOfDirective partOfDirective = directive;
+ expect(partOfDirective.partKeyword, isNotNull);
+ expect(partOfDirective.ofKeyword, isNotNull);
+ expect(partOfDirective.libraryName, isNotNull);
+ expect(partOfDirective.semicolon, isNotNull);
}
- void test_skipReturnType_type() {
- createParser('C +');
- Token following = parser.skipReturnType(parser.currentToken);
- expect(following, isNotNull);
- expect(following.type, TokenType.PLUS);
+ void test_parseDirectives_complete() {
+ CompilationUnit unit =
+ _parseDirectives("#! /bin/dart\nlibrary l;\nclass A {}");
+ expect(unit.scriptTag, isNotNull);
+ expect(unit.directives, hasLength(1));
}
- void test_skipReturnType_void() {
- createParser('void +');
- Token following = parser.skipReturnType(parser.currentToken);
- expect(following, isNotNull);
- expect(following.type, TokenType.PLUS);
+ void test_parseDirectives_empty() {
+ CompilationUnit unit = _parseDirectives("");
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(0));
}
- void test_skipSimpleIdentifier_identifier() {
- createParser('i +');
- Token following = parser.skipSimpleIdentifier(parser.currentToken);
- expect(following, isNotNull);
- expect(following.type, TokenType.PLUS);
+ void test_parseDirectives_mixed() {
+ CompilationUnit unit =
+ _parseDirectives("library l; class A {} part 'foo.dart';");
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(1));
}
- void test_skipSimpleIdentifier_invalid() {
- createParser('9 +');
- Token following = parser.skipSimpleIdentifier(parser.currentToken);
- expect(following, isNull);
+ void test_parseDirectives_multiple() {
+ CompilationUnit unit = _parseDirectives("library l;\npart 'a.dart';");
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(2));
}
- void test_skipSimpleIdentifier_pseudoKeyword() {
- createParser('as +');
- Token following = parser.skipSimpleIdentifier(parser.currentToken);
- expect(following, isNotNull);
- expect(following.type, TokenType.PLUS);
+ void test_parseDirectives_script() {
+ CompilationUnit unit = _parseDirectives("#! /bin/dart");
+ expect(unit.scriptTag, isNotNull);
+ expect(unit.directives, hasLength(0));
}
- void test_skipStringLiteral_adjacent() {
- createParser("'a' 'b' +");
- Token following = parser.skipStringLiteral(parser.currentToken);
- expect(following, isNotNull);
- expect(following.type, TokenType.PLUS);
+ void test_parseDirectives_single() {
+ CompilationUnit unit = _parseDirectives("library l;");
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(1));
}
- void test_skipStringLiteral_interpolated() {
- createParser("'a\${b}c' +");
- Token following = parser.skipStringLiteral(parser.currentToken);
- expect(following, isNotNull);
- expect(following.type, TokenType.PLUS);
+ void test_parseDirectives_topLevelDeclaration() {
+ CompilationUnit unit = _parseDirectives("class A {}");
+ expect(unit.scriptTag, isNull);
+ expect(unit.directives, hasLength(0));
}
- void test_skipStringLiteral_invalid() {
- createParser('a');
- Token following = parser.skipStringLiteral(parser.currentToken);
- expect(following, isNull);
+ void test_parseEnumDeclaration_one() {
+ createParser("enum E {ONE}");
+ EnumDeclaration declaration = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(declaration);
+ listener.assertNoErrors();
+ expect(declaration.documentationComment, isNull);
+ expect(declaration.enumKeyword, isNotNull);
+ expect(declaration.leftBracket, isNotNull);
+ expect(declaration.name, isNotNull);
+ expect(declaration.constants, hasLength(1));
+ expect(declaration.rightBracket, isNotNull);
}
- void test_skipStringLiteral_single() {
- createParser("'a' +");
- Token following = parser.skipStringLiteral(parser.currentToken);
- expect(following, isNotNull);
- expect(following.type, TokenType.PLUS);
+ void test_parseEnumDeclaration_trailingComma() {
+ createParser("enum E {ONE,}");
+ EnumDeclaration declaration = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(declaration);
+ listener.assertNoErrors();
+ expect(declaration.documentationComment, isNull);
+ expect(declaration.enumKeyword, isNotNull);
+ expect(declaration.leftBracket, isNotNull);
+ expect(declaration.name, isNotNull);
+ expect(declaration.constants, hasLength(1));
+ expect(declaration.rightBracket, isNotNull);
}
- void test_skipTypeArgumentList_invalid() {
- createParser('+');
- Token following = parser.skipTypeArgumentList(parser.currentToken);
- expect(following, isNull);
+ void test_parseEnumDeclaration_two() {
+ createParser("enum E {ONE, TWO}");
+ EnumDeclaration declaration = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(declaration);
+ listener.assertNoErrors();
+ expect(declaration.documentationComment, isNull);
+ expect(declaration.enumKeyword, isNotNull);
+ expect(declaration.leftBracket, isNotNull);
+ expect(declaration.name, isNotNull);
+ expect(declaration.constants, hasLength(2));
+ expect(declaration.rightBracket, isNotNull);
}
- void test_skipTypeArgumentList_multiple() {
- createParser('<E, F, G> +');
- Token following = parser.skipTypeArgumentList(parser.currentToken);
- expect(following, isNotNull);
- expect(following.type, TokenType.PLUS);
+ void test_parseExportDirective_configuration_multiple() {
+ createParser("export 'lib/lib.dart' if (a) 'b.dart' if (c) 'd.dart';");
+ ExportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.configurations, hasLength(2));
+ expectDottedName(directive.configurations[0].name, ['a']);
+ expectDottedName(directive.configurations[1].name, ['c']);
+ expect(directive.combinators, hasLength(0));
+ expect(directive.semicolon, isNotNull);
}
- void test_skipTypeArgumentList_single() {
- createParser('<E> +');
- Token following = parser.skipTypeArgumentList(parser.currentToken);
- expect(following, isNotNull);
- expect(following.type, TokenType.PLUS);
+ void test_parseExportDirective_configuration_single() {
+ createParser("export 'lib/lib.dart' if (a.b == 'c.dart') '';");
+ ExportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.configurations, hasLength(1));
+ expectDottedName(directive.configurations[0].name, ['a', 'b']);
+ expect(directive.combinators, hasLength(0));
+ expect(directive.semicolon, isNotNull);
}
- void test_skipTypeName_invalid() {
- createParser('+');
- Token following = parser.skipTypeName(parser.currentToken);
- expect(following, isNull);
+ void test_parseExportDirective_hide() {
+ createParser("export 'lib/lib.dart' hide A, B;");
+ ExportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.combinators, hasLength(1));
+ expect(directive.semicolon, isNotNull);
}
- void test_skipTypeName_parameterized() {
- createParser('C<E<F<G>>> +');
- Token following = parser.skipTypeName(parser.currentToken);
- expect(following, isNotNull);
- expect(following.type, TokenType.PLUS);
+ void test_parseExportDirective_hide_show() {
+ createParser("export 'lib/lib.dart' hide A show B;");
+ ExportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.combinators, hasLength(2));
+ expect(directive.semicolon, isNotNull);
}
- void test_skipTypeName_simple() {
- createParser('C +');
- Token following = parser.skipTypeName(parser.currentToken);
- expect(following, isNotNull);
- expect(following.type, TokenType.PLUS);
+ void test_parseExportDirective_noCombinator() {
+ createParser("export 'lib/lib.dart';");
+ ExportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.combinators, hasLength(0));
+ expect(directive.semicolon, isNotNull);
}
- /**
- * Invoke the method [Parser.computeStringValue] with the given argument.
- *
- * @param lexeme the argument to the method
- * @param first `true` if this is the first token in a string literal
- * @param last `true` if this is the last token in a string literal
- * @return the result of invoking the method
- * @throws Exception if the method could not be invoked or throws an exception
- */
- String _computeStringValue(String lexeme, bool first, bool last) {
- createParser('');
- String value = parser.computeStringValue(lexeme, first, last);
+ void test_parseExportDirective_show() {
+ createParser("export 'lib/lib.dart' show A, B;");
+ ExportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
listener.assertNoErrors();
- return value;
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.combinators, hasLength(1));
+ expect(directive.semicolon, isNotNull);
}
- void _expectCommentText(Comment comment, String expectedText) {
- expect(comment.beginToken, same(comment.endToken));
- expect(comment.beginToken.lexeme, expectedText);
+ void test_parseExportDirective_show_hide() {
+ createParser("export 'lib/lib.dart' show B hide A;");
+ ExportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.combinators, hasLength(2));
+ expect(directive.semicolon, isNotNull);
}
- void _expectDottedName(DottedName name, List<String> expectedComponents) {
- int count = expectedComponents.length;
- NodeList<SimpleIdentifier> components = name.components;
- expect(components, hasLength(count));
- for (int i = 0; i < count; i++) {
- SimpleIdentifier component = components[i];
- expect(component, isNotNull);
- expect(component.name, expectedComponents[i]);
- }
+ void test_parseFunctionDeclaration_function() {
+ createParser('/// Doc\nT f() {}');
+ FunctionDeclaration declaration = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(declaration);
+ listener.assertNoErrors();
+ expectCommentText(declaration.documentationComment, '/// Doc');
+ expect((declaration.returnType as TypeName).name.name, 'T');
+ expect(declaration.name, isNotNull);
+ FunctionExpression expression = declaration.functionExpression;
+ expect(expression, isNotNull);
+ expect(expression.body, isNotNull);
+ expect(expression.typeParameters, isNull);
+ expect(expression.parameters, isNotNull);
+ expect(declaration.propertyKeyword, isNull);
}
- /**
- * Invoke the method [Parser.isFunctionDeclaration] with the parser set to the token
- * stream produced by scanning the given source.
- *
- * @param source the source to be scanned to produce the token stream being tested
- * @return the result of invoking the method
- * @throws Exception if the method could not be invoked or throws an exception
- */
- bool _isFunctionDeclaration(String source) {
- createParser(source);
- bool result = parser.isFunctionDeclaration();
- expectNotNullIfNoErrors(result);
- return result;
+ void test_parseFunctionDeclaration_functionWithTypeParameters() {
+ createParser('/// Doc\nT f<E>() {}');
+ FunctionDeclaration declaration = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(declaration);
+ listener.assertNoErrors();
+ expectCommentText(declaration.documentationComment, '/// Doc');
+ expect((declaration.returnType as TypeName).name.name, 'T');
+ expect(declaration.name, isNotNull);
+ FunctionExpression expression = declaration.functionExpression;
+ expect(expression, isNotNull);
+ expect(expression.body, isNotNull);
+ expect(expression.typeParameters, isNotNull);
+ expect(expression.parameters, isNotNull);
+ expect(declaration.propertyKeyword, isNull);
+ }
+
+ void test_parseFunctionDeclaration_functionWithTypeParameters_comment() {
+ enableGenericMethodComments = true;
+ createParser('/// Doc\nT f/*<E>*/() {}');
+ FunctionDeclaration declaration = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(declaration);
+ listener.assertNoErrors();
+ expectCommentText(declaration.documentationComment, '/// Doc');
+ expect((declaration.returnType as TypeName).name.name, 'T');
+ expect(declaration.name, isNotNull);
+ FunctionExpression expression = declaration.functionExpression;
+ expect(expression, isNotNull);
+ expect(expression.body, isNotNull);
+ expect(expression.typeParameters, isNotNull);
+ expect(expression.parameters, isNotNull);
+ expect(declaration.propertyKeyword, isNull);
+ }
+
+ void test_parseFunctionDeclaration_getter() {
+ createParser('/// Doc\nT get p => 0;');
+ FunctionDeclaration declaration = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(declaration);
+ listener.assertNoErrors();
+ expectCommentText(declaration.documentationComment, '/// Doc');
+ expect((declaration.returnType as TypeName).name.name, 'T');
+ expect(declaration.name, isNotNull);
+ FunctionExpression expression = declaration.functionExpression;
+ expect(expression, isNotNull);
+ expect(expression.body, isNotNull);
+ expect(expression.typeParameters, isNull);
+ expect(expression.parameters, isNull);
+ expect(declaration.propertyKeyword, isNotNull);
+ }
+
+ void test_parseFunctionDeclaration_setter() {
+ createParser('/// Doc\nT set p(v) {}');
+ FunctionDeclaration declaration = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(declaration);
+ listener.assertNoErrors();
+ expectCommentText(declaration.documentationComment, '/// Doc');
+ expect((declaration.returnType as TypeName).name.name, 'T');
+ expect(declaration.name, isNotNull);
+ FunctionExpression expression = declaration.functionExpression;
+ expect(expression, isNotNull);
+ expect(expression.body, isNotNull);
+ expect(expression.typeParameters, isNull);
+ expect(expression.parameters, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
+ }
+
+ @failingTest
+ void test_parseGenericTypeAlias_noTypeParameters() {
+ createParser('F = int Function(int);');
+ GenericTypeAlias alias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(alias);
+ listener.assertNoErrors();
+ expect(alias.name, isNotNull);
+ expect(alias.name.name, 'F');
+ expect(alias.typeParameters, isNull);
+ expect(alias.equals, isNotNull);
+ expect(alias.functionType, isNotNull);
+ expect(alias.semicolon, isNotNull);
+ }
+
+ @failingTest
+ void test_parseGenericTypeAlias_typeParameters() {
+ createParser('F<T> = T Function(T);');
+ GenericTypeAlias alias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(alias);
+ listener.assertNoErrors();
+ expect(alias.name, isNotNull);
+ expect(alias.name.name, 'F');
+ expect(alias.typeParameters, isNotNull);
+ expect(alias.equals, isNotNull);
+ expect(alias.functionType, isNotNull);
+ expect(alias.semicolon, isNotNull);
+ }
+
+ void test_parseImportDirective_configuration_multiple() {
+ createParser("import 'lib/lib.dart' if (a) 'b.dart' if (c) 'd.dart';");
+ ImportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.configurations, hasLength(2));
+ expectDottedName(directive.configurations[0].name, ['a']);
+ expectDottedName(directive.configurations[1].name, ['c']);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNull);
+ expect(directive.prefix, isNull);
+ expect(directive.combinators, hasLength(0));
+ expect(directive.semicolon, isNotNull);
+ }
+
+ void test_parseImportDirective_configuration_single() {
+ createParser("import 'lib/lib.dart' if (a.b == 'c.dart') '';");
+ ImportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.configurations, hasLength(1));
+ expectDottedName(directive.configurations[0].name, ['a', 'b']);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNull);
+ expect(directive.prefix, isNull);
+ expect(directive.combinators, hasLength(0));
+ expect(directive.semicolon, isNotNull);
+ }
+
+ void test_parseImportDirective_deferred() {
+ createParser("import 'lib/lib.dart' deferred as a;");
+ ImportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.deferredKeyword, isNotNull);
+ expect(directive.asKeyword, isNotNull);
+ expect(directive.prefix, isNotNull);
+ expect(directive.combinators, hasLength(0));
+ expect(directive.semicolon, isNotNull);
+ }
+
+ void test_parseImportDirective_hide() {
+ createParser("import 'lib/lib.dart' hide A, B;");
+ ImportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNull);
+ expect(directive.prefix, isNull);
+ expect(directive.combinators, hasLength(1));
+ expect(directive.semicolon, isNotNull);
+ }
+
+ void test_parseImportDirective_noCombinator() {
+ createParser("import 'lib/lib.dart';");
+ ImportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNull);
+ expect(directive.prefix, isNull);
+ expect(directive.combinators, hasLength(0));
+ expect(directive.semicolon, isNotNull);
+ }
+
+ void test_parseImportDirective_prefix() {
+ createParser("import 'lib/lib.dart' as a;");
+ ImportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNotNull);
+ expect(directive.prefix, isNotNull);
+ expect(directive.combinators, hasLength(0));
+ expect(directive.semicolon, isNotNull);
+ }
+
+ void test_parseImportDirective_prefix_hide_show() {
+ createParser("import 'lib/lib.dart' as a hide A show B;");
+ ImportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNotNull);
+ expect(directive.prefix, isNotNull);
+ expect(directive.combinators, hasLength(2));
+ expect(directive.semicolon, isNotNull);
+ }
+
+ void test_parseImportDirective_prefix_show_hide() {
+ createParser("import 'lib/lib.dart' as a show B hide A;");
+ ImportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNotNull);
+ expect(directive.prefix, isNotNull);
+ expect(directive.combinators, hasLength(2));
+ expect(directive.semicolon, isNotNull);
+ }
+
+ void test_parseImportDirective_show() {
+ createParser("import 'lib/lib.dart' show A, B;");
+ ImportDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.keyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNull);
+ expect(directive.prefix, isNull);
+ expect(directive.combinators, hasLength(1));
+ expect(directive.semicolon, isNotNull);
+ }
+
+ void test_parseLibraryDirective() {
+ createParser('library l;');
+ LibraryDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.libraryKeyword, isNotNull);
+ expect(directive.name, isNotNull);
+ expect(directive.semicolon, isNotNull);
+ }
+
+ void test_parsePartDirective() {
+ createParser("part 'lib/lib.dart';");
+ PartDirective directive = parseFullDirective();
+ expectNotNullIfNoErrors(directive);
+ listener.assertNoErrors();
+ expect(directive.partKeyword, isNotNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.semicolon, isNotNull);
+ }
+
+ void test_parsePartOfDirective_name() {
+ enableUriInPartOf = true;
+ createParser("part of l;");
+ PartOfDirective directive = parseFullDirective();
+ expect(directive.partKeyword, isNotNull);
+ expect(directive.ofKeyword, isNotNull);
+ expect(directive.libraryName, isNotNull);
+ expect(directive.uri, isNull);
+ expect(directive.semicolon, isNotNull);
+ }
+
+ void test_parsePartOfDirective_uri() {
+ enableUriInPartOf = true;
+ createParser("part of 'lib.dart';");
+ PartOfDirective directive = parseFullDirective();
+ expect(directive.partKeyword, isNotNull);
+ expect(directive.ofKeyword, isNotNull);
+ expect(directive.libraryName, isNull);
+ expect(directive.uri, isNotNull);
+ expect(directive.semicolon, isNotNull);
+ }
+
+ void test_parseTypeAlias_function_noParameters() {
+ createParser('typedef bool F();');
+ FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.parameters, isNotNull);
+ expect(typeAlias.returnType, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
+ expect(typeAlias.typeParameters, isNull);
+ }
+
+ void test_parseTypeAlias_function_noReturnType() {
+ createParser('typedef F();');
+ FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.parameters, isNotNull);
+ expect(typeAlias.returnType, isNull);
+ expect(typeAlias.semicolon, isNotNull);
+ expect(typeAlias.typeParameters, isNull);
+ }
+
+ void test_parseTypeAlias_function_parameterizedReturnType() {
+ createParser('typedef A<B> F();');
+ FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.parameters, isNotNull);
+ expect(typeAlias.returnType, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
+ expect(typeAlias.typeParameters, isNull);
+ }
+
+ void test_parseTypeAlias_function_parameters() {
+ createParser('typedef bool F(Object value);');
+ FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.parameters, isNotNull);
+ expect(typeAlias.returnType, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
+ expect(typeAlias.typeParameters, isNull);
+ }
+
+ void test_parseTypeAlias_function_typeParameters() {
+ createParser('typedef bool F<E>();');
+ FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.parameters, isNotNull);
+ expect(typeAlias.returnType, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
+ expect(typeAlias.typeParameters, isNotNull);
}
- /**
- * Invoke the method [Parser.isFunctionExpression] with the parser set to the token stream
- * produced by scanning the given source.
- *
- * @param source the source to be scanned to produce the token stream being tested
- * @return the result of invoking the method
- * @throws Exception if the method could not be invoked or throws an exception
- */
- bool _isFunctionExpression(String source) {
- createParser(source);
- return parser.isFunctionExpression(parser.currentToken);
+ void test_parseTypeAlias_function_voidReturnType() {
+ createParser('typedef void F();');
+ FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.parameters, isNotNull);
+ expect(typeAlias.returnType, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
+ expect(typeAlias.typeParameters, isNull);
}
- /**
- * Invoke the method [Parser.isInitializedVariableDeclaration] with the parser set to the
- * token stream produced by scanning the given source.
- *
- * @param source the source to be scanned to produce the token stream being tested
- * @return the result of invoking the method
- * @throws Exception if the method could not be invoked or throws an exception
- */
- bool _isInitializedVariableDeclaration(String source) {
- createParser(source);
- bool result = parser.isInitializedVariableDeclaration();
- expectNotNullIfNoErrors(result);
- return result;
+ @failingTest
+ void test_parseTypeAlias_genericFunction_noParameters() {
+ createParser('typedef F = bool Function();');
+ GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.semicolon, isNotNull);
+ GenericFunctionType functionType = typeAlias.functionType;
+ expect(functionType, isNotNull);
+ expect(functionType.parameters, isNotNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.typeParameters, isNull);
}
- /**
- * Invoke the method [Parser.isSwitchMember] with the parser set to the token stream
- * produced by scanning the given source.
- *
- * @param source the source to be scanned to produce the token stream being tested
- * @return the result of invoking the method
- * @throws Exception if the method could not be invoked or throws an exception
- */
- bool _isSwitchMember(String source) {
- createParser(source);
- bool result = parser.isSwitchMember();
- expectNotNullIfNoErrors(result);
- return result;
+ @failingTest
+ void test_parseTypeAlias_genericFunction_noReturnType() {
+ createParser('typedef F = Function();');
+ GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.semicolon, isNotNull);
+ GenericFunctionType functionType = typeAlias.functionType;
+ expect(functionType, isNotNull);
+ expect(functionType.parameters, isNotNull);
+ expect(functionType.returnType, isNull);
+ expect(functionType.typeParameters, isNull);
+ }
+
+ @failingTest
+ void test_parseTypeAlias_genericFunction_parameterizedReturnType() {
+ createParser('typedef F = A<B> Function();');
+ GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.semicolon, isNotNull);
+ GenericFunctionType functionType = typeAlias.functionType;
+ expect(functionType, isNotNull);
+ expect(functionType.parameters, isNotNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.typeParameters, isNull);
+ }
+
+ @failingTest
+ void test_parseTypeAlias_genericFunction_parameters() {
+ createParser('typedef F = bool Function(Object value);');
+ GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.semicolon, isNotNull);
+ GenericFunctionType functionType = typeAlias.functionType;
+ expect(functionType, isNotNull);
+ expect(functionType.parameters, isNotNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.typeParameters, isNull);
+ }
+
+ @failingTest
+ void test_parseTypeAlias_genericFunction_typeParameters() {
+ createParser('typedef F = bool Function<E>();');
+ GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.semicolon, isNotNull);
+ GenericFunctionType functionType = typeAlias.functionType;
+ expect(functionType, isNotNull);
+ expect(functionType.parameters, isNotNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.typeParameters, isNotNull);
+ }
+
+ @failingTest
+ void test_parseTypeAlias_genericFunction_typeParameters_noParameters() {
+ createParser('typedef F<T> = bool Function();');
+ GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
+ GenericFunctionType functionType = typeAlias.functionType;
+ expect(functionType, isNotNull);
+ expect(functionType.parameters, isNotNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.typeParameters, isNull);
+ }
+
+ @failingTest
+ void test_parseTypeAlias_genericFunction_typeParameters_noReturnType() {
+ createParser('typedef F<T> = Function();');
+ GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
+ GenericFunctionType functionType = typeAlias.functionType;
+ expect(functionType, isNotNull);
+ expect(functionType.parameters, isNotNull);
+ expect(functionType.returnType, isNull);
+ expect(functionType.typeParameters, isNull);
+ }
+
+ @failingTest
+ void
+ test_parseTypeAlias_genericFunction_typeParameters_parameterizedReturnType() {
+ createParser('typedef F<T> = A<B> Function();');
+ GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
+ GenericFunctionType functionType = typeAlias.functionType;
+ expect(functionType, isNotNull);
+ expect(functionType.parameters, isNotNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.typeParameters, isNull);
+ }
+
+ @failingTest
+ void test_parseTypeAlias_genericFunction_typeParameters_parameters() {
+ createParser('typedef F<T> = bool Function(Object value);');
+ GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
+ GenericFunctionType functionType = typeAlias.functionType;
+ expect(functionType, isNotNull);
+ expect(functionType.parameters, isNotNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.typeParameters, isNull);
+ }
+
+ @failingTest
+ void test_parseTypeAlias_genericFunction_typeParameters_typeParameters() {
+ createParser('typedef F<T> = bool Function<E>();');
+ GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
+ GenericFunctionType functionType = typeAlias.functionType;
+ expect(functionType, isNotNull);
+ expect(functionType.parameters, isNotNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.typeParameters, isNotNull);
+ }
+
+ @failingTest
+ void test_parseTypeAlias_genericFunction_typeParameters_voidReturnType() {
+ createParser('typedef F<T> = void Function();');
+ GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
+ GenericFunctionType functionType = typeAlias.functionType;
+ expect(functionType, isNotNull);
+ expect(functionType.parameters, isNotNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.typeParameters, isNull);
+ }
+
+ @failingTest
+ void test_parseTypeAlias_genericFunction_voidReturnType() {
+ createParser('typedef F = void Function();');
+ GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
+ expectNotNullIfNoErrors(typeAlias);
+ listener.assertNoErrors();
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name, isNotNull);
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.semicolon, isNotNull);
+ GenericFunctionType functionType = typeAlias.functionType;
+ expect(functionType, isNotNull);
+ expect(functionType.parameters, isNotNull);
+ expect(functionType.returnType, isNotNull);
+ expect(functionType.typeParameters, isNull);
}
/**
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698