| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | |
| 2 // for details. All rights reserved. Use of this source code is governed by a | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 library register_element_proxy_test; | |
| 6 | |
| 7 import 'dart:async'; | |
| 8 import 'dart:html'; | |
| 9 import 'dart:js' as js; | |
| 10 import 'package:unittest/html_config.dart'; | |
| 11 import 'package:unittest/unittest.dart'; | |
| 12 import '../utils.dart'; | |
| 13 | |
| 14 class FooElement extends HtmlElement { | |
| 15 static final tag = 'x-foo'; | |
| 16 | |
| 17 final int initializedField = 666; | |
| 18 js.JsObject _proxy; | |
| 19 | |
| 20 factory FooElement() => new Element.tag(tag); | |
| 21 FooElement.created() : super.created() { | |
| 22 _proxy = new js.JsObject.fromBrowserObject(this); | |
| 23 } | |
| 24 | |
| 25 String doSomething() => _proxy.callMethod('doSomething'); | |
| 26 | |
| 27 bool get fooCreated => _proxy['fooCreated']; | |
| 28 } | |
| 29 | |
| 30 main() { | |
| 31 useHtmlConfiguration(); | |
| 32 | |
| 33 var registered = false; | |
| 34 var upgrader; | |
| 35 setUp(() => customElementsReady.then((_) { | |
| 36 if (!registered) { | |
| 37 registered = true; | |
| 38 upgrader = document.createElementUpgrader(FooElement); | |
| 39 js.context['upgradeListener'] = (e) { | |
| 40 upgrader.upgrade(e); | |
| 41 }; | |
| 42 | |
| 43 document.register('custom-element', CustomElement); | |
| 44 } | |
| 45 })); | |
| 46 | |
| 47 test('created gets proxied', () { | |
| 48 var element = document.createElement(FooElement.tag); | |
| 49 expect(element is FooElement, isTrue); | |
| 50 expect(element.initializedField, 666); | |
| 51 expect(element.text, 'constructed'); | |
| 52 | |
| 53 js.context.callMethod('validateIsFoo', [element]); | |
| 54 | |
| 55 expect(element.doSomething(), 'didSomething'); | |
| 56 expect(element.fooCreated, true); | |
| 57 }); | |
| 58 | |
| 59 test('dart constructor works', () { | |
| 60 var element = new FooElement(); | |
| 61 expect(element is FooElement, isTrue); | |
| 62 expect(element.text, 'constructed'); | |
| 63 | |
| 64 js.context.callMethod('validateIsFoo', [element]); | |
| 65 | |
| 66 expect(element.doSomething(), 'didSomething'); | |
| 67 }); | |
| 68 | |
| 69 test('cannot create upgrader for interfaces', () { | |
| 70 expect(() { | |
| 71 document.createElementUpgrader(HtmlElementInterface); | |
| 72 }, throws); | |
| 73 }); | |
| 74 | |
| 75 test('cannot upgrade interfaces', () { | |
| 76 expect(() { | |
| 77 upgrader.upgrade(new HtmlElementInterface()); | |
| 78 }, throws); | |
| 79 }); | |
| 80 | |
| 81 test('cannot upgrade more than once', () { | |
| 82 var fooElement = new FooElement(); | |
| 83 expect(() { | |
| 84 upgrader.upgrade(fooElement); | |
| 85 }, throws); | |
| 86 }); | |
| 87 | |
| 88 test('cannot upgrade non-matching elements', () { | |
| 89 expect(() { | |
| 90 upgrader.upgrade(new DivElement()); | |
| 91 }, throws); | |
| 92 }); | |
| 93 | |
| 94 test('cannot upgrade custom elements', () { | |
| 95 var custom = new CustomElement(); | |
| 96 expect(() { | |
| 97 upgrader.upgrade(custom); | |
| 98 }, throws); | |
| 99 }); | |
| 100 | |
| 101 test('can upgrade with extendsTag', () { | |
| 102 var upgrader = | |
| 103 document.createElementUpgrader(CustomDiv, extendsTag: 'div'); | |
| 104 var div = new DivElement(); | |
| 105 var customDiv = upgrader.upgrade(div); | |
| 106 expect(customDiv is CustomDiv, isTrue); | |
| 107 | |
| 108 var htmlElement = document.createElement('not-registered'); | |
| 109 expect(() { | |
| 110 upgrader.upgrade(htmlElement); | |
| 111 }, throws); | |
| 112 }); | |
| 113 | |
| 114 test('cannot create upgrader for built-in types', () { | |
| 115 expect(() { | |
| 116 document.createElementUpgrader(HtmlElement); | |
| 117 }, throws); | |
| 118 }); | |
| 119 } | |
| 120 | |
| 121 class HtmlElementInterface implements HtmlElement { | |
| 122 HtmlElementInterface.created(); | |
| 123 } | |
| 124 | |
| 125 class CustomDiv extends DivElement { | |
| 126 CustomDiv.created() : super.created(); | |
| 127 } | |
| 128 | |
| 129 class CustomElement extends HtmlElement { | |
| 130 factory CustomElement() => document.createElement('custom-element'); | |
| 131 CustomElement.created() : super.created(); | |
| 132 } | |
| OLD | NEW |