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

Unified 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: Style fixes. Created 9 years, 2 months 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/shared/js/cr/ui/repeating_button_test.html
diff --git a/chrome/browser/resources/shared/js/cr/ui/repeating_button_test.html b/chrome/browser/resources/shared/js/cr/ui/repeating_button_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..c6d7a45f2736fae1e228b170e0629eb22b7f880d
--- /dev/null
+++ b/chrome/browser/resources/shared/js/cr/ui/repeating_button_test.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Repeater</title>
+ <script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
+ <script src="../../cr.js"></script>
+ <script src="../ui.js"></script>
+ <script src="repeating_button.js"></script>
+ <script>
+ goog.require('goog.testing.jsunit');
+ goog.require('goog.testing.MockClock');
+ </script>
+</head>
+<body>
+ <script>
+ var mockClock;
+ var value;
+ var button;
+ var repeatDelay;
+ var repeatInterval;
+
+ /**
+ * Prepare running the tests.
+ */
+ function setUp() {
+ mockClock = new goog.testing.MockClock();
+ mockClock.install();
+ button = new cr.ui.RepeatingButton();
+ repeatDelay = button.repeatDelay;
+ repeatInterval = button.repeatInterval;
+ button.addEventListener(
+ cr.ui.RepeatingButton.Event.BUTTON_HELD,
+ function(e) {
+ value++;
+ });
+ }
+
+ /**
+ * Post-test cleanup.
+ */
+ function tearDown() {
+ mockClock.uninstall();
+ }
+
+ /**
+ * Simulates a mouse or touch event to the repeating button.
+ * @param {string} type The type of event.
+ */
+ function mockEvent(type) {
+ cr.dispatchSimpleEvent(button, type);
+ }
+
+ /**
+ * Simulates a sequence of events.
+ * @param {Array.<string>} events List of event types.
+ * @param {Array.<number>} timeIncrements List of time increments between
+ * events.
+ * @param {number} expectedValue Expected result.
+ */
+ function mockEventSequence(events, timeIncrements, expectedValue) {
+ assertEquals(events.length, timeIncrements.length);
+ value = 0;
+ for (var i = 0; i < events.length; i++) {
+ mockEvent(events[i]);
+ mockClock.tick(timeIncrements[i]);
+ }
+ assertEquals(expectedValue, value);
+ mockClock.tick(repeatDelay);
+ assertEquals(expectedValue, value);
+ }
+
+ /**
+ * Simulates a tap or touch and hold gesture.
+ * @param {number} time Duration of the hold.
+ * @param {number} expectedValue Expected result.
+ */
+ function mockTouchHold(time, expectedValue) {
+ mockEventSequence(['touchstart', 'touchend'], [time, 0], expectedValue);
+ }
+
+ /**
+ * Simulates a mouse click or mouse press and hold.
+ * @param {number} time Duration of the hold.
+ * @param {number} expectedValue Expected result.
+ */
+ function mockMouseHold(time, expectedValue) {
+ mockEventSequence(['mousedown', 'mouseup', 'mouseclick'],
+ [time, 0, 0],
+ expectedValue);
+ }
+
+ /**
+ * Simulates a mouse press and drag off of the button.
+ * @param {number} time1 Duration that the mouse button is pressed and the
+ * mouse is over the button.
+ * @param {number} time2 Duration that the mouse button is pressed but the
+ * mouse is outside the boundary of the button.
+ * @param {number} expectedValue Expected result.
+ */
+ function mockMouseOut(time1, time2, expectedValue) {
+ mockEventSequence(['mousedown', 'mouseout', 'mouseup'],
+ [time1, time2, 0],
+ expectedValue);
+ }
+
+ /**
+ * Runs a series of tests with increasing button hold time.
+ * @param {function} fn Testing function.
+ * @param {Object} opt_arg Optional additional argument for the test.
+ */
+ function runButtonTests(fn, opt_arg) {
+ var holdTime = repeatDelay - repeatInterval / 2;
+ for (var i = 0; i < 3; i++, holdTime += repeatInterval) {
+ var args = opt_arg ? [holdTime, opt_arg, i + 1] : [holdTime, i + 1];
+ fn.apply(this, args);
+ }
+ }
+
+ /**
+ * Simulates a short tap on the button.
+ */
+ function testTap() {
+ mockTouchHold(repeatDelay / 2, 1);
+ }
+
+ /**
+ * Simulates a long press of the button.
+ */
+ function testTouchHold() {
+ runButtonTests(mockTouchHold);
+ }
+
+ /**
+ * Simulates a quick mouse click of the button.
+ */
+ function testClick() {
+ mockMouseHold(repeatDelay / 2, 1);
+ }
+
+ /**
+ * Simulates a mouse press and hold on the button.
+ */
+ function testMousePressHold() {
+ runButtonTests(mockMouseHold);
+ }
+
+ /**
+ * Simulates draging the mouse off of the button while pressed.
+ */
+ function testMouseOut() {
+ runButtonTests(mockMouseOut, repeatDelay);
+ }
+ </script>
+</body>
+</html>

Powered by Google App Engine
This is Rietveld 408576698