Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2013, 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 // This is ported from event-path-declarative-test.dart in polymer/test/html/. | |
| 6 // While the original test was intended to test event.path support, we changed | |
| 7 // the test structure just to check that the event was handled in the expected | |
| 8 // order. | |
| 9 library polymer.test.event_path_declarative_test; | |
| 10 | |
| 11 import 'dart:async'; | |
| 12 import 'dart:collection'; | |
| 13 import 'dart:html'; | |
| 14 | |
| 15 @MirrorsUsed(targets: const [XZug, XFoo, XBar], | |
| 16 override: 'polymer.test.event_path_declarative_test') | |
|
Jennifer Messerly
2013/10/25 22:00:41
consider: using @reflectable instead. it's cleaner
Siggi Cherem (dart-lang)
2013/10/26 00:02:35
good point. done.
| |
| 17 import 'dart:mirrors'; | |
| 18 | |
| 19 import 'package:unittest/unittest.dart'; | |
| 20 import 'package:unittest/html_config.dart'; | |
| 21 import 'package:polymer/polymer.dart'; | |
| 22 import 'package:template_binding/template_binding.dart'; | |
| 23 import 'package:polymer/platform.dart' as Platform; | |
| 24 | |
| 25 var _observedEvents = []; | |
| 26 var _testFired; | |
| 27 | |
| 28 main() => initPolymer(); | |
| 29 | |
| 30 class XZug extends PolymerElement { | |
| 31 | |
| 32 XZug.created() : super.created(); | |
| 33 | |
| 34 ready() { | |
| 35 shadowRoot.on['test-event'].listen((e) { | |
| 36 _testFired.complete(null); | |
| 37 }); | |
| 38 } | |
| 39 | |
| 40 | |
| 41 contentTestEventHandler(e, detail, sender) { | |
| 42 _observedEvents.add(sender); | |
| 43 } | |
| 44 | |
| 45 divTestEventHandler(e, detail, sender) { | |
| 46 _observedEvents.add(sender); | |
| 47 } | |
| 48 | |
| 49 testEventHandler(e, detail, sender) { | |
| 50 _observedEvents.add(sender); | |
| 51 } | |
| 52 } | |
| 53 | |
| 54 class XFoo extends PolymerElement { | |
| 55 XFoo.created() : super.created(); | |
| 56 | |
| 57 contentTestEventHandler(e, detail, sender) { | |
| 58 _observedEvents.add(sender); | |
| 59 } | |
| 60 | |
| 61 divTestEventHandler(e, detail, sender) { | |
| 62 _observedEvents.add(sender); | |
| 63 } | |
| 64 | |
| 65 testEventHandler(e, detail, sender) { | |
| 66 _observedEvents.add(sender); | |
| 67 } | |
| 68 } | |
| 69 | |
| 70 class XBar extends PolymerElement { | |
| 71 XBar.created() : super.created(); | |
| 72 | |
| 73 contentTestEventHandler(e, detail, sender) { | |
| 74 _observedEvents.add(sender); | |
| 75 } | |
| 76 | |
| 77 divTestEventHandler(e, detail, sender) { | |
| 78 _observedEvents.add(sender); | |
| 79 } | |
| 80 | |
| 81 testEventHandler(e, detail, sender) { | |
| 82 _observedEvents.add(sender); | |
| 83 } | |
| 84 } | |
| 85 | |
| 86 @initMethod _init() { | |
| 87 useHtmlConfiguration(); | |
| 88 // TODO(sigmund): switch back to use @CustomTag. We seem to be running into a | |
| 89 // problem where using @CustomTag doesn't guarantee that we register the tags | |
| 90 // in the following order (the query from mirrors is non deterministic). | |
| 91 // We shouldn't care about registration order though. See dartbug.com/14459 | |
|
Jennifer Messerly
2013/10/25 22:00:41
hmmm. I think registration order does matter. Gene
Siggi Cherem (dart-lang)
2013/10/26 00:02:35
we talked about this offline - I'll keep the comme
| |
| 92 Polymer.register('x-zug', XZug); | |
| 93 Polymer.register('x-foo', XFoo); | |
| 94 Polymer.register('x-bar', XBar); | |
| 95 | |
| 96 _testFired = new Completer(); | |
| 97 | |
| 98 setUp(() => Polymer.onReady); | |
| 99 test('event paths', () { | |
| 100 var target = document.querySelector('#target'); | |
| 101 target.dispatchEvent(new CustomEvent('test-event', canBubble: true)); | |
| 102 return _testFired.future.then((_) { | |
| 103 var xBar = querySelector('x-bar'); | |
| 104 var xBarDiv = xBar.shadowRoot.querySelector('#xBarDiv'); | |
| 105 var xBarContent = xBar.shadowRoot.querySelector('#xBarContent'); | |
| 106 var xFoo = xBar.shadowRoot.querySelector('x-foo'); | |
| 107 var xFooDiv = xFoo.shadowRoot.querySelector('#xFooDiv'); | |
| 108 var xFooContent = xFoo.shadowRoot.querySelector('#xFooContent'); | |
| 109 var xZug = xFoo.shadowRoot.querySelector('x-zug'); | |
| 110 var xZugDiv = xZug.shadowRoot.querySelector('#xZugDiv'); | |
| 111 var xZugContent = xZug.shadowRoot.querySelector('#xZugContent'); | |
| 112 | |
| 113 var expectedPath = [ xBarContent, xBarDiv, xFooContent, | |
| 114 xZugContent, xZugDiv, xZug, xFooDiv, xFoo, xBar]; | |
| 115 debugName(e) => '${e.localName}#${e.id}'; | |
| 116 expect(_observedEvents, expectedPath, reason: | |
| 117 '<br>\nexpected: ${expectedPath.map(debugName).join(',')}' | |
| 118 '<br>\nactual: ${_observedEvents.map(debugName).join(',')}' | |
| 119 ); | |
| 120 }); | |
| 121 }); | |
| 122 } | |
| OLD | NEW |