| Index: test/codegen/expect/lib/html/js_typed_interop_test.js
|
| diff --git a/test/codegen/expect/lib/html/js_typed_interop_test.js b/test/codegen/expect/lib/html/js_typed_interop_test.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3106c27495204d3ffebea5675bc6274c6cf551d0
|
| --- /dev/null
|
| +++ b/test/codegen/expect/lib/html/js_typed_interop_test.js
|
| @@ -0,0 +1,221 @@
|
| +dart_library.library('lib/html/js_typed_interop_test', null, /* Imports */[
|
| + 'dart_sdk',
|
| + 'unittest'
|
| +], function load__js_typed_interop_test(exports, dart_sdk, unittest) {
|
| + 'use strict';
|
| + const core = dart_sdk.core;
|
| + const html = dart_sdk.html;
|
| + const js = dart_sdk.js;
|
| + const dart = dart_sdk.dart;
|
| + const dartx = dart_sdk.dartx;
|
| + const html_individual_config = unittest.html_individual_config;
|
| + const unittest$ = unittest.unittest;
|
| + const src__matcher__expect = unittest.src__matcher__expect;
|
| + const src__matcher__core_matchers = unittest.src__matcher__core_matchers;
|
| + const src__matcher__throws_matcher = unittest.src__matcher__throws_matcher;
|
| + const js_typed_interop_test = Object.create(null);
|
| + let VoidTodynamic = () => (VoidTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [])))();
|
| + let dynamic__Todynamic = () => (dynamic__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic], [dart.dynamic])))();
|
| + let VoidTovoid = () => (VoidTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [])))();
|
| + let VoidToString = () => (VoidToString = dart.constFn(dart.definiteFunctionType(core.String, [])))();
|
| + let VoidToint = () => (VoidToint = dart.constFn(dart.definiteFunctionType(core.int, [])))();
|
| + let dynamicTodynamic = () => (dynamicTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic])))();
|
| + let FooAndintTodynamic = () => (FooAndintTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.global.Foo, core.int])))();
|
| + let dynamicAndExampleLiteralToExampleLiteral = () => (dynamicAndExampleLiteralToExampleLiteral = dart.constFn(dart.definiteFunctionType(dart.global.ExampleLiteral, [dart.dynamic, dart.global.ExampleLiteral])))();
|
| + js_typed_interop_test._injectJs = function() {
|
| + html.document[dartx.body][dartx.append]((() => {
|
| + let _ = html.ScriptElement.new();
|
| + _[dartx.type] = 'text/javascript';
|
| + _[dartx.innerHtml] = " var Foo = {\n multiplyDefault2: function(a, b) {\n if (arguments.length >= 2) return a *b;\n return a * 2;\n }\n };\n\n var foo = {\n x: 3,\n z: 40, // Not specified in typed Dart API so should fail in checked mode.\n multiplyByX: function(arg) { return arg * this.x; },\n // This function can be torn off without having to bind this.\n multiplyBy2: function(arg) { return arg * 2; },\n multiplyDefault2Function: function(a, b) {\n if (arguments.length >= 2) return a * b;\n return a * 2;\n },\n callClosureWithArg1: function(closure, arg) {\n return closure(arg);\n },\n callClosureWithArg2: function(closure, arg1, arg2) {\n return closure(arg1, arg2);\n },\n callClosureWithArgAndThis: function(closure, arg) {\n return closure.apply(this, [arg]);\n },\n\n getBar: function() {\n return bar;\n }\n };\n\n var foob = {\n x: 8,\n y: \"why\",\n multiplyByX: function(arg) { return arg * this.x; }\n };\n\n var bar = {\n x: \"foo\",\n multiplyByX: true,\n getFoo: function() {\n return foo;\n }\n };\n\n function ClassWithConstructor(a, b) {\n this.a = a;\n this.b = b;\n };\n\n ClassWithConstructor.prototype = {\n getA: function() { return this.a;}\n };\n\n var selection = [\"a\", \"b\", \"c\", foo, bar]; \n\n function returnNumArgs() { return arguments.length; };\n function returnLastArg() { return arguments[arguments.length-1]; };\n\n function confuse(obj) { return obj; }\n\n function StringWrapper(str) {\n this.str = str;\n }\n StringWrapper.prototype = {\n charCodeAt: function(index) {\n return this.str.charCodeAt(index);\n }\n };\n function getCanvasContext() {\n return document.createElement('canvas').getContext('2d');\n }\n window.windowProperty = 42;\n document.documentProperty = 45;\n";
|
| + return _;
|
| + })());
|
| + };
|
| + dart.fn(js_typed_interop_test._injectJs, VoidTodynamic());
|
| + js_typed_interop_test.RegularClass = class RegularClass extends core.Object {
|
| + static new(a) {
|
| + return new js_typed_interop_test.RegularClass.fooConstructor(a);
|
| + }
|
| + fooConstructor(a) {
|
| + this.a = a;
|
| + }
|
| + };
|
| + dart.defineNamedConstructor(js_typed_interop_test.RegularClass, 'fooConstructor');
|
| + dart.setSignature(js_typed_interop_test.RegularClass, {
|
| + constructors: () => ({
|
| + new: dart.definiteFunctionType(js_typed_interop_test.RegularClass, [dart.dynamic]),
|
| + fooConstructor: dart.definiteFunctionType(js_typed_interop_test.RegularClass, [dart.dynamic])
|
| + })
|
| + });
|
| + js_typed_interop_test.MultiplyWithDefault = dart.typedef('MultiplyWithDefault', () => dart.functionType(core.num, [core.num], [core.num]));
|
| + js_typed_interop_test.addWithDefault = function(a, b) {
|
| + if (b === void 0) b = 100;
|
| + return dart.dsend(a, '+', b);
|
| + };
|
| + dart.fn(js_typed_interop_test.addWithDefault, dynamic__Todynamic());
|
| + js_typed_interop_test.STRINGIFY_LOCATION = "JSON.stringify";
|
| + js_typed_interop_test.main = function() {
|
| + js_typed_interop_test._injectJs();
|
| + html_individual_config.useHtmlIndividualConfiguration();
|
| + unittest$.group('object literal', dart.fn(() => {
|
| + unittest$.test('simple', dart.fn(() => {
|
| + let l = {x: 3, y: "foo"};
|
| + src__matcher__expect.expect(l.x, src__matcher__core_matchers.equals(3));
|
| + src__matcher__expect.expect(l.y, src__matcher__core_matchers.equals("foo"));
|
| + src__matcher__expect.expect(l.z, src__matcher__core_matchers.isNull);
|
| + src__matcher__expect.expect(dart.global.JSON.stringify(l), src__matcher__core_matchers.equals('{"x":3,"y":"foo"}'));
|
| + l = {z: 100};
|
| + src__matcher__expect.expect(l.x, src__matcher__core_matchers.isNull);
|
| + src__matcher__expect.expect(l.y, src__matcher__core_matchers.isNull);
|
| + src__matcher__expect.expect(l.z, src__matcher__core_matchers.equals(100));
|
| + src__matcher__expect.expect(dart.global.JSON.stringify(l), src__matcher__core_matchers.equals('{"z":100}'));
|
| + }, VoidTodynamic()));
|
| + unittest$.test('empty', dart.fn(() => {
|
| + let l = {};
|
| + src__matcher__expect.expect(dart.global.JSON.stringify(l), src__matcher__core_matchers.equals('{}'));
|
| + }, VoidTodynamic()));
|
| + }, VoidTovoid()));
|
| + unittest$.group('constructor', dart.fn(() => {
|
| + unittest$.test('simple', dart.fn(() => {
|
| + let o = new dart.global.ClassWithConstructor("foo", "bar");
|
| + src__matcher__expect.expect(o.a, src__matcher__core_matchers.equals("foo"));
|
| + src__matcher__expect.expect(o.b, src__matcher__core_matchers.equals("bar"));
|
| + src__matcher__expect.expect(o.getA(), src__matcher__core_matchers.equals("foo"));
|
| + }, VoidTodynamic()));
|
| + }, VoidTovoid()));
|
| + unittest$.group('property', dart.fn(() => {
|
| + unittest$.test('get', dart.fn(() => {
|
| + src__matcher__expect.expect(dart.global.foo.x, src__matcher__core_matchers.equals(3));
|
| + src__matcher__expect.expect(dart.global.foob.x, src__matcher__core_matchers.equals(8));
|
| + src__matcher__expect.expect(dart.global.foob.y, src__matcher__core_matchers.equals("why"));
|
| + src__matcher__expect.expect(dart.fn(() => dart.dload(dart.global.foo, 'zSomeInvalidName'), VoidTodynamic()), src__matcher__throws_matcher.throws);
|
| + src__matcher__expect.expect(dart.global.bar.multiplyByX, src__matcher__core_matchers.isTrue);
|
| + }, VoidTodynamic()));
|
| + unittest$.test('set', dart.fn(() => {
|
| + dart.global.foo.x = 42;
|
| + src__matcher__expect.expect(dart.global.foo.x, src__matcher__core_matchers.equals(42));
|
| + src__matcher__expect.expect(dart.fn(() => dart.dput(dart.global.foob, 'y', "bla"), VoidToString()), src__matcher__throws_matcher.throws);
|
| + src__matcher__expect.expect(dart.fn(() => dart.dput(dart.global.foo, 'unknownName', 42), VoidToint()), src__matcher__throws_matcher.throws);
|
| + }, VoidTodynamic()));
|
| + }, VoidTovoid()));
|
| + unittest$.group('method', dart.fn(() => {
|
| + unittest$.test('call', dart.fn(() => {
|
| + dart.global.foo.x = 100;
|
| + src__matcher__expect.expect(dart.global.foo.multiplyByX(4), src__matcher__core_matchers.equals(400));
|
| + dart.global.foob.x = 10;
|
| + src__matcher__expect.expect(dart.global.foob.multiplyByX(4), src__matcher__core_matchers.equals(40));
|
| + }, VoidTodynamic()));
|
| + unittest$.test('tearoff', dart.fn(() => {
|
| + dart.global.foo.x = 10;
|
| + let multiplyBy2 = dart.bind(dart.global.foo, 'multiplyBy2');
|
| + src__matcher__expect.expect(dart.dcall(multiplyBy2, 5), src__matcher__core_matchers.equals(10));
|
| + let multiplyByX = dart.bind(dart.global.foo, 'multiplyByX');
|
| + src__matcher__expect.expect(dart.dcall(multiplyByX, 4), src__matcher__core_matchers.isNaN);
|
| + let multiplyWithDefault = dart.global.foo.multiplyDefault2Function;
|
| + src__matcher__expect.expect(multiplyWithDefault(6, 6), src__matcher__core_matchers.equals(36));
|
| + src__matcher__expect.expect(multiplyWithDefault(6), src__matcher__core_matchers.equals(12));
|
| + let untypedFunction = dart.global.foo.multiplyDefault2Function;
|
| + src__matcher__expect.expect(dart.dcall(untypedFunction, 6, 6, "ignored", "ignored"), src__matcher__core_matchers.equals(36));
|
| + src__matcher__expect.expect(dart.dcall(untypedFunction, 6, 6, "ignored", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), src__matcher__core_matchers.equals(36));
|
| + src__matcher__expect.expect(dart.dcall(untypedFunction), src__matcher__core_matchers.isNaN);
|
| + }, VoidTodynamic()));
|
| + }, VoidTovoid()));
|
| + unittest$.group('static_method_call', dart.fn(() => {
|
| + unittest$.test('call directly from dart', dart.fn(() => {
|
| + src__matcher__expect.expect(dart.global.Foo.multiplyDefault2(6, 7), src__matcher__core_matchers.equals(42));
|
| + src__matcher__expect.expect(dart.global.Foo.multiplyDefault2(6), src__matcher__core_matchers.equals(12));
|
| + }, VoidTodynamic()));
|
| + }, VoidTovoid()));
|
| + unittest$.group('static_method_tearoff_1', dart.fn(() => {
|
| + unittest$.test('call tearoff from dart', dart.fn(() => {
|
| + let tearOffMethod = dart.global.Foo.multiplyDefault2;
|
| + src__matcher__expect.expect(tearOffMethod(6, 6), src__matcher__core_matchers.equals(36));
|
| + }, VoidTodynamic()));
|
| + }, VoidTovoid()));
|
| + unittest$.group('static_method_tearoff_2', dart.fn(() => {
|
| + unittest$.test('call tearoff from dart', dart.fn(() => {
|
| + let tearOffMethod = dart.global.Foo.multiplyDefault2;
|
| + src__matcher__expect.expect(tearOffMethod(6), src__matcher__core_matchers.equals(12));
|
| + }, VoidTodynamic()));
|
| + }, VoidTovoid()));
|
| + unittest$.group('closure', dart.fn(() => {
|
| + unittest$.test('call from js', dart.fn(() => {
|
| + function localClosure(x) {
|
| + return dart.dsend(x, '*', 10);
|
| + }
|
| + dart.fn(localClosure, dynamicTodynamic());
|
| + let wrappedLocalClosure = js.allowInterop(localClosure);
|
| + src__matcher__expect.expect(core.identical(js.allowInterop(localClosure), wrappedLocalClosure), src__matcher__core_matchers.isTrue);
|
| + src__matcher__expect.expect(dart.global.foo.callClosureWithArg1(wrappedLocalClosure, 10), src__matcher__core_matchers.equals(100));
|
| + src__matcher__expect.expect(dart.global.foo.callClosureWithArg1(wrappedLocalClosure, "a"), src__matcher__core_matchers.equals("aaaaaaaaaa"));
|
| + src__matcher__expect.expect(dart.global.foo.callClosureWithArg1(js.allowInterop(js_typed_interop_test.addWithDefault), 10), src__matcher__core_matchers.equals(110));
|
| + src__matcher__expect.expect(dart.global.foo.callClosureWithArg2(js.allowInterop(js_typed_interop_test.addWithDefault), 10, 20), src__matcher__core_matchers.equals(30));
|
| + function addThisXAndArg(that, arg) {
|
| + return dart.notNull(dart.global.foo.x) + dart.notNull(arg);
|
| + }
|
| + dart.fn(addThisXAndArg, FooAndintTodynamic());
|
| + let wrappedCaptureThisClosure = js.allowInteropCaptureThis(addThisXAndArg);
|
| + dart.global.foo.x = 20;
|
| + src__matcher__expect.expect(dart.global.foo.callClosureWithArgAndThis(wrappedCaptureThisClosure, 10), src__matcher__core_matchers.equals(30));
|
| + dart.global.foo.x = 50;
|
| + src__matcher__expect.expect(dart.global.foo.callClosureWithArgAndThis(wrappedCaptureThisClosure, 10), src__matcher__core_matchers.equals(60));
|
| + src__matcher__expect.expect(core.identical(js.allowInteropCaptureThis(addThisXAndArg), wrappedCaptureThisClosure), src__matcher__core_matchers.isTrue);
|
| + function addXValues(that, arg) {
|
| + return {x: core.int._check(dart.dsend(dart.dload(that, 'x'), '+', arg.x))};
|
| + }
|
| + dart.fn(addXValues, dynamicAndExampleLiteralToExampleLiteral());
|
| + src__matcher__expect.expect(dart.dload(dart.global.foo.callClosureWithArg2(js.allowInterop(addXValues), {x: 20}, {x: 10}), 'x'), src__matcher__core_matchers.equals(30));
|
| + dart.global.foo.x = 50;
|
| + src__matcher__expect.expect(dart.dload(dart.global.foo.callClosureWithArgAndThis(js.allowInteropCaptureThis(addXValues), {x: 10}), 'x'), src__matcher__core_matchers.equals(60));
|
| + }, VoidTodynamic()));
|
| + unittest$.test('call from dart', dart.fn(() => {
|
| + let returnNumArgsFn = dart.global.returnNumArgs;
|
| + let returnLastArgFn = dart.global.returnLastArg;
|
| + src__matcher__expect.expect(dart.dcall(returnNumArgsFn), src__matcher__core_matchers.equals(0));
|
| + src__matcher__expect.expect(dart.dcall(returnNumArgsFn, "a", "b", "c"), src__matcher__core_matchers.equals(3));
|
| + src__matcher__expect.expect(dart.dcall(returnNumArgsFn, "a", "b", "c", null, null), src__matcher__core_matchers.equals(5));
|
| + src__matcher__expect.expect(dart.dcall(returnNumArgsFn, 1, 2, 3, 4, 5, 6, null), src__matcher__core_matchers.equals(7));
|
| + src__matcher__expect.expect(dart.dcall(returnNumArgsFn, 1, 2, 3, 4, 5, 6, 7, 8), src__matcher__core_matchers.equals(8));
|
| + src__matcher__expect.expect(dart.dcall(returnLastArgFn, 1, 2, "foo"), src__matcher__core_matchers.equals("foo"));
|
| + src__matcher__expect.expect(dart.dcall(returnLastArgFn, 1, 2, 3, 4, 5, 6, "foo"), src__matcher__core_matchers.equals("foo"));
|
| + }, VoidTodynamic()));
|
| + }, VoidTovoid()));
|
| + unittest$.group('chain calls', dart.fn(() => {
|
| + unittest$.test("method calls", dart.fn(() => {
|
| + let bar = dart.global.foo.getBar().getFoo().getBar().getFoo().getBar();
|
| + src__matcher__expect.expect(bar.x, src__matcher__core_matchers.equals("foo"));
|
| + }, VoidTodynamic()));
|
| + }, VoidTovoid()));
|
| + unittest$.group('avoid leaks on dart:core', dart.fn(() => {
|
| + unittest$.test('String', dart.fn(() => {
|
| + let s = dart.global.confuse('Hello');
|
| + let stringWrapper = dart.global.confuse(new dart.global.StringWrapper('Hello'));
|
| + src__matcher__expect.expect(dart.fn(() => dart.dsend(s, 'charCodeAt', 0), VoidTodynamic()), src__matcher__throws_matcher.throws);
|
| + src__matcher__expect.expect(dart.dsend(stringWrapper, 'charCodeAt', 0), src__matcher__core_matchers.equals(72));
|
| + }, VoidTodynamic()));
|
| + }, VoidTovoid()));
|
| + unittest$.group('type check', dart.fn(() => {
|
| + unittest$.test('js interfaces', dart.fn(() => {
|
| + src__matcher__expect.expect(dart.global.Bar.is(dart.global.foo), src__matcher__core_matchers.isTrue);
|
| + src__matcher__expect.expect(dart.global.Foob.is(dart.global.foo), src__matcher__core_matchers.isTrue);
|
| + src__matcher__expect.expect(core.List.is(dart.global.selection), src__matcher__core_matchers.isTrue);
|
| + src__matcher__expect.expect(core.List.is(dart.global.foo), src__matcher__core_matchers.isFalse);
|
| + }, VoidTodynamic()));
|
| + unittest$.test('dart interfaces', dart.fn(() => {
|
| + src__matcher__expect.expect(core.Function.is(dart.global.foo), src__matcher__core_matchers.isFalse);
|
| + src__matcher__expect.expect(core.List.is(dart.global.selection), src__matcher__core_matchers.isTrue);
|
| + }, VoidTodynamic()));
|
| + }, VoidTovoid()));
|
| + unittest$.group('html', dart.fn(() => {
|
| + unittest$.test('return html type', dart.fn(() => {
|
| + src__matcher__expect.expect(html.CanvasRenderingContext2D.is(dart.global.getCanvasContext()), src__matcher__core_matchers.isTrue);
|
| + }, VoidTodynamic()));
|
| + unittest$.test('js path contains html types', dart.fn(() => {
|
| + src__matcher__expect.expect(dart.global.window.self.window.window.windowProperty, src__matcher__core_matchers.equals(42));
|
| + src__matcher__expect.expect(dart.global.window.window.document.documentProperty, src__matcher__core_matchers.equals(45));
|
| + }, VoidTodynamic()));
|
| + }, VoidTovoid()));
|
| + };
|
| + dart.fn(js_typed_interop_test.main, VoidTodynamic());
|
| + // Exports:
|
| + exports.js_typed_interop_test = js_typed_interop_test;
|
| +});
|
|
|