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