// 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('invoke Dart callback from JS', () { expect(() => context.callMethod('invokeCallback'), throws); context['callback'] = () => 42; expect(context.callMethod('invokeCallback'), equals(42)); context.deleteProperty('callback'); }); test('pass a Dart function to JS and back', () { var dartFunction = () => 42; context['dartFunction'] = dartFunction; expect(identical(context['dartFunction'], dartFunction), isTrue); context.deleteProperty('dartFunction'); }); test('callback as parameter', () { expect(context.callMethod('getTypeOf', [context['razzle']]), equals("function")); }); test('invoke Dart callback from JS with this', () { // A JavaScript constructor function implemented in Dart which // uses 'this' final constructor = new JsFunction.withThis(($this, arg1) { var t = $this; $this['a'] = 42; }); var o = new JsObject(constructor, ["b"]); expect(o['a'], equals(42)); }); test('invoke Dart callback from JS with 11 parameters', () { context['callbackWith11params'] = (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) => '$p1$p2$p3$p4$p5$p6$p7$p8$p9$p10$p11'; expect(context.callMethod('invokeCallbackWith11params'), equals('1234567891011')); }); test('return a JS proxy to JavaScript', () { var result = context.callMethod('testJsMap', [ () => new JsObject.jsify({'value': 42}) ]); expect(result, 42); }); test('emulated functions should not be callable in JS', () { context['callable'] = new Callable(); expect(() => context.callMethod('callable'), throwsNoSuchMethodError); Function f = new Callable(); context['callable'] = f; expect(context.callMethod('callable'), 'called'); context.deleteProperty('callable'); }); }