1<!DOCTYPE html>
2<html>
3<head>
4<!-- TODO(arv): Check in Closue unit tests and make this run as part of the
5     tests -->
6<script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
7<script src="/cr.js"></script>
8<script src="linkcontroller.js"></script>
9<script>
10
11goog.require('goog.testing.MockControl');
12goog.require('goog.testing.PropertyReplacer');
13goog.require('goog.testing.jsunit');
14goog.require('goog.testing.mockmatchers');
15
16</script>
17</head>
18<body>
19<script>
20
21var mockControl, propertyReplacer, mockWindow;
22var chrome = chrome || {};
23chrome.tabs = chrome.tabs || {};
24chrome.windows = chrome.windows || {};
25
26var ObjectEqualsMatcher = goog.testing.mockmatchers.ObjectEquals;
27var SaveArgumentMatcher = goog.testing.mockmatchers.SaveArgument;
28
29var MSG = 'MSG';
30var localStrings = {
31  getStringF: function(msg, number) {
32    assertEquals('should_open_all', msg);
33    return MSG + number;
34  }
35};
36
37var URL1 = 'http://chromium.org/';
38var URL2 = '#hash';
39var WINDOW_ID = 'WINDOW_ID';
40
41function setUp() {
42  mockControl = new goog.testing.MockControl;
43  chrome.tabs.create = mockControl.createFunctionMock();
44  chrome.windows.create = mockControl.createFunctionMock();
45
46  propertyReplacer = new goog.testing.PropertyReplacer;
47
48  mockWindow = {
49    confirm: mockControl.createFunctionMock(),
50    location: {
51      get href() {
52        return 'http://www.google.com/';
53      },
54      set href(url) {
55        assertEquals(URL1, url);
56      }
57    }
58  };
59}
60
61function tearDown() {
62  mockControl.$tearDown();
63  propertyReplacer.reset();
64}
65
66function testGetWarningMessage() {
67  var lc = new cr.LinkController(localStrings);
68  var msg = lc.getWarningMessage(10);
69  assertEquals(MSG + 10, msg);
70}
71
72function openUrlFromEventHelper(event, isMac, expectedKind) {
73  var lc = new cr.LinkController(localStrings);
74
75  lc.openUrls = mockControl.createFunctionMock();
76  lc.openUrls([URL1], expectedKind);
77
78  propertyReplacer.set(cr, 'isMac', isMac);
79
80  mockControl.$replayAll();
81
82  lc.openUrlFromEvent(URL1, event);
83
84  mockControl.$verifyAll();
85}
86
87///////////////////////////////////////////////////////////////////////////////
88
89function testOpenUrlFromEventForegroundTab() {
90  var e = {
91    type: 'click',
92    button: 0,
93    shiftKey: true,
94    ctrlKey: true
95  };
96  openUrlFromEventHelper(e, false, cr.LinkKind.FOREGROUND_TAB);
97}
98
99function testOpenUrlFromEventForegroundTabMac() {
100  var e = {
101    type: 'click',
102    button: 0,
103    shiftKey: true,
104    metaKey: true
105  };
106  openUrlFromEventHelper(e, true, cr.LinkKind.FOREGROUND_TAB);
107}
108
109function testOpenUrlFromEventForegroundTabEnter() {
110  var e = {
111    type: 'keydown',
112    keyIdentifier: 'Enter',
113    shiftKey: true,
114    ctrlKey: true
115  };
116  openUrlFromEventHelper(e, false, cr.LinkKind.FOREGROUND_TAB);
117}
118
119function testOpenUrlFromEventForegroundTabEnterMac() {
120  var e = {
121    type: 'keydown',
122    keyIdentifier: 'Enter',
123    shiftKey: true,
124    metaKey: true
125  };
126  openUrlFromEventHelper(e, true, cr.LinkKind.FOREGROUND_TAB);
127}
128
129function testOpenUrlFromEventForegroundTabMiddleClick() {
130  var e = {
131    type: 'click',
132    button: 1,
133    shiftKey: true
134  };
135  openUrlFromEventHelper(e, false, cr.LinkKind.FOREGROUND_TAB);
136}
137
138///////////////////////////////////////////////////////////////////////////////
139
140function testOpenUrlFromEventBackgroundTab() {
141  var e = {
142    type: 'click',
143    button: 0,
144    ctrlKey: true
145  };
146  openUrlFromEventHelper(e, false, cr.LinkKind.BACKGROUND_TAB);
147}
148
149function testOpenUrlFromEventBackgroundTabMac() {
150  var e = {
151    type: 'click',
152    button: 0,
153    metaKey: true
154  };
155  openUrlFromEventHelper(e, true, cr.LinkKind.BACKGROUND_TAB);
156}
157
158function testOpenUrlFromEventBackgroundTabEnter() {
159  var e = {
160    type: 'keydown',
161    keyIdentifier: 'Enter',
162    ctrlKey: true
163  };
164  openUrlFromEventHelper(e, false, cr.LinkKind.BACKGROUND_TAB);
165}
166
167function testOpenUrlFromEventBackgroundTabEnterMac() {
168  var e = {
169    type: 'keydown',
170    keyIdentifier: 'Enter',
171    metaKey: true
172  };
173  openUrlFromEventHelper(e, true, cr.LinkKind.BACKGROUND_TAB);
174}
175
176function testOpenUrlFromEventBackgroundTabMiddleClick() {
177  var e = {
178    type: 'click',
179    button: 1
180  };
181  openUrlFromEventHelper(e, false, cr.LinkKind.BACKGROUND_TAB);
182}
183
184///////////////////////////////////////////////////////////////////////////////
185
186function testOpenUrlFromEventWindow() {
187  var e = {
188    type: 'click',
189    button: 0,
190    shiftKey: true
191  };
192  openUrlFromEventHelper(e, false, cr.LinkKind.WINDOW);
193}
194
195function testOpenUrlFromEventWindowEnter() {
196  var e = {
197    type: 'keydown',
198    keyIdentifier: 'Enter',
199    shiftKey: true
200  };
201  openUrlFromEventHelper(e, false, cr.LinkKind.WINDOW);
202}
203
204///////////////////////////////////////////////////////////////////////////////
205
206function testOpenUrlFromEventSelf() {
207  var e = {
208    type: 'click',
209    button: 0
210  };
211  openUrlFromEventHelper(e, false, cr.LinkKind.SELF);
212}
213
214function testOpenUrlFromEventSelfEnter() {
215  var e = {
216    type: 'keydown',
217    keyIdentifier: 'Enter'
218  };
219  openUrlFromEventHelper(e, false, cr.LinkKind.SELF);
220}
221
222///////////////////////////////////////////////////////////////////////////////
223
224function testOpenUrl() {
225  var lc = new cr.LinkController(localStrings);
226  lc.openUrls = mockControl.createFunctionMock();
227
228  lc.openUrls(new ObjectEqualsMatcher([URL1]), cr.LinkKind.SELF);
229  mockControl.$replayAll();
230
231  lc.openUrl(URL1, cr.LinkKind.SELF);
232
233  mockControl.$verifyAll();
234}
235
236/////////////////////////////// OpenUrls //////////////////////////////////////
237
238function testOpenUrlsTooFew() {
239  var lc = new cr.LinkController(localStrings);
240
241  mockControl.$replayAll();
242
243  lc.openUrls([], cr.LinkKind.SELF);
244
245  mockControl.$verifyAll();
246}
247
248
249function testOpenUrlsTooMany() {
250  var lc = new cr.LinkController(localStrings);
251  lc.warningLimit = 9;
252
253  var urls = new Array(lc.warningLimit + 1);
254  lc.window = mockWindow;
255
256  lc.window.confirm('MSG10').$returns(false);
257  mockControl.$replayAll();
258
259  lc.openUrls(urls, cr.LinkKind.SELF);
260
261  mockControl.$verifyAll();
262}
263
264function testOpenUrlsSelf() {
265  var lc = new cr.LinkController(localStrings);
266  lc.window = mockWindow;
267
268  mockControl.$replayAll();
269
270  lc.openUrls([URL1], cr.LinkKind.SELF);
271
272  mockControl.$verifyAll();
273}
274
275function testOpenUrlsForegroundTab() {
276  var lc = new cr.LinkController(localStrings);
277  lc.window = mockWindow;
278
279  chrome.tabs.create(new ObjectEqualsMatcher({url: URL1, selected: true}));
280  chrome.tabs.create(new ObjectEqualsMatcher({
281    url: 'http://www.google.com/#hash',
282    selected: false
283  }));
284
285  mockControl.$replayAll();
286
287  lc.openUrls([URL1, URL2], cr.LinkKind.FOREGROUND_TAB);
288
289  mockControl.$verifyAll();
290}
291
292function testOpenUrlsBackgroundTab() {
293  var lc = new cr.LinkController(localStrings);
294  lc.window = mockWindow;
295
296  chrome.tabs.create(new ObjectEqualsMatcher({url: URL1, selected: false}));
297  chrome.tabs.create(new ObjectEqualsMatcher({
298    url: 'http://www.google.com/#hash',
299    selected: false
300  }));
301
302  mockControl.$replayAll();
303
304  lc.openUrls([URL1, URL2], cr.LinkKind.BACKGROUND_TAB);
305
306  mockControl.$verifyAll();
307}
308
309function testOpenUrlsWindow() {
310  var lc = new cr.LinkController(localStrings);
311  lc.window = mockWindow;
312
313  var callbackMatcher = new SaveArgumentMatcher;
314  chrome.windows.create(new ObjectEqualsMatcher({url: URL1, incognito: false}),
315                        callbackMatcher);
316  chrome.tabs.create(new ObjectEqualsMatcher({
317    url: 'http://www.google.com/#hash',
318    windowId: WINDOW_ID,
319    selected: false
320  }));
321
322  mockControl.$replayAll();
323
324  lc.openUrls([URL1, URL2], cr.LinkKind.WINDOW);
325  callbackMatcher.arg({id: WINDOW_ID});
326
327  mockControl.$verifyAll();
328}
329
330function testOpenUrlsIncognito() {
331  var lc = new cr.LinkController(localStrings);
332  lc.window = mockWindow;
333
334  var callbackMatcher = new SaveArgumentMatcher;
335  chrome.windows.create(new ObjectEqualsMatcher({url: URL1, incognito: true}),
336                        callbackMatcher);
337  chrome.tabs.create(new ObjectEqualsMatcher({
338    url: 'http://www.google.com/#hash',
339    windowId: WINDOW_ID,
340    selected: false
341  }));
342
343  mockControl.$replayAll();
344
345  lc.openUrls([URL1, URL2], cr.LinkKind.INCOGNITO);
346  callbackMatcher.arg({id: WINDOW_ID});
347
348  mockControl.$verifyAll();
349}
350
351</script>
352</body>
353</html>
354