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

Unified Diff: tests/compiler/dart2js/expect_annotations_test.dart

Issue 875163004: Support [AssumeDynamic] and [TrustTypeAnnotations] in the inferrer. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 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 | « pkg/expect/lib/expect.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/compiler/dart2js/expect_annotations_test.dart
diff --git a/tests/compiler/dart2js/expect_annotations_test.dart b/tests/compiler/dart2js/expect_annotations_test.dart
index ed8889ae13d7f74e6648f88f4fdce57a9097d94e..1c03d8b4426c0588893941e03846c3f982d2211c 100644
--- a/tests/compiler/dart2js/expect_annotations_test.dart
+++ b/tests/compiler/dart2js/expect_annotations_test.dart
@@ -8,6 +8,8 @@ import 'package:async_helper/async_helper.dart';
import 'package:compiler/src/dart2jslib.dart';
import 'package:compiler/src/elements/elements.dart';
import 'package:compiler/src/js_backend/js_backend.dart';
+import 'package:compiler/src/types/types.dart';
+import 'type_mask_test_helper.dart';
import 'memory_compiler.dart';
const Map MEMORY_SOURCE_FILES = const {
@@ -28,12 +30,19 @@ int methodNoInlining(String arg) => arg.length;
@NoInlining() @TrustTypeAnnotations()
int methodNoInliningTrustTypeAnnotations(String arg) => arg.length;
+@AssumeDynamic() @TrustTypeAnnotations()
+int methodAssumeDynamicTrustTypeAnnotations(String arg) => arg.length;
+
+
void main(List<String> args) {
print(method(args[0]));
print(methodAssumeDynamic('foo'));
- print(methodTrustTypeAnnotations(null));
+ print(methodTrustTypeAnnotations(42));
+ print(methodTrustTypeAnnotations("fourtyTwo"));
print(methodNoInlining('bar'));
- print(methodNoInliningTrustTypeAnnotations(null));
+ print(methodNoInliningTrustTypeAnnotations(42));
+ print(methodNoInliningTrustTypeAnnotations("fourtyTwo"));
+ print(methodAssumeDynamicTrustTypeAnnotations(null));
}
"""
};
@@ -50,9 +59,19 @@ main() {
Expect.isNotNull(backend.annotations.expectAssumeDynamicClass,
'AssumeDynamicClass is unresolved.');
+ void testTypeMatch(FunctionElement function, TypeMask expectedType,
+ TypesInferrer inferrer) {
+ for (ParameterElement parameter in function.parameters) {
+ TypeMask type = inferrer.getTypeOfElement(parameter);
+ print("$parameter $type");
Johnni Winther 2015/02/06 10:49:39 Move this to the [reason] (third) argument of Expe
floitsch 2015/02/06 10:54:56 debug print.
herhut 2015/02/06 11:37:53 Acknowledged.
herhut 2015/02/06 11:37:53 Done.
+ Expect.equals(expectedType, simplify(type, compiler));
+ }
+ }
+
void test(String name,
{bool expectNoInlining: false,
bool expectTrustTypeAnnotations: false,
+ TypeMask expectedType: null,
bool expectAssumeDynamic: false}) {
Element method = compiler.mainApp.find(name);
Expect.isNotNull(method);
@@ -68,14 +87,32 @@ main() {
expectAssumeDynamic,
backend.annotations.assumeDynamic(method),
"Unexpected annotation of @AssumeDynamic on '$method'.");
+ TypesInferrer inferrer = compiler.typesTask.typesInferrer;
+ if (expectTrustTypeAnnotations && expectedType != null) {
+ testTypeMatch(method, expectedType, inferrer);
+ } else if (expectAssumeDynamic) {
+ testTypeMatch(method, compiler.typesTask.dynamicType, inferrer);
+ }
}
+ TypeMask stringType = compiler.typesTask.stringType;
Johnni Winther 2015/02/06 10:49:39 Maybe [jsStringType]
herhut 2015/02/06 11:37:53 Done.
+ TypeMask genericStringType = new TypeMask.subtype(compiler.stringClass,
Johnni Winther 2015/02/06 10:49:39 and [coreStringType] ?
herhut 2015/02/06 11:37:52 Done.
+ compiler.world);
+
test('method');
test('methodAssumeDynamic', expectAssumeDynamic: true);
- test('methodTrustTypeAnnotations', expectTrustTypeAnnotations: true);
+ test('methodTrustTypeAnnotations',
+ expectTrustTypeAnnotations: true,
+ expectedType: stringType);
test('methodNoInlining', expectNoInlining: true);
test('methodNoInliningTrustTypeAnnotations',
expectNoInlining: true,
- expectTrustTypeAnnotations: true);
+ expectTrustTypeAnnotations: true,
+ expectedType: stringType);
+ test('methodAssumeDynamicTrustTypeAnnotations',
+ expectAssumeDynamic: true,
+ expectTrustTypeAnnotations: true,
+ expectedType: genericStringType);
+
}));
}
« no previous file with comments | « pkg/expect/lib/expect.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698