Chromium Code Reviews| OLD | NEW | 
|---|---|
| 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 define(['dart_sdk'], function(dart_sdk) { | 5 define(['dart_sdk'], function(dart_sdk) { | 
| 6 const assert = chai.assert; | 6 const assert = chai.assert; | 
| 7 const async = dart_sdk.async; | 7 const async = dart_sdk.async; | 
| 8 const core = dart_sdk.core; | 8 const core = dart_sdk.core; | 
| 9 const collection = dart_sdk.collection; | 9 const collection = dart_sdk.collection; | 
| 10 const dart = dart_sdk.dart; | 10 const dart = dart_sdk.dart; | 
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 136 let l = dart_sdk._interceptors.JSArray$(core.int).of([1, 2, 3]); | 136 let l = dart_sdk._interceptors.JSArray$(core.int).of([1, 2, 3]); | 
| 137 let s = l[dartx.join](); | 137 let s = l[dartx.join](); | 
| 138 assert.equal(s, '123'); | 138 assert.equal(s, '123'); | 
| 139 }); | 139 }); | 
| 140 }); | 140 }); | 
| 141 | 141 | 
| 142 | 142 | 
| 143 suite('instanceOf', () => { | 143 suite('instanceOf', () => { | 
| 144 "use strict"; | 144 "use strict"; | 
| 145 | 145 | 
| 146 setup(() => { | |
| 147 dart_sdk.dart.failForWeakModeIsChecks(true); | |
| 148 }); | |
| 149 | |
| 150 teardown(() => { | |
| 151 dart_sdk.dart.failForWeakModeIsChecks(false); | |
| 152 }); | |
| 153 | |
| 154 let expect = assert.equal; | 146 let expect = assert.equal; | 
| 155 let isGroundType = dart.isGroundType; | |
| 156 let generic = dart.generic; | 147 let generic = dart.generic; | 
| 157 let intIsNonNullable = false; | 148 let intIsNonNullable = false; | 
| 158 let cast = dart.as; | 149 let cast = dart.as; | 
| 159 let instanceOf = dart.is; | 150 let instanceOf = dart.is; | 
| 160 let strongInstanceOf = dart.strongInstanceOf; | 151 let strongInstanceOf = dart.strongInstanceOf; | 
| 161 let getReifiedType = dart.getReifiedType; | 152 let getReifiedType = dart.getReifiedType; | 
| 162 let fnTypeFuzzy = dart.fnTypeFuzzy; | 153 let fnTypeFuzzy = dart.fnTypeFuzzy; | 
| 163 let typedef = dart.typedef; | 154 let typedef = dart.typedef; | 
| 164 let isSubtype = dart.isSubtype; | 155 let isSubtype = dart.isSubtype; | 
| 165 | 156 | 
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 250 let cls6 = dart.fn((b, s, o) => { return null; }, | 241 let cls6 = dart.fn((b, s, o) => { return null; }, | 
| 251 dart.fnType(B, [B, String, String])); | 242 dart.fnType(B, [B, String, String])); | 
| 252 | 243 | 
| 253 let cls7 = dart.fn((b, s, o) => { return null; }, | 244 let cls7 = dart.fn((b, s, o) => { return null; }, | 
| 254 dart.fnType(B, [B, String], [Object])); | 245 dart.fnType(B, [B, String], [Object])); | 
| 255 | 246 | 
| 256 let cls8 = | 247 let cls8 = | 
| 257 dart.fn((b, s, o) => { return null; }, | 248 dart.fn((b, s, o) => { return null; }, | 
| 258 dart.fnType(B, [B, String], {p: Object})); | 249 dart.fnType(B, [B, String], {p: Object})); | 
| 259 | 250 | 
| 260 function checkType(x, type, expectedTrue, strongOnly) { | 251 function checkType(x, type, expectedTrue, strongOnly) { | 
| 
 
Leaf
2017/08/05 02:24:27
Is strongOnly dead now?
 
Jennifer Messerly
2017/08/07 23:30:53
Done.
 
 | |
| 261 if (expectedTrue === undefined) expectedTrue = true; | 252 if (expectedTrue === undefined) expectedTrue = true; | 
| 262 if (strongOnly === undefined) strongOnly = false; | 253 expect(instanceOf(x, type), expectedTrue, | 
| 263 if (!strongOnly) { | 254 '"' + x + '" ' + | 
| 264 assert.doesNotThrow(() => instanceOf(x, type)); | 255 (expectedTrue ? 'should' : 'should not') + | 
| 265 expect(instanceOf(x, type), expectedTrue, | 256 ' be an instance of "' + dart.typeName(type) + '"'); | 
| 266 '"' + x + '" ' + | |
| 267 (expectedTrue ? 'should' : 'should not') + | |
| 268 ' be an instance of "' + dart.typeName(type) + '"'); | |
| 269 } else { | |
| 270 assert.throws(() => instanceOf(x, type), dart.StrongModeError); | |
| 271 expect(expectedTrue, false); | |
| 272 expect(strongInstanceOf(x, type), null); | |
| 273 } | |
| 274 } | 257 } | 
| 275 | 258 | 
| 276 test('int', () => { | 259 test('int', () => { | 
| 277 expect(isGroundType(int), true); | |
| 278 expect(isGroundType(getReifiedType(5)), true); | |
| 279 | |
| 280 checkType(5, int); | 260 checkType(5, int); | 
| 281 checkType(5, dynamic); | 261 checkType(5, dynamic); | 
| 282 checkType(5, Object); | 262 checkType(5, Object); | 
| 283 checkType(5, num); | 263 checkType(5, num); | 
| 284 | 264 | 
| 285 checkType(5, bool, false); | 265 checkType(5, bool, false); | 
| 286 checkType(5, String, false); | 266 checkType(5, String, false); | 
| 287 | 267 | 
| 288 expect(cast(5, int), 5); | 268 expect(cast(5, int), 5); | 
| 289 if (intIsNonNullable) { | 269 if (intIsNonNullable) { | 
| 290 expect(() => cast(null, int), throws); | 270 expect(() => cast(null, int), throws); | 
| 291 } else { | 271 } else { | 
| 292 expect(cast(null, int), null); | 272 expect(cast(null, int), null); | 
| 293 } | 273 } | 
| 294 }); | 274 }); | 
| 295 | 275 | 
| 296 test('dynamic', () => { | 276 test('dynamic', () => { | 
| 297 expect(isGroundType(dynamic), true); | |
| 298 checkType(new Object.new(), dynamic); | 277 checkType(new Object.new(), dynamic); | 
| 299 checkType(null, dynamic); | 278 checkType(null, dynamic); | 
| 300 | 279 | 
| 301 expect(cast(null, dynamic), null); | 280 expect(cast(null, dynamic), null); | 
| 302 }); | 281 }); | 
| 303 | 282 | 
| 304 test('Object', () => { | 283 test('Object', () => { | 
| 305 expect(isGroundType(Object), true); | |
| 306 checkType(new Object.new(), dynamic); | 284 checkType(new Object.new(), dynamic); | 
| 307 checkType(null, Object); | 285 checkType(null, Object); | 
| 308 | 286 | 
| 309 expect(cast(null, Object), null); | 287 expect(cast(null, Object), null); | 
| 310 }); | 288 }); | 
| 311 | 289 | 
| 312 test('null', () => { | 290 test('null', () => { | 
| 313 // Object, dynamic cases are already handled above. | 291 // Object, dynamic cases are already handled above. | 
| 314 checkType(null, core.Null); | 292 checkType(null, core.Null); | 
| 315 checkType(null, core.String, false); | 293 checkType(null, core.String, false); | 
| 316 checkType(null, core.int, false); | 294 checkType(null, core.int, false); | 
| 317 checkType(null, Map, false); | 295 checkType(null, Map, false); | 
| 318 checkType(void 0, core.Null); | 296 checkType(void 0, core.Null); | 
| 319 checkType(void 0, core.Object); | 297 checkType(void 0, core.Object); | 
| 320 checkType(void 0, dart.dynamic); | 298 checkType(void 0, dart.dynamic); | 
| 321 }); | 299 }); | 
| 322 | 300 | 
| 323 test('String', () => { | 301 test('String', () => { | 
| 324 expect(isGroundType(String), true); | |
| 325 expect(isGroundType(getReifiedType("foo")), true); | |
| 326 checkType("foo", String); | 302 checkType("foo", String); | 
| 327 checkType("foo", Object); | 303 checkType("foo", Object); | 
| 328 checkType("foo", dynamic); | 304 checkType("foo", dynamic); | 
| 329 | 305 | 
| 330 expect(cast(null, String), null); | 306 expect(cast(null, String), null); | 
| 331 }); | 307 }); | 
| 332 | 308 | 
| 333 test('FutureOr', () => { | 309 test('FutureOr', () => { | 
| 334 let FutureOr = async.FutureOr$; | 310 let FutureOr = async.FutureOr$; | 
| 335 | 311 | 
| (...skipping 12 matching lines...) Expand all Loading... | |
| 348 }); | 324 }); | 
| 349 | 325 | 
| 350 test('Map', () => { | 326 test('Map', () => { | 
| 351 let m1 = Map$(String, String).new(); | 327 let m1 = Map$(String, String).new(); | 
| 352 let m2 = Map$(Object, Object).new(); | 328 let m2 = Map$(Object, Object).new(); | 
| 353 let m3 = Map.new(); | 329 let m3 = Map.new(); | 
| 354 let m4 = collection.HashMap$(dart.dynamic, dart.dynamic).new(); | 330 let m4 = collection.HashMap$(dart.dynamic, dart.dynamic).new(); | 
| 355 let m5 = collection.LinkedHashMap.new(); | 331 let m5 = collection.LinkedHashMap.new(); | 
| 356 let m6 = Map$(String, dart.dynamic).new(); | 332 let m6 = Map$(String, dart.dynamic).new(); | 
| 357 | 333 | 
| 358 expect(isGroundType(Map), true); | |
| 359 expect(isGroundType(getReifiedType(m1)), false); | |
| 360 expect(isGroundType(Map$(String, String)), false); | |
| 361 expect(isGroundType(getReifiedType(m2)), true); | |
| 362 expect(isGroundType(Map$(Object, Object)), true); | |
| 363 expect(isGroundType(getReifiedType(m3)), true); | |
| 364 expect(isGroundType(Map), true); | |
| 365 expect(isGroundType(getReifiedType(m4)), true); | |
| 366 expect(isGroundType(collection.HashMap$(dynamic, dynamic)), true); | |
| 367 expect(isGroundType(getReifiedType(m5)), true); | |
| 368 expect(isGroundType(collection.LinkedHashMap), true); | |
| 369 expect(isGroundType(collection.LinkedHashMap), true); | |
| 370 | |
| 371 // Map<T1,T2> <: Map | 334 // Map<T1,T2> <: Map | 
| 372 checkType(m1, Map); | 335 checkType(m1, Map); | 
| 373 checkType(m1, Object); | 336 checkType(m1, Object); | 
| 374 | 337 | 
| 375 // Instance of self | 338 // Instance of self | 
| 376 checkType(m1, getReifiedType(m1)); | 339 checkType(m1, getReifiedType(m1)); | 
| 377 checkType(m1, Map$(String, String)); | 340 checkType(m1, Map$(String, String)); | 
| 378 | 341 | 
| 379 // Covariance on generics | 342 // Covariance on generics | 
| 380 checkType(m1, getReifiedType(m2)); | 343 checkType(m1, getReifiedType(m2)); | 
| 381 checkType(m1, Map$(Object, Object)); | 344 checkType(m1, Map$(Object, Object)); | 
| 382 | 345 | 
| 383 // No contravariance on generics. | 346 // No contravariance on generics. | 
| 384 checkType(m2, getReifiedType(m1), false); | 347 checkType(m2, getReifiedType(m1), false); | 
| 385 checkType(m2, Map$(String, String), false); | 348 checkType(m2, Map$(String, String), false); | 
| 386 | 349 | 
| 387 // null is! Map | 350 // null is! Map | 
| 388 checkType(null, Map, false); | 351 checkType(null, Map, false); | 
| 389 | 352 | 
| 390 // Raw generic types | 353 // Raw generic types | 
| 391 checkType(m5, Map); | 354 checkType(m5, Map); | 
| 392 checkType(m4, Map); | 355 checkType(m4, Map); | 
| 393 | 356 | 
| 394 // Is checks | 357 // Is checks | 
| 395 assert.throws(() => dart.is(m3, Map$(String, String)), | 358 assert.isFalse(dart.is(m3, Map$(String, String))); | 
| 396 dart.StrongModeError); | 359 assert.isFalse(dart.is(m6, Map$(String, String))); | 
| 397 assert.throws(() => dart.is(m6, Map$(String, String)), | |
| 398 dart.StrongModeError); | |
| 399 assert.isTrue(dart.is(m1, Map$(String, String))); | 360 assert.isTrue(dart.is(m1, Map$(String, String))); | 
| 400 assert.isFalse(dart.is(m2, Map$(String, String))); | 361 assert.isFalse(dart.is(m2, Map$(String, String))); | 
| 401 | 362 | 
| 402 // As checks | 363 // As checks | 
| 403 // TODO(vsm): Enable these. We're currently only logging warnings on | 364 // TODO(vsm): Enable these. We're currently only logging warnings on | 
| 404 // StrongModeErrors. | 365 // StrongModeErrors. | 
| 405 // assert.throws(() => dart.as(m3, Map$(String, String)), | 366 // assert.throws(() => dart.as(m3, Map$(String, String)), | 
| 406 // dart.StrongModeError); | 367 // dart.StrongModeError); | 
| 407 // assert.throws(() => dart.as(m6, Map$(String, String)), | 368 // assert.throws(() => dart.as(m6, Map$(String, String)), | 
| 408 // dart.StrongModeError); | 369 // dart.StrongModeError); | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 441 let aatype = getReifiedType(aa); | 402 let aatype = getReifiedType(aa); | 
| 442 let bb = new (BB$(String, List).new)(); | 403 let bb = new (BB$(String, List).new)(); | 
| 443 let bbtype = getReifiedType(bb); | 404 let bbtype = getReifiedType(bb); | 
| 444 let cc = new CC.new(); | 405 let cc = new CC.new(); | 
| 445 let cctype = getReifiedType(cc); | 406 let cctype = getReifiedType(cc); | 
| 446 // We don't allow constructing bad types. | 407 // We don't allow constructing bad types. | 
| 447 // This was AA<String> in Dart (wrong number of type args). | 408 // This was AA<String> in Dart (wrong number of type args). | 
| 448 let aabad = new (AA$(dart.dynamic, dart.dynamic).new)(); | 409 let aabad = new (AA$(dart.dynamic, dart.dynamic).new)(); | 
| 449 let aabadtype = getReifiedType(aabad); | 410 let aabadtype = getReifiedType(aabad); | 
| 450 | 411 | 
| 451 expect(isGroundType(aatype), false); | |
| 452 expect(isGroundType(AA$(String, List)), false); | |
| 453 expect(isGroundType(bbtype), false); | |
| 454 expect(isGroundType(BB$(String, List)), false); | |
| 455 expect(isGroundType(cctype), true); | |
| 456 expect(isGroundType(CC), true); | |
| 457 checkType(cc, aatype, false); | 412 checkType(cc, aatype, false); | 
| 458 checkType(cc, AA$(String, List), false); | 413 checkType(cc, AA$(String, List), false); | 
| 459 checkType(cc, bbtype); | 414 checkType(cc, bbtype); | 
| 460 checkType(cc, BB$(String, List)); | 415 checkType(cc, BB$(String, List)); | 
| 461 checkType(aa, cctype, false); | 416 checkType(aa, cctype, false); | 
| 462 checkType(aa, CC, false); | 417 checkType(aa, CC, false); | 
| 463 checkType(aa, bbtype, false); | 418 checkType(aa, bbtype, false); | 
| 464 checkType(aa, BB$(String, List), false); | 419 checkType(aa, BB$(String, List), false); | 
| 465 checkType(bb, cctype, false); | 420 checkType(bb, cctype, false); | 
| 466 checkType(bb, CC, false); | 421 checkType(bb, CC, false); | 
| 467 checkType(aa, aabadtype); | 422 checkType(aa, aabadtype); | 
| 468 checkType(aa, dynamic); | 423 checkType(aa, dynamic); | 
| 469 checkType(aabad, aatype, false, true); | 424 checkType(aabad, aatype, false); | 
| 470 checkType(aabad, AA$(String, List), false, true); | 425 checkType(aabad, AA$(String, List), false); | 
| 471 checkType(aabad, aarawtype); | 426 checkType(aabad, aarawtype); | 
| 472 checkType(aabad, AA); | 427 checkType(aabad, AA); | 
| 473 checkType(aaraw, aabadtype); | 428 checkType(aaraw, aabadtype); | 
| 474 checkType(aaraw, AA$(dart.dynamic, dart.dynamic)); | 429 checkType(aaraw, AA$(dart.dynamic, dart.dynamic)); | 
| 475 checkType(aaraw, aadynamictype); | 430 checkType(aaraw, aadynamictype); | 
| 476 checkType(aaraw, AA$(dynamic, dynamic)); | 431 checkType(aaraw, AA$(dynamic, dynamic)); | 
| 477 checkType(aadynamic, aarawtype); | 432 checkType(aadynamic, aarawtype); | 
| 478 checkType(aadynamic, AA); | 433 checkType(aadynamic, AA); | 
| 479 }); | 434 }); | 
| 480 | 435 | 
| (...skipping 28 matching lines...) Expand all Loading... | |
| 509 checkType(fnTypeFuzzy(dynamic, [dynamic]), core.Type, true); | 464 checkType(fnTypeFuzzy(dynamic, [dynamic]), core.Type, true); | 
| 510 checkType(core.Type, core.Type, true); | 465 checkType(core.Type, core.Type, true); | 
| 511 | 466 | 
| 512 checkType(3, core.Type, false); | 467 checkType(3, core.Type, false); | 
| 513 checkType("hello", core.Type, false); | 468 checkType("hello", core.Type, false); | 
| 514 }) | 469 }) | 
| 515 | 470 | 
| 516 test('Functions', () => { | 471 test('Functions', () => { | 
| 517 // - return type: Dart is bivariant. We're covariant. | 472 // - return type: Dart is bivariant. We're covariant. | 
| 518 // - param types: Dart is bivariant. We're contravariant. | 473 // - param types: Dart is bivariant. We're contravariant. | 
| 519 expect(isGroundType(Func2), true); | 474 checkType(bar1, Foo, false); | 
| 520 expect(isGroundType(Foo), false); | 475 checkType(cls1, Foo, false); | 
| 521 expect(isGroundType(fnTypeFuzzy(B, [B, String])), false); | 476 checkType(bar1, fnTypeFuzzy(B, [B, String]), false); | 
| 522 checkType(bar1, Foo, false, true); | 477 checkType(cls1, fnTypeFuzzy(B, [B, String]), false); | 
| 523 checkType(cls1, Foo, false, true); | 478 checkType(bar2, Foo, false); | 
| 524 checkType(bar1, fnTypeFuzzy(B, [B, String]), false, true); | 479 checkType(cls2, Foo, false); | 
| 525 checkType(cls1, fnTypeFuzzy(B, [B, String]), false, true); | 480 checkType(bar2, fnTypeFuzzy(B, [B, String]), false); | 
| 526 checkType(bar2, Foo, false, true); | 481 checkType(cls2, fnTypeFuzzy(B, [B, String]), false); | 
| 527 checkType(cls2, Foo, false, true); | |
| 528 checkType(bar2, fnTypeFuzzy(B, [B, String]), false, true); | |
| 529 checkType(cls2, fnTypeFuzzy(B, [B, String]), false, true); | |
| 530 checkType(bar3, Foo); | 482 checkType(bar3, Foo); | 
| 531 checkType(cls3, Foo); | 483 checkType(cls3, Foo); | 
| 532 checkType(bar3, fnTypeFuzzy(B, [B, String])); | 484 checkType(bar3, fnTypeFuzzy(B, [B, String])); | 
| 533 checkType(cls3, fnTypeFuzzy(B, [B, String])); | 485 checkType(cls3, fnTypeFuzzy(B, [B, String])); | 
| 534 checkType(bar4, Foo, true); | 486 checkType(bar4, Foo, true); | 
| 535 checkType(cls4, Foo, true); | 487 checkType(cls4, Foo, true); | 
| 536 checkType(bar4, fnTypeFuzzy(B, [B, String]), true); | 488 checkType(bar4, fnTypeFuzzy(B, [B, String]), true); | 
| 537 checkType(cls4, fnTypeFuzzy(B, [B, String]), true); | 489 checkType(cls4, fnTypeFuzzy(B, [B, String]), true); | 
| 538 checkType(bar5, Foo); | 490 checkType(bar5, Foo); | 
| 539 checkType(cls5, Foo); | 491 checkType(cls5, Foo); | 
| (...skipping 14 matching lines...) Expand all Loading... | |
| 554 checkType(bar8, fnTypeFuzzy(B, [B, String])); | 506 checkType(bar8, fnTypeFuzzy(B, [B, String])); | 
| 555 checkType(cls8, fnTypeFuzzy(B, [B, String])); | 507 checkType(cls8, fnTypeFuzzy(B, [B, String])); | 
| 556 checkType(bar8, getReifiedType(bar6), false); | 508 checkType(bar8, getReifiedType(bar6), false); | 
| 557 checkType(cls8, getReifiedType(bar6), false); | 509 checkType(cls8, getReifiedType(bar6), false); | 
| 558 checkType(bar7, getReifiedType(bar8), false); | 510 checkType(bar7, getReifiedType(bar8), false); | 
| 559 checkType(cls7, getReifiedType(bar8), false); | 511 checkType(cls7, getReifiedType(bar8), false); | 
| 560 checkType(bar8, getReifiedType(bar7), false); | 512 checkType(bar8, getReifiedType(bar7), false); | 
| 561 checkType(cls8, getReifiedType(bar7), false); | 513 checkType(cls8, getReifiedType(bar7), false); | 
| 562 | 514 | 
| 563 // Parameterized typedefs | 515 // Parameterized typedefs | 
| 564 expect(isGroundType(FuncG), true); | 516 checkType(bar1, FuncG$(B, String), false); | 
| 565 expect(isGroundType(FuncG$(B, String)), false); | 517 checkType(cls1, FuncG$(B, String), false); | 
| 566 checkType(bar1, FuncG$(B, String), false, true); | |
| 567 checkType(cls1, FuncG$(B, String), false, true); | |
| 568 checkType(bar3, FuncG$(B, String)); | 518 checkType(bar3, FuncG$(B, String)); | 
| 569 checkType(cls3, FuncG$(B, String)); | 519 checkType(cls3, FuncG$(B, String)); | 
| 570 }); | 520 }); | 
| 571 | 521 | 
| 572 test('dcall', () => { | 522 test('dcall', () => { | 
| 573 function dd2d(x, y) {return x}; | 523 function dd2d(x, y) {return x}; | 
| 574 dart.fn(dd2d); | 524 dart.fn(dd2d); | 
| 575 function ii2i(x, y) {return x}; | 525 function ii2i(x, y) {return x}; | 
| 576 dart.fn(ii2i, dart.fnType(core.int, [core.int, core.int])); | 526 dart.fn(ii2i, dart.fnType(core.int, [core.int, core.int])); | 
| 577 function ii_2i(x, y) {return x}; | 527 function ii_2i(x, y) {return x}; | 
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 801 m: dart.fnType(core.Object, [core.int]), | 751 m: dart.fnType(core.Object, [core.int]), | 
| 802 }) | 752 }) | 
| 803 }); | 753 }); | 
| 804 | 754 | 
| 805 class O extends dart.mixin(Base, M1, M2) {} | 755 class O extends dart.mixin(Base, M1, M2) {} | 
| 806 (O.new = function() {}).prototype = O.prototype; | 756 (O.new = function() {}).prototype = O.prototype; | 
| 807 dart.setSignature(O, {}); | 757 dart.setSignature(O, {}); | 
| 808 var obj = new O.new(); | 758 var obj = new O.new(); | 
| 809 var m = dart.bind(obj, 'm'); | 759 var m = dart.bind(obj, 'm'); | 
| 810 checkType(m, dart.fnTypeFuzzy(core.Object, [core.int])); | 760 checkType(m, dart.fnTypeFuzzy(core.Object, [core.int])); | 
| 811 checkType(m, dart.fnTypeFuzzy(core.int, [core.int]), false, true); | 761 checkType(m, dart.fnTypeFuzzy(core.int, [core.int]), false); | 
| 812 | 762 | 
| 813 // Test inherited signatures | 763 // Test inherited signatures | 
| 814 class P extends O { | 764 class P extends O { | 
| 815 m(x) {return x;}; | 765 m(x) {return x;}; | 
| 816 }; | 766 }; | 
| 817 (P.new = function() {}).prototype = P.prototype; | 767 (P.new = function() {}).prototype = P.prototype; | 
| 818 dart.setSignature(P, {}); | 768 dart.setSignature(P, {}); | 
| 819 var obj = new P.new(); | 769 var obj = new P.new(); | 
| 820 var m = dart.bind(obj, 'm'); | 770 var m = dart.bind(obj, 'm'); | 
| 821 checkType(m, dart.fnTypeFuzzy(core.Object, [core.int])); | 771 checkType(m, dart.fnTypeFuzzy(core.Object, [core.int])); | 
| 822 checkType(m, dart.fnTypeFuzzy(core.int, [core.int]), false, true); | 772 checkType(m, dart.fnTypeFuzzy(core.int, [core.int]), false); | 
| 823 }); | 773 }); | 
| 824 | 774 | 
| 825 test('Object members', () => { | 775 test('Object members', () => { | 
| 826 let nullHash = dart.hashCode(null); | 776 let nullHash = dart.hashCode(null); | 
| 827 assert.equal(nullHash, 0); | 777 assert.equal(nullHash, 0); | 
| 828 let nullString = dart.toString(null); | 778 let nullString = dart.toString(null); | 
| 829 assert.equal(nullString, 'null'); | 779 assert.equal(nullString, 'null'); | 
| 830 | 780 | 
| 831 let map = Map.new(); | 781 let map = Map.new(); | 
| 832 let mapHash = dart.hashCode(map); | 782 let mapHash = dart.hashCode(map); | 
| (...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1292 list[0] = 42; | 1242 list[0] = 42; | 
| 1293 assert.throws(() => list.add(42)); | 1243 assert.throws(() => list.add(42)); | 
| 1294 }); | 1244 }); | 
| 1295 | 1245 | 
| 1296 test('toString on ES Symbol', () => { | 1246 test('toString on ES Symbol', () => { | 
| 1297 let sym = Symbol('_foobar'); | 1247 let sym = Symbol('_foobar'); | 
| 1298 assert.equal(dart.toString(sym), 'Symbol(_foobar)'); | 1248 assert.equal(dart.toString(sym), 'Symbol(_foobar)'); | 
| 1299 }); | 1249 }); | 
| 1300 }); | 1250 }); | 
| 1301 }); | 1251 }); | 
| OLD | NEW |