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

Unified Diff: test/browser/runtime_tests.js

Issue 1298893003: Enable is and as checks on non-ground types (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Minor fixes 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: test/browser/runtime_tests.js
diff --git a/test/browser/runtime_tests.js b/test/browser/runtime_tests.js
index c320ca1d9817a5a01994305435634bd38408b5aa..63f9e67ff24adc9e3ed908c70375583b444d206b 100644
--- a/test/browser/runtime_tests.js
+++ b/test/browser/runtime_tests.js
@@ -109,6 +109,7 @@ suite('instanceOf', () => {
let intIsNonNullable = false;
let cast = dart.as;
let instanceOf = dart.is;
+ let strongInstanceOf = dart.strongInstanceOf;
let runtimeType = dart.realRuntimeType;
let functionType = dart.functionType;
let typedef = dart.typedef;
@@ -190,9 +191,15 @@ suite('instanceOf', () => {
let cls8 =
dart.fn((b, s, o) => { return null; }, B, [B, String], {p: Object});
- function checkType(x, type, expectedTrue) {
+ function checkType(x, type, expectedTrue, strongOnly) {
if (expectedTrue === undefined) expectedTrue = true;
- expect(instanceOf(x, type), expectedTrue);
+ if (strongOnly == undefined) strongOnly = false;
+ if (!strongOnly) {
+ expect(instanceOf(x, type), expectedTrue);
+ } else {
+ assert.throws(() => instanceOf(x, type), dart_utils.StrongModeError);
+ expect(strongInstanceOf(x, type), expectedTrue);
+ }
}
test('int', () => {
@@ -258,6 +265,8 @@ suite('instanceOf', () => {
let m3 = new Map();
let m4 = new (collection.HashMap$(dart.dynamic, dart.dynamic))();
let m5 = new collection.LinkedHashMap();
+ let m6 = new (Map$(String, dart.dynamic))();
+
expect(isGroundType(Map), true);
expect(isGroundType(runtimeType(m1)), false);
@@ -285,8 +294,8 @@ suite('instanceOf', () => {
checkType(m1, Map$(Object, Object));
// No contravariance on generics.
- checkType(m2, runtimeType(m1), false);
- checkType(m2, Map$(String, String), false);
+ checkType(m2, runtimeType(m1), false, true);
+ checkType(m2, Map$(String, String), false, true);
// null is! Map
checkType(null, Map, false);
@@ -294,6 +303,26 @@ suite('instanceOf', () => {
// Raw generic types
checkType(m5, Map);
checkType(m4, Map);
+
+ // Is checks
+ assert.throws(() => dart.is(m3, Map$(String, String)),
+ dart_utils.StrongModeError);
+ assert.throws(() => dart.is(m6, Map$(String, String)),
+ dart_utils.StrongModeError);
+ assert.isTrue(dart.is(m1, Map$(String, String)));
+ assert.throws(() => dart.is(m2, Map$(String, String)),
+ dart_utils.StrongModeError);
+
+ // As checks
+ // TODO(vsm): Enable these. We're currently only logging warnings on
+ // StrongModeErrors.
+ // assert.throws(() => dart.as(m3, Map$(String, String)),
+ // dart_utils.StrongModeError);
+ // assert.throws(() => dart.as(m6, Map$(String, String)),
+ // dart_utils.StrongModeError);
+ assert.equal(dart.as(m1, Map$(String, String)), m1);
+ // assert.throws(() => dart.as(m2, Map$(String, String)),
+ // dart_utils.StrongModeError);
});
test('constructors', () => {
@@ -340,20 +369,20 @@ suite('instanceOf', () => {
expect(isGroundType(BB$(String, List)), false);
expect(isGroundType(cctype), true);
expect(isGroundType(CC), true);
- checkType(cc, aatype, false);
- checkType(cc, AA$(String, List), false);
+ checkType(cc, aatype, false, true);
+ checkType(cc, AA$(String, List), false, true);
checkType(cc, bbtype);
checkType(cc, BB$(String, List));
checkType(aa, cctype, false);
checkType(aa, CC, false);
- checkType(aa, bbtype, false);
- checkType(aa, BB$(String, List), false);
+ checkType(aa, bbtype, false, true);
+ checkType(aa, BB$(String, List), false, true);
checkType(bb, cctype, false);
checkType(bb, CC, false);
checkType(aa, aabadtype);
checkType(aa, dynamic);
- checkType(aabad, aatype, false);
- checkType(aabad, AA$(String, List), false);
+ checkType(aabad, aatype, false, true);
+ checkType(aabad, AA$(String, List), false, true);
checkType(aabad, aarawtype);
checkType(aabad, AA);
checkType(aaraw, aabadtype);
@@ -374,11 +403,11 @@ suite('instanceOf', () => {
checkType(s1, c.IterableMixin);
checkType(s1, c.IterableMixin$(String));
- checkType(s1, c.IterableMixin$(int), false);
+ checkType(s1, c.IterableMixin$(int), false, true);
checkType(s1, c.SetMixin);
checkType(s1, c.SetMixin$(String));
- checkType(s1, c.SetMixin$(int), false);
+ checkType(s1, c.SetMixin$(int), false, true);
});
test('Type', () => {
@@ -405,14 +434,14 @@ suite('instanceOf', () => {
expect(isGroundType(Func2), true);
expect(isGroundType(Foo), false);
expect(isGroundType(functionType(B, [B, String])), false);
- checkType(bar1, Foo, false);
- checkType(cls1, Foo, false);
- checkType(bar1, functionType(B, [B, String]), false);
- checkType(cls1, functionType(B, [B, String]), false);
- checkType(bar2, Foo, false);
- checkType(cls2, Foo, false);
- checkType(bar2, functionType(B, [B, String]), false);
- checkType(cls2, functionType(B, [B, String]), false);
+ checkType(bar1, Foo, false, true);
+ checkType(cls1, Foo, false, true);
+ checkType(bar1, functionType(B, [B, String]), false, true);
+ checkType(cls1, functionType(B, [B, String]), false, true);
+ checkType(bar2, Foo, false, true);
+ checkType(cls2, Foo, false, true);
+ checkType(bar2, functionType(B, [B, String]), false, true);
+ checkType(cls2, functionType(B, [B, String]), false, true);
checkType(bar3, Foo);
checkType(cls3, Foo);
checkType(bar3, functionType(B, [B, String]));
@@ -425,10 +454,10 @@ suite('instanceOf', () => {
checkType(cls5, Foo);
checkType(bar5, functionType(B, [B, String]));
checkType(cls5, functionType(B, [B, String]));
- checkType(bar6, Foo, false);
- checkType(cls6, Foo, false);
- checkType(bar6, functionType(B, [B, String]), false);
- checkType(cls6, functionType(B, [B, String]), false);
+ checkType(bar6, Foo, false, true);
+ checkType(cls6, Foo, false, true);
+ checkType(bar6, functionType(B, [B, String]), false, true);
+ checkType(cls6, functionType(B, [B, String]), false, true);
checkType(bar7, Foo);
checkType(cls7, Foo);
checkType(bar7, functionType(B, [B, String]));
@@ -439,18 +468,18 @@ suite('instanceOf', () => {
checkType(cls8, Foo);
checkType(bar8, functionType(B, [B, String]));
checkType(cls8, functionType(B, [B, String]));
- checkType(bar8, runtimeType(bar6), false);
- checkType(cls8, runtimeType(bar6), false);
- checkType(bar7, runtimeType(bar8), false);
- checkType(cls7, runtimeType(bar8), false);
- checkType(bar8, runtimeType(bar7), false);
- checkType(cls8, runtimeType(bar7), false);
+ checkType(bar8, runtimeType(bar6), false, true);
+ checkType(cls8, runtimeType(bar6), false, true);
+ checkType(bar7, runtimeType(bar8), false, true);
+ checkType(cls7, runtimeType(bar8), false, true);
+ checkType(bar8, runtimeType(bar7), false, true);
+ checkType(cls8, runtimeType(bar7), false, true);
// Parameterized typedefs
expect(isGroundType(FuncG), true);
expect(isGroundType(FuncG$(B, String)), false);
- checkType(bar1, FuncG$(B, String), false);
- checkType(cls1, FuncG$(B, String), false);
+ checkType(bar1, FuncG$(B, String), false, true);
+ checkType(cls1, FuncG$(B, String), false, true);
checkType(bar3, FuncG$(B, String));
checkType(cls3, FuncG$(B, String));
});
@@ -585,9 +614,9 @@ suite('instanceOf', () => {
core.int]));
checkType(ii_2i, dart.functionType(core.int, [], [core.int,
core.int]),
- false);
+ false, true);
checkType(ii_2i, dart.functionType(core.int, [core.int],
- {extra: core.int}), false);
+ {extra: core.int}), false, true);
// Named types
function i_i2i(x, opts) {return x};
@@ -595,13 +624,13 @@ suite('instanceOf', () => {
checkType(i_i2i, dart.functionType(core.int, [core.int],
{extra: core.int}));
checkType(i_i2i, dart.functionType(core.int,
- [core.int, core.int]), false);
+ [core.int, core.int]), false, true);
checkType(i_i2i, dart.functionType(core.int, [core.int], {}));
checkType(i_i2i,
dart.functionType(core.int, [], {extra: core.int,
- also: core.int}), false);
+ also: core.int}), false, true);
checkType(i_i2i,
- dart.functionType(core.int, [core.int], [core.int]), false);
+ dart.functionType(core.int, [core.int], [core.int]), false, true);
});
test('Method tearoffs', () => {
@@ -611,7 +640,7 @@ suite('instanceOf', () => {
checkType(dart.bind(map, 'toString'),
dart.functionType(String, []));
checkType(dart.bind(map, 'toString'),
- dart.functionType(int, []), false);
+ dart.functionType(int, []), false, true);
// Tear off of a method directly on the object
let smap = new (c.SplayTreeMap$(core.int, core.String))();
@@ -621,7 +650,7 @@ suite('instanceOf', () => {
checkType(dart.bind(smap, 'forEach'),
dart.functionType(dart.void,
[dart.functionType(dart.void,
- [core.String, core.String])]), false);
+ [core.String, core.String])]), false, true);
// Tear off of a mixed in method
let mapB = new (c.MapBase$(core.int, core.int))();
@@ -631,20 +660,20 @@ suite('instanceOf', () => {
checkType(dart.bind(mapB, 'forEach'),
dart.functionType(dart.void, [
dart.functionType(dart.void, [core.int, core.String])]),
- false);
+ false, true);
// Tear off of a method with a symbol name
let listB = new (c.ListBase$(core.int))();
checkType(dart.bind(listB, dartx.add),
dart.functionType(dart.void, [core.int]));
checkType(dart.bind(listB, dartx.add),
- dart.functionType(dart.void, [core.String]), false);
+ dart.functionType(dart.void, [core.String]), false, true);
// Tear off of a static method
checkType(c.ListBase.listToString,
dart.functionType(core.String, [core.List]));
checkType(c.ListBase.listToString,
- dart.functionType(core.String, [core.String]), false);
+ dart.functionType(core.String, [core.String]), false, true);
// Tear off a mixin method
class Base {
@@ -681,7 +710,7 @@ suite('instanceOf', () => {
var obj = new O();
var m = dart.bind(obj, 'm');
checkType(m, dart.functionType(core.Object, [core.int]));
- checkType(m, dart.functionType(core.int, [core.int]), false);
+ checkType(m, dart.functionType(core.int, [core.int]), false, true);
// Test inherited signatures
class P extends O {
@@ -692,7 +721,7 @@ suite('instanceOf', () => {
var obj = new P();
var m = dart.bind(obj, 'm');
checkType(m, dart.functionType(core.Object, [core.int]));
- checkType(m, dart.functionType(core.int, [core.int]), false);
+ checkType(m, dart.functionType(core.int, [core.int]), false, true);
});
test('Object members', () => {

Powered by Google App Engine
This is Rietveld 408576698