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

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

Issue 174633: Add browser tests for extensions tab API. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' 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 | Annotate | Revision Log
« no previous file with comments | « chrome/test/data/extensions/api_test/tabs/test.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')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // tabs api test
2 // browser_tests.exe --gtest_filter=ExtensionApiTest.Tabs
3
4 // We have a bunch of places where we need to remember some state from one
5 // test (or setup code) to subsequent tests.
6 var firstWindowId = null;
7 var secondWindowId = null;
8 var firstTabIndex = null;
9 var testTabId = null;
10
11 var moveWindow1 = null;
12 var moveWindow2 = null;
13 var moveTabIds = {};
14
15 var testCallback = chrome.test.testCallback;
16 var assertEq = chrome.test.assertEq;
17 var assertTrue = chrome.test.assertTrue;
18
19 chrome.test.runTests([
20 function getSelected() {
21 chrome.tabs.getSelected(null, testCallback(true, function(tab) {
22 assertEq("about:blank", tab.url);
23 assertEq("about:blank", tab.title);
24 firstWindowId = tab.windowId;
25 firstTabIndex = tab.index;
26 }));
27 },
28
29 function openNewTab() {
30 // TODO(asargent) Add more tests for the following cases:
31 // 1) two windows open. create tab in "other" window.
32 // 2) don't pass windowId. confirm created in "this" window.
33 // 3) pass index. confirm placed at correct index position.
34 // 4) pass selected. confirm is selected.
35 chrome.tabs.create({"windowId" : firstWindowId, "selected" : false},
36 testCallback(true, function(tab){
37 assertTrue(tab.index > firstTabIndex);
38 assertEq(firstWindowId, tab.windowId);
39 assertEq(false, tab.selected);
40 assertEq("chrome://newtab/", tab.url);
41 }));
42 },
43
44 // Setup a new window for later tests, and open some tabs in the
45 // first and second windows.
46 function createWindow() {
47 // TODO(asargent) Add more tests for:
48 // 1) window sizing/positioning.
49 // 2) passed url (relative & absolute)
50 chrome.windows.create({}, testCallback(false, function(win) {
51 assertTrue(win.id > 0);
52 secondWindowId = win.id;
53 chrome.tabs.create({"windowId" : firstWindowId, "url" : "chrome://a"},
54 testCallback(false, null));
55 chrome.tabs.create({"windowId" : secondWindowId, "url" : "chrome://b"},
56 testCallback(true, null));
57 }));
58 },
59
60 function getAllFirstWindow() {
61 // TODO(asargent) Add test for passing null for windowId - this should
62 // default to the "current" window.
63 chrome.tabs.getAllInWindow(firstWindowId,
64 testCallback(true, function(tabs) {
65 assertEq(3, tabs.length);
66 for (var i = 0; i < tabs.length; i++) {
67 assertEq(firstWindowId, tabs[i].windowId);
68 assertEq(i, tabs[i].index);
69
70 // The most recent tab should be selected
71 assertEq((i == 2), tabs[i].selected);
72 }
73 assertEq("about:blank", tabs[0].url);
74 assertEq("chrome://newtab/", tabs[1].url);
75 assertEq("chrome://a/", tabs[2].url);
76 testTabId = tabs[2].id;
77 }));
78 },
79
80 function getAllSecondWindow() {
81 chrome.tabs.getAllInWindow(secondWindowId,
82 testCallback(true, function(tabs) {
83 assertEq(2, tabs.length);
84 for (var i = 0; i < tabs.length; i++) {
85 assertEq(secondWindowId, tabs[i].windowId);
86 assertEq(i, tabs[i].index);
87 }
88 assertEq("chrome://newtab/", tabs[0].url);
89 assertEq("chrome://b/", tabs[1].url);
90 }));
91 },
92
93 function update() {
94 chrome.tabs.update(testTabId, {"selected":true, "url": "chrome://c"},
95 testCallback(false, function(){
96 chrome.tabs.getSelected(firstWindowId, testCallback(true, function(tab) {
97 assertEq("chrome://c/", tab.url);
98 assertEq(true, tab.selected);
99 }));
100 }));
101 },
102
103 // Create 2 new windows, close existing windows.
104 function moveTabsSetup1() {
105 chrome.windows.create({}, testCallback(false, function(win) {
106 moveWindow1 = win.id;
107 }));
108 chrome.windows.create({}, testCallback(false, function(win) {
109 moveWindow2 = win.id;
110 }));
111 chrome.windows.remove(firstWindowId, testCallback(false, null));
112 chrome.windows.remove(secondWindowId, testCallback(true, null));
113 },
114
115 // Create a bunch of tabs and record the resulting ids.
116 function moveTabsSetup2() {
117 var letters = ['a', 'b', 'c', 'd', 'e'];
118 for (var i in letters) {
119 chrome.tabs.create({"windowId": moveWindow1,
120 "url": "chrome://" + letters[i]},
121 testCallback(false, function(tab) {
122 var letter = tab.url[tab.url.length-2];
123 moveTabIds[letter] = tab.id;
124 if (tab.url == "chrome://e/") {
125 chrome.test.succeed();
126 }
127 }));
128 }
129 },
130
131 // Do a series of moves so that we get the following
132 //
133 // Before:
134 // Window1: (newtab),a,b,c,d,e
135 // Window2: (newtab)
136 //
137 // After:
138 // Window1: (newtab),a,e,c
139 // Window2: b,(newtab),d
140 function moveTabs() {
141 chrome.tabs.move(moveTabIds['b'], {"windowId": moveWindow2, "index": 0},
142 testCallback(false, null));
143 chrome.tabs.move(moveTabIds['e'], {"index": 2},
144 testCallback(false, null));
145 chrome.tabs.move(moveTabIds['d'], {"windowId": moveWindow2, "index": 2},
146 testCallback(true, null));
147 },
148
149 // Check that the tab/window state is what we expect after doing moves.
150 function moveTabsCheck() {
151 chrome.tabs.getAllInWindow(moveWindow1, testCallback(false, function(tabs) {
152 assertEq(4, tabs.length);
153 assertEq("chrome://newtab/", tabs[0].url);
154 assertEq("chrome://a/", tabs[1].url);
155 assertEq("chrome://e/", tabs[2].url);
156 assertEq("chrome://c/", tabs[3].url);
157 }));
158 chrome.tabs.getAllInWindow(moveWindow2, testCallback(true, function(tabs) {
159 assertEq(3, tabs.length);
160 assertEq("chrome://b/", tabs[0].url);
161 assertEq("chrome://newtab/", tabs[1].url);
162 assertEq("chrome://d/", tabs[2].url);
163 }));
164 },
165
166 function remove() {
167 chrome.tabs.remove(moveTabIds["d"], testCallback(false, function() {
168 chrome.tabs.getAllInWindow(moveWindow2,
169 testCallback(true, function(tabs) {
170 assertEq(2, tabs.length);
171 assertEq("chrome://b/", tabs[0].url);
172 assertEq("chrome://newtab/", tabs[1].url);
173 }));
174 }));
175 },
176
177 function detectLanguage() {
178 chrome.tabs.getAllInWindow(moveWindow1, testCallback(false, function(tabs) {
179 chrome.tabs.detectLanguage(tabs[0].id, testCallback(true, function(lang) {
180 assertEq("en", lang);
181 }));
182 }));
183 },
184
185 function captureVisibleTab() {
186 // Grab an image for each of our two windows.
187 var firstImage;
188 var secondImage;
189 chrome.tabs.captureVisibleTab(moveWindow1,
190 testCallback(false, function(url) {
191 assertEq("string", typeof(url));
192 assertTrue(url.length > 0);
193 firstImage = url;
194 }));
195 chrome.tabs.captureVisibleTab(moveWindow2,
196 testCallback(false, function(url) {
197 assertEq("string", typeof(url));
198 assertTrue(url.length > 0);
199 secondImage = url;
200 assertTrue(firstImage != secondImage);
201 }));
202
203 // Now pass null for windowId - it should come back with something
204 // equal to either the first or second window. This is nondeterministic
205 // depending on whether you let chrome stay focused, or click
206 // focus away (or are running on the try/build servers).
207 chrome.tabs.captureVisibleTab(null, testCallback(true, function(url) {
208 assertEq("string", typeof(url));
209 assertTrue(url.length > 0);
210 assertTrue(url == firstImage || url == secondImage);
211 }));
212 },
213
214 function onCreated() {
215 var callbackSuccess = false;
216 var listener = function(tab) {
217 assertEq("chrome://f/", tab.url);
218 callbackSuccess = true;
219 };
220 chrome.tabs.onCreated.addListener(listener);
221 chrome.tabs.create({"windowId": moveWindow1, "url": "chrome://f",
222 "selected": true}, testCallback(true, function(tab) {
223 chrome.tabs.onCreated.removeListener(listener);
224 assertTrue(callbackSuccess);
225 }));
226 },
227
228 function onUpdated() {
229 var listener = function(tabid, info) {
230 if (tabid != moveTabIds['a']) {
231 return; // ignore updates for tabs we weren't interested in
232 }
233 if (info.status == "complete") {
234 chrome.tabs.onUpdated.removeListener(listener);
235 chrome.test.succeed();
236 }
237 };
238 chrome.tabs.onUpdated.addListener(listener);
239 chrome.tabs.update(moveTabIds['a'], {"url": "chrome://aa"},
240 testCallback(false, null));
241 },
242
243 function onMoved() {
244 var listener = function(tabid, info) {
245 chrome.tabs.onMoved.removeListener(listener);
246 assertEq(moveTabIds['a'], tabid);
247 chrome.test.succeed();
248 };
249 chrome.tabs.onMoved.addListener(listener);
250 chrome.tabs.move(moveTabIds['a'], {"index": 0}, testCallback(false, null));
251 },
252
253 function onSelectionChanged() {
254 var listener = function(tabid, info) {
255 chrome.tabs.onSelectionChanged.removeListener(listener);
256 assertEq(moveTabIds['c'], tabid);
257 chrome.test.succeed();
258 };
259 chrome.tabs.onSelectionChanged.addListener(listener);
260 chrome.tabs.update(moveTabIds['c'], {"selected": true},
261 testCallback(false, null));
262 },
263
264 function onRemoved() {
265 var listener = function(tabid) {
266 chrome.tabs.onRemoved.removeListener(listener);
267 assertEq(moveTabIds['c'], tabid);
268 chrome.test.succeed();
269 };
270 chrome.tabs.onRemoved.addListener(listener);
271 chrome.tabs.remove(moveTabIds['c'], testCallback(false, null));
272 }
273
274 // TODO(asargent) We still need to add tests for the following:
275 // Methods:
276 // -chrome.tabs.connect
277 // Events:
278 // -chrome.tabs.onAttached
279 // -chrome.tabs.onDetched
280 //
281 // Also, it would be an improvement to check the captureVisibleTab results
282 // against a known-good result.
283 ]);
OLDNEW
« no previous file with comments | « chrome/test/data/extensions/api_test/tabs/test.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698