Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Side by Side Diff: chrome/browser/resources/shared/js/cr/ui/repeating_button_test.html

Issue 8437004: Add unit test for the repeating button. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge with trunk. Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/resources/shared/js/cr/ui/repeating_button.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Repeater</title>
5 <script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base .js"></script>
James Hawkins 2011/11/02 05:39:12 nit: 80 cols.
James Hawkins 2011/11/02 05:39:12 Does this work if the test machine is offline?
kevers 2011/11/02 15:38:34 Pushed closing tag to the next line, but address i
kevers 2011/11/02 15:38:34 Appears that the test machine needs to be online.
6 <script src="../../cr.js"></script>
7 <script src="../ui.js"></script>
8 <script src="repeating_button.js"></script>
9 <script>
10 goog.require('goog.testing.jsunit');
11 goog.require('goog.testing.MockClock');
12 </script>
13 </head>
14 <body>
15 <script>
16 var mockClock;
17 var value;
18 var button;
19 var repeatDelay;
20 var repeatInterval;
21
22 /**
23 * Prepare running the tests.
24 */
25 function setUp() {
26 mockClock = new goog.testing.MockClock();
27 mockClock.install();
28 button = new cr.ui.RepeatingButton();
29 repeatDelay = button.repeatDelay;
30 repeatInterval = button.repeatInterval;
31 button.addEventListener(
32 cr.ui.RepeatingButton.Event.BUTTON_HELD,
33 function(e) {
34 value++;
35 });
36 }
37
38 /**
39 * Post-test cleanup.
40 */
41 function tearDown() {
42 mockClock.uninstall();
43 }
44
45 /**
46 * Simulates a mouse or touch event to the repeating button.
47 * @param {string} type The type of event.
48 */
49 function mockEvent(type) {
50 cr.dispatchSimpleEvent(button, type);
51 }
52
53 /**
54 * Simulates a sequence of events.
55 * @param {Array.<string>} events List of event types.
56 * @param {Array.<number>} timeIncrements List of time increments between
57 * events.
58 * @param {number} expectedValue Expected result.
59 */
60 function mockEventSequence(events, timeIncrements, expectedValue) {
61 assertEquals(events.length, timeIncrements.length);
62 value = 0;
63 for (var i = 0; i < events.length; i++) {
64 mockEvent(events[i]);
65 mockClock.tick(timeIncrements[i]);
66 }
67 assertEquals(expectedValue, value);
68 mockClock.tick(repeatDelay);
69 assertEquals(expectedValue, value);
70 }
71
72 /**
73 * Simulates a tap or touch and hold gesture.
74 * @param {number} time Duration of the hold.
75 * @param {number} expectedValue Expected result.
76 */
77 function mockTouchHold(time, expectedValue) {
78 mockEventSequence(['touchstart', 'touchend'], [time, 0], expectedValue);
79 }
80
81 /**
82 * Simulates a mouse click or mouse press and hold.
83 * @param {number} time Duration of the hold.
84 * @param {number} expectedValue Expected result.
85 */
86 function mockMouseHold(time, expectedValue) {
87 mockEventSequence(['mousedown', 'mouseup', 'mouseclick'],
88 [time, 0, 0],
89 expectedValue);
90 }
91
92 /**
93 * Simulates a mouse press and drag off of the button.
94 * @param {number} time1 Duration that the mouse button is pressed and the
95 * mouse is over the button.
96 * @param {number} time2 Duration that the mouse button is pressed but the
97 * mouse is outside the boundary of the button.
98 * @param {number} expectedValue Expected result.
99 */
100 function mockMouseOut(time1, time2, expectedValue) {
101 mockEventSequence(['mousedown', 'mouseout', 'mouseup'],
102 [time1, time2, 0],
103 expectedValue);
104 }
105
106 /**
107 * Runs a series of tests with increasing button hold time.
108 * @param {function} fn Testing function.
109 * @param {Object} opt_arg Optional additional argument for the test.
110 */
111 function runButtonTests(fn, opt_arg) {
112 var holdTime = repeatDelay - repeatInterval / 2;
113 for (var i = 0; i < 3; i++, holdTime += repeatInterval) {
114 var args = opt_arg ? [holdTime, opt_arg, i + 1] : [holdTime, i + 1];
115 fn.apply(this, args);
116 }
117 }
118
119 /**
120 * Simulates a short tap on the button.
121 */
122 function testTap() {
123 mockTouchHold(repeatDelay / 2, 1);
124 }
125
126 /**
127 * Simulates a long press of the button.
128 */
129 function testTouchHold() {
130 runButtonTests(mockTouchHold);
131 }
132
133 /**
134 * Simulates a quick mouse click of the button.
135 */
136 function testClick() {
137 mockMouseHold(repeatDelay / 2, 1);
138 }
139
140 /**
141 * Simulates a mouse press and hold on the button.
142 */
143 function testMousePressHold() {
144 runButtonTests(mockMouseHold);
145 }
146
147 /**
148 * Simulates draging the mouse off of the button while pressed.
149 */
150 function testMouseOut() {
151 runButtonTests(mockMouseOut, repeatDelay);
152 }
153 </script>
154 </body>
155 </html>
OLDNEW
« no previous file with comments | « chrome/browser/resources/shared/js/cr/ui/repeating_button.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698