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

Side by Side Diff: pkg/dev_compiler/test/codegen/lib/html/js_test.dart

Issue 2413073002: Start cleaning up the HTML tests. (Closed)
Patch Set: Unfork expect.dart. Created 4 years, 2 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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 library jsTest;
6
7 import 'dart:async';
8 import 'dart:html'; 5 import 'dart:html';
9 import 'dart:typed_data' show ByteBuffer, Int32List; 6 import 'dart:typed_data' show ByteBuffer, Int32List;
10 import 'dart:indexed_db' show IdbFactory, KeyRange; 7 import 'dart:indexed_db' show IdbFactory, KeyRange;
11 import 'dart:js'; 8 import 'dart:js';
12 9
13 import 'package:unittest/unittest.dart'; 10 import 'package:minitest/minitest.dart';
14 import 'package:unittest/html_individual_config.dart';
15 11
16 _injectJs() { 12 _injectJs() {
17 final script = new ScriptElement(); 13 final script = new ScriptElement();
18 script.type = 'text/javascript'; 14 script.type = 'text/javascript';
19 script.innerHtml = r""" 15 script.innerHtml = r"""
20 var x = 42; 16 var x = 42;
21 17
22 var _x = 123; 18 var _x = 123;
23 19
24 var myArray = ["value1"]; 20 var myArray = ["value1"];
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 } 219 }
224 220
225 class TestDartObject {} 221 class TestDartObject {}
226 222
227 class Callable { 223 class Callable {
228 call() => 'called'; 224 call() => 'called';
229 } 225 }
230 226
231 main() { 227 main() {
232 _injectJs(); 228 _injectJs();
233 useHtmlIndividualConfiguration();
234 229
235 group('identity', () { 230 group('identity', () {
236 231
237 test('context instances should be identical', () { 232 test('context instances should be identical', () {
238 var c1 = context; 233 var c1 = context;
239 var c2 = context; 234 var c2 = context;
240 expect(identical(c1, c2), isTrue); 235 expect(identical(c1, c2), isTrue);
241 }); 236 });
242 237
243 test('identical JS objects should have identical proxies', () { 238 test('identical JS objects should have identical proxies', () {
(...skipping 23 matching lines...) Expand all
267 expect(identical(f1, f2), isTrue); 262 expect(identical(f1, f2), isTrue);
268 }); 263 });
269 264
270 // TODO(justinfagnani): old tests duplicate checks above, remove 265 // TODO(justinfagnani): old tests duplicate checks above, remove
271 // on test next cleanup pass 266 // on test next cleanup pass
272 test('test proxy equality', () { 267 test('test proxy equality', () {
273 var foo1 = new JsObject(context['Foo'], [1]); 268 var foo1 = new JsObject(context['Foo'], [1]);
274 var foo2 = new JsObject(context['Foo'], [2]); 269 var foo2 = new JsObject(context['Foo'], [2]);
275 context['foo1'] = foo1; 270 context['foo1'] = foo1;
276 context['foo2'] = foo2; 271 context['foo2'] = foo2;
277 expect(foo1, isNot(equals(context['foo2']))); 272 expect(foo1, notEquals(context['foo2']));
278 expect(foo2, equals(context['foo2'])); 273 expect(foo2, equals(context['foo2']));
279 context.deleteProperty('foo1'); 274 context.deleteProperty('foo1');
280 context.deleteProperty('foo2'); 275 context.deleteProperty('foo2');
281 }); 276 });
282 277
283 test('retrieve same dart Object', () { 278 test('retrieve same dart Object', () {
284 final obj = new Object(); 279 final obj = new Object();
285 context['obj'] = obj; 280 context['obj'] = obj;
286 expect(context['obj'], same(obj)); 281 expect(context['obj'], same(obj));
287 context.deleteProperty('obj'); 282 context.deleteProperty('obj');
(...skipping 30 matching lines...) Expand all
318 }); 313 });
319 314
320 }); 315 });
321 316
322 group('new_JsObject', () { 317 group('new_JsObject', () {
323 318
324 test('new Foo()', () { 319 test('new Foo()', () {
325 var foo = new JsObject(context['Foo'], [42]); 320 var foo = new JsObject(context['Foo'], [42]);
326 expect(foo['a'], equals(42)); 321 expect(foo['a'], equals(42));
327 expect(foo.callMethod('bar'), equals(42)); 322 expect(foo.callMethod('bar'), equals(42));
328 expect(() => foo.callMethod('baz'), throwsA(isNoSuchMethodError)); 323 expect(() => foo.callMethod('baz'), throwsNoSuchMethodError);
329 }); 324 });
330 325
331 test('new container.Foo()', () { 326 test('new container.Foo()', () {
332 final Foo2 = context['container']['Foo']; 327 final Foo2 = context['container']['Foo'];
333 final foo = new JsObject(Foo2, [42]); 328 final foo = new JsObject(Foo2, [42]);
334 expect(foo['a'], 42); 329 expect(foo['a'], 42);
335 expect(Foo2['b'], 38); 330 expect(Foo2['b'], 38);
336 }); 331 });
337 332
338 test('new Array()', () { 333 test('new Array()', () {
339 var a = new JsObject(context['Array']); 334 var a = new JsObject(context['Array']);
340 expect(a, new isInstanceOf<JsArray>()); 335 expect(a is JsArray, isTrue);
341 336
342 // Test that the object still behaves via the base JsObject interface. 337 // Test that the object still behaves via the base JsObject interface.
343 // JsArray specific tests are below. 338 // JsArray specific tests are below.
344 expect(a['length'], 0); 339 expect(a['length'], 0);
345 340
346 a.callMethod('push', ["value 1"]); 341 a.callMethod('push', ["value 1"]);
347 expect(a['length'], 1); 342 expect(a['length'], 1);
348 expect(a[0], "value 1"); 343 expect(a[0], "value 1");
349 344
350 a.callMethod('pop'); 345 a.callMethod('pop');
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 expect(o["f$i"], i); 432 expect(o["f$i"], i);
438 } 433 }
439 expect(o['constructor'], equals(context['Baz'])); 434 expect(o['constructor'], equals(context['Baz']));
440 }); 435 });
441 }); 436 });
442 437
443 group('JsFunction and callMethod', () { 438 group('JsFunction and callMethod', () {
444 439
445 test('new JsObject can return a JsFunction', () { 440 test('new JsObject can return a JsFunction', () {
446 var f = new JsObject(context['Function']); 441 var f = new JsObject(context['Function']);
447 expect(f, new isInstanceOf<JsFunction>()); 442 expect(f is JsFunction, isTrue);
448 }); 443 });
449 444
450 test('JsFunction.apply on a function defined in JS', () { 445 test('JsFunction.apply on a function defined in JS', () {
451 expect(context['razzle'].apply([]), equals(42)); 446 expect(context['razzle'].apply([]), equals(42));
452 }); 447 });
453 448
454 test('JsFunction.apply on a function that uses this', () { 449 test('JsFunction.apply on a function that uses this', () {
455 var object = new Object(); 450 var object = new Object();
456 expect(context['returnThis'].apply([], thisArg: object), same(object)); 451 expect(context['returnThis'].apply([], thisArg: object), same(object));
457 }); 452 });
458 453
459 test('JsObject.callMethod on a function defined in JS', () { 454 test('JsObject.callMethod on a function defined in JS', () {
460 expect(context.callMethod('razzle'), equals(42)); 455 expect(context.callMethod('razzle'), equals(42));
461 expect(() => context.callMethod('dazzle'), throwsA(isNoSuchMethodError)); 456 expect(() => context.callMethod('dazzle'), throwsNoSuchMethodError);
462 }); 457 });
463 458
464 test('callMethod with many arguments', () { 459 test('callMethod with many arguments', () {
465 expect(context.callMethod('varArgs', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 460 expect(context.callMethod('varArgs', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
466 equals(55)); 461 equals(55));
467 }); 462 });
468 463
469 test('access a property of a function', () { 464 test('access a property of a function', () {
470 expect(context.callMethod('Bar'), "ret_value"); 465 expect(context.callMethod('Bar'), "ret_value");
471 expect(context['Bar']['foo'], "property_value"); 466 expect(context['Bar']['foo'], "property_value");
472 }); 467 });
473 /* 468 /*
474 TODO(jacobr): evaluate whether we should be in the business of throwing 469 TODO(jacobr): evaluate whether we should be in the business of throwing
475 ArgumentError outside of checked mode. In unchecked mode this should just 470 ArgumentError outside of checked mode. In unchecked mode this should just
476 return a NoSuchMethodError as the class lacks a method "true". 471 return a NoSuchMethodError as the class lacks a method "true".
477 472
478 test('callMethod throws if name is not a String or num', () { 473 test('callMethod throws if name is not a String or num', () {
479 expect(() => context.callMethod(true), 474 expect(() => context.callMethod(true),
480 throwsA(new isInstanceOf<ArgumentError>())); 475 throwsArgumentError);
481 }); 476 });
482 */ 477 */
483 }); 478 });
484 479
485 group('JsArray', () { 480 group('JsArray', () {
486 481
487 test('new JsArray()', () { 482 test('new JsArray()', () {
488 var array = new JsArray(); 483 var array = new JsArray();
489 var arrayType = context['Array']; 484 var arrayType = context['Array'];
490 expect(array.instanceof(arrayType), true); 485 expect(array.instanceof(arrayType), true);
491 expect(array, []); 486 expect(array, []);
492 // basic check that it behaves like a List 487 // basic check that it behaves like a List
493 array.addAll([1, 2, 3]); 488 array.addAll([1, 2, 3]);
494 expect(array, [1, 2, 3]); 489 expect(array, [1, 2, 3]);
495 }); 490 });
496 491
497 test('new JsArray.from()', () { 492 test('new JsArray.from()', () {
498 var array = new JsArray.from([1, 2, 3]); 493 var array = new JsArray.from([1, 2, 3]);
499 var arrayType = context['Array']; 494 var arrayType = context['Array'];
500 expect(array.instanceof(arrayType), true); 495 expect(array.instanceof(arrayType), true);
501 expect(array, [1, 2, 3]); 496 expect(array, [1, 2, 3]);
502 }); 497 });
503 498
504 test('get Array from JS', () { 499 test('get Array from JS', () {
505 context['a'] = new JsObject(context['Array'], [1, 2, 3]); 500 context['a'] = new JsObject(context['Array'], [1, 2, 3]);
506 expect(context.callMethod('isPropertyInstanceOf', 501 expect(context.callMethod('isPropertyInstanceOf',
507 ['a', context['Array']]), isTrue); 502 ['a', context['Array']]), isTrue);
508 var a = context['a']; 503 var a = context['a'];
509 expect(a, new isInstanceOf<JsArray>()); 504 expect(a is JsArray, isTrue);
510 expect(a, [1, 2, 3]); 505 expect(a, [1, 2, 3]);
511 context.deleteProperty('a'); 506 context.deleteProperty('a');
512 }); 507 });
513 508
514 test('pass Array to JS', () { 509 test('pass Array to JS', () {
515 context['a'] = [1, 2, 3]; 510 context['a'] = [1, 2, 3];
516 expect(context.callMethod('isPropertyInstanceOf', 511 expect(context.callMethod('isPropertyInstanceOf',
517 ['a', context['Array']]), isTrue); 512 ['a', context['Array']]), isTrue);
518 var a = context['a']; 513 var a = context['a'];
519 expect(a, new isInstanceOf<List>()); 514 expect(a is List, isTrue);
520 expect(a, isNot(new isInstanceOf<JsArray>())); 515 expect(a is JsArray, isFalse);
521 expect(a, [1, 2, 3]); 516 expect(a, [1, 2, 3]);
522 context.deleteProperty('a'); 517 context.deleteProperty('a');
523 }); 518 });
524 519
525 test('[]', () { 520 test('[]', () {
526 var array = new JsArray.from([1, 2]); 521 var array = new JsArray.from([1, 2]);
527 expect(array[0], 1); 522 expect(array[0], 1);
528 expect(array[1], 2); 523 expect(array[1], 2);
529 expect(() => array[-1], throwsA(isRangeError)); 524 expect(() => array[-1], throwsRangeError);
530 expect(() => array[2], throwsA(isRangeError)); 525 expect(() => array[2], throwsRangeError);
531 }); 526 });
532 527
533 test('[]=', () { 528 test('[]=', () {
534 var array = new JsArray.from([1, 2]); 529 var array = new JsArray<Object>.from([1, 2]);
535 array[0] = 'd'; 530 array[0] = 'd';
536 array[1] = 'e'; 531 array[1] = 'e';
537 expect(array, ['d', 'e']); 532 expect(array, ['d', 'e']);
538 expect(() => array[-1] = 3, throwsA(isRangeError)); 533 expect(() => array[-1] = 3, throwsRangeError);
539 expect(() => array[2] = 3, throwsA(isRangeError)); 534 expect(() => array[2] = 3, throwsRangeError);
540 }); 535 });
541 536
542 test('length', () { 537 test('length', () {
543 var array = new JsArray.from([1, 2, 3]); 538 var array = new JsArray.from([1, 2, 3]);
544 expect(array.length, 3); 539 expect(array.length, 3);
545 array.add(4); 540 array.add(4);
546 expect(array.length, 4); 541 expect(array.length, 4);
547 array.length = 2; 542 array.length = 2;
548 expect(array, [1, 2]); 543 expect(array, [1, 2]);
549 array.length = 3; 544 array.length = 3;
(...skipping 18 matching lines...) Expand all
568 }); 563 });
569 564
570 test('insert', () { 565 test('insert', () {
571 var array = new JsArray.from([]); 566 var array = new JsArray.from([]);
572 array.insert(0, 'b'); 567 array.insert(0, 'b');
573 expect(array, ['b']); 568 expect(array, ['b']);
574 array.insert(0, 'a'); 569 array.insert(0, 'a');
575 expect(array, ['a', 'b']); 570 expect(array, ['a', 'b']);
576 array.insert(2, 'c'); 571 array.insert(2, 'c');
577 expect(array, ['a', 'b', 'c']); 572 expect(array, ['a', 'b', 'c']);
578 expect(() => array.insert(4, 'e'), throwsA(isRangeError)); 573 expect(() => array.insert(4, 'e'), throwsRangeError);
579 expect(() => array.insert(-1, 'e'), throwsA(isRangeError)); 574 expect(() => array.insert(-1, 'e'), throwsRangeError);
580 }); 575 });
581 576
582 test('removeAt', () { 577 test('removeAt', () {
583 var array = new JsArray.from(['a', 'b', 'c']); 578 var array = new JsArray.from(['a', 'b', 'c']);
584 expect(array.removeAt(1), 'b'); 579 expect(array.removeAt(1), 'b');
585 expect(array, ['a', 'c']); 580 expect(array, ['a', 'c']);
586 expect(() => array.removeAt(2), throwsA(isRangeError)); 581 expect(() => array.removeAt(2), throwsRangeError);
587 expect(() => array.removeAt(-1), throwsA(isRangeError)); 582 expect(() => array.removeAt(-1), throwsRangeError);
588 }); 583 });
589 584
590 test('removeLast', () { 585 test('removeLast', () {
591 var array = new JsArray.from(['a', 'b', 'c']); 586 var array = new JsArray.from(['a', 'b', 'c']);
592 expect(array.removeLast(), 'c'); 587 expect(array.removeLast(), 'c');
593 expect(array, ['a', 'b']); 588 expect(array, ['a', 'b']);
594 array.length = 0; 589 array.length = 0;
595 expect(() => array.removeLast(), throwsA(isRangeError)); 590 expect(() => array.removeLast(), throwsRangeError);
596 }); 591 });
597 592
598 test('removeRange', () { 593 test('removeRange', () {
599 var array = new JsArray.from(['a', 'b', 'c', 'd']); 594 var array = new JsArray.from(['a', 'b', 'c', 'd']);
600 array.removeRange(1, 3); 595 array.removeRange(1, 3);
601 expect(array, ['a', 'd']); 596 expect(array, ['a', 'd']);
602 expect(() => array.removeRange(-1, 2), throwsA(isRangeError)); 597 expect(() => array.removeRange(-1, 2), throwsRangeError);
603 expect(() => array.removeRange(0, 3), throwsA(isRangeError)); 598 expect(() => array.removeRange(0, 3), throwsRangeError);
604 expect(() => array.removeRange(2, 1), throwsA(isRangeError)); 599 expect(() => array.removeRange(2, 1), throwsRangeError);
605 }); 600 });
606 601
607 test('setRange', () { 602 test('setRange', () {
608 var array = new JsArray.from(['a', 'b', 'c', 'd']); 603 var array = new JsArray.from(['a', 'b', 'c', 'd']);
609 array.setRange(1, 3, ['e', 'f']); 604 array.setRange(1, 3, ['e', 'f']);
610 expect(array, ['a', 'e', 'f', 'd']); 605 expect(array, ['a', 'e', 'f', 'd']);
611 array.setRange(3, 4, ['g', 'h', 'i'], 1); 606 array.setRange(3, 4, ['g', 'h', 'i'], 1);
612 expect(array, ['a', 'e', 'f', 'h']); 607 expect(array, ['a', 'e', 'f', 'h']);
613 }); 608 });
614 609
(...skipping 17 matching lines...) Expand all
632 var node = new JsObject.fromBrowserObject(new DivElement()); 627 var node = new JsObject.fromBrowserObject(new DivElement());
633 context.callMethod('addTestProperty', [node]); 628 context.callMethod('addTestProperty', [node]);
634 expect(node is JsObject, isTrue); 629 expect(node is JsObject, isTrue);
635 // TODO(justinfagnani): make this work in IE9 630 // TODO(justinfagnani): make this work in IE9
636 // expect(node.instanceof(context['HTMLDivElement']), isTrue); 631 // expect(node.instanceof(context['HTMLDivElement']), isTrue);
637 expect(node['testProperty'], 'test'); 632 expect(node['testProperty'], 'test');
638 }); 633 });
639 634
640 test('primitives and null throw ArgumentError', () { 635 test('primitives and null throw ArgumentError', () {
641 for (var v in ['a', 1, 2.0, true, null]) { 636 for (var v in ['a', 1, 2.0, true, null]) {
642 expect(() => new JsObject.fromBrowserObject(v), 637 expect(() => new JsObject.fromBrowserObject(v), throwsArgumentError);
643 throwsA(new isInstanceOf<ArgumentError>()));
644 } 638 }
645 }); 639 });
646 640
647 }); 641 });
648 642
649 group('Dart_functions', () { 643 group('Dart_functions', () {
650 test('invoke Dart callback from JS', () { 644 test('invoke Dart callback from JS', () {
651 expect(() => context.callMethod('invokeCallback'), throws); 645 expect(() => context.callMethod('invokeCallback'), throws);
652 646
653 context['callback'] = () => 42; 647 context['callback'] = () => 42;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 test('convert a Map', () { 712 test('convert a Map', () {
719 var map = {'a': 1, 'b': 2, 'c': 3}; 713 var map = {'a': 1, 'b': 2, 'c': 3};
720 var jsMap = new JsObject.jsify(map); 714 var jsMap = new JsObject.jsify(map);
721 expect(!context.callMethod('isArray', [jsMap]), isTrue); 715 expect(!context.callMethod('isArray', [jsMap]), isTrue);
722 for (final key in map.keys) { 716 for (final key in map.keys) {
723 expect(context.callMethod('checkMap', [jsMap, key, map[key]]), isTrue); 717 expect(context.callMethod('checkMap', [jsMap, key, map[key]]), isTrue);
724 } 718 }
725 }); 719 });
726 720
727 test('deep convert a complex object', () { 721 test('deep convert a complex object', () {
728 final object = { 722 dynamic object = {
729 'a': [1, [2, 3]], 723 'a': [1, [2, 3]],
730 'b': { 724 'b': {
731 'c': 3, 725 'c': 3,
732 'd': new JsObject(context['Foo'], [42]) 726 'd': new JsObject(context['Foo'], [42])
733 }, 727 },
734 'e': null 728 'e': null
735 }; 729 };
736 var jsObject = new JsObject.jsify(object); 730 var jsObject = new JsObject.jsify(object);
737 expect(jsObject['a'][0], equals(object['a'][0])); 731 expect(jsObject['a'][0], equals(object['a'][0]));
738 expect(jsObject['a'][1][0], equals(object['a'][1][0])); 732 expect(jsObject['a'][1][0], equals(object['a'][1][0]));
739 expect(jsObject['a'][1][1], equals(object['a'][1][1])); 733 expect(jsObject['a'][1][1], equals(object['a'][1][1]));
740 expect(jsObject['b']['c'], equals(object['b']['c'])); 734 expect(jsObject['b']['c'], equals(object['b']['c']));
741 expect(jsObject['b']['d'], equals(object['b']['d'])); 735 expect(jsObject['b']['d'], equals(object['b']['d']));
742 expect(jsObject['b']['d'].callMethod('bar'), equals(42)); 736 expect(jsObject['b']['d'].callMethod('bar'), equals(42));
743 expect(jsObject['e'], isNull); 737 expect(jsObject['e'], isNull);
744 }); 738 });
745 739
746 test('throws if object is not a Map or Iterable', () { 740 test('throws if object is not a Map or Iterable', () {
747 expect(() => new JsObject.jsify('a'), 741 expect(() => new JsObject.jsify('a'), throwsArgumentError);
748 throwsA(new isInstanceOf<ArgumentError>()));
749 }); 742 });
750 }); 743 });
751 744
752 group('JsObject_methods', () { 745 group('JsObject_methods', () {
753 746
754 test('hashCode and ==', () { 747 test('hashCode and ==', () {
755 final o1 = context['Object']; 748 final o1 = context['Object'];
756 final o2 = context['Object']; 749 final o2 = context['Object'];
757 expect(o1 == o2, isTrue); 750 expect(o1 == o2, isTrue);
758 expect(o1.hashCode == o2.hashCode, isTrue); 751 expect(o1.hashCode == o2.hashCode, isTrue);
(...skipping 27 matching lines...) Expand all
786 expect(context['Object'].callMethod('keys', [object])['length'], 1); 779 expect(context['Object'].callMethod('keys', [object])['length'], 1);
787 expect(context['Object'].callMethod('keys', [object])[0], "a"); 780 expect(context['Object'].callMethod('keys', [object])[0], "a");
788 object.deleteProperty("a"); 781 object.deleteProperty("a");
789 expect(context['Object'].callMethod('keys', [object])['length'], 0); 782 expect(context['Object'].callMethod('keys', [object])['length'], 0);
790 }); 783 });
791 784
792 /* TODO(jacobr): this is another test that is inconsistent with JS semantics. 785 /* TODO(jacobr): this is another test that is inconsistent with JS semantics.
793 test('deleteProperty throws if name is not a String or num', () { 786 test('deleteProperty throws if name is not a String or num', () {
794 var object = new JsObject.jsify({}); 787 var object = new JsObject.jsify({});
795 expect(() => object.deleteProperty(true), 788 expect(() => object.deleteProperty(true),
796 throwsA(new isInstanceOf<ArgumentError>())); 789 throwsArgumentError);
797 }); 790 });
798 */ 791 */
799 792
800 test('hasProperty', () { 793 test('hasProperty', () {
801 var object = new JsObject.jsify({}); 794 var object = new JsObject.jsify({});
802 object['a'] = 1; 795 object['a'] = 1;
803 expect(object.hasProperty('a'), isTrue); 796 expect(object.hasProperty('a'), isTrue);
804 expect(object.hasProperty('b'), isFalse); 797 expect(object.hasProperty('b'), isFalse);
805 }); 798 });
806 799
807 /* TODO(jacobr): is this really the correct unchecked mode behavior? 800 /* TODO(jacobr): is this really the correct unchecked mode behavior?
808 test('hasProperty throws if name is not a String or num', () { 801 test('hasProperty throws if name is not a String or num', () {
809 var object = new JsObject.jsify({}); 802 var object = new JsObject.jsify({});
810 expect(() => object.hasProperty(true), 803 expect(() => object.hasProperty(true),
811 throwsA(new isInstanceOf<ArgumentError>())); 804 throwsArgumentError);
812 }); 805 });
813 */ 806 */
814 807
815 test('[] and []=', () { 808 test('[] and []=', () {
816 final myArray = context['myArray']; 809 final myArray = context['myArray'];
817 expect(myArray['length'], equals(1)); 810 expect(myArray['length'], equals(1));
818 expect(myArray[0], equals("value1")); 811 expect(myArray[0], equals("value1"));
819 myArray[0] = "value2"; 812 myArray[0] = "value2";
820 expect(myArray['length'], equals(1)); 813 expect(myArray['length'], equals(1));
821 expect(myArray[0], equals("value2")); 814 expect(myArray[0], equals("value2"));
822 815
823 final foo = new JsObject(context['Foo'], [1]); 816 final foo = new JsObject(context['Foo'], [1]);
824 foo["getAge"] = () => 10; 817 foo["getAge"] = () => 10;
825 expect(foo.callMethod('getAge'), equals(10)); 818 expect(foo.callMethod('getAge'), equals(10));
826 }); 819 });
827 820
828 /* TODO(jacobr): remove as we should only throw this in checked mode. 821 /* TODO(jacobr): remove as we should only throw this in checked mode.
829 test('[] and []= throw if name is not a String or num', () { 822 test('[] and []= throw if name is not a String or num', () {
830 var object = new JsObject.jsify({}); 823 var object = new JsObject.jsify({});
831 expect(() => object[true], 824 expect(() => object[true],
832 throwsA(new isInstanceOf<ArgumentError>())); 825 throwsArgumentError);
833 expect(() => object[true] = 1, 826 expect(() => object[true] = 1,
834 throwsA(new isInstanceOf<ArgumentError>())); 827 throwsArgumentError);
835 }); 828 });
836 */ 829 */
837 }); 830 });
838 831
839 group('transferrables', () { 832 group('transferrables', () {
840 833
841 group('JS->Dart', () { 834 group('JS->Dart', () {
842 835
843 test('DateTime', () { 836 test('DateTime', () {
844 var date = context.callMethod('getNewDate'); 837 var date = context.callMethod('getNewDate');
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 test('ImageData', () { 902 test('ImageData', () {
910 var node = context.callMethod('getNewImageData'); 903 var node = context.callMethod('getNewImageData');
911 expect(node is ImageData, isTrue); 904 expect(node is ImageData, isTrue);
912 }); 905 });
913 906
914 test('typed data: Int32Array', () { 907 test('typed data: Int32Array', () {
915 if (Platform.supportsTypedData) { 908 if (Platform.supportsTypedData) {
916 var list = context.callMethod('getNewInt32Array'); 909 var list = context.callMethod('getNewInt32Array');
917 print(list); 910 print(list);
918 expect(list is Int32List, isTrue); 911 expect(list is Int32List, isTrue);
919 expect(list, orderedEquals([1, 2, 3, 4, 5, 6, 7, 8])); 912 expect(list, equals([1, 2, 3, 4, 5, 6, 7, 8]));
920 } 913 }
921 }); 914 });
922 915
923 }); 916 });
924 917
925 group('Dart->JS', () { 918 group('Dart->JS', () {
926 919
927 test('Date', () { 920 test('Date', () {
928 context['o'] = new DateTime(1995, 12, 17); 921 context['o'] = new DateTime(1995, 12, 17);
929 var dateType = context['Date']; 922 var dateType = context['Date'];
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
981 isTrue); 974 isTrue);
982 context.deleteProperty('o'); 975 context.deleteProperty('o');
983 } 976 }
984 }); 977 });
985 978
986 // this test fails in IE9 for very weird, but unknown, reasons 979 // this test fails in IE9 for very weird, but unknown, reasons
987 // the expression context['ImageData'] fails if useHtmlConfiguration() 980 // the expression context['ImageData'] fails if useHtmlConfiguration()
988 // is called, or if the other tests in this file are enabled 981 // is called, or if the other tests in this file are enabled
989 skipIE9_test('ImageData', () { 982 skipIE9_test('ImageData', () {
990 var canvas = new CanvasElement(); 983 var canvas = new CanvasElement();
991 var ctx = canvas.getContext('2d'); 984 var ctx = canvas.getContext('2d') as CanvasRenderingContext2D;
992 context['o'] = ctx.createImageData(1, 1); 985 context['o'] = ctx.createImageData(1, 1);
993 var imageDataType = context['ImageData']; 986 var imageDataType = context['ImageData'];
994 expect(context.callMethod('isPropertyInstanceOf', ['o', imageDataType]), 987 expect(context.callMethod('isPropertyInstanceOf', ['o', imageDataType]),
995 isTrue); 988 isTrue);
996 context.deleteProperty('o'); 989 context.deleteProperty('o');
997 }); 990 });
998 991
999 test('typed data: Int32List', () { 992 test('typed data: Int32List', () {
1000 if (Platform.supportsTypedData) { 993 if (Platform.supportsTypedData) {
1001 context['o'] = new Int32List.fromList([1, 2, 3, 4]); 994 context['o'] = new Int32List.fromList([1, 2, 3, 4]);
1002 var listType = context['Int32Array']; 995 var listType = context['Int32Array'];
1003 // TODO(jacobr): make this test pass. Currently some type information 996 // TODO(jacobr): make this test pass. Currently some type information
1004 // is lost when typed arrays are passed between JS and Dart. 997 // is lost when typed arrays are passed between JS and Dart.
1005 // expect(context.callMethod('isPropertyInstanceOf', ['o', listType]), 998 // expect(context.callMethod('isPropertyInstanceOf', ['o', listType]),
1006 // isTrue); 999 // isTrue);
1007 context.deleteProperty('o'); 1000 context.deleteProperty('o');
1008 } 1001 }
1009 }); 1002 });
1010 1003
1011 }); 1004 });
1012 }); 1005 });
1013 1006
1014 } 1007 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698