blob: 811479ddf6b9666a74a3426fe7e4a36b689954d1 [file] [log] [blame]
<!doctype html>
<!--
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.
-->
<html>
<head>
<title>event path</title>
<script src="packages/polymer/testing/testing.js"></script>
<script src="packages/unittest/test_controller.js"></script>
<!--
Test ported from:
https://github.com/Polymer/polymer/blob/7936ff8/test/html/event-path.html
This test actually doesn't test the polymer's event layer. It just ensures
that tests are propagated in the right order when using Shadow DOM.
-->
</head>
<body>
<polymer-element name="x-selector">
<template>
<div id="selectorDiv">
<content id="selectorContent"></content>
</div>
</template>
<script type="application/dart">
import 'package:polymer/polymer.dart';
@CustomTag("x-selector")
class XSelector extends PolymerElement {}
</script>
</polymer-element>
<polymer-element name="x-overlay">
<template>
<content id="overlayContent"></content>
</template>
<script type="application/dart">
import 'package:polymer/polymer.dart';
@CustomTag("x-overlay")
class XOverlay extends PolymerElement {}
</script>
</polymer-element>
<polymer-element name="x-menu" extends="x-selector">
<template>
<div id="menuDiv">
<shadow id="menuShadow"></shadow>
</div>
</template>
<script type="application/dart">
import 'package:polymer/polymer.dart';
@CustomTag("x-menu")
class XMenu extends PolymerElement {}
</script>
</polymer-element>
<polymer-element name="x-menu-button">
<template>
<div>
<x-overlay id="overlay">
<div id="menuButtonDiv">
<x-menu id="menu">
<content id="menuButtonContent"></content>
</x-menu>
</div>
</x-overlay>
</div>
</template>
<script type="application/dart">
import 'package:polymer/polymer.dart';
@CustomTag("x-menu-button")
class XMenuButton extends PolymerElement {}
</script>
</polymer-element>
<x-menu-button id="menuButton">
<div id="item1"><div id="source"></div>Item1</div>
<div id="item2">Item2</div>
</x-menu-button>
<script type="application/dart">
import 'dart:html';
import 'dart:async';
import 'package:unittest/unittest.dart';
import 'package:unittest/html_config.dart';
main() {
useHtmlConfiguration();
test('bubbling in the right order', () {
// TODO(sigmund): this should change once we port over the
// 'WebComponentsReady' event.
runAsync(expectAsync0(() {
var item1 = query('#item1');
var menuButton = query('#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.query('#menu');
var selector = menu.shadowRoot.query("#menuShadow");
var overlay = menuButton.shadowRoot.query('#overlay');
var expectedPath = <Node>[
item1,
menuButton.shadowRoot.query('#menuButtonContent'),
selector.olderShadowRoot.query('#selectorContent'),
selector.olderShadowRoot.query('#selectorDiv'),
menu.shadowRoot.query('#menuShadow').olderShadowRoot,
menu.shadowRoot.query('#menuShadow'),
menu.shadowRoot.query('#menuDiv'),
menu.shadowRoot,
menu,
menuButton.shadowRoot.query('#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(expectAsync1((e) {
expect(e.currentTarget, node);
expect(x++, i);
}));
}
item1.dispatchEvent(new Event('x', canBubble: true));
}));
});
}
</script>
</body>
</html>