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 51e49416a3f3ff135984b366eafa3e9cab210d78..8053a55a74d4c9a3691d98d878e7d579d9b81422 100644 |
--- a/pkg/analyzer/test/generated/parser_test.dart |
+++ b/pkg/analyzer/test/generated/parser_test.dart |
@@ -16,7 +16,7 @@ import 'package:analyzer/src/generated/testing/ast_factory.dart'; |
import 'package:analyzer/src/generated/testing/element_factory.dart'; |
import 'package:analyzer/src/generated/testing/token_factory.dart'; |
import 'package:analyzer/src/generated/utilities_dart.dart'; |
-import 'package:unittest/unittest.dart'; |
+import 'package:unittest/unittest.dart' hide Configuration; |
import '../reflective_tests.dart'; |
import '../utils.dart'; |
@@ -2590,6 +2590,12 @@ class ParserTestCase extends EngineTestCase { |
static bool parseFunctionBodies = true; |
/** |
+ * A flag indicating whether conditional directives support should be enabled |
+ * for a specific test. |
+ */ |
+ bool enableConditionalDirectives = false; |
+ |
+ /** |
* A flag indicating whether generic method support should be enabled for a |
* specific test. |
*/ |
@@ -2644,6 +2650,7 @@ class ParserTestCase extends EngineTestCase { |
// Parse the source. |
// |
Parser parser = createParser(listener); |
+ parser.parseConditionalDirectives = enableConditionalDirectives; |
parser.parseGenericMethods = enableGenericMethods; |
parser.parseFunctionBodies = parseFunctionBodies; |
Object result = |
@@ -6887,6 +6894,54 @@ void'''); |
expect(expression.elseExpression, isNotNull); |
} |
+ void test_parseConfiguration_noOperator_dottedIdentifier() { |
+ Configuration configuration = |
+ parse4('parseConfiguration', "if (a.b) 'c.dart'"); |
+ 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.libraryUri, isNotNull); |
+ } |
+ |
+ void test_parseConfiguration_noOperator_simpleIdentifier() { |
+ Configuration configuration = |
+ parse4('parseConfiguration', "if (a) 'b.dart'"); |
+ 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.libraryUri, isNotNull); |
+ } |
+ |
+ void test_parseConfiguration_operator_dottedIdentifier() { |
+ Configuration configuration = |
+ parse4('parseConfiguration', "if (a.b == 'c') 'd.dart'"); |
+ 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.libraryUri, isNotNull); |
+ } |
+ |
+ void test_parseConfiguration_operator_simpleIdentifier() { |
+ Configuration configuration = |
+ parse4('parseConfiguration', "if (a == 'b') 'c.dart'"); |
+ 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.libraryUri, isNotNull); |
+ } |
+ |
void test_parseConstExpression_instanceCreation() { |
InstanceCreationExpression expression = |
parse4("parseConstExpression", "const A()"); |
@@ -7152,6 +7207,16 @@ void'''); |
expect(statement.semicolon, isNotNull); |
} |
+ void test_parseDottedName_multiple() { |
+ DottedName name = parse4("parseDottedName", "a.b.c"); |
+ _expectDottedName(name, ["a", "b", "c"]); |
+ } |
+ |
+ void test_parseDottedName_single() { |
+ DottedName name = parse4("parseDottedName", "a"); |
+ _expectDottedName(name, ["a"]); |
+ } |
+ |
void test_parseEmptyStatement() { |
EmptyStatement statement = parse4("parseEmptyStatement", ";"); |
expect(statement.semicolon, isNotNull); |
@@ -7208,6 +7273,32 @@ void'''); |
expect(expression.rightOperand, isNotNull); |
} |
+ void test_parseExportDirective_configuration_multiple() { |
+ enableConditionalDirectives = true; |
+ ExportDirective directive = parse( |
+ "parseExportDirective", |
+ <Object>[emptyCommentAndMetadata()], |
+ "export 'lib/lib.dart' if (a) 'b.dart' if (c) 'd.dart';"); |
+ expect(directive.keyword, isNotNull); |
+ expect(directive.uri, isNotNull); |
+ // TODO(brianwilkerson) Test the configurations. |
Paul Berry
2015/10/21 17:10:47
I'd recommend resolving these testing TODOs before
Brian Wilkerson
2015/10/21 20:05:23
Done
|
+ expect(directive.combinators, hasLength(0)); |
+ expect(directive.semicolon, isNotNull); |
+ } |
+ |
+ void test_parseExportDirective_configuration_single() { |
+ enableConditionalDirectives = true; |
+ ExportDirective directive = parse( |
+ "parseExportDirective", |
+ <Object>[emptyCommentAndMetadata()], |
+ "export 'lib/lib.dart' if (a.b == 'c.dart') '';"); |
+ expect(directive.keyword, isNotNull); |
+ expect(directive.uri, isNotNull); |
+ // TODO(brianwilkerson) Test the configurations. |
+ expect(directive.combinators, hasLength(0)); |
+ expect(directive.semicolon, isNotNull); |
+ } |
+ |
void test_parseExportDirective_hide() { |
ExportDirective directive = parse( |
"parseExportDirective", |
@@ -8318,6 +8409,38 @@ void'''); |
expect(clause.implementsKeyword, isNotNull); |
} |
+ void test_parseImportDirective_configuration_multiple() { |
+ enableConditionalDirectives = true; |
+ ImportDirective directive = parse( |
+ "parseImportDirective", |
+ <Object>[emptyCommentAndMetadata()], |
+ "import 'lib/lib.dart' if (a) 'b.dart' if (c) 'd.dart';"); |
+ expect(directive.keyword, isNotNull); |
+ expect(directive.uri, isNotNull); |
+ // TODO(brianwilkerson) Test the configurations. |
+ 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() { |
+ enableConditionalDirectives = true; |
+ ImportDirective directive = parse( |
+ "parseImportDirective", |
+ <Object>[emptyCommentAndMetadata()], |
+ "import 'lib/lib.dart' if (a.b == 'c.dart') '';"); |
+ expect(directive.keyword, isNotNull); |
+ expect(directive.uri, isNotNull); |
+ // TODO(brianwilkerson) Test the configurations. |
+ 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() { |
ImportDirective directive = parse( |
"parseImportDirective", |
@@ -10623,6 +10746,17 @@ void'''); |
return invokeParserMethod2("createSyntheticStringLiteral", "", listener); |
} |
+ 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]); |
+ } |
+ } |
+ |
/** |
* Invoke the method [Parser.isFunctionDeclaration] with the parser set to the token |
* stream produced by scanning the given source. |