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

Unified Diff: ui/file_manager/file_manager/background/js/task_queue_unittest.js

Issue 789603004: Add a TaskQueue. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix missing assert reference in the unit test. Created 6 years 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: ui/file_manager/file_manager/background/js/task_queue_unittest.js
diff --git a/ui/file_manager/file_manager/background/js/task_queue_unittest.js b/ui/file_manager/file_manager/background/js/task_queue_unittest.js
new file mode 100644
index 0000000000000000000000000000000000000000..4bb8445833c8f9425ce063b1b50af20ae4ca30aa
--- /dev/null
+++ b/ui/file_manager/file_manager/background/js/task_queue_unittest.js
@@ -0,0 +1,196 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/** @type {!TaskQueue} */
+var queue;
+
+/** @type {!Object<importer.TaskQueue.UpdateType, number>} */
+var updates = {};
+
+function setUp() {
+ queue = new importer.TaskQueue();
+
+ // Set up a callback to log updates from running tasks.
+ for (var updateType in importer.TaskQueue.UpdateType) {
+ // Reset counts for all update types.
+ updates[importer.TaskQueue.UpdateType[updateType]] = 0;
+ }
+ // Counts the number of updates of each type that have been received.
+ var updateCallback = function(type, updatedTask) {
+ updates[type]++;
+ };
+ queue.addUpdateCallback(updateCallback);
+}
+
+/**
+ * A Task subclass for testing.
+ * @constructor
+ * @extends {importer.TaskQueue.BaseTask}
+ */
+var TestTask = function() {
+ importer.TaskQueue.Task.call(this);
+
+ /** @type {boolean} */
+ this.wasRun = false;
+
+ /**
+ * @private {Function}
+ */
+ this.runResolver_ = null;
+
+ this.runPromise_ = new Promise(function(resolve) {
+ this.runResolver_ = resolve;
+ }.bind(this));
+};
+TestTask.prototype.__proto__ = importer.TaskQueue.BaseTask.prototype;
+
+/** @override */
+TestTask.prototype.run = function() {
+ this.wasRun = true;
+ this.runResolver_(this);
+};
+
+/** @return {!Promise} A promise that settles once #run is called. */
+TestTask.prototype.whenRun = function() {
+ return this.runPromise_;
+};
+
+// Verifies that a queued task gets run.
+function testRunsTask(callback) {
+ var task = new TestTask();
+ queue.queueTask(task);
+ reportPromise(task.whenRun(), callback);
+}
+
+// Verifies that multiple queued tasks get run.
+function testRunsTasks(callback) {
+ var task0 = new TestTask();
+ var task1 = new TestTask();
+
+ // Make the tasks call Task#notifySuccess when they are run.
+ task0.whenRun().then(function(task) { task.notifySuccess(); });
+ task1.whenRun().then(function(task) { task.notifySuccess(); });
+
+ // Enqueue both tasks, and then verify that they were run.
+ queue.queueTask(task0);
+ queue.queueTask(task1);
+ reportPromise(
+ Promise.all([task0.whenRun(), task1.whenRun()]),
+ callback);
+}
+
+// Verifies that the active callback triggers when the queue starts doing work
+function testOnActiveCalled(callback) {
+ var task = new TestTask();
+
+ // Make a promise that resolves when the active callback is triggered.
+ var whenActive = new Promise(function(resolve) {
+ queue.setActiveCallback(
+ function() {
+ // Verify that the active callback is called before the task runs.
+ assertFalse(task.wasRun);
+ resolve();
+ });
+ });
+
+ // Queue a task, and then check that the active callback was triggered.
+ queue.queueTask(task);
+ reportPromise(whenActive, callback);
+}
+
+// Verifies that the idle callback triggers when the queue is empty.
+function testOnIdleCalled(callback) {
+ var task = new TestTask();
+
+ task.whenRun().then(function(task) { task.notifySuccess(); });
+
+ // Make a promise that resolves when the idle callback is triggered
+ // (i.e. after all queued tasks have finished running).
+ var whenDone = new Promise(function(resolve) {
+ queue.setIdleCallback(
+ function() {
+ // Verify that the idle callback is called after the task runs.
+ assertTrue(task.wasRun);
+ resolve();
+ });
+ });
+
+ // Queue a task, then check that the idle callback was triggered.
+ queue.queueTask(task);
+ reportPromise(whenDone, callback);
+}
+
+// Verifies that the update callback is called when a task reports progress.
+function testProgressUpdate(callback) {
+ var task = new TestTask();
+
+ // Get the task to report some progress, then success, when it's run.
+ task.whenRun()
+ .then(
+ function(task) {
+ task.notifyProgress();
+ return task;
+ })
+ .then(
+ function(task) {
+ task.notifySuccess();
+ return task;
+ });
+
+ // Make a promise that resolves after the task runs.
+ var whenDone = new Promise(function(resolve) {
+ queue.setIdleCallback(
+ function() {
+ // Verify that progress was recorded.
+ assertEquals(1, updates[importer.TaskQueue.UpdateType.PROGRESS]);
+ resolve();
+ });
+ });
+
+ queue.queueTask(task);
+ reportPromise(whenDone, callback);
+}
+
+// Verifies that the update callback is called to report successful task
+// completion.
+function testSuccessUpdate(callback) {
+ var task = new TestTask();
+
+ // Get the task to report success when it's run.
+ task.whenRun().then(function(task) { task.notifySuccess(); });
+
+ queue.queueTask(task);
+
+ var whenDone = new Promise(function(resolve) {
+ queue.setIdleCallback(
+ function() {
+ // Verify that the done callback was called.
+ assertEquals(1, updates[importer.TaskQueue.UpdateType.SUCCESS]);
+ resolve();
+ });
+ });
+
+ reportPromise(whenDone, callback);
+}
+
+// Verifies that the update callback is called to report task errors.
+function testErrorUpdate(callback) {
+ var task = new TestTask();
+
+ // Get the task to report an error when it's run.
+ task.whenRun().then(function(task) { task.notifyError(); });
+
+ queue.queueTask(task);
+
+ var whenDone = new Promise(function(resolve) {
+ queue.setIdleCallback(
+ function() {
+ // Verify that the done callback was called.
+ assertEquals(1, updates[importer.TaskQueue.UpdateType.ERROR]);
+ resolve();
+ });
+ });
+
+ reportPromise(whenDone, callback);
+}

Powered by Google App Engine
This is Rietveld 408576698