| // 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 = ['<a id="a"><b id="b">hey!</b></a>']; | |
| 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'; | |
| } |