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

Unified Diff: chrome/test/data/webui/test_api.js

Issue 5151418134560768: Adding first unit tests with mocks (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More arv@ notes Created 7 years, 5 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
« no previous file with comments | « chrome/browser/resources/google_now/background_unittest.gtestjs ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/data/webui/test_api.js
diff --git a/chrome/test/data/webui/test_api.js b/chrome/test/data/webui/test_api.js
index 9dc23c1b3e11720b6f0cb0ae488e8e7f326e754d..ebbdfd937bb7fe538c18c920682b70f095303f24 100644
--- a/chrome/test/data/webui/test_api.js
+++ b/chrome/test/data/webui/test_api.js
@@ -198,6 +198,36 @@ var testing = {};
},
/**
+ * Create a container of mocked standalone functions to handle
+ * '.'-separated |apiNames|, assign it to |this.mockApis|, register its API
+ * overrides and return it.
+ * @return {Mock} Mock handler class.
+ * @see makeMockFunctions
+ * @see registerMockApis
+ */
+ makeAndRegisterMockApis: function (apiNames) {
+ var apiMockNames = apiNames.map(function(name) {
+ return name.replace(/\./g, '_');
+ });
+
+ this.mockApis = makeMockFunctions(apiMockNames);
+ registerMockApis(this.mockApis);
+ return this.mockApis;
+ },
+
+ /**
+ * Create a container of mocked standalone functions to handle
+ * |functionNames|, assign it to |this.mockLocalFunctions| and return it.
+ * @param {!Array.<string>} functionNames
+ * @return {Mock} Mock handler class.
+ * @see makeMockFunctions
+ */
+ makeMockLocalFunctions: function(functionNames) {
+ this.mockLocalFunctions = makeMockFunctions(functionNames);
+ return this.mockLocalFunctions;
+ },
+
+ /**
* Override this method to perform initialization during preload (such as
* creating mocks and registering handlers).
* @type {Function}
@@ -506,6 +536,28 @@ var testing = {};
}
/**
+ * Registers the mock API call and its function.
+ * @param {string} name The '_'-separated name of the API call.
+ * @param {function(...)} theFunction Mock function for this API call.
+ */
+ function registerMockApi(name, theFunction) {
+ var path = name.split('_');
+
+ var namespace = this;
+ for(var i = 0; i < path.length - 1; i++) {
+ var fieldName = path[i];
+ if(!namespace[fieldName])
+ namespace[fieldName] = {};
+
+ namespace = namespace[fieldName];
+ }
+
+ var fieldName = path[path.length-1];
+ assertEquals(undefined, namespace[fieldName]);
+ namespace[fieldName] = theFunction;
+ }
+
+ /**
* Empty function for use in making mocks.
* @const
*/
@@ -525,6 +577,31 @@ var testing = {};
}
/**
+ * Create a new class to handle |functionNames|, add method 'functions()'
+ * that returns a container of standalone functions based on the mock class
+ * members, and return it.
+ * @return {Mock} Mock handler class.
+ */
+ function makeMockFunctions(functionNames) {
+ var MockClass = makeMockClass(functionNames);
+ var mockFunctions = mock(MockClass);
+ var mockProxy = mockFunctions.proxy();
+
+ mockFunctions.functions_ = {};
+
+ for (var func in MockClass.prototype) {
+ if (typeof MockClass.prototype[func] === 'function')
+ mockFunctions.functions_[func] = mockProxy[func].bind(mockProxy);
+ }
+
+ mockFunctions.functions = function () {
+ return this.functions_;
+ };
+
+ return mockFunctions;
+ }
+
+ /**
* Register all methods of {@code mockClass.prototype} as overrides to global
* functions of the same name as the method, using the proxy of the
* |mockObject| to handle the functions.
@@ -541,6 +618,19 @@ var testing = {};
}
/**
+ * Register all functions in |mockObject.functions()| as global API calls.
+ * @param {Mock4JS.Mock} mockObject The mock to register callbacks against.
+ * @see registerMockApi
+ */
+ function registerMockApis(mockObject) {
+ var functions = mockObject.functions();
+ for (var func in functions) {
+ if (typeof functions[func] === 'function')
+ registerMockApi(func, functions[func]);
+ }
+ }
+
+ /**
* Overrides {@code chrome.send} for routing messages to javascript
* functions. Also falls back to sending with the original chrome object.
* @param {string} messageName The message to route.
« no previous file with comments | « chrome/browser/resources/google_now/background_unittest.gtestjs ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698