| Index: packages/polymer/test/event_path_test.dart
|
| diff --git a/packages/polymer/test/event_path_test.dart b/packages/polymer/test/event_path_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7d61926004efd6baa094546b4fe8a07a48a9ce1e
|
| --- /dev/null
|
| +++ b/packages/polymer/test/event_path_test.dart
|
| @@ -0,0 +1,79 @@
|
| +// 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 polymer.test.web.event_path_test;
|
| +
|
| +import 'dart:html';
|
| +import 'package:polymer/polymer.dart';
|
| +import 'package:unittest/html_config.dart';
|
| +import 'package:unittest/unittest.dart';
|
| +
|
| +@CustomTag('x-selector')
|
| +class XSelector extends PolymerElement {
|
| + XSelector.created() : super.created();
|
| +}
|
| +
|
| +@CustomTag('x-overlay')
|
| +class XOverlay extends PolymerElement {
|
| + XOverlay.created() : super.created();
|
| +}
|
| +
|
| +@CustomTag('x-menu')
|
| +class XMenu extends XSelector {
|
| + XMenu.created() : super.created();
|
| +}
|
| +
|
| +@CustomTag('x-menu-button')
|
| +class XMenuButton extends PolymerElement {
|
| + XMenuButton.created() : super.created();
|
| +}
|
| +
|
| +main() => initPolymer().then((zone) => zone.run(() {
|
| + useHtmlConfiguration();
|
| +
|
| + setUp(() => Polymer.onReady);
|
| +
|
| + test('bubbling in the right order', () {
|
| + var item1 = querySelector('#item1');
|
| + var menuButton = querySelector('#menuButton');
|
| + // Note: polymer uses automatic node finding (menuButton.$.menu)
|
| + // also note that their node finding code also reachs into the ids
|
| + // from the parent shadow (menu.$.selectorContent instead of
|
| + // menu.$.menuShadow.$.selectorContent)
|
| + var menu = menuButton.shadowRoot.querySelector('#menu');
|
| + var overlay = menuButton.shadowRoot.querySelector('#overlay');
|
| + var expectedPath = <Node>[
|
| + item1,
|
| + menuButton.shadowRoot.querySelector('#menuButtonContent'),
|
| + menu.shadowRoot.olderShadowRoot.querySelector('#selectorContent'),
|
| + menu.shadowRoot.olderShadowRoot.querySelector('#selectorDiv'),
|
| + menu.shadowRoot.olderShadowRoot,
|
| + menu.shadowRoot.querySelector('#menuShadow'),
|
| + menu.shadowRoot.querySelector('#menuDiv'),
|
| + menu.shadowRoot,
|
| + menu,
|
| + menuButton.shadowRoot.querySelector('#menuButtonDiv'),
|
| + // TODO(sigmund): this test is currently broken because currently
|
| + // registerElement is sensitive to the order in which each custom
|
| + // element is registered. When fixed, we should be able to add the
|
| + // following three targets:
|
| + // overlay.shadowRoot.query('#overlayContent'),
|
| + // overlay.shadowRoot,
|
| + // overlay,
|
| + menuButton.shadowRoot,
|
| + menuButton
|
| + ];
|
| + var x = 0;
|
| + for (int i = 0; i < expectedPath.length; i++) {
|
| + var node = expectedPath[i];
|
| + expect(node, isNotNull, reason: "Should not be null at $i");
|
| + node.on['x'].listen(expectAsync((e) {
|
| + expect(e.currentTarget, node);
|
| + expect(x++, i);
|
| + }));
|
| + }
|
| +
|
| + item1.dispatchEvent(new Event('x', canBubble: true));
|
| + });
|
| +}));
|
|
|