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

Side by Side Diff: chrome/test/data/extensions/api_test/tabs/test.js

Issue 195090: Address ExtensionApiTest.Tabs flakiness (Closed)
Patch Set: pre commit 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
« no previous file with comments | « chrome/test/data/extensions/api_test/tabs/f.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // tabs api test 1 // tabs api test
2 // browser_tests.exe --gtest_filter=ExtensionApiTest.Tabs 2 // browser_tests.exe --gtest_filter=ExtensionApiTest.Tabs
3 3
4 // We have a bunch of places where we need to remember some state from one 4 // We have a bunch of places where we need to remember some state from one
5 // test (or setup code) to subsequent tests. 5 // test (or setup code) to subsequent tests.
6 var firstWindowId = null; 6 var firstWindowId = null;
7 var secondWindowId = null; 7 var secondWindowId = null;
8 var firstTabIndex = null; 8 var firstTabIndex = null;
9 var testTabId = null; 9 var testTabId = null;
10 10
11 var moveWindow1 = null; 11 var moveWindow1 = null;
12 var moveWindow2 = null; 12 var moveWindow2 = null;
13 var moveTabIds = {}; 13 var moveTabIds = {};
14 14
15 var pass = chrome.test.callbackPass; 15 var pass = chrome.test.callbackPass;
16 var assertEq = chrome.test.assertEq; 16 var assertEq = chrome.test.assertEq;
17 var assertTrue = chrome.test.assertTrue; 17 var assertTrue = chrome.test.assertTrue;
18 18
19 // Called by relative.html during onload. 19 function pageUrl(letter) {
20 function relativePageLoaded() { 20 return chrome.extension.getURL(letter + ".html");
21 chrome.test.succeed();
22 } 21 }
23 22
24 chrome.test.runTests([ 23 chrome.test.runTests([
25 function getSelected() { 24 function getSelected() {
26 chrome.tabs.getSelected(null, pass(function(tab) { 25 chrome.tabs.getSelected(null, pass(function(tab) {
27 assertEq("about:blank", tab.url); 26 assertEq("about:blank", tab.url);
28 assertEq("about:blank", tab.title); 27 assertEq("about:blank", tab.title);
29 firstWindowId = tab.windowId; 28 firstWindowId = tab.windowId;
30 firstTabIndex = tab.index; 29 firstTabIndex = tab.index;
31 })); 30 }));
(...skipping 17 matching lines...) Expand all
49 // Setup a new window for later tests, and open some tabs in the 48 // Setup a new window for later tests, and open some tabs in the
50 // first and second windows. 49 // first and second windows.
51 function createWindow() { 50 function createWindow() {
52 // TODO(asargent) Add more tests for: 51 // TODO(asargent) Add more tests for:
53 // 1) window sizing/positioning. 52 // 1) window sizing/positioning.
54 // 2) passed url (relative & absolute) 53 // 2) passed url (relative & absolute)
55 chrome.windows.create({}, pass(function(win) { 54 chrome.windows.create({}, pass(function(win) {
56 assertTrue(win.id > 0); 55 assertTrue(win.id > 0);
57 secondWindowId = win.id; 56 secondWindowId = win.id;
58 // Create first window. 57 // Create first window.
59 chrome.tabs.create({"windowId" : firstWindowId, "url" : "chrome://a"}, 58 chrome.tabs.create({"windowId" : firstWindowId, "url" : pageUrl("a")},
60 pass(function() { 59 pass(function() {
61 // Create second window. 60 // Create second window.
62 chrome.tabs.create({"windowId" : secondWindowId, "url" : "chrome://b"}, 61 chrome.tabs.create({"windowId" : secondWindowId, "url" :pageUrl("b")},
63 pass()); 62 pass());
64 })); 63 }));
65 })); 64 }));
66 }, 65 },
67 66
68 function getAllFirstWindow() { 67 function getAllFirstWindow() {
69 // TODO(asargent) Add test for passing null for windowId - this should 68 // TODO(asargent) Add test for passing null for windowId - this should
70 // default to the "current" window. 69 // default to the "current" window.
71 chrome.tabs.getAllInWindow(firstWindowId, 70 chrome.tabs.getAllInWindow(firstWindowId,
72 pass(function(tabs) { 71 pass(function(tabs) {
73 assertEq(3, tabs.length); 72 assertEq(3, tabs.length);
74 for (var i = 0; i < tabs.length; i++) { 73 for (var i = 0; i < tabs.length; i++) {
75 assertEq(firstWindowId, tabs[i].windowId); 74 assertEq(firstWindowId, tabs[i].windowId);
76 assertEq(i, tabs[i].index); 75 assertEq(i, tabs[i].index);
77 76
78 // The most recent tab should be selected 77 // The most recent tab should be selected
79 assertEq((i == 2), tabs[i].selected); 78 assertEq((i == 2), tabs[i].selected);
80 } 79 }
81 assertEq("about:blank", tabs[0].url); 80 assertEq("about:blank", tabs[0].url);
82 assertEq("chrome://newtab/", tabs[1].url); 81 assertEq("chrome://newtab/", tabs[1].url);
83 assertEq("chrome://a/", tabs[2].url); 82 assertEq(pageUrl("a"), tabs[2].url);
84 testTabId = tabs[2].id; 83 testTabId = tabs[2].id;
85 })); 84 }));
86 }, 85 },
87 86
88 function getAllSecondWindow() { 87 function getAllSecondWindow() {
89 chrome.tabs.getAllInWindow(secondWindowId, 88 chrome.tabs.getAllInWindow(secondWindowId,
90 pass(function(tabs) { 89 pass(function(tabs) {
91 assertEq(2, tabs.length); 90 assertEq(2, tabs.length);
92 for (var i = 0; i < tabs.length; i++) { 91 for (var i = 0; i < tabs.length; i++) {
93 assertEq(secondWindowId, tabs[i].windowId); 92 assertEq(secondWindowId, tabs[i].windowId);
94 assertEq(i, tabs[i].index); 93 assertEq(i, tabs[i].index);
95 } 94 }
96 assertEq("chrome://newtab/", tabs[0].url); 95 assertEq("chrome://newtab/", tabs[0].url);
97 assertEq("chrome://b/", tabs[1].url); 96 assertEq(pageUrl("b"), tabs[1].url);
98 })); 97 }));
99 }, 98 },
100 99
101 function updateUrl() { 100 function updateUrl() {
102 chrome.tabs.get(testTabId, pass(function(tab) { 101 chrome.tabs.get(testTabId, pass(function(tab) {
103 assertEq("chrome://a/", tab.url); 102 assertEq(pageUrl("a"), tab.url);
104 // Update url. 103 // Update url.
105 chrome.tabs.update(testTabId, {"url": "chrome://c/"}, 104 chrome.tabs.update(testTabId, {"url": pageUrl("c")},
106 pass(function(tab){ 105 pass(function(tab){
107 chrome.test.assertEq("chrome://c/", tab.url); 106 chrome.test.assertEq(pageUrl("c"), tab.url);
108 // Check url. 107 // Check url.
109 chrome.tabs.get(testTabId, pass(function(tab) { 108 chrome.tabs.get(testTabId, pass(function(tab) {
110 assertEq("chrome://c/", tab.url); 109 assertEq(pageUrl("c"), tab.url);
111 })); 110 }));
112 })); 111 }));
113 })); 112 }));
114 }, 113 },
115 114
116 function updateSelect() { 115 function updateSelect() {
117 chrome.tabs.getAllInWindow(firstWindowId, pass(function(tabs) { 116 chrome.tabs.getAllInWindow(firstWindowId, pass(function(tabs) {
118 assertEq(false, tabs[1].selected); 117 assertEq(false, tabs[1].selected);
119 assertEq(true, tabs[2].selected); 118 assertEq(true, tabs[2].selected);
120 // Select tab[1]. 119 // Select tab[1].
(...skipping 30 matching lines...) Expand all
151 })); 150 }));
152 })); 151 }));
153 })); 152 }));
154 }, 153 },
155 154
156 // Create a bunch of tabs and record the resulting ids. 155 // Create a bunch of tabs and record the resulting ids.
157 function moveTabsSetup2() { 156 function moveTabsSetup2() {
158 var letters = ['a', 'b', 'c', 'd', 'e']; 157 var letters = ['a', 'b', 'c', 'd', 'e'];
159 for (var i in letters) { 158 for (var i in letters) {
160 chrome.tabs.create({"windowId": moveWindow1, 159 chrome.tabs.create({"windowId": moveWindow1,
161 "url": "chrome://" + letters[i]}, 160 "url": pageUrl(letters[i])},
162 pass(function(tab) { 161 pass(function(tab) {
163 var letter = tab.url[tab.url.length-2]; 162 var letter = tab.url[tab.url.length-6];
164 moveTabIds[letter] = tab.id; 163 moveTabIds[letter] = tab.id;
165 164
166 // Assert on last callback that tabs were added in the order we created 165 // Assert on last callback that tabs were added in the order we created
167 // them. 166 // them.
168 if (letter == 'e') { 167 if (letter == 'e') {
169 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) { 168 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) {
170 assertEq(6, tabs.length); 169 assertEq(6, tabs.length);
171 assertEq("chrome://newtab/", tabs[0].url); 170 assertEq("chrome://newtab/", tabs[0].url);
172 assertEq("chrome://a/", tabs[1].url); 171 assertEq(pageUrl("a"), tabs[1].url);
173 assertEq("chrome://b/", tabs[2].url); 172 assertEq(pageUrl("b"), tabs[2].url);
174 assertEq("chrome://c/", tabs[3].url); 173 assertEq(pageUrl("c"), tabs[3].url);
175 assertEq("chrome://d/", tabs[4].url); 174 assertEq(pageUrl("d"), tabs[4].url);
176 assertEq("chrome://e/", tabs[5].url); 175 assertEq(pageUrl("e"), tabs[5].url);
177 })); 176 }));
178 } 177 }
179 })); 178 }));
180 } 179 }
181 }, 180 },
182 181
183 // Do a series of moves so that we get the following 182 // Do a series of moves so that we get the following
184 // 183 //
185 // Before: 184 // Before:
186 // Window1: (newtab),a,b,c,d,e 185 // Window1: (newtab),a,b,c,d,e
(...skipping 15 matching lines...) Expand all
202 })); 201 }));
203 })); 202 }));
204 })); 203 }));
205 }, 204 },
206 205
207 // Check that the tab/window state is what we expect after doing moves. 206 // Check that the tab/window state is what we expect after doing moves.
208 function moveTabsCheck() { 207 function moveTabsCheck() {
209 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) { 208 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) {
210 assertEq(4, tabs.length); 209 assertEq(4, tabs.length);
211 assertEq("chrome://newtab/", tabs[0].url); 210 assertEq("chrome://newtab/", tabs[0].url);
212 assertEq("chrome://a/", tabs[1].url); 211 assertEq(pageUrl("a"), tabs[1].url);
213 assertEq("chrome://e/", tabs[2].url); 212 assertEq(pageUrl("e"), tabs[2].url);
214 assertEq("chrome://c/", tabs[3].url); 213 assertEq(pageUrl("c"), tabs[3].url);
215 214
216 chrome.tabs.getAllInWindow(moveWindow2, pass(function(tabs) { 215 chrome.tabs.getAllInWindow(moveWindow2, pass(function(tabs) {
217 assertEq(3, tabs.length); 216 assertEq(3, tabs.length);
218 assertEq("chrome://b/", tabs[0].url); 217 assertEq(pageUrl("b"), tabs[0].url);
219 assertEq("chrome://newtab/", tabs[1].url); 218 assertEq("chrome://newtab/", tabs[1].url);
220 assertEq("chrome://d/", tabs[2].url); 219 assertEq(pageUrl("d"), tabs[2].url);
221 })); 220 }));
222 })); 221 }));
223 }, 222 },
224 223
225 function remove() { 224 function remove() {
226 chrome.tabs.remove(moveTabIds["d"], pass(function() { 225 chrome.tabs.remove(moveTabIds["d"], pass(function() {
227 chrome.tabs.getAllInWindow(moveWindow2, 226 chrome.tabs.getAllInWindow(moveWindow2,
228 pass(function(tabs) { 227 pass(function(tabs) {
229 assertEq(2, tabs.length); 228 assertEq(2, tabs.length);
230 assertEq("chrome://b/", tabs[0].url); 229 assertEq(pageUrl("b"), tabs[0].url);
231 assertEq("chrome://newtab/", tabs[1].url); 230 assertEq("chrome://newtab/", tabs[1].url);
232 })); 231 }));
233 })); 232 }));
234 }, 233 },
235 234
236 function detectLanguage() { 235 function detectLanguage() {
237 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) { 236 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) {
238 chrome.tabs.detectLanguage(tabs[0].id, pass(function(lang) { 237 chrome.tabs.detectLanguage(tabs[0].id, pass(function(lang) {
239 assertEq("en", lang); 238 assertEq("en", lang);
240 })); 239 }));
(...skipping 28 matching lines...) Expand all
269 assertEq("string", typeof(url)); 268 assertEq("string", typeof(url));
270 assertTrue(url.length > 0); 269 assertTrue(url.length > 0);
271 assertTrue(url == window1Url || url == window2Url); 270 assertTrue(url == window1Url || url == window2Url);
272 })); 271 }));
273 })); 272 }));
274 })); 273 }));
275 }, */ 274 }, */
276 275
277 function onCreated() { 276 function onCreated() {
278 chrome.test.listenOnce(chrome.tabs.onCreated, function(tab) { 277 chrome.test.listenOnce(chrome.tabs.onCreated, function(tab) {
279 assertEq("chrome://f/", tab.url); 278 assertEq(pageUrl("f"), tab.url);
280 }); 279 });
281 280
282 chrome.tabs.create({"windowId": moveWindow1, "url": "chrome://f", 281 chrome.tabs.create({"windowId": moveWindow1, "url": pageUrl("f"),
283 "selected": true}, pass(function(tab) {})); 282 "selected": true}, pass(function(tab) {}));
284 }, 283 },
285 284
286 function onUpdated() { 285 function onUpdated() {
287 var listener = chrome.test.listenForever(chrome.tabs.onUpdated, 286 var onUpdatedCompleted = chrome.test.listenForever(chrome.tabs.onUpdated,
288 function(tabid, info) { 287 function(tabid, info) {
289 if (tabid == moveTabIds['a'] && info.status == "complete") { 288 if (tabid == moveTabIds['a'] && info.status == "complete") {
290 listener.doneListening(); 289 onUpdatedCompleted();
291 } 290 }
292 } 291 }
293 ); 292 );
294 293
295 chrome.tabs.update(moveTabIds['a'], {"url": "chrome://aa"}, 294 chrome.tabs.update(moveTabIds['a'], {"url": pageUrl("f")},
296 pass()); 295 pass());
297 }, 296 },
298 297
299 function onMoved() { 298 function onMoved() {
300 chrome.test.listenOnce(chrome.tabs.onMoved, function(tabid, info) { 299 chrome.test.listenOnce(chrome.tabs.onMoved, function(tabid, info) {
301 assertEq(moveTabIds['a'], tabid); 300 assertEq(moveTabIds['a'], tabid);
302 }); 301 });
303 302
304 chrome.tabs.move(moveTabIds['a'], {"index": 0}, pass()); 303 chrome.tabs.move(moveTabIds['a'], {"index": 0}, pass());
305 }, 304 },
(...skipping 25 matching lines...) Expand all
331 chrome.windows.getAll({}, pass(function(windows) { 330 chrome.windows.getAll({}, pass(function(windows) {
332 for (var i = 0; i < windows.length; i++) { 331 for (var i = 0; i < windows.length; i++) {
333 if (windows[i].id != firstWindowId) { 332 if (windows[i].id != firstWindowId) {
334 chrome.windows.remove(windows[i].id, pass()); 333 chrome.windows.remove(windows[i].id, pass());
335 } 334 }
336 } 335 }
337 })); 336 }));
338 })); 337 }));
339 }, 338 },
340 339
341 // The subsequent three tests all load relative.html, which calls
342 // this page's relativePageLoad(), which ends the test.
343 function relativeUrlTabsCreate() { 340 function relativeUrlTabsCreate() {
341 // Will be called from relative.html
342 window.relativePageLoaded = chrome.test.callbackAdded();
343 var createCompleted = chrome.test.callbackAdded();
344
344 chrome.tabs.create({windowId: firstWindowId, url: 'relative.html'}, 345 chrome.tabs.create({windowId: firstWindowId, url: 'relative.html'},
345 function(tab){ 346 function(tab){
346 testTabId = tab.id; 347 testTabId = tab.id;
348 createCompleted();
347 } 349 }
348 ); 350 );
349 }, 351 },
350 352
351 function relativeUrlTabsUpdate() { 353 function relativeUrlTabsUpdate() {
352 chrome.tabs.update(testTabId, {url: "chrome://a/"}, function(tab) { 354 // Will be called from relative.html
353 chrome.test.assertEq("chrome://a/", tab.url); 355 window.relativePageLoaded = chrome.test.callbackAdded();
356
357 chrome.tabs.update(testTabId, {url: pageUrl("a")}, function(tab) {
358 chrome.test.assertEq(pageUrl("a"), tab.url);
354 chrome.tabs.update(tab.id, {url: "relative.html"}, function(tab) { 359 chrome.tabs.update(tab.id, {url: "relative.html"}, function(tab) {
355 }); 360 });
356 }); 361 });
357 }, 362 },
358 363
359 function relativeUrlWindowsCreate() { 364 function relativeUrlWindowsCreate() {
365 // Will be called from relative.html
366 window.relativePageLoaded = chrome.test.callbackAdded();
367
360 chrome.windows.create({url: "relative.html"}); 368 chrome.windows.create({url: "relative.html"});
361 } 369 }
362 370
363 // TODO(asargent) We still need to add tests for the following: 371 // TODO(asargent) We still need to add tests for the following:
364 // Methods: 372 // Methods:
365 // -chrome.tabs.connect 373 // -chrome.tabs.connect
366 // Events: 374 // Events:
367 // -chrome.tabs.onAttached 375 // -chrome.tabs.onAttached
368 // -chrome.tabs.onDetched 376 // -chrome.tabs.onDetched
369 // 377 //
370 // Also, it would be an improvement to check the captureVisibleTab results 378 // Also, it would be an improvement to check the captureVisibleTab results
371 // against a known-good result. 379 // against a known-good result.
372 ]); 380 ]);
OLDNEW
« no previous file with comments | « chrome/test/data/extensions/api_test/tabs/f.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698