|  | // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | import 'dart:html'; | 
|  | import 'dart:indexed_db' show IdbFactory, KeyRange; | 
|  | import 'dart:typed_data' show Int32List; | 
|  | import 'dart:js'; | 
|  |  | 
|  | import 'package:js/js_util.dart' as js_util; | 
|  | import 'package:expect/minitest.dart'; | 
|  |  | 
|  | import 'js_test_util.dart'; | 
|  |  | 
|  | main() { | 
|  | injectJs(); | 
|  |  | 
|  | test('convert a List', () { | 
|  | final list = [1, 2, 3, 4, 5, 6, 7, 8]; | 
|  | var array = new JsObject.jsify(list); | 
|  | expect(context.callMethod('isArray', [array]), isTrue); | 
|  | expect(array['length'], equals(list.length)); | 
|  | for (var i = 0; i < list.length; i++) { | 
|  | expect(array[i], equals(list[i])); | 
|  | } | 
|  | }); | 
|  |  | 
|  | test('convert an Iterable', () { | 
|  | final set = new Set.from([1, 2, 3, 4, 5, 6, 7, 8]); | 
|  | var array = new JsObject.jsify(set); | 
|  | expect(context.callMethod('isArray', [array]), isTrue); | 
|  | expect(array['length'], equals(set.length)); | 
|  | for (var i = 0; i < array['length']; i++) { | 
|  | expect(set.contains(array[i]), isTrue); | 
|  | } | 
|  | }); | 
|  |  | 
|  | test('convert a Map', () { | 
|  | var map = { | 
|  | 'a': 1, | 
|  | 'b': 2, | 
|  | 'c': 3, | 
|  | 'd': allowInteropCaptureThis((that) => 42) | 
|  | }; | 
|  | var jsMap = new JsObject.jsify(map); | 
|  | expect(!context.callMethod('isArray', [jsMap]), isTrue); | 
|  | for (final key in map.keys) { | 
|  | expect(context.callMethod('checkMap', [jsMap, key, map[key]]), isTrue); | 
|  | } | 
|  | }); | 
|  |  | 
|  | test('deep convert a complex object', () { | 
|  | dynamic object = { | 
|  | 'a': [ | 
|  | 1, | 
|  | [2, 3] | 
|  | ], | 
|  | 'b': { | 
|  | 'c': 3, | 
|  | 'd': new JsObject(context['Foo'], [42]) | 
|  | }, | 
|  | 'e': null | 
|  | }; | 
|  | var jsObject = new JsObject.jsify(object); | 
|  | expect(jsObject['a'][0], equals(object['a'][0])); | 
|  | expect(jsObject['a'][1][0], equals(object['a'][1][0])); | 
|  | expect(jsObject['a'][1][1], equals(object['a'][1][1])); | 
|  | expect(jsObject['b']['c'], equals(object['b']['c'])); | 
|  | expect(jsObject['b']['d'], equals(object['b']['d'])); | 
|  | expect(jsObject['b']['d'].callMethod('bar'), equals(42)); | 
|  | expect(jsObject['e'], isNull); | 
|  | }); | 
|  |  | 
|  | test('throws if object is not a Map or Iterable', () { | 
|  | expect(() => new JsObject.jsify('a'), throwsArgumentError); | 
|  | }); | 
|  | } |