// 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. library TestJsUtils; import 'dart:html'; import 'dart:indexed_db' show IdbFactory, KeyRange; import 'dart:js'; import 'package:expect/legacy/minitest.dart'; // ignore: deprecated_member_use_from_same_package injectJs() { final script = new ScriptElement(); script.type = 'text/javascript'; script.innerHtml = r""" var x = 42; var _x = 123; var myArray = ["value1"]; var foreignDoc = (function(){ var doc = document.implementation.createDocument("", "root", null); var element = doc.createElement('element'); element.setAttribute('id', 'abc'); doc.documentElement.appendChild(element); return doc; })(); function razzle() { return x; } function returnThis() { return this; } function getTypeOf(o) { return typeof(o); } function varArgs() { var args = arguments; var sum = 0; for (var i = 0; i < args.length; ++i) { sum += args[i]; } return sum; } function Foo(a) { this.a = a; } Foo.b = 38; Foo.prototype.bar = function() { return this.a; } Foo.prototype.toString = function() { return "I'm a Foo a=" + this.a; } var container = new Object(); container.Foo = Foo; function isArray(a) { return a instanceof Array; } function checkMap(m, key, value) { if (m.hasOwnProperty(key)) return m[key] == value; else return false; } function invokeCallback() { return callback(); } function invokeCallbackWith11params() { return callbackWith11params(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); } function returnElement(element) { return element; } function getElementAttribute(element, attr) { return element.getAttribute(attr); } function addClassAttributes(list) { var result = ""; for (var i=0; i < list.length; i++) { result += list[i].getAttribute("class"); } return result; } function getNewDate() { return new Date(1995, 11, 17); } function getNewDivElement() { return document.createElement("div"); } function getNewEvent() { return new CustomEvent('test'); } function getNewBlob() { var fileParts = ['hey!']; return new Blob(fileParts, {type : 'text/html'}); } function getNewIDBKeyRange() { return IDBKeyRange.only(1); } function getNewImageData() { var canvas = document.createElement('canvas'); var context = canvas.getContext('2d'); return context.createImageData(1, 1); } function getNewInt32Array() { return new Int32Array([1, 2, 3, 4, 5, 6, 7, 8]); } function getNewArrayBuffer() { return new ArrayBuffer(8); } function isPropertyInstanceOf(property, type) { return window[property] instanceof type; } function testJsMap(callback) { var result = callback(); return result['value']; } function addTestProperty(o) { o.testProperty = "test"; } function fireClickEvent(w) { var event = w.document.createEvent('Events'); event.initEvent('click', true, false); w.document.dispatchEvent(event); } function Bar() { return "ret_value"; } Bar.foo = "property_value"; function Baz(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11) { this.f1 = p1; this.f2 = p2; this.f3 = p3; this.f4 = p4; this.f5 = p5; this.f6 = p6; this.f7 = p7; this.f8 = p8; this.f9 = p9; this.f10 = p10; this.f11 = p11; } function Liar(){} Liar.prototype.toString = function() { return 1; } function identical(o1, o2) { return o1 === o2; } var someProto = { role: "proto" }; var someObject = Object.create(someProto); someObject.role = "object"; """; document.body!.append(script); } typedef bool StringToBool(String s); // Some test are either causing other test to fail in IE9, or they are failing // for unknown reasons // useHtmlConfiguration+ImageData bug: dartbug.com/14355 skipIE9_test(String description, t()) { if (Platform.supportsTypedData) { test(description, t); } } class Foo { final JsObject _proxy; Foo(num a) : this._proxy = new JsObject(context['Foo'], [a]); JsObject toJs() => _proxy; num get a => _proxy['a']; num bar() => _proxy.callMethod('bar'); } class Color { static final RED = new Color._("red"); static final BLUE = new Color._("blue"); String _value; Color._(this._value); String toJs() => this._value; } class TestDartObject {} class Callable { call() => 'called'; }