1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Stub out the `chrome.experimental.proxy` API 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenchrome.experimental = chrome.experimental || { 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxy: { 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen settings: { 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen get: function() {}, 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen clear: function() {}, 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen set: function() {} 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Stub out i18n 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenchrome.i18n = chrome.i18n || { 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen getMessage: function(x) { return x; } 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Stub out messaging and access. 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenchrome.extension = chrome.extension || { 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen sendRequest: function() {}, 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen isAllowedIncognitoAccess: function(funk) { 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen funk(true); 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvar fixture = document.getElementById('fixture'); 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvar baselineHTML = fixture.innerHTML; 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvar groupIDs = [ProxyFormController.ProxyTypes.DIRECT, 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProxyFormController.ProxyTypes.SYSTEM, 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProxyFormController.ProxyTypes.PAC, 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProxyFormController.ProxyTypes.FIXED]; 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvar mockFunctionFactory = function(returnValue, logging) { 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var called = []; 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen returnValue = returnValue || null; 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var funky = function() { 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen called.push(arguments); 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (arguments[1] && typeof(arguments[1]) === 'function') { 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var funk = arguments[1]; 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen funk(returnValue); 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return returnValue; 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen funky.getCallList = function() { return called; }; 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen funky.getValue = function() { return returnValue; }; 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return funky; 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvar chrome = chrome || {}; 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvar proxyform = new Test.Unit.Runner({ 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen setup: function() { 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fixture.innerHTML = baselineHTML; 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_ = new ProxyFormController('proxyForm'); 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.clickEvent_ = document.createEvent('MouseEvents'); 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.clickEvent_.initMouseEvent('click', true, true, window, 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 0, 0, 0, 0, 0, false, false, false, false, 0, null); 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Reset mock functions. 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chrome.experimental = { 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxy: { 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen settings: { 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen get: mockFunctionFactory({ 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen value: {mode: 'system' }, 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen levelOfControl: 'ControllableByThisExtension' }), 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen clear: mockFunctionFactory({ 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen value: {mode: 'system' }, 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen levelOfControl: 'ControllableByThisExtension' }), 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen set: mockFunctionFactory({ 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen value: {mode: 'system' }, 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen levelOfControl: 'ControllableByThisExtension' }) 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen teardown: function() { 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fixture.removeChild(fixture.childNodes[0]); 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delete(this.controller_); 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Clicking on various bits of the interface should set correct classes, 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // and select correct radio buttons. 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testActivationClicks: function() { 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var self = this; 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var i; 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen groupIDs.forEach(function(id) { 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var group = document.getElementById(id); 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var all = group.querySelectorAll('*'); 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (i = 0; i < all.length; i++) { 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen group.classList.remove('active'); 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen all[i].dispatchEvent(self.clickEvent_); 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.assert(group.classList.contains('active')); 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Elements inside an active group should not be disabled, and vice versa 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testDisabledElements: function() { 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var self = this; 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var i, j; 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen groupIDs.forEach(function(id) { 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var group = document.getElementById(id); 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var all = group.querySelectorAll('*'); 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // First, check that activating a group enables its form elements 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (i = 0; i < all.length; i++) { 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen group.classList.remove('active'); 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var inputs = group.querySelectorAll('input:not([type="radio"]),select'); 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (j = 0; j < inputs.length; j++) { 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen inputs[j].setAttribute('disabled', 'disabled'); 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen all[i].dispatchEvent(self.clickEvent_); 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (j = 0; j < inputs.length; j++) { 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.assert(!inputs[j].hasAttribute('disabled')); 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Clicking the "Use single proxy" checkbox should set the correct 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // classes on the form. 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testSingleProxyToggle: function() { 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var group = document.getElementById( 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProxyFormController.ProxyTypes.FIXED); 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var checkbox = document.getElementById('singleProxyForEverything'); 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var section = checkbox.parentNode.parentNode; 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Checkbox only works in active group, `testActivationClicks` tests 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // the inactive click behavior. 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen group.classList.add('active'); 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen checkbox.checked = false; 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen checkbox.dispatchEvent(this.clickEvent_); 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assert(section.classList.contains('single')); 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen checkbox.dispatchEvent(this.clickEvent_); 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assert(!section.classList.contains('single')); 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // On instantiation, ProxyFormController should read the current state 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // from `chrome.experimental.getCurrentProxySettings`, and react 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // accordingly. Let's see if that happens with the next four sets of 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // assertsions. 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testSetupFormSystem: function() { 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chrome.experimental.proxy.settings.get = mockFunctionFactory({ 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen value: {mode: 'system'}, 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen levelOfControl: 'ControllableByThisExtension' 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fixture.innerHTML = baselineHTML; 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_ = new ProxyFormController('proxyForm'); 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Wait for async calls to fire 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.wait(100, function() { 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual( 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 2, 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chrome.experimental.proxy.settings.get.getCallList().length); 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assert( 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.SYSTEM) 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .classList.contains('active')); 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testSetupFormDirect: function() { 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chrome.experimental.proxy.settings.get = 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mockFunctionFactory({value: {mode: 'direct'}, 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen levelOfControl: 'ControllableByThisExtension'}, true); 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fixture.innerHTML = baselineHTML; 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_ = new ProxyFormController('proxyForm'); 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Wait for async calls to fire 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.wait(100, function() { 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual( 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 2, 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chrome.experimental.proxy.settings.get.getCallList().length); 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assert( 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.DIRECT) 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .classList.contains('active')); 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testSetupFormPac: function() { 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chrome.experimental.proxy.settings.get = 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mockFunctionFactory({value: {mode: 'pac_script' }, 182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen levelOfControl: 'ControllableByThisExtension'}); 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fixture.innerHTML = baselineHTML; 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_ = new ProxyFormController('proxyForm'); 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Wait for async calls to fire 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.wait(100, function() { 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual( 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 2, 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chrome.experimental.proxy.settings.get.getCallList().length); 191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assert( 192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.PAC) 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .classList.contains('active')); 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testSetupFormFixed: function() { 198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chrome.experimental.proxy.settings.get = 199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mockFunctionFactory({value: {mode: 'fixed_servers' }, 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen levelOfControl: 'ControllableByThisExtension'}); 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fixture.innerHTML = baselineHTML; 203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_ = new ProxyFormController('proxyForm'); 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Wait for async calls to fire 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.wait(100, function() { 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual( 207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 2, 208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chrome.experimental.proxy.settings.get.getCallList().length); 209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assert( 210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.FIXED) 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .classList.contains('active')); 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Test that `recalcFormValues_` correctly sets DOM field values when 216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // given a `ProxyConfig` structure 217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testRecalcFormValuesGroups: function() { 218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Test `AUTO` normalization to `PAC` 219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.recalcFormValues_({ 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mode: ProxyFormController.ProxyTypes.AUTO, 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen rules: {}, 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pacScript: '' 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assert( 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.PAC) 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .classList.contains('active')); 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // DIRECT 229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.recalcFormValues_({ 230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mode: ProxyFormController.ProxyTypes.DIRECT, 231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen rules: {}, 232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pacScript: '' 233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assert( 235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.DIRECT) 236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .classList.contains('active')); 237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // FIXED 239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.recalcFormValues_({ 240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mode: ProxyFormController.ProxyTypes.FIXED, 241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen rules: {}, 242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pacScript: '' 243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assert( 245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.FIXED) 246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .classList.contains('active')); 247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // PAC 249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.recalcFormValues_({ 250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mode: ProxyFormController.ProxyTypes.PAC, 251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen rules: {}, 252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pacScript: '' 253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assert( 255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.PAC) 256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .classList.contains('active')); 257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // SYSTEM 259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.recalcFormValues_({ 260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mode: ProxyFormController.ProxyTypes.SYSTEM, 261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen rules: {}, 262ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pacScript: '' 263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assert( 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.SYSTEM) 266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .classList.contains('active')); 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testRecalcFormValuesFixedSingle: function() { 270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.recalcFormValues_({ 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mode: ProxyFormController.ProxyTypes.FIXED, 272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen rules: { 273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen singleProxy: { 274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scheme: 'socks5', 275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host: 'singleproxy.example.com', 276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen port: '1234' 277ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 278ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var single = this.controller_.singleProxy; 281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('socks5', single.scheme); 282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('singleproxy.example.com', single.host); 283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual(1234, single.port); 284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testRecalcFormValuesPacScript: function() { 287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.recalcFormValues_({ 288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mode: ProxyFormController.ProxyTypes.PAC, 289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen rules: {}, 290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pacScript: {url: 'http://example.com/this/is/a/pac.script'} 291ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 292ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual( 293ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 'http://example.com/this/is/a/pac.script', 294ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById('autoconfigURL').value); 295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 296ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 297ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testRecalcFormValuesSingle: function() { 298ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.recalcFormValues_({ 299ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mode: ProxyFormController.ProxyTypes.FIXED, 300ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen rules: { 301ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen singleProxy: { 302ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scheme: 'https', 303ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host: 'example.com', 304ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen port: 80 305ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 306ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 307ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 308ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Single! 309ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assert( 310ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.querySelector('#' + ProxyFormController.ProxyTypes.FIXED + 311ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ' > section').classList.contains('single')); 312ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 313ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var single = this.controller_.singleProxy; 314ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('https', single.scheme); 315ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('example.com', single.host); 316ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual(80, single.port); 317ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 318ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 319ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testRecalcFormValuesMultiple: function() { 320ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.recalcFormValues_({ 321ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mode: ProxyFormController.ProxyTypes.FIXED, 322ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen rules: { 323ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxyForHttp: { 324ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scheme: 'http', 325ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host: 'http.example.com', 326ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen port: 1 327ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 328ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxyForHttps: { 329ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scheme: 'https', 330ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host: 'https.example.com', 331ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen port: 2 332ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 333ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxyForFtp: { 334ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scheme: 'socks4', 335ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host: 'socks4.example.com', 336ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen port: 3 337ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 338ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fallbackProxy: { 339ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scheme: 'socks5', 340ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host: 'socks5.example.com', 341ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen port: 4 342ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 343ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 344ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }); 345ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Not Single! 346ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assert( 347ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !document.querySelector('#' + ProxyFormController.ProxyTypes.FIXED 348ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen + ' > section').classList.contains('single')); 349ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var server = this.controller_.singleProxy; 350ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertNull(server); 351ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 352ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen server = this.controller_.httpProxy; 353ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('http', server.scheme); 354ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('http.example.com', server.host); 355ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual(1, server.port); 356ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 357ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen server = this.controller_.httpsProxy; 358ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('https', server.scheme); 359ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('https.example.com', server.host); 360ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual(2, server.port); 361ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 362ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen server = this.controller_.ftpProxy; 363ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('socks4', server.scheme); 364ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('socks4.example.com', server.host); 365ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual(3, server.port); 366ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 367ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen server = this.controller_.fallbackProxy; 368ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('socks5', server.scheme); 369ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('socks5.example.com', server.host); 370ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual(4, server.port); 371ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 372ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 373ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testBypassList: function() { 374ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.bypassList = ['1.example.com', 375ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen '2.example.com', 376ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen '3.example.com']; 377ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEnumEqual( 378ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById('bypassList').value, 379ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen '1.example.com, 2.example.com, 3.example.com'); 380ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEnumEqual( 381ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.bypassList, 382ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ['1.example.com', '2.example.com', '3.example.com']); 383ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 384ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 385ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Test that "system" rules are correctly generated 386ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testProxyRulesGenerationSystem: function() { 387ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.changeActive_( 388ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.SYSTEM)); 389ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 390ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertHashEqual( 391ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen {mode: 'system'}, 392ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.generateProxyConfig_()); 393ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 394ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 395ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Test that "direct" rules are correctly generated 396ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testProxyRulesGenerationDirect: function() { 397ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.changeActive_( 398ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.DIRECT)); 399ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 400ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertHashEqual( 401ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen {mode: 'direct'}, 402ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.generateProxyConfig_()); 403ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 404ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 405ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Test that auto detection rules are correctly generated when "automatic" 406ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // is selected, and no PAC file URL is given 407ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testProxyRulesGenerationAuto: function() { 408ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.changeActive_( 409ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.PAC)); 410ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 411ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertHashEqual( 412ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen {mode: 'auto_detect'}, 413ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.generateProxyConfig_()); 414ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 415ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 416ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Test that PAC URL rules are correctly generated when "automatic" 417ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // is selected, and a PAC file URL is given 418ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testProxyRulesGenerationPacURL: function() { 419ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.changeActive_( 420ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.PAC)); 421ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.pacURL = 'http://example.com/pac.pac'; 422ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var result = this.controller_.generateProxyConfig_(); 423ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('pac_script', result.mode); 424ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('http://example.com/pac.pac', result.pacScript.url); 425ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 426ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 427ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Manual PAC definitions 428ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testProxyRulesGenerationPacData: function() { 429ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var pacData = 'function FindProxyForURL(url,host) { return "DIRECT"; }'; 430ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.changeActive_( 431ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.PAC)); 432ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.manualPac = pacData; 433ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var result = this.controller_.generateProxyConfig_(); 434ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('pac_script', result.mode); 435ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual(pacData, result.pacScript.data); 436ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 437ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 438ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // PAC URLs override manual PAC definitions 439ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testProxyRulesGenerationPacURLOverridesData: function() { 440ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.changeActive_( 441ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.PAC)); 442ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.pacURL = 'http://example.com/pac.pac'; 443ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.manualPac = 444ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 'function FindProxyForURL(url,host) { return "DIRECT"; }'; 445ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var result = this.controller_.generateProxyConfig_(); 446ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('pac_script', result.mode); 447ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('http://example.com/pac.pac', result.pacScript.url); 448ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 449ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 450ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Test that fixed, manual servers are correctly transformed into a 451ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // `ProxyRules` structure. 452ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testProxyRulesGenerationSingle: function() { 453ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.changeActive_( 454ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.FIXED)); 455ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 456ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.singleProxy = { 457ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scheme: 'http', 458ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host: 'example.com', 459ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen port: '80' 460ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 461ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 462ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var result = this.controller_.generateProxyConfig_(); 463ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('fixed_servers', result.mode); 464ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('http', result.rules.singleProxy.scheme); 465ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('example.com', result.rules.singleProxy.host); 466ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual(80, result.rules.singleProxy.port); 467ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual(undefined, result.rules.proxyForHttp); 468ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual(undefined, result.rules.proxyForHttps); 469ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual(undefined, result.rules.proxyForFtp); 470ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual(undefined, result.rules.fallbackProxy); 471ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 472ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 473ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Test that proxy configuration rules are correctly generated 474ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // for separate manually entered servers. 475ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testProxyRulesGenerationSeparate: function() { 476ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.changeActive_( 477ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen document.getElementById(ProxyFormController.ProxyTypes.FIXED)); 478ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 479ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.singleProxy = false; 480ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.httpProxy = { 481ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scheme: 'http', 482ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host: 'http.example.com', 483ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen port: 80 484ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 485ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.httpsProxy = { 486ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scheme: 'https', 487ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host: 'https.example.com', 488ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen port: 443 489ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 490ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.ftpProxy = { 491ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scheme: 'socks4', 492ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host: 'ftp.example.com', 493ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen port: 80 494ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 495ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.controller_.fallbackProxy = { 496ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scheme: 'socks5', 497ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host: 'fallback.example.com', 498ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen port: 80 499ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 500ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 501ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var result = this.controller_.generateProxyConfig_(); 502ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('fixed_servers', result.mode); 503ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual(undefined, result.rules.singleProxy); 504ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('http', result.rules.proxyForHttp.scheme); 505ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('http.example.com', result.rules.proxyForHttp.host); 506ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('80', result.rules.proxyForHttp.port); 507ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('https', result.rules.proxyForHttps.scheme); 508ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('https.example.com', result.rules.proxyForHttps.host); 509ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('443', result.rules.proxyForHttps.port); 510ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('socks4', result.rules.proxyForFtp.scheme); 511ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('ftp.example.com', result.rules.proxyForFtp.host); 512ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('80', result.rules.proxyForFtp.port); 513ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('socks5', result.rules.fallbackProxy.scheme); 514ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('fallback.example.com', result.rules.fallbackProxy.host); 515ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.assertEqual('80', result.rules.fallbackProxy.port); 516ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 517ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}, { testLog: 'proxyformcontrollerlog' }); 518ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 519ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvar c = new ProxyFormController('proxyForm'); 520