15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Stub out the `chrome.proxy`, `chrome.i18n`, and `chrome.extension` APIs 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chrome = chrome || { 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy: { 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings: { 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get: function() {}, 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clear: function() {}, 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set: function() {} 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i18n: { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getMessage: function(x) { return x; } 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension: { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendRequest: function() {}, 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isAllowedIncognitoAccess: function(funk) { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) funk(true); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var fixture = document.getElementById('fixture'); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var baselineHTML = fixture.innerHTML; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var groupIDs = [ProxyFormController.ProxyTypes.DIRECT, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyFormController.ProxyTypes.SYSTEM, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyFormController.ProxyTypes.PAC, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyFormController.ProxyTypes.FIXED]; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var mockFunctionFactory = function(returnValue, logging) { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var called = []; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) returnValue = returnValue || null; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var funky = function() { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) called.push(arguments); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (arguments[1] && typeof(arguments[1]) === 'function') { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var funk = arguments[1]; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) funk(returnValue); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return returnValue; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) funky.getCallList = function() { return called; }; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) funky.getValue = function() { return returnValue; }; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return funky; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var proxyform = new Test.Unit.Runner({ 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setup: function() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fixture.innerHTML = baselineHTML; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_ = new ProxyFormController('proxyForm'); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.clickEvent_ = document.createEvent('MouseEvents'); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.clickEvent_.initMouseEvent('click', true, true, window, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 0, 0, 0, 0, false, false, false, false, 0, null); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reset mock functions. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.proxy = { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings: { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get: mockFunctionFactory({ 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value: {mode: 'system' }, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) levelOfControl: 'controllable_by_this_extension' }), 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clear: mockFunctionFactory({ 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value: {mode: 'system' }, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) levelOfControl: 'controllable_by_this_extension' }), 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set: mockFunctionFactory({ 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value: {mode: 'system' }, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) levelOfControl: 'controllable_by_this_extension' }) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) teardown: function() { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fixture.removeChild(fixture.childNodes[0]); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete(this.controller_); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clicking on various bits of the interface should set correct classes, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and select correct radio buttons. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testActivationClicks: function() { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var self = this; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var i; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) groupIDs.forEach(function(id) { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var group = document.getElementById(id); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var all = group.querySelectorAll('*'); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0; i < all.length; i++) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) group.classList.remove('active'); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all[i].dispatchEvent(self.clickEvent_); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assert(group.classList.contains('active')); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Elements inside an active group should not be disabled, and vice versa 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testDisabledElements: function() { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var self = this; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var i, j; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) groupIDs.forEach(function(id) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var group = document.getElementById(id); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var all = group.querySelectorAll('*'); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First, check that activating a group enables its form elements 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0; i < all.length; i++) { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) group.classList.remove('active'); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var inputs = group.querySelectorAll('input:not([type="radio"]),select'); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (j = 0; j < inputs.length; j++) { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inputs[j].setAttribute('disabled', 'disabled'); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all[i].dispatchEvent(self.clickEvent_); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (j = 0; j < inputs.length; j++) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assert(!inputs[j].hasAttribute('disabled')); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clicking the "Use single proxy" checkbox should set the correct 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // classes on the form. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testSingleProxyToggle: function() { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var group = document.getElementById( 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyFormController.ProxyTypes.FIXED); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var checkbox = document.getElementById('singleProxyForEverything'); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var section = checkbox.parentNode.parentNode; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checkbox only works in active group, `testActivationClicks` tests 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the inactive click behavior. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) group.classList.add('active'); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkbox.checked = false; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkbox.dispatchEvent(this.clickEvent_); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assert(section.classList.contains('single')); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkbox.dispatchEvent(this.clickEvent_); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assert(!section.classList.contains('single')); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On instantiation, ProxyFormController should read the current state 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // from `chrome.proxy.settings.get`, and react accordingly. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Let's see if that happens with the next four sets of assertions. 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testSetupFormSystem: function() { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.proxy.settings.get = mockFunctionFactory({ 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value: {mode: 'system'}, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) levelOfControl: 'controllable_by_this_extension' 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fixture.innerHTML = baselineHTML; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_ = new ProxyFormController('proxyForm'); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for async calls to fire 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.wait(100, function() { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual( 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6, 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.proxy.settings.get.getCallList().length); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assert( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.SYSTEM) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .classList.contains('active')); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testSetupFormDirect: function() { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.proxy.settings.get = 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mockFunctionFactory({value: {mode: 'direct'}, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) levelOfControl: 'controllable_by_this_extension'}, true); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fixture.innerHTML = baselineHTML; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_ = new ProxyFormController('proxyForm'); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for async calls to fire 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.wait(100, function() { 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual( 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.proxy.settings.get.getCallList().length); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assert( 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.DIRECT) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .classList.contains('active')); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testSetupFormPac: function() { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.proxy.settings.get = 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mockFunctionFactory({value: {mode: 'pac_script' }, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) levelOfControl: 'controllable_by_this_extension'}); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fixture.innerHTML = baselineHTML; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_ = new ProxyFormController('proxyForm'); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for async calls to fire 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.wait(100, function() { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual( 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.proxy.settings.get.getCallList().length); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assert( 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.PAC) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .classList.contains('active')); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testSetupFormFixed: function() { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.proxy.settings.get = 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mockFunctionFactory({value: {mode: 'fixed_servers' }, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) levelOfControl: 'controllable_by_this_extension'}); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fixture.innerHTML = baselineHTML; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_ = new ProxyFormController('proxyForm'); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for async calls to fire 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.wait(100, function() { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual( 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2, 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.proxy.settings.get.getCallList().length); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assert( 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.FIXED) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .classList.contains('active')); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that `recalcFormValues_` correctly sets DOM field values when 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // given a `ProxyConfig` structure 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testRecalcFormValuesGroups: function() { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test `AUTO` normalization to `PAC` 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.recalcFormValues_({ 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode: ProxyFormController.ProxyTypes.AUTO, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rules: {}, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pacScript: '' 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assert( 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.PAC) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .classList.contains('active')); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DIRECT 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.recalcFormValues_({ 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode: ProxyFormController.ProxyTypes.DIRECT, 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rules: {}, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pacScript: '' 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assert( 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.DIRECT) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .classList.contains('active')); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FIXED 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.recalcFormValues_({ 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode: ProxyFormController.ProxyTypes.FIXED, 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rules: {}, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pacScript: '' 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assert( 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.FIXED) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .classList.contains('active')); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PAC 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.recalcFormValues_({ 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode: ProxyFormController.ProxyTypes.PAC, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rules: {}, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pacScript: '' 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assert( 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.PAC) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .classList.contains('active')); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SYSTEM 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.recalcFormValues_({ 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode: ProxyFormController.ProxyTypes.SYSTEM, 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rules: {}, 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pacScript: '' 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assert( 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.SYSTEM) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .classList.contains('active')); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testRecalcFormValuesFixedSingle: function() { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.recalcFormValues_({ 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode: ProxyFormController.ProxyTypes.FIXED, 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rules: { 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) singleProxy: { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme: 'socks5', 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host: 'singleproxy.example.com', 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port: '1234' 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var single = this.controller_.singleProxy; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('socks5', single.scheme); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('singleproxy.example.com', single.host); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual(1234, single.port); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testRecalcFormValuesPacScript: function() { 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.recalcFormValues_({ 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode: ProxyFormController.ProxyTypes.PAC, 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rules: {}, 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pacScript: {url: 'http://example.com/this/is/a/pac.script'} 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual( 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'http://example.com/this/is/a/pac.script', 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById('autoconfigURL').value); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testRecalcFormValuesSingle: function() { 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.recalcFormValues_({ 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode: ProxyFormController.ProxyTypes.FIXED, 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rules: { 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) singleProxy: { 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme: 'https', 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host: 'example.com', 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port: 80 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Single! 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assert( 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.querySelector('#' + ProxyFormController.ProxyTypes.FIXED + 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' > section').classList.contains('single')); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var single = this.controller_.singleProxy; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('https', single.scheme); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('example.com', single.host); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual(80, single.port); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testRecalcFormValuesMultiple: function() { 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.recalcFormValues_({ 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode: ProxyFormController.ProxyTypes.FIXED, 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rules: { 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxyForHttp: { 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme: 'http', 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host: 'http.example.com', 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port: 1 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxyForHttps: { 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme: 'https', 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host: 'https.example.com', 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port: 2 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxyForFtp: { 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme: 'socks4', 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host: 'socks4.example.com', 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port: 3 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fallbackProxy: { 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme: 'socks5', 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host: 'socks5.example.com', 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port: 4 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Not Single! 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assert( 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !document.querySelector('#' + ProxyFormController.ProxyTypes.FIXED 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) + ' > section').classList.contains('single')); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var server = this.controller_.singleProxy; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertNull(server); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server = this.controller_.httpProxy; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('http', server.scheme); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('http.example.com', server.host); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual(1, server.port); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server = this.controller_.httpsProxy; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('https', server.scheme); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('https.example.com', server.host); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual(2, server.port); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server = this.controller_.ftpProxy; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('socks4', server.scheme); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('socks4.example.com', server.host); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual(3, server.port); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server = this.controller_.fallbackProxy; 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('socks5', server.scheme); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('socks5.example.com', server.host); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual(4, server.port); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testBypassList: function() { 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.bypassList = ['1.example.com', 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '2.example.com', 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '3.example.com']; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEnumEqual( 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById('bypassList').value, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '1.example.com, 2.example.com, 3.example.com'); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEnumEqual( 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.bypassList, 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ['1.example.com', '2.example.com', '3.example.com']); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that "system" rules are correctly generated 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testProxyRulesGenerationSystem: function() { 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.changeActive_( 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.SYSTEM)); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertHashEqual( 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {mode: 'system'}, 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.generateProxyConfig_()); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that "direct" rules are correctly generated 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testProxyRulesGenerationDirect: function() { 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.changeActive_( 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.DIRECT)); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertHashEqual( 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {mode: 'direct'}, 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.generateProxyConfig_()); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that auto detection rules are correctly generated when "automatic" 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is selected, and no PAC file URL is given 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testProxyRulesGenerationAuto: function() { 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.changeActive_( 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.PAC)); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertHashEqual( 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {mode: 'auto_detect'}, 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.generateProxyConfig_()); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that PAC URL rules are correctly generated when "automatic" 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is selected, and a PAC file URL is given 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testProxyRulesGenerationPacURL: function() { 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.changeActive_( 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.PAC)); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.pacURL = 'http://example.com/pac.pac'; 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var result = this.controller_.generateProxyConfig_(); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('pac_script', result.mode); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('http://example.com/pac.pac', result.pacScript.url); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Manual PAC definitions 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testProxyRulesGenerationPacData: function() { 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var pacData = 'function FindProxyForURL(url,host) { return "DIRECT"; }'; 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.changeActive_( 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.PAC)); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.manualPac = pacData; 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var result = this.controller_.generateProxyConfig_(); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('pac_script', result.mode); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual(pacData, result.pacScript.data); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PAC URLs override manual PAC definitions 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testProxyRulesGenerationPacURLOverridesData: function() { 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.changeActive_( 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.PAC)); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.pacURL = 'http://example.com/pac.pac'; 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.manualPac = 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'function FindProxyForURL(url,host) { return "DIRECT"; }'; 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var result = this.controller_.generateProxyConfig_(); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('pac_script', result.mode); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('http://example.com/pac.pac', result.pacScript.url); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that fixed, manual servers are correctly transformed into a 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // `ProxyRules` structure. 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testProxyRulesGenerationSingle: function() { 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.changeActive_( 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.FIXED)); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.singleProxy = { 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme: 'http', 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host: 'example.com', 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port: '80' 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var result = this.controller_.generateProxyConfig_(); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('fixed_servers', result.mode); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('http', result.rules.singleProxy.scheme); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('example.com', result.rules.singleProxy.host); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual(80, result.rules.singleProxy.port); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual(undefined, result.rules.proxyForHttp); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual(undefined, result.rules.proxyForHttps); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual(undefined, result.rules.proxyForFtp); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual(undefined, result.rules.fallbackProxy); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that proxy configuration rules are correctly generated 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for separate manually entered servers. 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testProxyRulesGenerationSeparate: function() { 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.changeActive_( 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById(ProxyFormController.ProxyTypes.FIXED)); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.singleProxy = false; 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.httpProxy = { 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme: 'http', 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host: 'http.example.com', 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port: 80 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.httpsProxy = { 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme: 'https', 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host: 'https.example.com', 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port: 443 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.ftpProxy = { 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme: 'socks4', 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host: 'ftp.example.com', 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port: 80 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.controller_.fallbackProxy = { 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme: 'socks5', 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host: 'fallback.example.com', 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port: 80 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var result = this.controller_.generateProxyConfig_(); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('fixed_servers', result.mode); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual(undefined, result.rules.singleProxy); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('http', result.rules.proxyForHttp.scheme); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('http.example.com', result.rules.proxyForHttp.host); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('80', result.rules.proxyForHttp.port); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('https', result.rules.proxyForHttps.scheme); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('https.example.com', result.rules.proxyForHttps.host); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('443', result.rules.proxyForHttps.port); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('socks4', result.rules.proxyForFtp.scheme); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('ftp.example.com', result.rules.proxyForFtp.host); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('80', result.rules.proxyForFtp.port); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('socks5', result.rules.fallbackProxy.scheme); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('fallback.example.com', result.rules.fallbackProxy.host); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.assertEqual('80', result.rules.fallbackProxy.port); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}, { testLog: 'proxyformcontrollerlog' }); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var c = new ProxyFormController('proxyForm'); 514