| OLD | NEW |
| (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"> | |
| 6 </script> | |
| 7 <script src="../../cr.js"></script> | |
| 8 <script src="../ui.js"></script> | |
| 9 <script src="repeating_button.js"></script> | |
| 10 <script> | |
| 11 goog.require('goog.testing.jsunit'); | |
| 12 goog.require('goog.testing.MockClock'); | |
| 13 </script> | |
| 14 </head> | |
| 15 <body> | |
| 16 <script> | |
| 17 var mockClock; | |
| 18 var value; | |
| 19 var button; | |
| 20 var repeatDelay; | |
| 21 var repeatInterval; | |
| 22 | |
| 23 /** | |
| 24 * Prepare running the tests. | |
| 25 */ | |
| 26 function setUp() { | |
| 27 mockClock = new goog.testing.MockClock(); | |
| 28 mockClock.install(); | |
| 29 button = new cr.ui.RepeatingButton(); | |
| 30 repeatDelay = button.repeatDelay; | |
| 31 repeatInterval = button.repeatInterval; | |
| 32 button.addEventListener( | |
| 33 cr.ui.RepeatingButton.Event.BUTTON_HELD, | |
| 34 function(e) { | |
| 35 value++; | |
| 36 }); | |
| 37 } | |
| 38 | |
| 39 /** | |
| 40 * Post-test cleanup. | |
| 41 */ | |
| 42 function tearDown() { | |
| 43 mockClock.uninstall(); | |
| 44 } | |
| 45 | |
| 46 /** | |
| 47 * Simulates a mouse or touch event to the repeating button. | |
| 48 * @param {string} type The type of event. | |
| 49 */ | |
| 50 function mockEvent(type) { | |
| 51 cr.dispatchSimpleEvent(button, type); | |
| 52 } | |
| 53 | |
| 54 /** | |
| 55 * Simulates a sequence of events. | |
| 56 * @param {Array.<string>} events List of event types. | |
| 57 * @param {Array.<number>} timeIncrements List of time increments between | |
| 58 * events. | |
| 59 * @param {number} expectedValue Expected result. | |
| 60 */ | |
| 61 function mockEventSequence(events, timeIncrements, expectedValue) { | |
| 62 assertEquals(events.length, timeIncrements.length); | |
| 63 value = 0; | |
| 64 for (var i = 0; i < events.length; i++) { | |
| 65 mockEvent(events[i]); | |
| 66 mockClock.tick(timeIncrements[i]); | |
| 67 } | |
| 68 assertEquals(expectedValue, value); | |
| 69 mockClock.tick(repeatDelay); | |
| 70 assertEquals(expectedValue, value); | |
| 71 } | |
| 72 | |
| 73 /** | |
| 74 * Simulates a tap or touch and hold gesture. | |
| 75 * @param {number} time Duration of the hold. | |
| 76 * @param {number} expectedValue Expected result. | |
| 77 */ | |
| 78 function mockTouchHold(time, expectedValue) { | |
| 79 mockEventSequence(['touchstart', 'touchend'], [time, 0], expectedValue); | |
| 80 } | |
| 81 | |
| 82 /** | |
| 83 * Simulates a mouse click or mouse press and hold. | |
| 84 * @param {number} time Duration of the hold. | |
| 85 * @param {number} expectedValue Expected result. | |
| 86 */ | |
| 87 function mockMouseHold(time, expectedValue) { | |
| 88 mockEventSequence(['mousedown', 'mouseup', 'mouseclick'], | |
| 89 [time, 0, 0], | |
| 90 expectedValue); | |
| 91 } | |
| 92 | |
| 93 /** | |
| 94 * Simulates a mouse press and drag off of the button. | |
| 95 * @param {number} time1 Duration that the mouse button is pressed and the | |
| 96 * mouse is over the button. | |
| 97 * @param {number} time2 Duration that the mouse button is pressed but the | |
| 98 * mouse is outside the boundary of the button. | |
| 99 * @param {number} expectedValue Expected result. | |
| 100 */ | |
| 101 function mockMouseOut(time1, time2, expectedValue) { | |
| 102 mockEventSequence(['mousedown', 'mouseout', 'mouseup'], | |
| 103 [time1, time2, 0], | |
| 104 expectedValue); | |
| 105 } | |
| 106 | |
| 107 /** | |
| 108 * Runs a series of tests with increasing button hold time. | |
| 109 * @param {function} fn Testing function. | |
| 110 * @param {Object} opt_arg Optional additional argument for the test. | |
| 111 */ | |
| 112 function runButtonTests(fn, opt_arg) { | |
| 113 var holdTime = repeatDelay - repeatInterval / 2; | |
| 114 for (var i = 0; i < 3; i++, holdTime += repeatInterval) { | |
| 115 var args = opt_arg ? [holdTime, opt_arg, i + 1] : [holdTime, i + 1]; | |
| 116 fn.apply(this, args); | |
| 117 } | |
| 118 } | |
| 119 | |
| 120 /** | |
| 121 * Simulates a short tap on the button. | |
| 122 */ | |
| 123 function testTap() { | |
| 124 mockTouchHold(repeatDelay / 2, 1); | |
| 125 } | |
| 126 | |
| 127 /** | |
| 128 * Simulates a long press of the button. | |
| 129 */ | |
| 130 function testTouchHold() { | |
| 131 runButtonTests(mockTouchHold); | |
| 132 } | |
| 133 | |
| 134 /** | |
| 135 * Simulates a quick mouse click of the button. | |
| 136 */ | |
| 137 function testClick() { | |
| 138 mockMouseHold(repeatDelay / 2, 1); | |
| 139 } | |
| 140 | |
| 141 /** | |
| 142 * Simulates a mouse press and hold on the button. | |
| 143 */ | |
| 144 function testMousePressHold() { | |
| 145 runButtonTests(mockMouseHold); | |
| 146 } | |
| 147 | |
| 148 /** | |
| 149 * Simulates draging the mouse off of the button while pressed. | |
| 150 */ | |
| 151 function testMouseOut() { | |
| 152 runButtonTests(mockMouseOut, repeatDelay); | |
| 153 } | |
| 154 | |
| 155 /** | |
| 156 * Repeat tests with new delay and interval times. | |
| 157 */ | |
| 158 function testUpdateDelayTimes() { | |
| 159 var oldDelay = repeatDelay; | |
| 160 var oldInterval = repeatInterval; | |
| 161 repeatDelay = button.repeatDelay = 2 * repeatDelay; | |
| 162 repeatInterval = button.repeatInterval = 2 * repeatInterval; | |
| 163 testTouchHold(); | |
| 164 testMousePressHold(); | |
| 165 testMouseOut(); | |
| 166 testClick(); | |
| 167 testTap(); | |
| 168 repeatDelay = button.repeatDelay = oldDelay; | |
| 169 repeatInterval = button.repeatInterval = oldInterval; | |
| 170 } | |
| 171 | |
| 172 /** | |
| 173 * Runs mouse and touch hold tests with a repeat interval that is longer | |
| 174 * than the initial repeat delay. | |
| 175 */ | |
| 176 function testLongRepeat() { | |
| 177 var oldInterval = repeatInterval; | |
| 178 repeatInterval = button.repeatInterval = 3 * button.repeatDelay; | |
| 179 testTouchHold(); | |
| 180 testMousePressHold(); | |
| 181 repeatInterval = button.repeatInterval = oldInterval; | |
| 182 } | |
| 183 </script> | |
| 184 </body> | |
| 185 </html> | |
| OLD | NEW |