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 })); |
| 44 |
| 45 test('created gets proxied', () { |
| 46 var element = document.createElement(FooElement.tag); |
| 47 expect(element is FooElement, isTrue); |
| 48 expect(element.initializedField, 666); |
| 49 expect(element.text, 'constructed'); |
| 50 |
| 51 js.context.callMethod('validateIsFoo', [element]); |
| 52 |
| 53 expect(element.doSomething(), 'didSomething'); |
| 54 expect(element.fooCreated, true); |
| 55 }); |
| 56 |
| 57 test('dart constructor works', () { |
| 58 var element = new FooElement(); |
| 59 expect(element is FooElement, isTrue); |
| 60 expect(element.text, 'constructed'); |
| 61 |
| 62 js.context.callMethod('validateIsFoo', [element]); |
| 63 |
| 64 expect(element.doSomething(), 'didSomething'); |
| 65 }); |
| 66 |
| 67 test('cannot create upgrader for interfaces', () { |
| 68 expect(() { |
| 69 document.createElementUpgrader(HtmlElementInterface); |
| 70 }, throws); |
| 71 }); |
| 72 |
| 73 test('cannot upgrade interfaces', () { |
| 74 expect(() { |
| 75 upgrader.upgrade(new HtmlElementInterface()); |
| 76 }, throws); |
| 77 }); |
| 78 |
| 79 test('cannot upgrade more than once', () { |
| 80 var fooElement = new FooElement(); |
| 81 expect(() { |
| 82 upgrader.upgrade(fooElement); |
| 83 }, throws); |
| 84 }); |
| 85 |
| 86 test('cannot upgrade non-matching elements', () { |
| 87 expect(() { |
| 88 upgrader.upgrade(new DivElement()); |
| 89 }, throws); |
| 90 }); |
| 91 |
| 92 test('cannot upgrade non-matching elements', () { |
| 93 expect(() { |
| 94 upgrader.upgrade(new DivElement()); |
| 95 }, throws); |
| 96 }); |
| 97 |
| 98 test('can upgrade with extendsTag', () { |
| 99 var upgrader = |
| 100 document.createElementUpgrader(CustomDiv, extendsTag: 'div'); |
| 101 var div = new DivElement(); |
| 102 var customDiv = upgrader.upgrade(div); |
| 103 expect(customDiv is CustomDiv, isTrue); |
| 104 |
| 105 var htmlElement = document.createElement('not-registered'); |
| 106 expect(() { |
| 107 upgrader.upgrade(htmlElement); |
| 108 }, throws); |
| 109 }); |
| 110 } |
| 111 |
| 112 class HtmlElementInterface implements HtmlElement { |
| 113 HtmlElementInterface.created(); |
| 114 } |
| 115 |
| 116 class CustomDiv extends DivElement { |
| 117 CustomDiv.created() : super.created(); |
| 118 } |
OLD | NEW |