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 |