OLD | NEW |
(Empty) | |
| 1 <!doctype html> |
| 2 <!-- |
| 3 Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 4 for details. All rights reserved. Use of this source code is governed by a |
| 5 BSD-style license that can be found in the LICENSE file. |
| 6 --> |
| 7 <html> |
| 8 <head> |
| 9 <title>event path</title> |
| 10 <script src="packages/polymer/testing/testing.js"></script> |
| 11 <script src="packages/unittest/test_controller.js"></script> |
| 12 <!-- |
| 13 Test ported from: |
| 14 https://github.com/Polymer/polymer/blob/7936ff8/test/html/event-path.html |
| 15 |
| 16 This test actually doesn't test the polymer's event layer. It just ensures |
| 17 that tests are propagated in the right order when using Shadow DOM. |
| 18 --> |
| 19 </head> |
| 20 <body> |
| 21 |
| 22 <polymer-element name="x-selector"> |
| 23 <template> |
| 24 <div id="selectorDiv"> |
| 25 <content id="selectorContent"></content> |
| 26 </div> |
| 27 </template> |
| 28 <script type="application/dart"> |
| 29 import 'package:polymer/polymer.dart'; |
| 30 @CustomTag("x-selector") |
| 31 class XSelector extends PolymerElement {} |
| 32 </script> |
| 33 </polymer-element> |
| 34 |
| 35 <polymer-element name="x-overlay"> |
| 36 <template> |
| 37 <content id="overlayContent"></content> |
| 38 </template> |
| 39 <script type="application/dart"> |
| 40 import 'package:polymer/polymer.dart'; |
| 41 @CustomTag("x-overlay") |
| 42 class XOverlay extends PolymerElement {} |
| 43 </script> |
| 44 </polymer-element> |
| 45 |
| 46 <polymer-element name="x-menu" extends="x-selector"> |
| 47 <template> |
| 48 <div id="menuDiv"> |
| 49 <shadow id="menuShadow"></shadow> |
| 50 </div> |
| 51 </template> |
| 52 <script type="application/dart"> |
| 53 import 'package:polymer/polymer.dart'; |
| 54 @CustomTag("x-menu") |
| 55 class XMenu extends PolymerElement {} |
| 56 </script> |
| 57 </polymer-element> |
| 58 |
| 59 <polymer-element name="x-menu-button"> |
| 60 <template> |
| 61 <div> |
| 62 <x-overlay id="overlay"> |
| 63 <div id="menuButtonDiv"> |
| 64 <x-menu id="menu"> |
| 65 <content id="menuButtonContent"></content> |
| 66 </x-menu> |
| 67 </div> |
| 68 </x-overlay> |
| 69 </div> |
| 70 </template> |
| 71 <script type="application/dart"> |
| 72 import 'package:polymer/polymer.dart'; |
| 73 @CustomTag("x-menu-button") |
| 74 class XMenuButton extends PolymerElement {} |
| 75 </script> |
| 76 </polymer-element> |
| 77 |
| 78 <x-menu-button id="menuButton"> |
| 79 <div id="item1"><div id="source"></div>Item1</div> |
| 80 <div id="item2">Item2</div> |
| 81 </x-menu-button> |
| 82 |
| 83 |
| 84 <script type="application/dart"> |
| 85 import 'dart:html'; |
| 86 import 'dart:async'; |
| 87 import 'package:unittest/unittest.dart'; |
| 88 import 'package:unittest/html_config.dart'; |
| 89 |
| 90 main() { |
| 91 useHtmlConfiguration(); |
| 92 test('bubbling in the right order', () { |
| 93 // TODO(sigmund): this should change once we port over the |
| 94 // 'WebComponentsReady' event. |
| 95 runAsync(expectAsync0(() { |
| 96 var item1 = query('#item1'); |
| 97 var menuButton = query('#menuButton'); |
| 98 // Note: polymer uses automatic node finding (menuButton.$.menu) |
| 99 // also note that their node finding code also reachs into the ids |
| 100 // from the parent shadow (menu.$.selectorContent instead of |
| 101 // menu.$.menuShadow.$.selectorContent) |
| 102 var menu = menuButton.shadowRoot.query('#menu'); |
| 103 var selector = menu.shadowRoot.query("#menuShadow"); |
| 104 var overlay = menuButton.shadowRoot.query('#overlay'); |
| 105 var expectedPath = <Node>[ |
| 106 item1, |
| 107 menuButton.shadowRoot.query('#menuButtonContent'), |
| 108 selector.olderShadowRoot.query('#selectorContent'), |
| 109 selector.olderShadowRoot.query('#selectorDiv'), |
| 110 menu.shadowRoot.query('#menuShadow').olderShadowRoot, |
| 111 menu.shadowRoot.query('#menuShadow'), |
| 112 menu.shadowRoot.query('#menuDiv'), |
| 113 menu.shadowRoot, |
| 114 menu, |
| 115 menuButton.shadowRoot.query('#menuButtonDiv'), |
| 116 // TODO(sigmund): this test is currently broken because currently |
| 117 // registerElement is sensitive to the order in which each custom |
| 118 // element is registered. When fixed, we should be able to add the |
| 119 // following three targets: |
| 120 // overlay.shadowRoot.query('#overlayContent'), |
| 121 // overlay.shadowRoot, |
| 122 // overlay, |
| 123 menuButton.shadowRoot, |
| 124 menuButton |
| 125 ]; |
| 126 var x = 0; |
| 127 for (int i = 0; i < expectedPath.length; i++) { |
| 128 var node = expectedPath[i]; |
| 129 expect(node, isNotNull, reason: "Should not be null at $i"); |
| 130 node.on['x'].listen(expectAsync1((e) { |
| 131 expect(e.currentTarget, node); |
| 132 expect(x++, i); |
| 133 })); |
| 134 } |
| 135 |
| 136 item1.dispatchEvent(new Event('x', canBubble: true)); |
| 137 })); |
| 138 }); |
| 139 } |
| 140 </script> |
| 141 </body> |
| 142 </html> |
OLD | NEW |