<!DOCTYPE html> <html> <head> <!-- TODO(arv): Check in Closue unit tests and make this run as part of the tests --> <script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script> <script src="../cr.js"></script> <script src="linkcontroller.js"></script> <script> goog.require('goog.testing.MockControl'); goog.require('goog.testing.PropertyReplacer'); goog.require('goog.testing.jsunit'); goog.require('goog.testing.mockmatchers'); </script> </head> <body> <script> var mockControl, propertyReplacer, mockWindow; var chrome = chrome || {}; chrome.tabs = chrome.tabs || {}; chrome.windows = chrome.windows || {}; var ObjectEqualsMatcher = goog.testing.mockmatchers.ObjectEquals; var SaveArgumentMatcher = goog.testing.mockmatchers.SaveArgument; var MSG = 'MSG'; var localStrings = { getStringF: function(msg, number) { assertEquals('should_open_all', msg); return MSG + number; } }; var URL1 = 'http://chromium.org/'; var URL2 = '#hash'; var WINDOW_ID = 'WINDOW_ID'; function setUp() { mockControl = new goog.testing.MockControl; chrome.tabs.create = mockControl.createFunctionMock(); chrome.windows.create = mockControl.createFunctionMock(); propertyReplacer = new goog.testing.PropertyReplacer; mockWindow = { confirm: mockControl.createFunctionMock(), location: { get href() { return 'http://www.google.com/'; }, set href(url) { assertEquals(URL1, url); } } }; } function tearDown() { mockControl.$tearDown(); propertyReplacer.reset(); } function testGetWarningMessage() { var lc = new cr.LinkController(localStrings); var msg = lc.getWarningMessage(10); assertEquals(MSG + 10, msg); } function openUrlFromEventHelper(event, isMac, expectedKind) { var lc = new cr.LinkController(localStrings); lc.openUrls = mockControl.createFunctionMock(); lc.openUrls([URL1], expectedKind); propertyReplacer.set(cr, 'isMac', isMac); mockControl.$replayAll(); lc.openUrlFromEvent(URL1, event); mockControl.$verifyAll(); } /////////////////////////////////////////////////////////////////////////////// function testOpenUrlFromEventForegroundTab() { var e = { type: 'click', button: 0, shiftKey: true, ctrlKey: true }; openUrlFromEventHelper(e, false, cr.LinkKind.FOREGROUND_TAB); } function testOpenUrlFromEventForegroundTabMac() { var e = { type: 'click', button: 0, shiftKey: true, metaKey: true }; openUrlFromEventHelper(e, true, cr.LinkKind.FOREGROUND_TAB); } function testOpenUrlFromEventForegroundTabEnter() { var e = { type: 'keydown', keyIdentifier: 'Enter', shiftKey: true, ctrlKey: true }; openUrlFromEventHelper(e, false, cr.LinkKind.FOREGROUND_TAB); } function testOpenUrlFromEventForegroundTabEnterMac() { var e = { type: 'keydown', keyIdentifier: 'Enter', shiftKey: true, metaKey: true }; openUrlFromEventHelper(e, true, cr.LinkKind.FOREGROUND_TAB); } function testOpenUrlFromEventForegroundTabMiddleClick() { var e = { type: 'click', button: 1, shiftKey: true }; openUrlFromEventHelper(e, false, cr.LinkKind.FOREGROUND_TAB); } /////////////////////////////////////////////////////////////////////////////// function testOpenUrlFromEventBackgroundTab() { var e = { type: 'click', button: 0, ctrlKey: true }; openUrlFromEventHelper(e, false, cr.LinkKind.BACKGROUND_TAB); } function testOpenUrlFromEventBackgroundTabMac() { var e = { type: 'click', button: 0, metaKey: true }; openUrlFromEventHelper(e, true, cr.LinkKind.BACKGROUND_TAB); } function testOpenUrlFromEventBackgroundTabEnter() { var e = { type: 'keydown', keyIdentifier: 'Enter', ctrlKey: true }; openUrlFromEventHelper(e, false, cr.LinkKind.BACKGROUND_TAB); } function testOpenUrlFromEventBackgroundTabEnterMac() { var e = { type: 'keydown', keyIdentifier: 'Enter', metaKey: true }; openUrlFromEventHelper(e, true, cr.LinkKind.BACKGROUND_TAB); } function testOpenUrlFromEventBackgroundTabMiddleClick() { var e = { type: 'click', button: 1 }; openUrlFromEventHelper(e, false, cr.LinkKind.BACKGROUND_TAB); } /////////////////////////////////////////////////////////////////////////////// function testOpenUrlFromEventWindow() { var e = { type: 'click', button: 0, shiftKey: true }; openUrlFromEventHelper(e, false, cr.LinkKind.WINDOW); } function testOpenUrlFromEventWindowEnter() { var e = { type: 'keydown', keyIdentifier: 'Enter', shiftKey: true }; openUrlFromEventHelper(e, false, cr.LinkKind.WINDOW); } /////////////////////////////////////////////////////////////////////////////// function testOpenUrlFromEventSelf() { var e = { type: 'click', button: 0 }; openUrlFromEventHelper(e, false, cr.LinkKind.SELF); } function testOpenUrlFromEventSelfEnter() { var e = { type: 'keydown', keyIdentifier: 'Enter' }; openUrlFromEventHelper(e, false, cr.LinkKind.SELF); } /////////////////////////////////////////////////////////////////////////////// function testOpenUrl() { var lc = new cr.LinkController(localStrings); lc.openUrls = mockControl.createFunctionMock(); lc.openUrls(new ObjectEqualsMatcher([URL1]), cr.LinkKind.SELF); mockControl.$replayAll(); lc.openUrl(URL1, cr.LinkKind.SELF); mockControl.$verifyAll(); } /////////////////////////////// OpenUrls ////////////////////////////////////// function testOpenUrlsTooFew() { var lc = new cr.LinkController(localStrings); mockControl.$replayAll(); lc.openUrls([], cr.LinkKind.SELF); mockControl.$verifyAll(); } function testOpenUrlsTooMany() { var lc = new cr.LinkController(localStrings); lc.warningLimit = 9; var urls = new Array(lc.warningLimit + 1); lc.window = mockWindow; lc.window.confirm('MSG10').$returns(false); mockControl.$replayAll(); lc.openUrls(urls, cr.LinkKind.SELF); mockControl.$verifyAll(); } function testOpenUrlsSelf() { var lc = new cr.LinkController(localStrings); lc.window = mockWindow; mockControl.$replayAll(); lc.openUrls([URL1], cr.LinkKind.SELF); mockControl.$verifyAll(); } function testOpenUrlsForegroundTab() { var lc = new cr.LinkController(localStrings); lc.window = mockWindow; chrome.tabs.create(new ObjectEqualsMatcher({url: URL1, selected: true})); chrome.tabs.create(new ObjectEqualsMatcher({ url: 'http://www.google.com/#hash', selected: false })); mockControl.$replayAll(); lc.openUrls([URL1, URL2], cr.LinkKind.FOREGROUND_TAB); mockControl.$verifyAll(); } function testOpenUrlsBackgroundTab() { var lc = new cr.LinkController(localStrings); lc.window = mockWindow; chrome.tabs.create(new ObjectEqualsMatcher({url: URL1, selected: false})); chrome.tabs.create(new ObjectEqualsMatcher({ url: 'http://www.google.com/#hash', selected: false })); mockControl.$replayAll(); lc.openUrls([URL1, URL2], cr.LinkKind.BACKGROUND_TAB); mockControl.$verifyAll(); } function testOpenUrlsWindow() { var lc = new cr.LinkController(localStrings); lc.window = mockWindow; var callbackMatcher = new SaveArgumentMatcher; chrome.windows.create(new ObjectEqualsMatcher({url: URL1, incognito: false}), callbackMatcher); chrome.tabs.create(new ObjectEqualsMatcher({ url: 'http://www.google.com/#hash', windowId: WINDOW_ID, selected: false })); mockControl.$replayAll(); lc.openUrls([URL1, URL2], cr.LinkKind.WINDOW); callbackMatcher.arg({id: WINDOW_ID}); mockControl.$verifyAll(); } function testOpenUrlsIncognito() { var lc = new cr.LinkController(localStrings); lc.window = mockWindow; var callbackMatcher = new SaveArgumentMatcher; chrome.windows.create(new ObjectEqualsMatcher({url: URL1, incognito: true}), callbackMatcher); chrome.tabs.create(new ObjectEqualsMatcher({ url: 'http://www.google.com/#hash', windowId: WINDOW_ID, selected: false })); mockControl.$replayAll(); lc.openUrls([URL1, URL2], cr.LinkKind.INCOGNITO); callbackMatcher.arg({id: WINDOW_ID}); mockControl.$verifyAll(); } </script> </body> </html>