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