| <!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> |