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"></script> |
| 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> |
OLD | NEW |