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

Side by Side 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: 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @fileoverview Library providing basic test framework functionality. 6 * @fileoverview Library providing basic test framework functionality.
7 */ 7 */
8 8
9 /** 9 /**
10 * Namespace for |Test|. 10 * Namespace for |Test|.
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 * @see registerMockGlobals 191 * @see registerMockGlobals
192 */ 192 */
193 makeAndRegisterMockGlobals: function(functionNames) { 193 makeAndRegisterMockGlobals: function(functionNames) {
194 var MockClass = makeMockClass(functionNames); 194 var MockClass = makeMockClass(functionNames);
195 this.mockGlobals = mock(MockClass); 195 this.mockGlobals = mock(MockClass);
196 registerMockGlobals(this.mockGlobals, MockClass); 196 registerMockGlobals(this.mockGlobals, MockClass);
197 return this.mockGlobals; 197 return this.mockGlobals;
198 }, 198 },
199 199
200 /** 200 /**
201 * Create a container of mocked standalone functions to handle
202 * '.'-separated |apiNames|, assign it to |this.mockApis|, register its API
203 * overrides and return it.
204 * @return {Mock} Mock handler class.
205 * @see makeMockFunctions
206 * @see registerMockApis
207 */
208 makeAndRegisterMockApis: function (apiNames) {
209 var apiMockNames = [];
210 for(var i = 0; i < apiNames.length; i++) {
211 apiMockNames.push(apiNames [i].replace(/\./g, '_'));
212 }
213
214 this.mockApis = makeMockFunctions(apiMockNames);
215 registerMockApis(this.mockApis);
216 return this.mockApis;
217 },
218
219 /**
220 * Create a container of mocked standalone functions to handle
221 * |functionNames|, assign it to |this.mockLocalFunctions| and return it.
222 * @return {Mock} Mock handler class.
223 * @see makeMockFunctions
224 */
225 makeMockLocalFunctions: function(functionNames) {
226 this.mockLocalFunctions = makeMockFunctions(functionNames);
227 return this.mockLocalFunctions;
228 },
229
230 /**
201 * Override this method to perform initialization during preload (such as 231 * Override this method to perform initialization during preload (such as
202 * creating mocks and registering handlers). 232 * creating mocks and registering handlers).
203 * @type {Function} 233 * @type {Function}
204 */ 234 */
205 preLoad: function() {}, 235 preLoad: function() {},
206 236
207 /** 237 /**
208 * Override this method to perform tasks before running your test. 238 * Override this method to perform tasks before running your test.
209 * @type {Function} 239 * @type {Function}
210 */ 240 */
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 globalOverrides[name] = { 529 globalOverrides[name] = {
500 object: object, 530 object: object,
501 callback: callback, 531 callback: callback,
502 }; 532 };
503 533
504 if (!deferGlobalOverrides) 534 if (!deferGlobalOverrides)
505 overrideGlobal(name); 535 overrideGlobal(name);
506 } 536 }
507 537
508 /** 538 /**
539 * Registers the mock API call and its function.
540 * @param {string} name The '_'-separated name of the API call.
541 * @param {function(...)} theFunction Mock function for this API call.
542 */
543 function registerMockApi(name, theFunction) {
544 var path = name.split('_');
545
546 var namespace = this;
547 for(var i = 0; i < path.length-1; ++i) {
548 var fieldName = path[i];
549 if(!namespace[fieldName])
550 namespace[fieldName] = {};
551
552 namespace = namespace[fieldName];
553 }
554
555 var fieldName = path[path.length-1];
556 assertEquals(undefined, namespace[fieldName]);
557 namespace[fieldName] = theFunction;
558 }
559
560 /**
509 * Empty function for use in making mocks. 561 * Empty function for use in making mocks.
510 * @const 562 * @const
511 */ 563 */
512 function emptyFunction() {} 564 function emptyFunction() {}
513 565
514 /** 566 /**
515 * Make a mock from the supplied |methodNames| array. 567 * Make a mock from the supplied |methodNames| array.
516 * @param {Array.<string>} methodNames Array of names of methods to mock. 568 * @param {Array.<string>} methodNames Array of names of methods to mock.
517 * @return {Function} Constructor with prototype filled in with methods 569 * @return {Function} Constructor with prototype filled in with methods
518 * matching |methodNames|. 570 * matching |methodNames|.
519 */ 571 */
520 function makeMockClass(methodNames) { 572 function makeMockClass(methodNames) {
521 function MockConstructor() {} 573 function MockConstructor() {}
522 for(var i = 0; i < methodNames.length; i++) 574 for(var i = 0; i < methodNames.length; i++)
523 MockConstructor.prototype[methodNames[i]] = emptyFunction; 575 MockConstructor.prototype[methodNames[i]] = emptyFunction;
524 return MockConstructor; 576 return MockConstructor;
525 } 577 }
526 578
527 /** 579 /**
580 * Create a new class to handle |functionNames|, add method 'functions()'
581 * that returns a container of standalone functions based on the mock class
582 * members, and return it.
583 * @return {Mock} Mock handler class.
584 */
585 function makeMockFunctions(functionNames) {
586 var MockClass = makeMockClass(functionNames);
587 var mockFunctions = mock(MockClass);
588 var mockProxy = mockFunctions.proxy();
589
590 mockFunctions._functions = {};
arv (Not doing code reviews) 2013/07/11 20:59:44 functions_
vadimt 2013/07/11 21:28:10 Done.
591
592 for (var func in MockClass.prototype) {
593 if (typeof MockClass.prototype[func] === 'function')
594 mockFunctions._functions[func] = mockProxy[func].bind(mockProxy);
595 }
596
597 mockFunctions.functions = function () {
598 return this._functions;
599 };
600
601 return mockFunctions;
602 }
603
604 /**
528 * Register all methods of {@code mockClass.prototype} as overrides to global 605 * Register all methods of {@code mockClass.prototype} as overrides to global
529 * functions of the same name as the method, using the proxy of the 606 * functions of the same name as the method, using the proxy of the
530 * |mockObject| to handle the functions. 607 * |mockObject| to handle the functions.
531 * @param {Mock4JS.Mock} mockObject The mock to register callbacks against. 608 * @param {Mock4JS.Mock} mockObject The mock to register callbacks against.
532 * @param {function(new:Object)} mockClass Constructor for the mocked class. 609 * @param {function(new:Object)} mockClass Constructor for the mocked class.
533 * @see registerMockGlobal 610 * @see registerMockGlobal
534 */ 611 */
535 function registerMockGlobals(mockObject, mockClass) { 612 function registerMockGlobals(mockObject, mockClass) {
536 var mockProxy = mockObject.proxy(); 613 var mockProxy = mockObject.proxy();
537 for (var func in mockClass.prototype) { 614 for (var func in mockClass.prototype) {
538 if (typeof mockClass.prototype[func] === 'function') 615 if (typeof mockClass.prototype[func] === 'function')
539 registerMockGlobal(func, mockProxy, mockProxy[func]); 616 registerMockGlobal(func, mockProxy, mockProxy[func]);
540 } 617 }
541 } 618 }
542 619
543 /** 620 /**
621 * Register all functions in |mockObject.functions()| as global API calls.
622 * @param {Mock4JS.Mock} mockObject The mock to register callbacks against.
623 * @see registerMockApi
624 */
625 function registerMockApis(mockObject) {
626 var functions = mockObject.functions();
627 for (var func in functions) {
628 if (typeof functions[func] === 'function')
629 registerMockApi(func, functions[func]);
630 }
631 }
632
633 /**
544 * Overrides {@code chrome.send} for routing messages to javascript 634 * Overrides {@code chrome.send} for routing messages to javascript
545 * functions. Also falls back to sending with the original chrome object. 635 * functions. Also falls back to sending with the original chrome object.
546 * @param {string} messageName The message to route. 636 * @param {string} messageName The message to route.
547 */ 637 */
548 function send(messageName) { 638 function send(messageName) {
549 var callback = sendCallbacks[messageName]; 639 var callback = sendCallbacks[messageName];
550 if (callback != undefined) 640 if (callback != undefined)
551 callback[1].apply(callback[0], Array.prototype.slice.call(arguments, 1)); 641 callback[1].apply(callback[0], Array.prototype.slice.call(arguments, 1));
552 else 642 else
553 this.__proto__.send.apply(this.__proto__, arguments); 643 this.__proto__.send.apply(this.__proto__, arguments);
(...skipping 982 matching lines...) Expand 10 before | Expand all | Expand 10 after
1536 exports.TEST = TEST; 1626 exports.TEST = TEST;
1537 exports.TEST_F = TEST_F; 1627 exports.TEST_F = TEST_F;
1538 exports.RUNTIME_TEST_F = TEST_F; 1628 exports.RUNTIME_TEST_F = TEST_F;
1539 exports.GEN = GEN; 1629 exports.GEN = GEN;
1540 exports.GEN_INCLUDE = GEN_INCLUDE; 1630 exports.GEN_INCLUDE = GEN_INCLUDE;
1541 exports.WhenTestDone = WhenTestDone; 1631 exports.WhenTestDone = WhenTestDone;
1542 1632
1543 // Import the Mock4JS helpers. 1633 // Import the Mock4JS helpers.
1544 Mock4JS.addMockSupport(exports); 1634 Mock4JS.addMockSupport(exports);
1545 })(this); 1635 })(this);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698