| // 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); |
| }); |
| } |