Upstream version 5.34.98.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / src / base / key_event_manager_test.js
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 'use strict';
6
7 base.require('base.key_event_manager');
8
9 base.unittest.testSuite('base.key_event_manager', function() {
10   var KeyEventManager = base.KeyEventManager;
11
12   function withElementAttachedToChild(element, callback) {
13     document.body.appendChild(element);
14     try {
15       callback();
16     } finally {
17       document.body.removeChild(element);
18     }
19   }
20
21
22   test('simpleDispatch', function() {
23     var kem = KeyEventManager.instance;
24     var div = document.createElement('div');
25
26     var fireCount = 0;
27     kem.addListener('keydown', function(e) {
28       fireCount++;
29     }, div);
30
31     // Send an event while its attached to the document.
32     withElementAttachedToChild(div, function() {
33       var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73});
34       assertTrue(ret == undefined);
35       assertEquals(1, fireCount);
36     });
37     fireCount = 0;
38
39     // Send an event while it is detached.
40     var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73});
41     assertTrue(ret == undefined);
42     assertEquals(0, fireCount);
43   });
44
45   test('preventDefault', function() {
46     var kem = KeyEventManager.instance;
47     var div = document.createElement('div');
48
49     var fireCount = 0;
50     kem.addListener('keydown', function(e) {
51       fireCount++;
52       e.preventDefault();
53     }, div);
54
55     withElementAttachedToChild(div, function() {
56       var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73});
57       assertTrue(ret == false);
58       assertEquals(1, fireCount);
59     });
60
61   });
62
63   test('stopPropagation', function() {
64     var kem = KeyEventManager.instance;
65     var div1 = document.createElement('div');
66     var div2 = document.createElement('div');
67
68     var didFire = false;
69     kem.addListener('keydown', function(e) {
70       e.stopPropagation();
71     }, div1);
72     kem.addListener('keydown', function(e) {
73       throw new Error('Should never get called');
74     }, div2);
75
76     withElementAttachedToChild(div1, function() {
77       withElementAttachedToChild(div2, function() {
78         var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73});
79         assertTrue(ret == undefined);
80       });
81     });
82   });
83
84   test('removeListener', function() {
85     var kem = KeyEventManager.instance;
86     var div = document.createElement('div');
87
88     var handlerFired = false;
89     function handler(e) {
90       handlerFired = true;
91     }
92     kem.addListener('keydown', handler, div);
93     kem.removeListener('keydown', handler, div);
94     assertEquals(div.className, '');
95
96     withElementAttachedToChild(div, function() {
97       var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73});
98       assertFalse(handlerFired);
99     });
100   });
101
102   test('removeOneListener', function() {
103     var kem = KeyEventManager.instance;
104     var div = document.createElement('div');
105
106     var handlerAFired = false;
107     function handlerA(e) {
108       handlerAFired = true;
109     }
110     var handlerBFired = false;
111     function handlerB(e) {
112       handlerBFired = true;
113     }
114     kem.addListener('keydown', handlerA, div);
115     kem.addListener('keydown', handlerB, div);
116     kem.removeListener('keydown', handlerA, div);
117     assertTrue(div.classList.contains('key-event-manager-target'));
118
119     withElementAttachedToChild(div, function() {
120       var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73});
121       assertFalse(handlerAFired);
122       assertTrue(handlerBFired);
123     });
124   });
125
126
127 });