| Index: test/codegen/lib/html/custom/document_register_basic_test.dart
|
| diff --git a/test/codegen/lib/html/custom/document_register_basic_test.dart b/test/codegen/lib/html/custom/document_register_basic_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cf11b6373de8cdda251fcca254c34c98d7e3fb0d
|
| --- /dev/null
|
| +++ b/test/codegen/lib/html/custom/document_register_basic_test.dart
|
| @@ -0,0 +1,148 @@
|
| +// 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 document_register_basic_test;
|
| +import 'package:unittest/unittest.dart';
|
| +import 'package:unittest/html_config.dart';
|
| +import 'dart:html';
|
| +import '../utils.dart';
|
| +
|
| +class Foo extends HtmlElement {
|
| + static final tag = 'x-foo';
|
| + factory Foo() => new Element.tag(tag);
|
| + Foo.created() : super.created();
|
| +
|
| + get thisIsACustomClass => true;
|
| +}
|
| +
|
| +class Bar extends HtmlElement {
|
| + static final tag = 'x-bar';
|
| + factory Bar() => new Element.tag(tag);
|
| + Bar.created() : super.created();
|
| +
|
| + get thisIsACustomClass => true;
|
| +}
|
| +
|
| +class Baz extends Foo {
|
| + static final tag = 'x-baz';
|
| + factory Baz() => new Element.tag(tag);
|
| + Baz.created() : super.created();
|
| +
|
| + get thisIsAlsoACustomClass => true;
|
| +}
|
| +
|
| +class BadB {
|
| +}
|
| +
|
| +abstract class BadC extends HtmlElement {
|
| + BadC.created() : super.created();
|
| +}
|
| +
|
| +class BadF implements HtmlElement {
|
| + static final tag = 'x-tag-f';
|
| + factory BadF() => new Element.tag(tag);
|
| +}
|
| +
|
| +main() {
|
| + useHtmlConfiguration();
|
| +
|
| + // Adapted from Blink's fast/dom/custom/document-register-basic test.
|
| +
|
| + setUp(() => customElementsReady);
|
| +
|
| + test('Testing document.registerElement() basic behaviors', () {
|
| + document.registerElement(Foo.tag, Foo);
|
| +
|
| + // Cannot register an existing dart:html type.
|
| + expect(() => document.registerElement('x-bad-a', HtmlElement), throws);
|
| +
|
| + // Invalid user type. Doesn't inherit from HtmlElement.
|
| + expect(() => document.registerElement('x-bad-b', BadB), throws);
|
| +
|
| + // Cannot register abstract class.
|
| + expect(() => document.registerElement('x-bad-c', BadC), throws);
|
| +
|
| + // Not a type.
|
| + expect(() => document.registerElement('x-bad-d', null), throws);
|
| +
|
| + // Cannot register system type.
|
| + expect(() => document.registerElement('x-bad-e', Object), throws);
|
| +
|
| + // Must extend HtmlElement, not just implement it.
|
| + expect(() => document.registerElement(BadF.tag, BadF), throws);
|
| +
|
| + // Constructor initiated instantiation
|
| + var createdFoo = new Foo();
|
| + expect(createdFoo.thisIsACustomClass, isTrue);
|
| +
|
| + // Dart type correctness
|
| + expect(createdFoo is HtmlElement, isTrue);
|
| + expect(createdFoo is Foo, isTrue);
|
| + expect(createdFoo.runtimeType, Foo);
|
| +
|
| + // Native getter
|
| + expect(createdFoo.tagName, "X-FOO");
|
| +
|
| + // Native setter
|
| + createdFoo.innerHtml = "Hello";
|
| + expect(createdFoo.text, "Hello");
|
| +
|
| + // Native method
|
| + var childDiv = new DivElement();
|
| + createdFoo.append(childDiv);
|
| + expect(createdFoo.lastChild, childDiv);
|
| +
|
| + // Parser initiated instantiation
|
| + var container = new DivElement()..id = "container";
|
| + document.body.append(container);
|
| + container.setInnerHtml("<x-foo></x-foo>",
|
| + treeSanitizer: new NullTreeSanitizer());
|
| + upgradeCustomElements(container);
|
| + var parsedFoo = container.firstChild;
|
| +
|
| + expect(parsedFoo is Foo, isTrue);
|
| + expect(parsedFoo.tagName, "X-FOO");
|
| +
|
| + // Ensuring the wrapper is retained
|
| + var someProperty = new Expando();
|
| + someProperty[parsedFoo] = "hello";
|
| + expect(container.firstChild, parsedFoo);
|
| + expect(someProperty[container.firstChild], someProperty[parsedFoo]);
|
| +
|
| + // Having another constructor
|
| + document.registerElement(Bar.tag, Bar);
|
| + var createdBar = new Bar();
|
| + expect(createdBar is Bar, isTrue);
|
| + expect(createdBar is Foo, isFalse);
|
| + expect(createdBar.tagName, "X-BAR");
|
| +
|
| + // Having a subclass
|
| + document.registerElement(Baz.tag, Baz);
|
| + var createdBaz = new Baz();
|
| + expect(createdBaz.tagName, "X-BAZ");
|
| + expect(createdBaz.thisIsACustomClass, isTrue);
|
| + expect(createdBaz.thisIsAlsoACustomClass, isTrue);
|
| +
|
| + // With irregular cases
|
| + var createdUpperBar = new Element.tag("X-BAR");
|
| + var createdMixedBar = new Element.tag("X-Bar");
|
| + expect(createdUpperBar is Bar, isTrue);
|
| + expect(createdUpperBar.tagName, "X-BAR");
|
| + expect(createdMixedBar is Bar, isTrue);
|
| + expect(createdMixedBar.tagName, "X-BAR");
|
| +
|
| + container.setInnerHtml("<X-BAR></X-BAR><X-Bar></X-Bar>",
|
| + treeSanitizer: new NullTreeSanitizer());
|
| + upgradeCustomElements(container);
|
| + expect(container.firstChild is Bar, isTrue);
|
| + expect(container.firstChild.tagName, "X-BAR");
|
| + expect(container.lastChild is Bar, isTrue);
|
| + expect(container.lastChild.tagName, "X-BAR");
|
| +
|
| + // Constructors shouldn't interfere with each other
|
| + expect((new Foo()).tagName, "X-FOO");
|
| + expect((new Bar()).tagName, "X-BAR");
|
| + expect((new Baz()).tagName, "X-BAZ");
|
| + });
|
| +}
|
|
|