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 library polymer.test.event_handlers_test; | |
6 | |
7 import 'dart:async'; | |
8 import 'dart:html'; | |
9 | |
10 import 'package:polymer/polymer.dart'; | |
11 import 'package:template_binding/template_binding.dart'; | |
12 import 'package:unittest/unittest.dart'; | |
13 import 'package:unittest/html_config.dart'; | |
14 | |
15 @CustomTag('x-test') | |
16 class XTest extends PolymerElement { | |
17 int _testCount = 0; | |
18 String _lastEvent; | |
19 String _lastMessage; | |
20 List list1 = toObservable([]); | |
21 List list2 = toObservable([]); | |
22 Future _onTestDone; | |
23 | |
24 XTest.created() : super.created(); | |
25 | |
26 @override | |
27 parseDeclaration(elementElement) { | |
28 var template = fetchTemplate(elementElement); | |
29 if (template != null) { | |
30 lightFromTemplate(template); | |
31 } | |
32 } | |
33 | |
34 ready() { | |
35 super.ready(); | |
36 for (var i = 0; i < 10; i++) { | |
37 var model = new MiniModel(this, i); | |
38 list1.add(model); | |
39 list2.add(model); | |
40 } | |
41 | |
42 _onTestDone = new Future.sync(_runTests); | |
43 } | |
44 | |
45 hostTapAction(event, detail, node) => _logEvent(event); | |
46 | |
47 divTapAction(event, detail, node) => _logEvent(event); | |
48 | |
49 focusAction(event, detail, node) => _logEvent(event); | |
50 | |
51 blurAction(event, detail, node) => _logEvent(event); | |
52 | |
53 scrollAction(event, detail, node) => _logEvent(event); | |
54 | |
55 itemTapAction(event, detail, node) { | |
56 var model = nodeBind(event.target).templateInstance.model; | |
57 _logEvent(event, "x-test callback ${model['this']}"); | |
58 } | |
59 | |
60 _logEvent(event, [message]) { | |
61 _testCount++; | |
62 _lastEvent = event.type; | |
63 _lastMessage = message; | |
64 } | |
65 | |
66 Future _runTests() { | |
67 fire('tap', onNode: $['div']); | |
68 expect(_testCount, 2, reason: 'event heard at div and host'); | |
69 expect(_lastEvent, 'tap', reason: 'tap handled'); | |
70 fire('focus', onNode: $['input'], canBubble: false); | |
71 expect(_testCount, 3, reason: 'event heard by input'); | |
72 expect(_lastEvent, 'focus', reason: 'focus handled'); | |
73 fire('blur', onNode: $['input'], canBubble: false); | |
74 expect(_testCount, 4, reason: 'event heard by input'); | |
75 expect(_lastEvent, 'blur', reason: 'blur handled'); | |
76 fire('scroll', onNode: $['list'], canBubble: false); | |
77 expect(_testCount, 5, reason: 'event heard by list'); | |
78 expect(_lastEvent, 'scroll', reason: 'scroll handled'); | |
79 | |
80 return onMutation($['list']).then((_) { | |
81 var l1 = $['list'].querySelectorAll('.list1')[4]; | |
82 fire('tap', onNode: l1, canBubble: false); | |
83 expect(_testCount, 6, reason: 'event heard by list1 item'); | |
84 expect(_lastEvent, 'tap', reason: 'tap handled'); | |
85 expect(_lastMessage, 'x-test callback <mini-model 4>'); | |
86 | |
87 var l2 = $['list'].querySelectorAll('.list2')[3]; | |
88 fire('tap', onNode: l2, canBubble: false); | |
89 expect(_testCount, 7, reason: 'event heard by list2 item'); | |
90 expect(_lastEvent, 'tap', reason: 'tap handled by model'); | |
91 expect(_lastMessage, 'x-test callback x-test'); | |
92 }); | |
93 } | |
94 } | |
95 | |
96 class MiniModel extends Observable { | |
97 XTest _element; | |
98 @observable final int index; | |
99 @reflectable void itemTapAction(e, d, n) { | |
100 _element._logEvent(e, 'mini-model callback $this'); | |
101 e.stopPropagation(); | |
102 } | |
103 MiniModel(this._element, this.index); | |
104 String toString() => "<mini-model $index>"; | |
105 } | |
106 | |
107 main() => initPolymer(); | |
108 | |
109 @initMethod init() { | |
110 useHtmlConfiguration(); | |
111 | |
112 setUp(() => Polymer.onReady); | |
113 test('events handled', () { | |
114 XTest test = querySelector('x-test'); | |
115 expect(test._onTestDone, isNotNull, reason: 'ready was called'); | |
116 return test._onTestDone; | |
117 }); | |
118 } | |
OLD | NEW |