| // 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('DateTime', () { |
| var date = context.callMethod('getNewDate'); |
| expect(date is DateTime, isTrue); |
| }); |
| |
| test('window', () { |
| expect(context['window'] is Window, isTrue); |
| }); |
| |
| test('foreign browser objects should be proxied', () { |
| var iframe = new IFrameElement(); |
| document.body!.children.add(iframe); |
| var proxy = new JsObject.fromBrowserObject(iframe); |
| |
| // Window |
| var contentWindow = proxy['contentWindow']; |
| expect(contentWindow is! Window, isTrue); |
| expect(contentWindow is JsObject, isTrue); |
| |
| // Node |
| var foreignDoc = contentWindow['document']; |
| expect(foreignDoc is! Node, isTrue); |
| expect(foreignDoc is JsObject, isTrue); |
| |
| // Event |
| var clicked = false; |
| foreignDoc['onclick'] = (e) { |
| expect(e is! Event, isTrue); |
| expect(e is JsObject, isTrue); |
| clicked = true; |
| }; |
| |
| context.callMethod('fireClickEvent', [contentWindow]); |
| expect(clicked, isTrue); |
| }); |
| |
| test('foreign functions pass function is checks', () { |
| var iframe = new IFrameElement(); |
| document.body!.children.add(iframe); |
| var proxy = new JsObject.fromBrowserObject(iframe); |
| |
| var contentWindow = proxy['contentWindow']; |
| var foreignDoc = contentWindow['document']; |
| |
| // Function |
| var foreignFunction = foreignDoc['createElement']; |
| expect(foreignFunction is JsFunction, isTrue); |
| |
| // Verify that internal isChecks in callMethod work. |
| foreignDoc.callMethod('createElement', ['div']); |
| |
| var typedContentWindow = js_util.getProperty(iframe, 'contentWindow'); |
| var typedForeignDoc = js_util.getProperty(typedContentWindow, 'document'); |
| |
| var typedForeignFunction = |
| js_util.getProperty(typedForeignDoc, 'createElement'); |
| expect(typedForeignFunction is Function, isTrue); |
| js_util.callMethod(typedForeignDoc, 'createElement', ['div']); |
| }); |
| |
| test('document', () { |
| expect(context['document'] is Document, isTrue); |
| }); |
| |
| skipIE9_test('Blob', () { |
| var blob = context.callMethod('getNewBlob'); |
| expect(blob is Blob, isTrue); |
| expect(blob.type, equals('text/html')); |
| }); |
| |
| test('unattached DivElement', () { |
| var node = context.callMethod('getNewDivElement'); |
| expect(node is DivElement, isTrue); |
| }); |
| |
| test('Event', () { |
| var event = context.callMethod('getNewEvent'); |
| expect(event is Event, true); |
| }); |
| |
| test('KeyRange', () { |
| if (IdbFactory.supported) { |
| var node = context.callMethod('getNewIDBKeyRange'); |
| expect(node is KeyRange, isTrue); |
| } |
| }); |
| |
| test('ImageData', () { |
| var node = context.callMethod('getNewImageData'); |
| expect(node is ImageData, isTrue); |
| }); |
| |
| test('typed data: Int32Array', () { |
| if (Platform.supportsTypedData) { |
| var list = context.callMethod('getNewInt32Array'); |
| print(list); |
| expect(list is Int32List, isTrue); |
| expect(list, equals([1, 2, 3, 4, 5, 6, 7, 8])); |
| } |
| }); |
| } |