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

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

Side-by-side diff isn't available for this file because of its large size.
Issue 535543003: New analyzer snapshot. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 3 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:
Download patch
« no previous file with comments | « pkg/analyzer/test/generated/parser_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/generated/resolver_test.dart
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 5a0776d8c556d10ae7513020a1221cf3cd76e454..9d5693f687cd2b82d40478f527a44871e7f0747c 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -330,6 +330,48 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
verify([source]);
}
+ void fail_invalidIdentifierInAsync_async() {
+ // TODO(brianwilkerson) Report this error.
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource([
+ "class A {",
+ " m() async {",
+ " int async;",
+ " }",
+ "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.INVALID_IDENTIFIER_IN_ASYNC]);
+ verify([source]);
+ }
+
+ void fail_invalidIdentifierInAsync_await() {
+ // TODO(brianwilkerson) Report this error.
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource([
+ "class A {",
+ " m() async {",
+ " int await;",
+ " }",
+ "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.INVALID_IDENTIFIER_IN_ASYNC]);
+ verify([source]);
+ }
+
+ void fail_invalidIdentifierInAsync_yield() {
+ // TODO(brianwilkerson) Report this error.
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource([
+ "class A {",
+ " m() async {",
+ " int yield;",
+ " }",
+ "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.INVALID_IDENTIFIER_IN_ASYNC]);
+ verify([source]);
+ }
+
void fail_mixinDeclaresConstructor() {
Source source = addSource(EngineTestCase.createSource([
"class A {",
@@ -381,6 +423,42 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
verify([source]);
}
+ void fail_yieldEachInNonGenerator_async() {
+ // TODO(brianwilkerson) We are currently parsing the yield statement as a binary expression.
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f() async {", " yield* 0;", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.YIELD_EACH_IN_NON_GENERATOR]);
+ verify([source]);
+ }
+
+ void fail_yieldEachInNonGenerator_sync() {
+ // TODO(brianwilkerson) We are currently parsing the yield statement as a binary expression.
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f() {", " yield* 0;", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.YIELD_IN_NON_GENERATOR]);
+ verify([source]);
+ }
+
+ void fail_yieldInNonGenerator_async() {
+ // TODO(brianwilkerson) We are currently trying to parse the yield statement as a binary expression.
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f() async {", " yield 0;", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.YIELD_IN_NON_GENERATOR]);
+ verify([source]);
+ }
+
+ void fail_yieldInNonGenerator_sync() {
+ // TODO(brianwilkerson) We are currently trying to parse the yield statement as a binary expression.
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f() {", " yield 0;", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.YIELD_EACH_IN_NON_GENERATOR]);
+ verify([source]);
+ }
+
void test_accessPrivateEnumField() {
AnalysisOptionsImpl analysisOptions = new AnalysisOptionsImpl();
analysisOptions.enableEnum = true;
@@ -406,6 +484,29 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
verify([source]);
}
+ void test_asyncForInWrongContext() {
+ Source source = addSource(EngineTestCase.createSource(["f(list) {", " await for (var e in list) {", " }", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT]);
+ verify([source]);
+ }
+
+ void test_awaitInWrongContext_sync() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f(x) {", " return await x;", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT]);
+ verify([source]);
+ }
+
+ void test_awaitInWrongContext_syncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f(x) sync* {", " yield await x;", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT]);
+ verify([source]);
+ }
+
void test_builtInIdentifierAsMixinName_classTypeAlias() {
Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class as = A with B;"]));
resolve(source);
@@ -2384,6 +2485,78 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
assertErrors(source, [CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS]);
}
+ void test_invalidModifierOnConstructor_async() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["class A {", " A() async {}", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
+ verify([source]);
+ }
+
+ void test_invalidModifierOnConstructor_asyncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["class A {", " A() async* {}", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
+ verify([source]);
+ }
+
+ void test_invalidModifierOnConstructor_syncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["class A {", " A() sync* {}", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
+ verify([source]);
+ }
+
+ void test_invalidModifierOnSetter_member_async() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["class A {", " set x(v) async {}", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER]);
+ verify([source]);
+ }
+
+ void test_invalidModifierOnSetter_member_asyncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["class A {", " set x(v) async* {}", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER]);
+ verify([source]);
+ }
+
+ void test_invalidModifierOnSetter_member_syncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["class A {", " set x(v) sync* {}", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER]);
+ verify([source]);
+ }
+
+ void test_invalidModifierOnSetter_topLevel_async() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["set x(v) async {}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER]);
+ verify([source]);
+ }
+
+ void test_invalidModifierOnSetter_topLevel_asyncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["set x(v) async* {}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER]);
+ verify([source]);
+ }
+
+ void test_invalidModifierOnSetter_topLevel_syncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["set x(v) sync* {}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER]);
+ verify([source]);
+ }
+
void test_invalidReferenceToThis_factoryConstructor() {
Source source = addSource(EngineTestCase.createSource(["class A {", " factory A() { return this; }", "}"]));
resolve(source);
@@ -3759,6 +3932,22 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
verify([source]);
}
+ void test_returnInGenerator_asyncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f() async* {", " return 0;", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.RETURN_IN_GENERATOR]);
+ verify([source]);
+ }
+
+ void test_returnInGenerator_syncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f() sync* {", " return 0;", "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.RETURN_IN_GENERATOR]);
+ verify([source]);
+ }
+
void test_sharedDeferredPrefix() {
resolveWithAndWithoutExperimental(<String> [
EngineTestCase.createSource(["library lib1;", "f1() {}"]),
@@ -4235,6 +4424,18 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
final __test = new CompileTimeErrorCodeTest();
runJUnitTest(__test, __test.test_ambiguousExport);
});
+ _ut.test('test_asyncForInWrongContext', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_asyncForInWrongContext);
+ });
+ _ut.test('test_awaitInWrongContext_sync', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_awaitInWrongContext_sync);
+ });
+ _ut.test('test_awaitInWrongContext_syncStar', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_awaitInWrongContext_syncStar);
+ });
_ut.test('test_builtInIdentifierAsMixinName_classTypeAlias', () {
final __test = new CompileTimeErrorCodeTest();
runJUnitTest(__test, __test.test_builtInIdentifierAsMixinName_classTypeAlias);
@@ -5035,6 +5236,42 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
final __test = new CompileTimeErrorCodeTest();
runJUnitTest(__test, __test.test_invalidFactoryNameNotAClass_notEnclosingClassName);
});
+ _ut.test('test_invalidModifierOnConstructor_async', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_invalidModifierOnConstructor_async);
+ });
+ _ut.test('test_invalidModifierOnConstructor_asyncStar', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_invalidModifierOnConstructor_asyncStar);
+ });
+ _ut.test('test_invalidModifierOnConstructor_syncStar', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_invalidModifierOnConstructor_syncStar);
+ });
+ _ut.test('test_invalidModifierOnSetter_member_async', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_invalidModifierOnSetter_member_async);
+ });
+ _ut.test('test_invalidModifierOnSetter_member_asyncStar', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_invalidModifierOnSetter_member_asyncStar);
+ });
+ _ut.test('test_invalidModifierOnSetter_member_syncStar', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_invalidModifierOnSetter_member_syncStar);
+ });
+ _ut.test('test_invalidModifierOnSetter_topLevel_async', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_invalidModifierOnSetter_topLevel_async);
+ });
+ _ut.test('test_invalidModifierOnSetter_topLevel_asyncStar', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_invalidModifierOnSetter_topLevel_asyncStar);
+ });
+ _ut.test('test_invalidModifierOnSetter_topLevel_syncStar', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_invalidModifierOnSetter_topLevel_syncStar);
+ });
_ut.test('test_invalidReferenceToThis_factoryConstructor', () {
final __test = new CompileTimeErrorCodeTest();
runJUnitTest(__test, __test.test_invalidReferenceToThis_factoryConstructor);
@@ -5611,6 +5848,14 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
final __test = new CompileTimeErrorCodeTest();
runJUnitTest(__test, __test.test_returnInGenerativeConstructor_expressionFunctionBody);
});
+ _ut.test('test_returnInGenerator_asyncStar', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_returnInGenerator_asyncStar);
+ });
+ _ut.test('test_returnInGenerator_syncStar', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_returnInGenerator_syncStar);
+ });
_ut.test('test_sharedDeferredPrefix', () {
final __test = new CompileTimeErrorCodeTest();
runJUnitTest(__test, __test.test_sharedDeferredPrefix);
@@ -10638,6 +10883,46 @@ class NonErrorResolverTest extends ResolverTestCase {
verify([source]);
}
+ void test_asyncForInWrongContext_async() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource([
+ "f(list) async {",
+ " await for (var e in list) {",
+ " }",
+ "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_asyncForInWrongContext_asyncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource([
+ "f(list) async* {",
+ " await for (var e in list) {",
+ " }",
+ "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_awaitInWrongContext_async() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f(x, y) async {", " return await x + await y;", "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_awaitInWrongContext_asyncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f(x, y) async* {", " yield await x + await y;", "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
void test_breakWithoutLabelInSwitch() {
Source source = addSource(EngineTestCase.createSource([
"class A {",
@@ -12148,6 +12433,20 @@ class NonErrorResolverTest extends ResolverTestCase {
verify([source]);
}
+ void test_invalidIdentifierInAsync() {
+ Source source = addSource(EngineTestCase.createSource([
+ "class A {",
+ " m() {",
+ " int async;",
+ " int await;",
+ " int yield;",
+ " }",
+ "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
void test_invalidMethodOverrideNamedParamType() {
Source source = addSource(EngineTestCase.createSource([
"class A {",
@@ -13691,6 +13990,21 @@ class NonErrorResolverTest extends ResolverTestCase {
verify([source]);
}
+ void test_returnInGenerator_async() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f() async {", " return 0;", "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_returnInGenerator_sync() {
+ Source source = addSource(EngineTestCase.createSource(["f() {", " return 0;", "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
void test_returnOfInvalidType_async() {
AnalysisOptionsImpl options = new AnalysisOptionsImpl.con1(analysisContext2.analysisOptions);
options.enableAsync = true;
@@ -14542,6 +14856,38 @@ class NonErrorResolverTest extends ResolverTestCase {
verify([source]);
}
+ void test_yieldEachInNonGenerator_asyncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f() async* {", " yield* 0;", "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_yieldEachInNonGenerator_syncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f() sync* {", " yield* 0;", "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_yieldInNonGenerator_asyncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f() async* {", " yield 0;", "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_yieldInNonGenerator_syncStar() {
+ resetWithAsync();
+ Source source = addSource(EngineTestCase.createSource(["f() sync* {", " yield 0;", "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
void _check_wrongNumberOfParametersForOperator(String name, String parameters) {
Source source = addSource(EngineTestCase.createSource(["class A {", " operator ${name}(${parameters}) {}", "}"]));
resolve(source);
@@ -14624,6 +14970,22 @@ class NonErrorResolverTest extends ResolverTestCase {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_assignmentToFinals_importWithPrefix);
});
+ _ut.test('test_asyncForInWrongContext_async', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_asyncForInWrongContext_async);
+ });
+ _ut.test('test_asyncForInWrongContext_asyncStar', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_asyncForInWrongContext_asyncStar);
+ });
+ _ut.test('test_awaitInWrongContext_async', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_awaitInWrongContext_async);
+ });
+ _ut.test('test_awaitInWrongContext_asyncStar', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_awaitInWrongContext_asyncStar);
+ });
_ut.test('test_breakWithoutLabelInSwitch', () {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_breakWithoutLabelInSwitch);
@@ -15132,6 +15494,10 @@ class NonErrorResolverTest extends ResolverTestCase {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_invalidFactoryNameNotAClass);
});
+ _ut.test('test_invalidIdentifierInAsync', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_invalidIdentifierInAsync);
+ });
_ut.test('test_invalidMethodOverrideNamedParamType', () {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_invalidMethodOverrideNamedParamType);
@@ -15648,6 +16014,14 @@ class NonErrorResolverTest extends ResolverTestCase {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_returnInGenerativeConstructor);
});
+ _ut.test('test_returnInGenerator_async', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_returnInGenerator_async);
+ });
+ _ut.test('test_returnInGenerator_sync', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_returnInGenerator_sync);
+ });
_ut.test('test_returnOfInvalidType_async', () {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_returnOfInvalidType_async);
@@ -15936,6 +16310,22 @@ class NonErrorResolverTest extends ResolverTestCase {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_wrongNumberOfParametersForSetter);
});
+ _ut.test('test_yieldEachInNonGenerator_asyncStar', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_yieldEachInNonGenerator_asyncStar);
+ });
+ _ut.test('test_yieldEachInNonGenerator_syncStar', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_yieldEachInNonGenerator_syncStar);
+ });
+ _ut.test('test_yieldInNonGenerator_asyncStar', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_yieldInNonGenerator_asyncStar);
+ });
+ _ut.test('test_yieldInNonGenerator_syncStar', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_yieldInNonGenerator_syncStar);
+ });
});
}
}
@@ -17463,10 +17853,18 @@ class ResolverTestCase extends EngineTestCase {
}
/**
- * In the rare cases we want to group several tests into single "test_" method, so need a way to
- * reset test instance to reuse it.
+ * Reset the analysis context to have the 'enableAsync' option set to true.
+ */
+ void resetWithAsync() {
+ AnalysisOptionsImpl options = new AnalysisOptionsImpl();
+ options.enableAsync = true;
+ analysisContext2 = AnalysisContextFactory.contextWithCoreAndOptions(options);
+ }
+
+ /**
+ * Reset the analysis context to have the given options applied.
*
- * @param options the analysis options for the context
+ * @param options the analysis options to be applied to the context
*/
void resetWithOptions(AnalysisOptions options) {
analysisContext2 = AnalysisContextFactory.contextWithCoreAndOptions(options);
@@ -18014,6 +18412,140 @@ class SimpleResolverTest extends ResolverTestCase {
_validateArgumentResolution(source, [0, 1, 2, -1]);
}
+ void test_argumentResolution_setter_propagated() {
+ Source source = addSource(EngineTestCase.createSource([
+ "main() {",
+ " var a = new A();",
+ " a.sss = 0;",
+ "}",
+ "class A {",
+ " set sss(x) {}",
+ "}"]));
+ LibraryElement library = resolve(source);
+ CompilationUnitElement unit = library.definingCompilationUnit;
+ // find "a.sss = 0"
+ AssignmentExpression assignment;
+ {
+ FunctionElement mainElement = unit.functions[0];
+ FunctionBody mainBody = mainElement.node.functionExpression.body;
+ Statement statement = (mainBody as BlockFunctionBody).block.statements[1];
+ ExpressionStatement expressionStatement = statement as ExpressionStatement;
+ assignment = expressionStatement.expression as AssignmentExpression;
+ }
+ // get parameter
+ Expression rhs = assignment.rightHandSide;
+ JUnitTestCase.assertNull(rhs.staticParameterElement);
+ ParameterElement parameter = rhs.propagatedParameterElement;
+ JUnitTestCase.assertNotNull(parameter);
+ JUnitTestCase.assertEquals("x", parameter.displayName);
+ // validate
+ ClassElement classA = unit.types[0];
+ PropertyAccessorElement setter = classA.accessors[0];
+ JUnitTestCase.assertSame(parameter, setter.parameters[0]);
+ }
+
+ void test_argumentResolution_setter_propagated_propertyAccess() {
+ Source source = addSource(EngineTestCase.createSource([
+ "main() {",
+ " var a = new A();",
+ " a.b.sss = 0;",
+ "}",
+ "class A {",
+ " B b = new B();",
+ "}",
+ "class B {",
+ " set sss(x) {}",
+ "}"]));
+ LibraryElement library = resolve(source);
+ CompilationUnitElement unit = library.definingCompilationUnit;
+ // find "a.b.sss = 0"
+ AssignmentExpression assignment;
+ {
+ FunctionElement mainElement = unit.functions[0];
+ FunctionBody mainBody = mainElement.node.functionExpression.body;
+ Statement statement = (mainBody as BlockFunctionBody).block.statements[1];
+ ExpressionStatement expressionStatement = statement as ExpressionStatement;
+ assignment = expressionStatement.expression as AssignmentExpression;
+ }
+ // get parameter
+ Expression rhs = assignment.rightHandSide;
+ JUnitTestCase.assertNull(rhs.staticParameterElement);
+ ParameterElement parameter = rhs.propagatedParameterElement;
+ JUnitTestCase.assertNotNull(parameter);
+ JUnitTestCase.assertEquals("x", parameter.displayName);
+ // validate
+ ClassElement classB = unit.types[1];
+ PropertyAccessorElement setter = classB.accessors[0];
+ JUnitTestCase.assertSame(parameter, setter.parameters[0]);
+ }
+
+ void test_argumentResolution_setter_static() {
+ Source source = addSource(EngineTestCase.createSource([
+ "main() {",
+ " A a = new A();",
+ " a.sss = 0;",
+ "}",
+ "class A {",
+ " set sss(x) {}",
+ "}"]));
+ LibraryElement library = resolve(source);
+ CompilationUnitElement unit = library.definingCompilationUnit;
+ // find "a.sss = 0"
+ AssignmentExpression assignment;
+ {
+ FunctionElement mainElement = unit.functions[0];
+ FunctionBody mainBody = mainElement.node.functionExpression.body;
+ Statement statement = (mainBody as BlockFunctionBody).block.statements[1];
+ ExpressionStatement expressionStatement = statement as ExpressionStatement;
+ assignment = expressionStatement.expression as AssignmentExpression;
+ }
+ // get parameter
+ Expression rhs = assignment.rightHandSide;
+ JUnitTestCase.assertNull(rhs.propagatedParameterElement);
+ ParameterElement parameter = rhs.staticParameterElement;
+ JUnitTestCase.assertNotNull(parameter);
+ JUnitTestCase.assertEquals("x", parameter.displayName);
+ // validate
+ ClassElement classA = unit.types[0];
+ PropertyAccessorElement setter = classA.accessors[0];
+ JUnitTestCase.assertSame(parameter, setter.parameters[0]);
+ }
+
+ void test_argumentResolution_setter_static_propertyAccess() {
+ Source source = addSource(EngineTestCase.createSource([
+ "main() {",
+ " A a = new A();",
+ " a.b.sss = 0;",
+ "}",
+ "class A {",
+ " B b = new B();",
+ "}",
+ "class B {",
+ " set sss(x) {}",
+ "}"]));
+ LibraryElement library = resolve(source);
+ CompilationUnitElement unit = library.definingCompilationUnit;
+ // find "a.b.sss = 0"
+ AssignmentExpression assignment;
+ {
+ FunctionElement mainElement = unit.functions[0];
+ FunctionBody mainBody = mainElement.node.functionExpression.body;
+ Statement statement = (mainBody as BlockFunctionBody).block.statements[1];
+ ExpressionStatement expressionStatement = statement as ExpressionStatement;
+ assignment = expressionStatement.expression as AssignmentExpression;
+ }
+ // get parameter
+ Expression rhs = assignment.rightHandSide;
+ JUnitTestCase.assertNull(rhs.propagatedParameterElement);
+ ParameterElement parameter = rhs.staticParameterElement;
+ JUnitTestCase.assertNotNull(parameter);
+ JUnitTestCase.assertEquals("x", parameter.displayName);
+ // validate
+ ClassElement classB = unit.types[1];
+ PropertyAccessorElement setter = classB.accessors[0];
+ JUnitTestCase.assertSame(parameter, setter.parameters[0]);
+ }
+
void test_class_definesCall() {
Source source = addSource(EngineTestCase.createSource([
"class A {",
@@ -18763,6 +19295,22 @@ class SimpleResolverTest extends ResolverTestCase {
final __test = new SimpleResolverTest();
runJUnitTest(__test, __test.test_argumentResolution_required_tooMany);
});
+ _ut.test('test_argumentResolution_setter_propagated', () {
+ final __test = new SimpleResolverTest();
+ runJUnitTest(__test, __test.test_argumentResolution_setter_propagated);
+ });
+ _ut.test('test_argumentResolution_setter_propagated_propertyAccess', () {
+ final __test = new SimpleResolverTest();
+ runJUnitTest(__test, __test.test_argumentResolution_setter_propagated_propertyAccess);
+ });
+ _ut.test('test_argumentResolution_setter_static', () {
+ final __test = new SimpleResolverTest();
+ runJUnitTest(__test, __test.test_argumentResolution_setter_static);
+ });
+ _ut.test('test_argumentResolution_setter_static_propertyAccess', () {
+ final __test = new SimpleResolverTest();
+ runJUnitTest(__test, __test.test_argumentResolution_setter_static_propertyAccess);
+ });
_ut.test('test_class_definesCall', () {
final __test = new SimpleResolverTest();
runJUnitTest(__test, __test.test_class_definesCall);
@@ -27792,6 +28340,47 @@ class TypePropagationTest extends ResolverTestCase {
"}"]), null, typeProvider.intType);
}
+ void test_objectMethodOnDynamicExpression_doubleEquals() {
+ // https://code.google.com/p/dart/issues/detail?id=20342
+ //
+ // This was not actually part of Issue 20342, since the spec specifies a
+ // static type of [bool] for [==] comparison and the implementation
+ // was already consistent with the spec there. But, it's another
+ // [Object] method, so it's included here.
+ _assertTypeOfMarkedExpression(EngineTestCase.createSource([
+ "f1(x) {",
+ " var v = (x == x);",
+ " return v; // marker",
+ "}"]), null, typeProvider.boolType);
+ }
+
+ void test_objectMethodOnDynamicExpression_hashCode() {
+ // https://code.google.com/p/dart/issues/detail?id=20342
+ _assertTypeOfMarkedExpression(EngineTestCase.createSource([
+ "f1(x) {",
+ " var v = x.hashCode;",
+ " return v; // marker",
+ "}"]), null, typeProvider.intType);
+ }
+
+ void test_objectMethodOnDynamicExpression_runtimeType() {
+ // https://code.google.com/p/dart/issues/detail?id=20342
+ _assertTypeOfMarkedExpression(EngineTestCase.createSource([
+ "f1(x) {",
+ " var v = x.runtimeType;",
+ " return v; // marker",
+ "}"]), null, typeProvider.typeType);
+ }
+
+ void test_objectMethodOnDynamicExpression_toString() {
+ // https://code.google.com/p/dart/issues/detail?id=20342
+ _assertTypeOfMarkedExpression(EngineTestCase.createSource([
+ "f1(x) {",
+ " var v = x.toString();",
+ " return v; // marker",
+ "}"]), null, typeProvider.stringType);
+ }
+
void test_propagatedReturnType_function_hasReturnType_returnsNull() {
String code = EngineTestCase.createSource(["String f() => null;", "main() {", " var v = f();", "}"]);
_assertPropagatedReturnType(code, typeProvider.dynamicType, typeProvider.stringType);
@@ -28107,6 +28696,22 @@ class TypePropagationTest extends ResolverTestCase {
final __test = new TypePropagationTest();
runJUnitTest(__test, __test.test_mergePropagatedTypesAtJoinPoint_4);
});
+ _ut.test('test_objectMethodOnDynamicExpression_doubleEquals', () {
+ final __test = new TypePropagationTest();
+ runJUnitTest(__test, __test.test_objectMethodOnDynamicExpression_doubleEquals);
+ });
+ _ut.test('test_objectMethodOnDynamicExpression_hashCode', () {
+ final __test = new TypePropagationTest();
+ runJUnitTest(__test, __test.test_objectMethodOnDynamicExpression_hashCode);
+ });
+ _ut.test('test_objectMethodOnDynamicExpression_runtimeType', () {
+ final __test = new TypePropagationTest();
+ runJUnitTest(__test, __test.test_objectMethodOnDynamicExpression_runtimeType);
+ });
+ _ut.test('test_objectMethodOnDynamicExpression_toString', () {
+ final __test = new TypePropagationTest();
+ runJUnitTest(__test, __test.test_objectMethodOnDynamicExpression_toString);
+ });
_ut.test('test_propagatedReturnType_function_hasReturnType_returnsNull', () {
final __test = new TypePropagationTest();
runJUnitTest(__test, __test.test_propagatedReturnType_function_hasReturnType_returnsNull);
« no previous file with comments | « pkg/analyzer/test/generated/parser_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698