| 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 var assert = chai.assert; | 5 var assert = chai.assert; |
| 6 var dart_sdk = dart_library.import('dart_sdk'); | 6 var dart_sdk = dart_library.import('dart_sdk'); |
| 7 var core = dart_sdk.core; | 7 var core = dart_sdk.core; |
| 8 var collection = dart_sdk.collection; | 8 var collection = dart_sdk.collection; |
| 9 var dart = dart_sdk.dart; | 9 var dart = dart_sdk.dart; |
| 10 var dartx = dart.dartx; | 10 var dartx = dart.dartx; |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 suite('instanceOf', () => { | 112 suite('instanceOf', () => { |
| 113 "use strict"; | 113 "use strict"; |
| 114 | 114 |
| 115 let expect = assert.equal; | 115 let expect = assert.equal; |
| 116 let isGroundType = dart.isGroundType; | 116 let isGroundType = dart.isGroundType; |
| 117 let generic = dart.generic; | 117 let generic = dart.generic; |
| 118 let intIsNonNullable = false; | 118 let intIsNonNullable = false; |
| 119 let cast = dart.as; | 119 let cast = dart.as; |
| 120 let instanceOf = dart.is; | 120 let instanceOf = dart.is; |
| 121 let strongInstanceOf = dart.strongInstanceOf; | 121 let strongInstanceOf = dart.strongInstanceOf; |
| 122 let runtimeType = dart.realRuntimeType; | 122 let getReifiedType = dart.getReifiedType; |
| 123 let functionType = dart.functionType; | 123 let functionType = dart.functionType; |
| 124 let typedef = dart.typedef; | 124 let typedef = dart.typedef; |
| 125 let isSubtype = dart.isSubtype; | 125 let isSubtype = dart.isSubtype; |
| 126 | 126 |
| 127 let Object = core.Object; | 127 let Object = core.Object; |
| 128 let String = core.String; | 128 let String = core.String; |
| 129 let dynamic = dart.dynamic; | 129 let dynamic = dart.dynamic; |
| 130 let List = core.List; | 130 let List = core.List; |
| 131 let Map = core.Map; | 131 let Map = core.Map; |
| 132 let Map$ = core.Map$; | 132 let Map$ = core.Map$; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 if (!strongOnly) { | 206 if (!strongOnly) { |
| 207 expect(instanceOf(x, type), expectedTrue); | 207 expect(instanceOf(x, type), expectedTrue); |
| 208 } else { | 208 } else { |
| 209 assert.throws(() => instanceOf(x, type), dart.StrongModeError); | 209 assert.throws(() => instanceOf(x, type), dart.StrongModeError); |
| 210 expect(strongInstanceOf(x, type), expectedTrue); | 210 expect(strongInstanceOf(x, type), expectedTrue); |
| 211 } | 211 } |
| 212 } | 212 } |
| 213 | 213 |
| 214 test('int', () => { | 214 test('int', () => { |
| 215 expect(isGroundType(int), true); | 215 expect(isGroundType(int), true); |
| 216 expect(isGroundType(runtimeType(5)), true); | 216 expect(isGroundType(getReifiedType(5)), true); |
| 217 | 217 |
| 218 checkType(5, int); | 218 checkType(5, int); |
| 219 checkType(5, dynamic); | 219 checkType(5, dynamic); |
| 220 checkType(5, Object); | 220 checkType(5, Object); |
| 221 checkType(5, num); | 221 checkType(5, num); |
| 222 | 222 |
| 223 checkType(5, bool, false); | 223 checkType(5, bool, false); |
| 224 checkType(5, String, false); | 224 checkType(5, String, false); |
| 225 | 225 |
| 226 expect(cast(5, int), 5); | 226 expect(cast(5, int), 5); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 253 checkType(null, core.String, false); | 253 checkType(null, core.String, false); |
| 254 checkType(null, core.int, false); | 254 checkType(null, core.int, false); |
| 255 checkType(null, Map, false); | 255 checkType(null, Map, false); |
| 256 checkType(void 0, core.Null); | 256 checkType(void 0, core.Null); |
| 257 checkType(void 0, core.Object); | 257 checkType(void 0, core.Object); |
| 258 checkType(void 0, dart.dynamic); | 258 checkType(void 0, dart.dynamic); |
| 259 }); | 259 }); |
| 260 | 260 |
| 261 test('String', () => { | 261 test('String', () => { |
| 262 expect(isGroundType(String), true); | 262 expect(isGroundType(String), true); |
| 263 expect(isGroundType(runtimeType("foo")), true); | 263 expect(isGroundType(getReifiedType("foo")), true); |
| 264 checkType("foo", String); | 264 checkType("foo", String); |
| 265 checkType("foo", Object); | 265 checkType("foo", Object); |
| 266 checkType("foo", dynamic); | 266 checkType("foo", dynamic); |
| 267 | 267 |
| 268 expect(cast(null, String), null); | 268 expect(cast(null, String), null); |
| 269 }); | 269 }); |
| 270 | 270 |
| 271 test('Map', () => { | 271 test('Map', () => { |
| 272 let m1 = new (Map$(String, String))(); | 272 let m1 = new (Map$(String, String))(); |
| 273 let m2 = new (Map$(Object, Object))(); | 273 let m2 = new (Map$(Object, Object))(); |
| 274 let m3 = new Map(); | 274 let m3 = new Map(); |
| 275 let m4 = new (collection.HashMap$(dart.dynamic, dart.dynamic))(); | 275 let m4 = new (collection.HashMap$(dart.dynamic, dart.dynamic))(); |
| 276 let m5 = new collection.LinkedHashMap(); | 276 let m5 = new collection.LinkedHashMap(); |
| 277 let m6 = new (Map$(String, dart.dynamic))(); | 277 let m6 = new (Map$(String, dart.dynamic))(); |
| 278 | 278 |
| 279 | 279 |
| 280 expect(isGroundType(Map), true); | 280 expect(isGroundType(Map), true); |
| 281 expect(isGroundType(runtimeType(m1)), false); | 281 expect(isGroundType(getReifiedType(m1)), false); |
| 282 expect(isGroundType(Map$(String, String)), false); | 282 expect(isGroundType(Map$(String, String)), false); |
| 283 expect(isGroundType(runtimeType(m2)), true); | 283 expect(isGroundType(getReifiedType(m2)), true); |
| 284 expect(isGroundType(Map$(Object, Object)), true); | 284 expect(isGroundType(Map$(Object, Object)), true); |
| 285 expect(isGroundType(runtimeType(m3)), true); | 285 expect(isGroundType(getReifiedType(m3)), true); |
| 286 expect(isGroundType(Map), true); | 286 expect(isGroundType(Map), true); |
| 287 expect(isGroundType(runtimeType(m4)), true); | 287 expect(isGroundType(getReifiedType(m4)), true); |
| 288 expect(isGroundType(collection.HashMap$(dynamic, dynamic)), true); | 288 expect(isGroundType(collection.HashMap$(dynamic, dynamic)), true); |
| 289 expect(isGroundType(runtimeType(m5)), true); | 289 expect(isGroundType(getReifiedType(m5)), true); |
| 290 expect(isGroundType(collection.LinkedHashMap), true); | 290 expect(isGroundType(collection.LinkedHashMap), true); |
| 291 expect(isGroundType(collection.LinkedHashMap), true); | 291 expect(isGroundType(collection.LinkedHashMap), true); |
| 292 | 292 |
| 293 // Map<T1,T2> <: Map | 293 // Map<T1,T2> <: Map |
| 294 checkType(m1, Map); | 294 checkType(m1, Map); |
| 295 checkType(m1, Object); | 295 checkType(m1, Object); |
| 296 | 296 |
| 297 // Instance of self | 297 // Instance of self |
| 298 checkType(m1, runtimeType(m1)); | 298 checkType(m1, getReifiedType(m1)); |
| 299 checkType(m1, Map$(String, String)); | 299 checkType(m1, Map$(String, String)); |
| 300 | 300 |
| 301 // Covariance on generics | 301 // Covariance on generics |
| 302 checkType(m1, runtimeType(m2)); | 302 checkType(m1, getReifiedType(m2)); |
| 303 checkType(m1, Map$(Object, Object)); | 303 checkType(m1, Map$(Object, Object)); |
| 304 | 304 |
| 305 // No contravariance on generics. | 305 // No contravariance on generics. |
| 306 checkType(m2, runtimeType(m1), false, true); | 306 checkType(m2, getReifiedType(m1), false, true); |
| 307 checkType(m2, Map$(String, String), false, true); | 307 checkType(m2, Map$(String, String), false, true); |
| 308 | 308 |
| 309 // null is! Map | 309 // null is! Map |
| 310 checkType(null, Map, false); | 310 checkType(null, Map, false); |
| 311 | 311 |
| 312 // Raw generic types | 312 // Raw generic types |
| 313 checkType(m5, Map); | 313 checkType(m5, Map); |
| 314 checkType(m4, Map); | 314 checkType(m4, Map); |
| 315 | 315 |
| 316 // Is checks | 316 // Is checks |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 isSubtype(getType(C), dart.functionType(C, [core.String]), false); | 351 isSubtype(getType(C), dart.functionType(C, [core.String]), false); |
| 352 isSubtype(getType(C, 'C'), dart.functionType(C, [core.int])); | 352 isSubtype(getType(C, 'C'), dart.functionType(C, [core.int])); |
| 353 isSubtype(getType(C, 'C'), dart.functionType(C, [core.String]), false); | 353 isSubtype(getType(C, 'C'), dart.functionType(C, [core.String]), false); |
| 354 isSubtype(getType(C, 'named'), dart.functionType(C, [core.int, core.int])); | 354 isSubtype(getType(C, 'named'), dart.functionType(C, [core.int, core.int])); |
| 355 isSubtype(getType(C, 'named'), | 355 isSubtype(getType(C, 'named'), |
| 356 dart.functionType(C, [core.int, core.String]), false); | 356 dart.functionType(C, [core.int, core.String]), false); |
| 357 }); | 357 }); |
| 358 | 358 |
| 359 test('generic and inheritance', () => { | 359 test('generic and inheritance', () => { |
| 360 let aaraw = new AA(); | 360 let aaraw = new AA(); |
| 361 let aarawtype = runtimeType(aaraw); | 361 let aarawtype = getReifiedType(aaraw); |
| 362 let aadynamic = new (AA$(dynamic, dynamic))(); | 362 let aadynamic = new (AA$(dynamic, dynamic))(); |
| 363 let aadynamictype = runtimeType(aadynamic); | 363 let aadynamictype = getReifiedType(aadynamic); |
| 364 let aa = new (AA$(String, List))(); | 364 let aa = new (AA$(String, List))(); |
| 365 let aatype = runtimeType(aa); | 365 let aatype = getReifiedType(aa); |
| 366 let bb = new (BB$(String, List))(); | 366 let bb = new (BB$(String, List))(); |
| 367 let bbtype = runtimeType(bb); | 367 let bbtype = getReifiedType(bb); |
| 368 let cc = new CC(); | 368 let cc = new CC(); |
| 369 let cctype = runtimeType(cc); | 369 let cctype = getReifiedType(cc); |
| 370 // We don't allow constructing bad types. | 370 // We don't allow constructing bad types. |
| 371 // This was AA<String> in Dart (wrong number of type args). | 371 // This was AA<String> in Dart (wrong number of type args). |
| 372 let aabad = new (AA$(dart.dynamic, dart.dynamic))(); | 372 let aabad = new (AA$(dart.dynamic, dart.dynamic))(); |
| 373 let aabadtype = runtimeType(aabad); | 373 let aabadtype = getReifiedType(aabad); |
| 374 | 374 |
| 375 expect(isGroundType(aatype), false); | 375 expect(isGroundType(aatype), false); |
| 376 expect(isGroundType(AA$(String, List)), false); | 376 expect(isGroundType(AA$(String, List)), false); |
| 377 expect(isGroundType(bbtype), false); | 377 expect(isGroundType(bbtype), false); |
| 378 expect(isGroundType(BB$(String, List)), false); | 378 expect(isGroundType(BB$(String, List)), false); |
| 379 expect(isGroundType(cctype), true); | 379 expect(isGroundType(cctype), true); |
| 380 expect(isGroundType(CC), true); | 380 expect(isGroundType(CC), true); |
| 381 checkType(cc, aatype, false, true); | 381 checkType(cc, aatype, false, true); |
| 382 checkType(cc, AA$(String, List), false, true); | 382 checkType(cc, AA$(String, List), false, true); |
| 383 checkType(cc, bbtype); | 383 checkType(cc, bbtype); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 464 checkType(bar5, functionType(B, [B, String])); | 464 checkType(bar5, functionType(B, [B, String])); |
| 465 checkType(cls5, functionType(B, [B, String])); | 465 checkType(cls5, functionType(B, [B, String])); |
| 466 checkType(bar6, Foo, false, true); | 466 checkType(bar6, Foo, false, true); |
| 467 checkType(cls6, Foo, false, true); | 467 checkType(cls6, Foo, false, true); |
| 468 checkType(bar6, functionType(B, [B, String]), false, true); | 468 checkType(bar6, functionType(B, [B, String]), false, true); |
| 469 checkType(cls6, functionType(B, [B, String]), false, true); | 469 checkType(cls6, functionType(B, [B, String]), false, true); |
| 470 checkType(bar7, Foo); | 470 checkType(bar7, Foo); |
| 471 checkType(cls7, Foo); | 471 checkType(cls7, Foo); |
| 472 checkType(bar7, functionType(B, [B, String])); | 472 checkType(bar7, functionType(B, [B, String])); |
| 473 checkType(cls7, functionType(B, [B, String])); | 473 checkType(cls7, functionType(B, [B, String])); |
| 474 checkType(bar7, runtimeType(bar6)); | 474 checkType(bar7, getReifiedType(bar6)); |
| 475 checkType(cls7, runtimeType(bar6)); | 475 checkType(cls7, getReifiedType(bar6)); |
| 476 checkType(bar8, Foo); | 476 checkType(bar8, Foo); |
| 477 checkType(cls8, Foo); | 477 checkType(cls8, Foo); |
| 478 checkType(bar8, functionType(B, [B, String])); | 478 checkType(bar8, functionType(B, [B, String])); |
| 479 checkType(cls8, functionType(B, [B, String])); | 479 checkType(cls8, functionType(B, [B, String])); |
| 480 checkType(bar8, runtimeType(bar6), false, true); | 480 checkType(bar8, getReifiedType(bar6), false, true); |
| 481 checkType(cls8, runtimeType(bar6), false, true); | 481 checkType(cls8, getReifiedType(bar6), false, true); |
| 482 checkType(bar7, runtimeType(bar8), false, true); | 482 checkType(bar7, getReifiedType(bar8), false, true); |
| 483 checkType(cls7, runtimeType(bar8), false, true); | 483 checkType(cls7, getReifiedType(bar8), false, true); |
| 484 checkType(bar8, runtimeType(bar7), false, true); | 484 checkType(bar8, getReifiedType(bar7), false, true); |
| 485 checkType(cls8, runtimeType(bar7), false, true); | 485 checkType(cls8, getReifiedType(bar7), false, true); |
| 486 | 486 |
| 487 // Parameterized typedefs | 487 // Parameterized typedefs |
| 488 expect(isGroundType(FuncG), true); | 488 expect(isGroundType(FuncG), true); |
| 489 expect(isGroundType(FuncG$(B, String)), false); | 489 expect(isGroundType(FuncG$(B, String)), false); |
| 490 checkType(bar1, FuncG$(B, String), false, true); | 490 checkType(bar1, FuncG$(B, String), false, true); |
| 491 checkType(cls1, FuncG$(B, String), false, true); | 491 checkType(cls1, FuncG$(B, String), false, true); |
| 492 checkType(bar3, FuncG$(B, String)); | 492 checkType(bar3, FuncG$(B, String)); |
| 493 checkType(cls3, FuncG$(B, String)); | 493 checkType(cls3, FuncG$(B, String)); |
| 494 }); | 494 }); |
| 495 | 495 |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 740 var m = dart.bind(obj, 'm'); | 740 var m = dart.bind(obj, 'm'); |
| 741 checkType(m, dart.functionType(core.Object, [core.int])); | 741 checkType(m, dart.functionType(core.Object, [core.int])); |
| 742 checkType(m, dart.functionType(core.int, [core.int]), false, true); | 742 checkType(m, dart.functionType(core.int, [core.int]), false, true); |
| 743 }); | 743 }); |
| 744 | 744 |
| 745 test('Object members', () => { | 745 test('Object members', () => { |
| 746 let nullHash = dart.hashCode(null); | 746 let nullHash = dart.hashCode(null); |
| 747 assert.equal(nullHash, 0); | 747 assert.equal(nullHash, 0); |
| 748 let nullString = dart.toString(null); | 748 let nullString = dart.toString(null); |
| 749 assert.equal(nullString, 'null'); | 749 assert.equal(nullString, 'null'); |
| 750 let nullType = dart.runtimeType(null); | |
| 751 assert.equal(nullType, core.Null); | |
| 752 | 750 |
| 753 let map = new Map(); | 751 let map = new Map(); |
| 754 let mapHash = dart.hashCode(map); | 752 let mapHash = dart.hashCode(map); |
| 755 checkType(mapHash, core.int); | 753 checkType(mapHash, core.int); |
| 756 assert.equal(mapHash, map.hashCode); | 754 assert.equal(mapHash, map.hashCode); |
| 757 | 755 |
| 758 let mapString = dart.toString(map); | 756 let mapString = dart.toString(map); |
| 759 assert.equal(mapString, map.toString()); | 757 assert.equal(mapString, map.toString()); |
| 760 checkType(mapString, core.String); | 758 checkType(mapString, core.String); |
| 761 let mapType = dart.runtimeType(map); | |
| 762 assert.equal(mapType, map.runtimeType); | |
| 763 | 759 |
| 764 let str = "A string"; | 760 let str = "A string"; |
| 765 let strHash = dart.hashCode(str); | 761 let strHash = dart.hashCode(str); |
| 766 checkType(strHash, core.int); | 762 checkType(strHash, core.int); |
| 767 | 763 |
| 768 let strString = dart.toString(str); | 764 let strString = dart.toString(str); |
| 769 checkType(strString, core.String); | 765 checkType(strString, core.String); |
| 770 assert.equal(str, strString); | 766 assert.equal(str, strString); |
| 771 let strType = dart.runtimeType(str); | |
| 772 assert.equal(strType, core.String); | |
| 773 | 767 |
| 774 let n = 42; | 768 let n = 42; |
| 775 let intHash = dart.hashCode(n); | 769 let intHash = dart.hashCode(n); |
| 776 checkType(intHash, core.int); | 770 checkType(intHash, core.int); |
| 777 | 771 |
| 778 let intString = dart.toString(n); | 772 let intString = dart.toString(n); |
| 779 assert.equal(intString, '42'); | 773 assert.equal(intString, '42'); |
| 780 let intType = dart.runtimeType(n); | |
| 781 assert.equal(intType, core.int); | |
| 782 }); | 774 }); |
| 783 }); | 775 }); |
| 784 | 776 |
| 785 suite('primitives', function() { | 777 suite('primitives', function() { |
| 786 'use strict'; | 778 'use strict'; |
| 787 | 779 |
| 788 test('fixed length list', () => { | 780 test('fixed length list', () => { |
| 789 let list = new core.List(10); | 781 let list = new core.List(10); |
| 790 list[0] = 42; | 782 list[0] = 42; |
| 791 assert.throws(() => list.add(42)); | 783 assert.throws(() => list.add(42)); |
| 792 }); | 784 }); |
| 793 }); | 785 }); |
| OLD | NEW |