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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 var assert = chai.assert; 5 var assert = chai.assert;
6 var core = dart_library.import('dart/core'); 6 var core = dart_library.import('dart/core');
7 var collection = dart_library.import('dart/collection'); 7 var collection = dart_library.import('dart/collection');
8 var dart = dart_library.import('dart_runtime/dart'); 8 var dart = dart_library.import('dart_runtime/dart');
9 var dartx = dart.dartx; 9 var dartx = dart.dartx;
10 10
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 102
103 suite('instanceOf', () => { 103 suite('instanceOf', () => {
104 "use strict"; 104 "use strict";
105 105
106 let expect = assert.equal; 106 let expect = assert.equal;
107 let isGroundType = types.isGroundType; 107 let isGroundType = types.isGroundType;
108 let generic = dart.generic; 108 let generic = dart.generic;
109 let intIsNonNullable = false; 109 let intIsNonNullable = false;
110 let cast = dart.as; 110 let cast = dart.as;
111 let instanceOf = dart.is; 111 let instanceOf = dart.is;
112 let strongInstanceOf = dart.strongInstanceOf;
112 let runtimeType = dart.realRuntimeType; 113 let runtimeType = dart.realRuntimeType;
113 let functionType = dart.functionType; 114 let functionType = dart.functionType;
114 let typedef = dart.typedef; 115 let typedef = dart.typedef;
115 let isSubtype = types.isSubtype; 116 let isSubtype = types.isSubtype;
116 117
117 let Object = core.Object; 118 let Object = core.Object;
118 let String = core.String; 119 let String = core.String;
119 let dynamic = dart.dynamic; 120 let dynamic = dart.dynamic;
120 let List = core.List; 121 let List = core.List;
121 let Map = core.Map; 122 let Map = core.Map;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 184
184 let cls5 = dart.fn((a, o) => { return null; }, C, [A, Object]); 185 let cls5 = dart.fn((a, o) => { return null; }, C, [A, Object]);
185 186
186 let cls6 = dart.fn((b, s, o) => { return null; }, B, [B, String, String]); 187 let cls6 = dart.fn((b, s, o) => { return null; }, B, [B, String, String]);
187 188
188 let cls7 = dart.fn((b, s, o) => { return null; }, B, [B, String], [Object]); 189 let cls7 = dart.fn((b, s, o) => { return null; }, B, [B, String], [Object]);
189 190
190 let cls8 = 191 let cls8 =
191 dart.fn((b, s, o) => { return null; }, B, [B, String], {p: Object}); 192 dart.fn((b, s, o) => { return null; }, B, [B, String], {p: Object});
192 193
193 function checkType(x, type, expectedTrue) { 194 function checkType(x, type, expectedTrue, strongOnly) {
194 if (expectedTrue === undefined) expectedTrue = true; 195 if (expectedTrue === undefined) expectedTrue = true;
195 expect(instanceOf(x, type), expectedTrue); 196 if (strongOnly == undefined) strongOnly = false;
197 if (!strongOnly) {
198 expect(instanceOf(x, type), expectedTrue);
199 } else {
200 assert.throws(() => instanceOf(x, type), dart_utils.StrongModeError);
201 expect(strongInstanceOf(x, type), expectedTrue);
202 }
196 } 203 }
197 204
198 test('int', () => { 205 test('int', () => {
199 expect(isGroundType(int), true); 206 expect(isGroundType(int), true);
200 expect(isGroundType(runtimeType(5)), true); 207 expect(isGroundType(runtimeType(5)), true);
201 208
202 checkType(5, int); 209 checkType(5, int);
203 checkType(5, dynamic); 210 checkType(5, dynamic);
204 checkType(5, Object); 211 checkType(5, Object);
205 checkType(5, num); 212 checkType(5, num);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 258
252 expect(cast(null, String), null); 259 expect(cast(null, String), null);
253 }); 260 });
254 261
255 test('Map', () => { 262 test('Map', () => {
256 let m1 = new (Map$(String, String))(); 263 let m1 = new (Map$(String, String))();
257 let m2 = new (Map$(Object, Object))(); 264 let m2 = new (Map$(Object, Object))();
258 let m3 = new Map(); 265 let m3 = new Map();
259 let m4 = new (collection.HashMap$(dart.dynamic, dart.dynamic))(); 266 let m4 = new (collection.HashMap$(dart.dynamic, dart.dynamic))();
260 let m5 = new collection.LinkedHashMap(); 267 let m5 = new collection.LinkedHashMap();
268 let m6 = new (Map$(String, dart.dynamic))();
269
261 270
262 expect(isGroundType(Map), true); 271 expect(isGroundType(Map), true);
263 expect(isGroundType(runtimeType(m1)), false); 272 expect(isGroundType(runtimeType(m1)), false);
264 expect(isGroundType(Map$(String, String)), false); 273 expect(isGroundType(Map$(String, String)), false);
265 expect(isGroundType(runtimeType(m2)), true); 274 expect(isGroundType(runtimeType(m2)), true);
266 expect(isGroundType(Map$(Object, Object)), true); 275 expect(isGroundType(Map$(Object, Object)), true);
267 expect(isGroundType(runtimeType(m3)), true); 276 expect(isGroundType(runtimeType(m3)), true);
268 expect(isGroundType(Map), true); 277 expect(isGroundType(Map), true);
269 expect(isGroundType(runtimeType(m4)), true); 278 expect(isGroundType(runtimeType(m4)), true);
270 expect(isGroundType(collection.HashMap$(dynamic, dynamic)), true); 279 expect(isGroundType(collection.HashMap$(dynamic, dynamic)), true);
271 expect(isGroundType(runtimeType(m5)), true); 280 expect(isGroundType(runtimeType(m5)), true);
272 expect(isGroundType(collection.LinkedHashMap), true); 281 expect(isGroundType(collection.LinkedHashMap), true);
273 expect(isGroundType(collection.LinkedHashMap), true); 282 expect(isGroundType(collection.LinkedHashMap), true);
274 283
275 // Map<T1,T2> <: Map 284 // Map<T1,T2> <: Map
276 checkType(m1, Map); 285 checkType(m1, Map);
277 checkType(m1, Object); 286 checkType(m1, Object);
278 287
279 // Instance of self 288 // Instance of self
280 checkType(m1, runtimeType(m1)); 289 checkType(m1, runtimeType(m1));
281 checkType(m1, Map$(String, String)); 290 checkType(m1, Map$(String, String));
282 291
283 // Covariance on generics 292 // Covariance on generics
284 checkType(m1, runtimeType(m2)); 293 checkType(m1, runtimeType(m2));
285 checkType(m1, Map$(Object, Object)); 294 checkType(m1, Map$(Object, Object));
286 295
287 // No contravariance on generics. 296 // No contravariance on generics.
288 checkType(m2, runtimeType(m1), false); 297 checkType(m2, runtimeType(m1), false, true);
289 checkType(m2, Map$(String, String), false); 298 checkType(m2, Map$(String, String), false, true);
290 299
291 // null is! Map 300 // null is! Map
292 checkType(null, Map, false); 301 checkType(null, Map, false);
293 302
294 // Raw generic types 303 // Raw generic types
295 checkType(m5, Map); 304 checkType(m5, Map);
296 checkType(m4, Map); 305 checkType(m4, Map);
306
307 // Is checks
308 assert.throws(() => dart.is(m3, Map$(String, String)),
309 dart_utils.StrongModeError);
310 assert.throws(() => dart.is(m6, Map$(String, String)),
311 dart_utils.StrongModeError);
312 assert.isTrue(dart.is(m1, Map$(String, String)));
313 assert.throws(() => dart.is(m2, Map$(String, String)),
314 dart_utils.StrongModeError);
315
316 // As checks
317 // TODO(vsm): Enable these. We're currently only logging warnings on
318 // StrongModeErrors.
319 // assert.throws(() => dart.as(m3, Map$(String, String)),
320 // dart_utils.StrongModeError);
321 // assert.throws(() => dart.as(m6, Map$(String, String)),
322 // dart_utils.StrongModeError);
323 assert.equal(dart.as(m1, Map$(String, String)), m1);
324 // assert.throws(() => dart.as(m2, Map$(String, String)),
325 // dart_utils.StrongModeError);
297 }); 326 });
298 327
299 test('constructors', () => { 328 test('constructors', () => {
300 class C extends core.Object { 329 class C extends core.Object {
301 C(x) {}; 330 C(x) {};
302 named(x, y) {}; 331 named(x, y) {};
303 } 332 }
304 dart.defineNamedConstructor(C, 'named'); 333 dart.defineNamedConstructor(C, 'named');
305 dart.setSignature(C, { 334 dart.setSignature(C, {
306 constructors: () => ({ 335 constructors: () => ({
(...skipping 26 matching lines...) Expand all
333 // This was AA<String> in Dart (wrong number of type args). 362 // This was AA<String> in Dart (wrong number of type args).
334 let aabad = new (AA$(dart.dynamic, dart.dynamic))(); 363 let aabad = new (AA$(dart.dynamic, dart.dynamic))();
335 let aabadtype = runtimeType(aabad); 364 let aabadtype = runtimeType(aabad);
336 365
337 expect(isGroundType(aatype), false); 366 expect(isGroundType(aatype), false);
338 expect(isGroundType(AA$(String, List)), false); 367 expect(isGroundType(AA$(String, List)), false);
339 expect(isGroundType(bbtype), false); 368 expect(isGroundType(bbtype), false);
340 expect(isGroundType(BB$(String, List)), false); 369 expect(isGroundType(BB$(String, List)), false);
341 expect(isGroundType(cctype), true); 370 expect(isGroundType(cctype), true);
342 expect(isGroundType(CC), true); 371 expect(isGroundType(CC), true);
343 checkType(cc, aatype, false); 372 checkType(cc, aatype, false, true);
344 checkType(cc, AA$(String, List), false); 373 checkType(cc, AA$(String, List), false, true);
345 checkType(cc, bbtype); 374 checkType(cc, bbtype);
346 checkType(cc, BB$(String, List)); 375 checkType(cc, BB$(String, List));
347 checkType(aa, cctype, false); 376 checkType(aa, cctype, false);
348 checkType(aa, CC, false); 377 checkType(aa, CC, false);
349 checkType(aa, bbtype, false); 378 checkType(aa, bbtype, false, true);
350 checkType(aa, BB$(String, List), false); 379 checkType(aa, BB$(String, List), false, true);
351 checkType(bb, cctype, false); 380 checkType(bb, cctype, false);
352 checkType(bb, CC, false); 381 checkType(bb, CC, false);
353 checkType(aa, aabadtype); 382 checkType(aa, aabadtype);
354 checkType(aa, dynamic); 383 checkType(aa, dynamic);
355 checkType(aabad, aatype, false); 384 checkType(aabad, aatype, false, true);
356 checkType(aabad, AA$(String, List), false); 385 checkType(aabad, AA$(String, List), false, true);
357 checkType(aabad, aarawtype); 386 checkType(aabad, aarawtype);
358 checkType(aabad, AA); 387 checkType(aabad, AA);
359 checkType(aaraw, aabadtype); 388 checkType(aaraw, aabadtype);
360 checkType(aaraw, AA$(dart.dynamic, dart.dynamic)); 389 checkType(aaraw, AA$(dart.dynamic, dart.dynamic));
361 checkType(aaraw, aadynamictype); 390 checkType(aaraw, aadynamictype);
362 checkType(aaraw, AA$(dynamic, dynamic)); 391 checkType(aaraw, AA$(dynamic, dynamic));
363 checkType(aadynamic, aarawtype); 392 checkType(aadynamic, aarawtype);
364 checkType(aadynamic, AA); 393 checkType(aadynamic, AA);
365 }); 394 });
366 395
367 test('void', () => { 396 test('void', () => {
368 //checkType((x) => x, type((void _(x)) {})); 397 //checkType((x) => x, type((void _(x)) {}));
369 }); 398 });
370 399
371 test('mixins', () => { 400 test('mixins', () => {
372 let c = collection; 401 let c = collection;
373 var s1 = new (c.SplayTreeSet$(String))(); 402 var s1 = new (c.SplayTreeSet$(String))();
374 403
375 checkType(s1, c.IterableMixin); 404 checkType(s1, c.IterableMixin);
376 checkType(s1, c.IterableMixin$(String)); 405 checkType(s1, c.IterableMixin$(String));
377 checkType(s1, c.IterableMixin$(int), false); 406 checkType(s1, c.IterableMixin$(int), false, true);
378 407
379 checkType(s1, c.SetMixin); 408 checkType(s1, c.SetMixin);
380 checkType(s1, c.SetMixin$(String)); 409 checkType(s1, c.SetMixin$(String));
381 checkType(s1, c.SetMixin$(int), false); 410 checkType(s1, c.SetMixin$(int), false, true);
382 }); 411 });
383 412
384 test('Type', () => { 413 test('Type', () => {
385 checkType(int, core.Type, true); 414 checkType(int, core.Type, true);
386 checkType(num, core.Type, true); 415 checkType(num, core.Type, true);
387 checkType(bool, core.Type, true); 416 checkType(bool, core.Type, true);
388 checkType(String, core.Type, true); 417 checkType(String, core.Type, true);
389 checkType(dynamic, core.Type, true); 418 checkType(dynamic, core.Type, true);
390 checkType(Object, core.Type, true); 419 checkType(Object, core.Type, true);
391 checkType(List, core.Type, true); 420 checkType(List, core.Type, true);
392 checkType(Map, core.Type, true); 421 checkType(Map, core.Type, true);
393 checkType(Map$(int, String), core.Type, true); 422 checkType(Map$(int, String), core.Type, true);
394 checkType(Func2, core.Type, true); 423 checkType(Func2, core.Type, true);
395 checkType(functionType(dynamic, [dynamic]), core.Type, true); 424 checkType(functionType(dynamic, [dynamic]), core.Type, true);
396 checkType(core.Type, core.Type, true); 425 checkType(core.Type, core.Type, true);
397 426
398 checkType(3, core.Type, false); 427 checkType(3, core.Type, false);
399 checkType("hello", core.Type, false); 428 checkType("hello", core.Type, false);
400 }) 429 })
401 430
402 test('Functions', () => { 431 test('Functions', () => {
403 // - return type: Dart is bivariant. We're covariant. 432 // - return type: Dart is bivariant. We're covariant.
404 // - param types: Dart is bivariant. We're contravariant. 433 // - param types: Dart is bivariant. We're contravariant.
405 expect(isGroundType(Func2), true); 434 expect(isGroundType(Func2), true);
406 expect(isGroundType(Foo), false); 435 expect(isGroundType(Foo), false);
407 expect(isGroundType(functionType(B, [B, String])), false); 436 expect(isGroundType(functionType(B, [B, String])), false);
408 checkType(bar1, Foo, false); 437 checkType(bar1, Foo, false, true);
409 checkType(cls1, Foo, false); 438 checkType(cls1, Foo, false, true);
410 checkType(bar1, functionType(B, [B, String]), false); 439 checkType(bar1, functionType(B, [B, String]), false, true);
411 checkType(cls1, functionType(B, [B, String]), false); 440 checkType(cls1, functionType(B, [B, String]), false, true);
412 checkType(bar2, Foo, false); 441 checkType(bar2, Foo, false, true);
413 checkType(cls2, Foo, false); 442 checkType(cls2, Foo, false, true);
414 checkType(bar2, functionType(B, [B, String]), false); 443 checkType(bar2, functionType(B, [B, String]), false, true);
415 checkType(cls2, functionType(B, [B, String]), false); 444 checkType(cls2, functionType(B, [B, String]), false, true);
416 checkType(bar3, Foo); 445 checkType(bar3, Foo);
417 checkType(cls3, Foo); 446 checkType(cls3, Foo);
418 checkType(bar3, functionType(B, [B, String])); 447 checkType(bar3, functionType(B, [B, String]));
419 checkType(cls3, functionType(B, [B, String])); 448 checkType(cls3, functionType(B, [B, String]));
420 checkType(bar4, Foo, true); 449 checkType(bar4, Foo, true);
421 checkType(cls4, Foo, true); 450 checkType(cls4, Foo, true);
422 checkType(bar4, functionType(B, [B, String]), true); 451 checkType(bar4, functionType(B, [B, String]), true);
423 checkType(cls4, functionType(B, [B, String]), true); 452 checkType(cls4, functionType(B, [B, String]), true);
424 checkType(bar5, Foo); 453 checkType(bar5, Foo);
425 checkType(cls5, Foo); 454 checkType(cls5, Foo);
426 checkType(bar5, functionType(B, [B, String])); 455 checkType(bar5, functionType(B, [B, String]));
427 checkType(cls5, functionType(B, [B, String])); 456 checkType(cls5, functionType(B, [B, String]));
428 checkType(bar6, Foo, false); 457 checkType(bar6, Foo, false, true);
429 checkType(cls6, Foo, false); 458 checkType(cls6, Foo, false, true);
430 checkType(bar6, functionType(B, [B, String]), false); 459 checkType(bar6, functionType(B, [B, String]), false, true);
431 checkType(cls6, functionType(B, [B, String]), false); 460 checkType(cls6, functionType(B, [B, String]), false, true);
432 checkType(bar7, Foo); 461 checkType(bar7, Foo);
433 checkType(cls7, Foo); 462 checkType(cls7, Foo);
434 checkType(bar7, functionType(B, [B, String])); 463 checkType(bar7, functionType(B, [B, String]));
435 checkType(cls7, functionType(B, [B, String])); 464 checkType(cls7, functionType(B, [B, String]));
436 checkType(bar7, runtimeType(bar6)); 465 checkType(bar7, runtimeType(bar6));
437 checkType(cls7, runtimeType(bar6)); 466 checkType(cls7, runtimeType(bar6));
438 checkType(bar8, Foo); 467 checkType(bar8, Foo);
439 checkType(cls8, Foo); 468 checkType(cls8, Foo);
440 checkType(bar8, functionType(B, [B, String])); 469 checkType(bar8, functionType(B, [B, String]));
441 checkType(cls8, functionType(B, [B, String])); 470 checkType(cls8, functionType(B, [B, String]));
442 checkType(bar8, runtimeType(bar6), false); 471 checkType(bar8, runtimeType(bar6), false, true);
443 checkType(cls8, runtimeType(bar6), false); 472 checkType(cls8, runtimeType(bar6), false, true);
444 checkType(bar7, runtimeType(bar8), false); 473 checkType(bar7, runtimeType(bar8), false, true);
445 checkType(cls7, runtimeType(bar8), false); 474 checkType(cls7, runtimeType(bar8), false, true);
446 checkType(bar8, runtimeType(bar7), false); 475 checkType(bar8, runtimeType(bar7), false, true);
447 checkType(cls8, runtimeType(bar7), false); 476 checkType(cls8, runtimeType(bar7), false, true);
448 477
449 // Parameterized typedefs 478 // Parameterized typedefs
450 expect(isGroundType(FuncG), true); 479 expect(isGroundType(FuncG), true);
451 expect(isGroundType(FuncG$(B, String)), false); 480 expect(isGroundType(FuncG$(B, String)), false);
452 checkType(bar1, FuncG$(B, String), false); 481 checkType(bar1, FuncG$(B, String), false, true);
453 checkType(cls1, FuncG$(B, String), false); 482 checkType(cls1, FuncG$(B, String), false, true);
454 checkType(bar3, FuncG$(B, String)); 483 checkType(bar3, FuncG$(B, String));
455 checkType(cls3, FuncG$(B, String)); 484 checkType(cls3, FuncG$(B, String));
456 }); 485 });
457 486
458 test('dcall', () => { 487 test('dcall', () => {
459 function dd2d(x, y) {return x}; 488 function dd2d(x, y) {return x};
460 dart.fn(dd2d); 489 dart.fn(dd2d);
461 function ii2i(x, y) {return x}; 490 function ii2i(x, y) {return x};
462 dart.fn(ii2i, core.int, [core.int, core.int]); 491 dart.fn(ii2i, core.int, [core.int, core.int]);
463 function ii_2i(x, y) {return x}; 492 function ii_2i(x, y) {return x};
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 607
579 // Optional types 608 // Optional types
580 function ii_2i(x, y) {return x}; 609 function ii_2i(x, y) {return x};
581 dart.fn(ii_2i, core.int, [core.int], [core.int]); 610 dart.fn(ii_2i, core.int, [core.int], [core.int]);
582 checkType(ii_2i, dart.functionType(core.int, [core.int], 611 checkType(ii_2i, dart.functionType(core.int, [core.int],
583 [core.int])); 612 [core.int]));
584 checkType(ii_2i, dart.functionType(core.int, [core.int, 613 checkType(ii_2i, dart.functionType(core.int, [core.int,
585 core.int])); 614 core.int]));
586 checkType(ii_2i, dart.functionType(core.int, [], [core.int, 615 checkType(ii_2i, dart.functionType(core.int, [], [core.int,
587 core.int]), 616 core.int]),
588 false); 617 false, true);
589 checkType(ii_2i, dart.functionType(core.int, [core.int], 618 checkType(ii_2i, dart.functionType(core.int, [core.int],
590 {extra: core.int}), false); 619 {extra: core.int}), false, true);
591 620
592 // Named types 621 // Named types
593 function i_i2i(x, opts) {return x}; 622 function i_i2i(x, opts) {return x};
594 dart.fn(i_i2i, core.int, [core.int], {extra: core.int}); 623 dart.fn(i_i2i, core.int, [core.int], {extra: core.int});
595 checkType(i_i2i, dart.functionType(core.int, [core.int], 624 checkType(i_i2i, dart.functionType(core.int, [core.int],
596 {extra: core.int})); 625 {extra: core.int}));
597 checkType(i_i2i, dart.functionType(core.int, 626 checkType(i_i2i, dart.functionType(core.int,
598 [core.int, core.int]), false); 627 [core.int, core.int]), false, true);
599 checkType(i_i2i, dart.functionType(core.int, [core.int], {})); 628 checkType(i_i2i, dart.functionType(core.int, [core.int], {}));
600 checkType(i_i2i, 629 checkType(i_i2i,
601 dart.functionType(core.int, [], {extra: core.int, 630 dart.functionType(core.int, [], {extra: core.int,
602 also: core.int}), false); 631 also: core.int}), false, true);
603 checkType(i_i2i, 632 checkType(i_i2i,
604 dart.functionType(core.int, [core.int], [core.int]), false); 633 dart.functionType(core.int, [core.int], [core.int]), false, true);
605 }); 634 });
606 635
607 test('Method tearoffs', () => { 636 test('Method tearoffs', () => {
608 let c = collection; 637 let c = collection;
609 // Tear off of an inherited method 638 // Tear off of an inherited method
610 let map = new (Map$(core.int, core.String))(); 639 let map = new (Map$(core.int, core.String))();
611 checkType(dart.bind(map, 'toString'), 640 checkType(dart.bind(map, 'toString'),
612 dart.functionType(String, [])); 641 dart.functionType(String, []));
613 checkType(dart.bind(map, 'toString'), 642 checkType(dart.bind(map, 'toString'),
614 dart.functionType(int, []), false); 643 dart.functionType(int, []), false, true);
615 644
616 // Tear off of a method directly on the object 645 // Tear off of a method directly on the object
617 let smap = new (c.SplayTreeMap$(core.int, core.String))(); 646 let smap = new (c.SplayTreeMap$(core.int, core.String))();
618 checkType(dart.bind(smap, 'forEach'), 647 checkType(dart.bind(smap, 'forEach'),
619 dart.functionType(dart.void, 648 dart.functionType(dart.void,
620 [dart.functionType(dart.void, [core.int, core.String])])); 649 [dart.functionType(dart.void, [core.int, core.String])]));
621 checkType(dart.bind(smap, 'forEach'), 650 checkType(dart.bind(smap, 'forEach'),
622 dart.functionType(dart.void, 651 dart.functionType(dart.void,
623 [dart.functionType(dart.void, 652 [dart.functionType(dart.void,
624 [core.String, core.String])]), false); 653 [core.String, core.String])]), false, true);
625 654
626 // Tear off of a mixed in method 655 // Tear off of a mixed in method
627 let mapB = new (c.MapBase$(core.int, core.int))(); 656 let mapB = new (c.MapBase$(core.int, core.int))();
628 checkType(dart.bind(mapB, 'forEach'), 657 checkType(dart.bind(mapB, 'forEach'),
629 dart.functionType(dart.void, [ 658 dart.functionType(dart.void, [
630 dart.functionType(dart.void, [core.int, core.int])])); 659 dart.functionType(dart.void, [core.int, core.int])]));
631 checkType(dart.bind(mapB, 'forEach'), 660 checkType(dart.bind(mapB, 'forEach'),
632 dart.functionType(dart.void, [ 661 dart.functionType(dart.void, [
633 dart.functionType(dart.void, [core.int, core.String])]), 662 dart.functionType(dart.void, [core.int, core.String])]),
634 false); 663 false, true);
635 664
636 // Tear off of a method with a symbol name 665 // Tear off of a method with a symbol name
637 let listB = new (c.ListBase$(core.int))(); 666 let listB = new (c.ListBase$(core.int))();
638 checkType(dart.bind(listB, dartx.add), 667 checkType(dart.bind(listB, dartx.add),
639 dart.functionType(dart.void, [core.int])); 668 dart.functionType(dart.void, [core.int]));
640 checkType(dart.bind(listB, dartx.add), 669 checkType(dart.bind(listB, dartx.add),
641 dart.functionType(dart.void, [core.String]), false); 670 dart.functionType(dart.void, [core.String]), false, true);
642 671
643 // Tear off of a static method 672 // Tear off of a static method
644 checkType(c.ListBase.listToString, 673 checkType(c.ListBase.listToString,
645 dart.functionType(core.String, [core.List])); 674 dart.functionType(core.String, [core.List]));
646 checkType(c.ListBase.listToString, 675 checkType(c.ListBase.listToString,
647 dart.functionType(core.String, [core.String]), false); 676 dart.functionType(core.String, [core.String]), false, true);
648 677
649 // Tear off a mixin method 678 // Tear off a mixin method
650 class Base { 679 class Base {
651 m(x) {return x;} 680 m(x) {return x;}
652 }; 681 };
653 dart.setSignature(Base, { 682 dart.setSignature(Base, {
654 methods: () => ({ 683 methods: () => ({
655 m: [core.int, [core.int]], 684 m: [core.int, [core.int]],
656 }) 685 })
657 }); 686 });
(...skipping 16 matching lines...) Expand all
674 }) 703 })
675 }); 704 });
676 705
677 class O extends dart.mixin(Base, M1, M2) { 706 class O extends dart.mixin(Base, M1, M2) {
678 O() {}; 707 O() {};
679 }; 708 };
680 dart.setSignature(O, {}); 709 dart.setSignature(O, {});
681 var obj = new O(); 710 var obj = new O();
682 var m = dart.bind(obj, 'm'); 711 var m = dart.bind(obj, 'm');
683 checkType(m, dart.functionType(core.Object, [core.int])); 712 checkType(m, dart.functionType(core.Object, [core.int]));
684 checkType(m, dart.functionType(core.int, [core.int]), false); 713 checkType(m, dart.functionType(core.int, [core.int]), false, true);
685 714
686 // Test inherited signatures 715 // Test inherited signatures
687 class P extends O { 716 class P extends O {
688 P() {}; 717 P() {};
689 m(x) {return x;}; 718 m(x) {return x;};
690 }; 719 };
691 dart.setSignature(P, {}); 720 dart.setSignature(P, {});
692 var obj = new P(); 721 var obj = new P();
693 var m = dart.bind(obj, 'm'); 722 var m = dart.bind(obj, 'm');
694 checkType(m, dart.functionType(core.Object, [core.int])); 723 checkType(m, dart.functionType(core.Object, [core.int]));
695 checkType(m, dart.functionType(core.int, [core.int]), false); 724 checkType(m, dart.functionType(core.int, [core.int]), false, true);
696 }); 725 });
697 726
698 test('Object members', () => { 727 test('Object members', () => {
699 let nullHash = dart.hashCode(null); 728 let nullHash = dart.hashCode(null);
700 assert.equal(nullHash, 0); 729 assert.equal(nullHash, 0);
701 let nullString = dart.toString(null); 730 let nullString = dart.toString(null);
702 assert.equal(nullString, 'null'); 731 assert.equal(nullString, 'null');
703 let nullType = dart.runtimeType(null); 732 let nullType = dart.runtimeType(null);
704 assert.equal(nullType, core.Null); 733 assert.equal(nullType, core.Null);
705 734
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 766
738 suite('primitives', function() { 767 suite('primitives', function() {
739 'use strict'; 768 'use strict';
740 769
741 test('fixed length list', () => { 770 test('fixed length list', () => {
742 let list = new core.List(10); 771 let list = new core.List(10);
743 list[0] = 42; 772 list[0] = 42;
744 assert.throws(() => list.add(42)); 773 assert.throws(() => list.add(42));
745 }); 774 });
746 }); 775 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698