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

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

Issue 1314793005: Strong mode local variable inference (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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
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 01b43834457da2ce03815a72b9799b75cee924a0..ccfe9b0278260f348ea7e24a2263051bb75acbe1 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -68,6 +68,7 @@ main() {
runReflectiveTests(SimpleResolverTest);
runReflectiveTests(StrictModeTest);
runReflectiveTests(TypePropagationTest);
+ runReflectiveTests(StrongModeTypePropagationTest);
}
/**
@@ -13551,6 +13552,196 @@ main() {
}
@reflectiveTest
+class StrongModeTypePropagationTest extends TypePropagationTest {
+ void _enterStrongMode() {
+ AnalysisOptionsImpl options = new AnalysisOptionsImpl();
+ options.strongMode = true;
+ resetWithOptions(options);
+ }
+
+ void test_localVariableInference_constant() {
+ _enterStrongMode();
+ String code = r'''
+main() {
+ var v = 3;
+ return v; // marker
+}''';
+ _assertPropagatedReturnType(code, typeProvider.intType, null);
+ _assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+ }
+
+ void test_localVariableInference_transitive_local() {
+ _enterStrongMode();
+ String code = r'''
+main() {
+ var x = 3;
+ var v = x;
+ return v; // marker
+}''';
+ _assertPropagatedReturnType(code, typeProvider.intType, null);
+ _assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+ }
+
+ void test_localVariableInference_transitive_toplevel_lexical() {
+ _enterStrongMode();
+ String code = r'''
+int x = 3;
+main() {
+ var v = x;
+ return v; // marker
+}
+''';
+ _assertPropagatedReturnType(code, typeProvider.intType, null);
+ _assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+ }
+
+ void test_localVariableInference_transitive_toplevel_reversed() {
+ _enterStrongMode();
+ String code = r'''
+main() {
+ var v = x;
+ return v; // marker
+}
+int x = 3;
+''';
+ _assertPropagatedReturnType(code, typeProvider.intType, null);
+ _assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+ }
+
+ void fail_localVariableInference_transitive_toplevel_inferred_lexical() {
+ _enterStrongMode();
+ String code = r'''
+final x = 3;
+main() {
+ var v = x;
+ return v; // marker
+}
+''';
+ _assertPropagatedReturnType(code, typeProvider.intType, null);
+ _assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+ }
+
+ void fail_localVariableInference_transitive_toplevel_inferred_reversed() {
+ _enterStrongMode();
+ String code = r'''
+main() {
+ var v = x;
+ return v; // marker
+}
+final x = 3;
+''';
+ _assertPropagatedReturnType(code, typeProvider.intType, null);
+ _assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+ }
+
+ void test_localVariableInference_transitive_field_lexical() {
+ _enterStrongMode();
+ String code = r'''
+class A {
+ int x = 3;
+ f() {
+ var v = x;
+ return v; // marker
+ }
+}
+main() {
+}
+''';
+ _assertPropagatedReturnType(code, typeProvider.intType, null);
+ _assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+ }
+
+ void test_localVariableInference_transitive_field_reversed() {
+ _enterStrongMode();
+ String code = r'''
+class A {
+ f() {
+ var v = x;
+ return v; // marker
+ }
+ int x = 3;
+}
+main() {
+}
+''';
+ _assertPropagatedReturnType(code, typeProvider.intType, null);
+ _assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+ }
+
+ void fail_localVariableInference_transitive_field_inferred_lexical() {
+ _enterStrongMode();
+ String code = r'''
+class A {
+ final x = 3;
+ f() {
+ var v = x;
+ return v; // marker
+ }
+}
+main() {
+}
+''';
+ _assertPropagatedReturnType(code, typeProvider.intType, null);
+ _assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+ }
+
+ void fail_localVariableInference_transitive_field_inferred_reversed() {
+ _enterStrongMode();
+ String code = r'''
+class A {
+ f() {
+ var v = x;
+ return v; // marker
+ }
+ final x = 3;
+}
+main() {
+}
+''';
+ _assertPropagatedReturnType(code, typeProvider.intType, null);
+ _assertTypeOfMarkedExpression(code, typeProvider.intType, null);
+ }
+
+ void test_localVariableInference_declaredType_disabled() {
+ _enterStrongMode();
+ String code = r'''
+main() {
+ dynamic v = 3;
+ return v; // marker
+}''';
+ _assertPropagatedReturnType(
+ code, typeProvider.dynamicType, typeProvider.intType);
+ _assertTypeOfMarkedExpression(
+ code, typeProvider.dynamicType, typeProvider.intType);
+ }
+
+ void test_localVariableInference_bottom_disabled() {
+ _enterStrongMode();
+ String code = r'''
+main() {
+ var v = null;
+ return v; // marker
+}''';
+ _assertPropagatedReturnType(code, typeProvider.dynamicType, null);
+ _assertTypeOfMarkedExpression(code, typeProvider.dynamicType, null);
+ }
+
+ void test_localVariableInference_noInitializer_disabled() {
+ _enterStrongMode();
+ String code = r'''
+main() {
+ var v;
+ v = 3;
+ return v; // marker
+}''';
+ _assertPropagatedReturnType(
+ code, typeProvider.dynamicType, typeProvider.intType);
+ _assertTypeOfMarkedExpression(
+ code, typeProvider.dynamicType, typeProvider.intType);
+ }
+}
+
+@reflectiveTest
class TypeProviderImplTest extends EngineTestCase {
void test_creation() {
//

Powered by Google App Engine
This is Rietveld 408576698