| Index: test/codegen/lib/html/custom/element_upgrade_test.dart
|
| diff --git a/test/codegen/lib/html/custom/element_upgrade_test.dart b/test/codegen/lib/html/custom/element_upgrade_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c8e7376ea4516a109427c02b646694f50427ce21
|
| --- /dev/null
|
| +++ b/test/codegen/lib/html/custom/element_upgrade_test.dart
|
| @@ -0,0 +1,132 @@
|
| +// Copyright (c) 2014, 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 register_element_proxy_test;
|
| +
|
| +import 'dart:async';
|
| +import 'dart:html';
|
| +import 'dart:js' as js;
|
| +import 'package:unittest/html_config.dart';
|
| +import 'package:unittest/unittest.dart';
|
| +import '../utils.dart';
|
| +
|
| +class FooElement extends HtmlElement {
|
| + static final tag = 'x-foo';
|
| +
|
| + final int initializedField = 666;
|
| + js.JsObject _proxy;
|
| +
|
| + factory FooElement() => new Element.tag(tag);
|
| + FooElement.created() : super.created() {
|
| + _proxy = new js.JsObject.fromBrowserObject(this);
|
| + }
|
| +
|
| + String doSomething() => _proxy.callMethod('doSomething');
|
| +
|
| + bool get fooCreated => _proxy['fooCreated'];
|
| +}
|
| +
|
| +main() {
|
| + useHtmlConfiguration();
|
| +
|
| + var registered = false;
|
| + var upgrader;
|
| + setUp(() => customElementsReady.then((_) {
|
| + if (!registered) {
|
| + registered = true;
|
| + upgrader = document.createElementUpgrader(FooElement);
|
| + js.context['upgradeListener'] = (e) {
|
| + upgrader.upgrade(e);
|
| + };
|
| +
|
| + document.registerElement('custom-element', CustomElement);
|
| + }
|
| + }));
|
| +
|
| + test('created gets proxied', () {
|
| + var element = document.createElement(FooElement.tag);
|
| + expect(element is FooElement, isTrue);
|
| + expect(element.initializedField, 666);
|
| + expect(element.text, 'constructed');
|
| +
|
| + js.context.callMethod('validateIsFoo', [element]);
|
| +
|
| + expect(element.doSomething(), 'didSomething');
|
| + expect(element.fooCreated, true);
|
| + });
|
| +
|
| + test('dart constructor works', () {
|
| + var element = new FooElement();
|
| + expect(element is FooElement, isTrue);
|
| + expect(element.text, 'constructed');
|
| +
|
| + js.context.callMethod('validateIsFoo', [element]);
|
| +
|
| + expect(element.doSomething(), 'didSomething');
|
| + });
|
| +
|
| + test('cannot create upgrader for interfaces', () {
|
| + expect(() {
|
| + document.createElementUpgrader(HtmlElementInterface);
|
| + }, throws);
|
| + });
|
| +
|
| + test('cannot upgrade interfaces', () {
|
| + expect(() {
|
| + upgrader.upgrade(new HtmlElementInterface());
|
| + }, throws);
|
| + });
|
| +
|
| + test('cannot upgrade more than once', () {
|
| + var fooElement = new FooElement();
|
| + expect(() {
|
| + upgrader.upgrade(fooElement);
|
| + }, throws);
|
| + });
|
| +
|
| + test('cannot upgrade non-matching elements', () {
|
| + expect(() {
|
| + upgrader.upgrade(new DivElement());
|
| + }, throws);
|
| + });
|
| +
|
| + test('cannot upgrade custom elements', () {
|
| + var custom = new CustomElement();
|
| + expect(() {
|
| + upgrader.upgrade(custom);
|
| + }, throws);
|
| + });
|
| +
|
| + test('can upgrade with extendsTag', () {
|
| + var upgrader =
|
| + document.createElementUpgrader(CustomDiv, extendsTag: 'div');
|
| + var div = new DivElement();
|
| + var customDiv = upgrader.upgrade(div);
|
| + expect(customDiv is CustomDiv, isTrue);
|
| +
|
| + var htmlElement = document.createElement('not-registered');
|
| + expect(() {
|
| + upgrader.upgrade(htmlElement);
|
| + }, throws);
|
| + });
|
| +
|
| + test('cannot create upgrader for built-in types', () {
|
| + expect(() {
|
| + document.createElementUpgrader(HtmlElement);
|
| + }, throws);
|
| + });
|
| +}
|
| +
|
| +class HtmlElementInterface implements HtmlElement {
|
| + HtmlElementInterface.created();
|
| +}
|
| +
|
| +class CustomDiv extends DivElement {
|
| + CustomDiv.created() : super.created();
|
| +}
|
| +
|
| +class CustomElement extends HtmlElement {
|
| + factory CustomElement() => document.createElement('custom-element');
|
| + CustomElement.created() : super.created();
|
| +}
|
|
|