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

Side by Side Diff: chrome/renderer/resources/extension_apitest.js

Issue 192028: finished testing functions and added events to bookmark tests. (Closed)
Patch Set: feedback from review Created 11 years, 3 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
OLDNEW
1 // extension_apitest.js 1 // extension_apitest.js
2 // mini-framework for ExtensionApiTest browser tests 2 // mini-framework for ExtensionApiTest browser tests
3 3
4 var chrome = chrome || {}; 4 var chrome = chrome || {};
5 (function() { 5 (function() {
6 chrome.test = chrome.test || {}; 6 chrome.test = chrome.test || {};
7 7
8 chrome.test.tests = chrome.test.tests || []; 8 chrome.test.tests = chrome.test.tests || [];
9 9
10 var completed = false; 10 var completed = false;
11 var currentTest; 11 var currentTest = null;
12 var lastTest = null;
12 13
13 function complete() { 14 function complete() {
14 completed = true; 15 completed = true;
15 16
16 // Try to get the script to stop running immediately. 17 // Try to get the script to stop running immediately.
17 // This isn't an error, just an attempt at saying "done". 18 // This isn't an error, just an attempt at saying "done".
18 throw "completed"; 19 throw "completed";
19 } 20 }
20 21
21 chrome.test.fail = function(message) { 22 chrome.test.fail = function(message) {
(...skipping 19 matching lines...) Expand all
41 }; 42 };
42 43
43 function allTestsSucceeded() { 44 function allTestsSucceeded() {
44 console.log("All tests succeeded"); 45 console.log("All tests succeeded");
45 if (completed) throw "completed"; 46 if (completed) throw "completed";
46 47
47 chrome.test.notifyPass(); 48 chrome.test.notifyPass();
48 complete(); 49 complete();
49 } 50 }
50 51
52 var pendingCallbacks = 0;
53 var totalCallbacks = 0;
54
55 function callbackAdded() {
56 pendingCallbacks++;
57 chrome.test.assertEq(totalCallbacks, 0);
58 };
59
60 function callbackCompleted() {
61 if (!totalCallbacks)
62 totalCallbacks = pendingCallbacks;
63 pendingCallbacks--;
64 if (pendingCallbacks == 0) {
65 chrome.test.log(" " + totalCallbacks + " callbacks ran");
66 totalCallbacks = 0;
67 chrome.test.succeed();
68 }
69 };
70
51 chrome.test.runNextTest = function() { 71 chrome.test.runNextTest = function() {
72 chrome.test.assertEq(pendingCallbacks, 0);
73 lastTest = currentTest;
52 currentTest = chrome.test.tests.shift(); 74 currentTest = chrome.test.tests.shift();
53 if (!currentTest) { 75 if (!currentTest) {
54 allTestsSucceeded(); 76 allTestsSucceeded();
55 return; 77 return;
56 } 78 }
57 try { 79 try {
58 chrome.test.log("( RUN ) " + currentTest.name); 80 chrome.test.log("( RUN ) " + currentTest.name);
59 currentTest.call(); 81 currentTest.call();
60 } catch (e) { 82 } catch (e) {
61 var message = e.stack; 83 var message = e.stack;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 "\nExpected Type:" + typeof(expected)); 119 "\nExpected Type:" + typeof(expected));
98 } 120 }
99 }; 121 };
100 122
101 chrome.test.assertNoLastError = function() { 123 chrome.test.assertNoLastError = function() {
102 if (chrome.extension.lastError != undefined) { 124 if (chrome.extension.lastError != undefined) {
103 chrome.test.fail("lastError.message == " + 125 chrome.test.fail("lastError.message == " +
104 chrome.extension.lastError.message); 126 chrome.extension.lastError.message);
105 } 127 }
106 }; 128 };
129
130 function safeFunctionApply(func, arguments) {
131 try {
132 if (func) {
133 func.apply(null, arguments);
134 }
135 } catch (e) {
136 var stack = null;
137 if (typeof(e.stack) != "undefined") {
138 stack = e.stack.toString();
139 }
140 var msg = "Exception during execution of callback in " +
141 currentTest.name;
142 if (stack) {
143 msg += "\n" + stack;
144 } else {
145 msg += "\n(no stack available)";
146 }
147 chrome.test.fail(msg);
148 }
149 };
107 150
108 // Wrapper for generating test functions, that takes care of calling 151 // Wrapper for generating test functions, that takes care of calling
109 // assertNoLastError() and (optionally) succeed() for you. 152 // assertNoLastError() and (optionally) succeed() for you.
110 chrome.test.testCallback = function(succeedWhenDone, func) { 153 chrome.test.callback = function(func, expectedError) {
154 chrome.test.assertEq(typeof(func), 'function');
155 callbackAdded();
111 return function() { 156 return function() {
112 chrome.test.assertNoLastError(); 157 if (expectedError == null) {
113 try { 158 chrome.test.assertNoLastError();
114 if (func) { 159 } else {
115 func.apply(null, arguments); 160 chrome.test.assertEq(typeof(expectedError), 'string');
116 } 161 chrome.test.assertEq(expectedError, chrome.extension.lastError.message);
117 } catch (e) {
118 var stack = null;
119 if (typeof(e.stack) != "undefined") {
120 stack = e.stack.toString();
121 }
122 var msg = "Exception during execution of testCallback in " +
123 currentTest.name;
124 if (stack) {
125 msg += "\n" + stack;
126 } else {
127 msg += "\n(no stack available)";
128 }
129 chrome.test.fail(msg);
130 } 162 }
131 if (succeedWhenDone) { 163 safeFunctionApply(func, arguments);
132 chrome.test.succeed(); 164 callbackCompleted();
133 }
134 }; 165 };
135 }; 166 };
167
168 chrome.test.listenOnce = function(event, func) {
169 callbackAdded();
170 var listener = function() {
171 event.removeListener(listener);
172 safeFunctionApply(func, arguments);
173 callbackCompleted();
174 };
175 event.addListener(listener);
176 };
177
178 chrome.test.callbackPass = function(func) {
179 return chrome.test.callback(func);
180 };
136 181
182 chrome.test.callbackFail = function(func, expectedError) {
183 return chrome.test.callback(func, expectedError);
184 };
185
186 // TODO(erikkay) This is deprecated and should be removed.
187 chrome.test.testCallback = function(succeedWhenDone, func) {
188 return chrome.test.callback(func);
189 };
190
137 chrome.test.runTests = function(tests) { 191 chrome.test.runTests = function(tests) {
138 chrome.test.tests = tests; 192 chrome.test.tests = tests;
139 chrome.test.runNextTest(); 193 chrome.test.runNextTest();
140 }; 194 };
141 195
142 })(); 196 })();
OLDNEW
« no previous file with comments | « chrome/renderer/renderer_resources.grd ('k') | chrome/test/data/extensions/api_test/bookmarks/test.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698