Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(313)

Side by Side Diff: net/data/proxy_resolver_v8_unittest/pac_library_unittest.js

Issue 992733002: Remove //net (except for Android test stuff) and sdch (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // This should output "PROXY success:80" if all the tests pass.
6 // Otherwise it will output "PROXY failure:<num-failures>".
7 //
8 // This aims to unit-test the PAC library functions, which are
9 // exposed in the PAC's execution environment. (Namely, dnsDomainLevels,
10 // timeRange, etc.)
11
12 function FindProxyForURL(url, host) {
13 var numTestsFailed = 0;
14
15 // Run all the tests
16 for (var test in Tests) {
17 var t = new TestContext(test);
18
19 // Run the test.
20 Tests[test](t);
21
22 if (t.failed()) {
23 numTestsFailed++;
24 }
25 }
26
27 if (numTestsFailed == 0) {
28 return "PROXY success:80";
29 }
30 return "PROXY failure:" + numTestsFailed;
31 }
32
33 // --------------------------
34 // Tests
35 // --------------------------
36
37 var Tests = {};
38
39 Tests.testDnsDomainIs = function(t) {
40 t.expectTrue(dnsDomainIs("google.com", ".com"));
41 t.expectTrue(dnsDomainIs("google.co.uk", ".co.uk"));
42 t.expectFalse(dnsDomainIs("google.com", ".co.uk"));
43 t.expectFalse(dnsDomainIs("www.adobe.com", ".ad"));
44 };
45
46 Tests.testDnsDomainLevels = function(t) {
47 t.expectEquals(0, dnsDomainLevels("www"));
48 t.expectEquals(2, dnsDomainLevels("www.google.com"));
49 t.expectEquals(3, dnsDomainLevels("192.168.1.1"));
50 };
51
52 Tests.testIsInNet = function(t) {
53 t.expectTrue(
54 isInNet("192.89.132.25", "192.89.132.25", "255.255.255.255"));
55 t.expectFalse(
56 isInNet("193.89.132.25", "192.89.132.25", "255.255.255.255"));
57
58 t.expectTrue(isInNet("192.89.132.25", "192.89.0.0", "255.255.0.0"));
59 t.expectFalse(isInNet("193.89.132.25", "192.89.0.0", "255.255.0.0"));
60
61 t.expectFalse(
62 isInNet("192.89.132.a", "192.89.0.0", "255.255.0.0"));
63 };
64
65 Tests.testIsPlainHostName = function(t) {
66 t.expectTrue(isPlainHostName("google"));
67 t.expectFalse(isPlainHostName("google.com"));
68 t.expectFalse(isPlainHostName("192.168.1.1"));
69 t.expectFalse(isPlainHostName("."));
70 t.expectFalse(isPlainHostName(".:"));
71
72 // Valid IPv6 address
73 t.expectFalse(isPlainHostName("::1"));
74
75 // Valid IPv6 address containing periods.
76 t.expectFalse(isPlainHostName("::192.186.1.1"));
77
78 // Not a valid IPv6 address
79 t.expectTrue(isPlainHostName("foopy::1"));
80 t.expectTrue(isPlainHostName("foo:112"));
81 t.expectTrue(isPlainHostName(":"));
82 t.expectTrue(isPlainHostName("[:]"));
83
84 // Not considered a valid IPv6 address because of surrounding brackets.
85 t.expectTrue(isPlainHostName("[::1]"));
86
87 // Calling with more than 1 argument is allowed.
88 t.expectTrue(isPlainHostName("foo", "foo", "foo"));
89
90 // Calling with no arguments is an error.
91 try {
92 isPlainHostName();
93 t.expectTrue(false); // Not reached.
94 } catch (e) {
95 t.expectEquals('TypeError: Requires 1 string parameter', e.toString());
96 }
97
98 // Calling with the wrong argument type is an error.
99 try {
100 isPlainHostName(null);
101 t.expectTrue(false); // Not reached.
102 } catch (e) {
103 t.expectEquals('TypeError: Requires 1 string parameter', e.toString());
104 }
105
106 // Calling with the wrong argument type is an error.
107 try {
108 isPlainHostName(1);
109 t.expectTrue(false); // Not reached.
110 } catch (e) {
111 t.expectEquals('TypeError: Requires 1 string parameter', e.toString());
112 }
113
114 // Calling with the wrong argument type is an error.
115 try {
116 isPlainHostName(function() {});
117 t.expectTrue(false); // Not reached.
118 } catch (e) {
119 t.expectEquals('TypeError: Requires 1 string parameter', e.toString());
120 }
121 };
122
123 Tests.testLocalHostOrDomainIs = function(t) {
124 t.expectTrue(localHostOrDomainIs("www.google.com", "www.google.com"));
125 t.expectTrue(localHostOrDomainIs("www", "www.google.com"));
126 t.expectFalse(localHostOrDomainIs("maps.google.com", "www.google.com"));
127 };
128
129 Tests.testShExpMatch = function(t) {
130 t.expectTrue(shExpMatch("foo.jpg", "*.jpg"));
131 t.expectTrue(shExpMatch("foo5.jpg", "*o?.jpg"));
132 t.expectFalse(shExpMatch("foo.jpg", ".jpg"));
133 t.expectFalse(shExpMatch("foo.jpg", "foo"));
134 };
135
136 Tests.testSortIpAddressList = function(t) {
137 t.expectEquals("::1;::2;::3", sortIpAddressList("::2;::3;::1"));
138 t.expectEquals(
139 "2001:4898:28:3:201:2ff:feea:fc14;fe80::5efe:157:9d3b:8b16;157.59.139.22",
140 sortIpAddressList("157.59.139.22;" +
141 "2001:4898:28:3:201:2ff:feea:fc14;" +
142 "fe80::5efe:157:9d3b:8b16"));
143
144 // Single IP address (v4 and v6).
145 t.expectEquals("127.0.0.1", sortIpAddressList("127.0.0.1"));
146 t.expectEquals("::1", sortIpAddressList("::1"))
147
148 // Verify that IPv6 address is not re-written (not reduced).
149 t.expectEquals("0:0::1;192.168.1.1", sortIpAddressList("192.168.1.1;0:0::1"));
150
151 // Input is already sorted.
152 t.expectEquals("::1;192.168.1.3", sortIpAddressList("::1;192.168.1.3"));
153
154 // Same-valued IP addresses (also tests stability).
155 t.expectEquals("0::1;::1;0:0::1", sortIpAddressList("0::1;::1;0:0::1"));
156
157 // Contains extra semi-colons.
158 t.expectEquals("127.0.0.1", sortIpAddressList(";127.0.0.1;"));
159
160 // Contains whitespace (spaces and tabs).
161 t.expectEquals("192.168.0.1;192.168.0.2",
162 sortIpAddressList("192.168.0.1; 192.168.0.2"));
163 t.expectEquals("127.0.0.0;127.0.0.1;127.0.0.2",
164 sortIpAddressList("127.0.0.1; 127.0.0.2; 127.0.0.0"));
165
166 // Empty lists.
167 t.expectFalse(sortIpAddressList(""));
168 t.expectFalse(sortIpAddressList(" "));
169 t.expectFalse(sortIpAddressList(";"));
170 t.expectFalse(sortIpAddressList(";;"));
171 t.expectFalse(sortIpAddressList(" ; ; "));
172
173 // Invalid IP addresses.
174 t.expectFalse(sortIpAddressList("256.0.0.1"));
175 t.expectFalse(sortIpAddressList("192.168.1.1;0:0:0:1;127.0.0.1"));
176
177 // Call sortIpAddressList() with wonky arguments.
178 t.expectEquals(null, sortIpAddressList());
179 t.expectEquals(null, sortIpAddressList(null));
180 t.expectEquals(null, sortIpAddressList(null, null));
181 };
182
183 Tests.testIsInNetEx = function(t) {
184 t.expectTrue(isInNetEx("198.95.249.79", "198.95.249.79/32"));
185 t.expectTrue(isInNetEx("198.95.115.10", "198.95.0.0/16"));
186 t.expectTrue(isInNetEx("198.95.1.1", "198.95.0.0/16"));
187 t.expectTrue(isInNetEx("198.95.1.1", "198.95.3.3/16"));
188 t.expectTrue(isInNetEx("0:0:0:0:0:0:7f00:1", "0:0:0:0:0:0:7f00:1/32"));
189 t.expectTrue(isInNetEx("3ffe:8311:ffff:abcd:1234:dead:beef:101",
190 "3ffe:8311:ffff::/48"));
191
192 // IPv4 and IPv6 mix.
193 t.expectFalse(isInNetEx("127.0.0.1", "0:0:0:0:0:0:7f00:1/16"));
194 t.expectFalse(isInNetEx("192.168.24.3", "fe80:0:0:0:0:0:c0a8:1803/32"));
195
196 t.expectFalse(isInNetEx("198.95.249.78", "198.95.249.79/32"));
197 t.expectFalse(isInNetEx("198.96.115.10", "198.95.0.0/16"));
198 t.expectFalse(isInNetEx("3fff:8311:ffff:abcd:1234:dead:beef:101",
199 "3ffe:8311:ffff::/48"));
200
201 // Call isInNetEx with wonky arguments.
202 t.expectEquals(null, isInNetEx());
203 t.expectEquals(null, isInNetEx(null));
204 t.expectEquals(null, isInNetEx(null, null));
205 t.expectEquals(null, isInNetEx(null, null, null));
206 t.expectEquals(null, isInNetEx("198.95.249.79"));
207
208 // Invalid IP address.
209 t.expectFalse(isInNetEx("256.0.0.1", "198.95.249.79"));
210 t.expectFalse(isInNetEx("127.0.0.1 ", "127.0.0.1/32")); // Extra space.
211
212 // Invalid prefix.
213 t.expectFalse(isInNetEx("198.95.115.10", "198.95.0.0/34"));
214 t.expectFalse(isInNetEx("127.0.0.1", "127.0.0.1")); // Missing '/' in prefix.
215 };
216
217 Tests.testWeekdayRange = function(t) {
218 // Test with local time.
219 MockDate.setCurrent("Tue Mar 03 2009");
220 t.expectEquals(true, weekdayRange("MON", "FRI"));
221 t.expectEquals(true, weekdayRange("TUE", "FRI"));
222 t.expectEquals(true, weekdayRange("TUE", "TUE"));
223 t.expectEquals(true, weekdayRange("TUE"));
224 t.expectEquals(false, weekdayRange("WED", "FRI"));
225 t.expectEquals(false, weekdayRange("SUN", "MON"));
226 t.expectEquals(false, weekdayRange("SAT"));
227 t.expectEquals(false, weekdayRange("FRI", "MON"));
228
229 // Test with GMT time.
230 MockDate.setCurrent("Tue Mar 03 2009 GMT");
231 t.expectEquals(true, weekdayRange("MON", "FRI", "GMT"));
232 t.expectEquals(true, weekdayRange("TUE", "FRI", "GMT"));
233 t.expectEquals(true, weekdayRange("TUE", "TUE", "GMT"));
234 t.expectEquals(true, weekdayRange("TUE", "GMT"));
235 t.expectEquals(false, weekdayRange("WED", "FRI", "GMT"));
236 t.expectEquals(false, weekdayRange("SUN", "MON", "GMT"));
237 t.expectEquals(false, weekdayRange("SAT", "GMT"));
238 };
239
240 Tests.testDateRange = function(t) {
241 // dateRange(day)
242 MockDate.setCurrent("Mar 03 2009");
243 t.expectEquals(true, dateRange(3));
244 t.expectEquals(false, dateRange(1));
245
246 // dateRange(day, "GMT")
247 MockDate.setCurrent("Mar 03 2009 GMT");
248 t.expectEquals(true, dateRange(3, "GMT"));
249 t.expectEquals(false, dateRange(1, "GMT"));
250
251 // dateRange(day1, day2)
252 MockDate.setCurrent("Mar 03 2009");
253 t.expectEquals(true, dateRange(1, 4));
254 t.expectEquals(false, dateRange(4, 20));
255
256 // dateRange(day, month)
257 MockDate.setCurrent("Mar 03 2009");
258 t.expectEquals(true, dateRange(3, "MAR"));
259 MockDate.setCurrent("Mar 03 2014");
260 t.expectEquals(true, dateRange(3, "MAR"));
261 // TODO(eroman):
262 //t.expectEquals(false, dateRange(2, "MAR"));
263 //t.expectEquals(false, dateRange(3, "JAN"));
264
265 // dateRange(day, month, year)
266 MockDate.setCurrent("Mar 03 2009");
267 t.expectEquals(true, dateRange(3, "MAR", 2009));
268 t.expectEquals(false, dateRange(4, "MAR", 2009));
269 t.expectEquals(false, dateRange(3, "FEB", 2009));
270 MockDate.setCurrent("Mar 03 2014");
271 t.expectEquals(false, dateRange(3, "MAR", 2009));
272
273 // dateRange(month1, month2)
274 MockDate.setCurrent("Mar 03 2009");
275 t.expectEquals(true, dateRange("JAN", "MAR"));
276 t.expectEquals(true, dateRange("MAR", "APR"));
277 t.expectEquals(false, dateRange("MAY", "SEP"));
278
279 // dateRange(day1, month1, day2, month2)
280 MockDate.setCurrent("Mar 03 2009");
281 t.expectEquals(true, dateRange(1, "JAN", 3, "MAR"));
282 t.expectEquals(true, dateRange(3, "MAR", 4, "SEP"));
283 t.expectEquals(false, dateRange(4, "MAR", 4, "SEP"));
284
285 // dateRange(month1, year1, month2, year2)
286 MockDate.setCurrent("Mar 03 2009");
287 t.expectEquals(true, dateRange("FEB", 2009, "MAR", 2009));
288 MockDate.setCurrent("Apr 03 2009");
289 t.expectEquals(true, dateRange("FEB", 2009, "MAR", 2010));
290 t.expectEquals(false, dateRange("FEB", 2009, "MAR", 2009));
291
292 // dateRange(day1, month1, year1, day2, month2, year2)
293 MockDate.setCurrent("Mar 03 2009");
294 t.expectEquals(true, dateRange(1, "JAN", 2009, 3, "MAR", 2009));
295 t.expectEquals(true, dateRange(3, "MAR", 2009, 4, "SEP", 2009));
296 t.expectEquals(true, dateRange(3, "JAN", 2009, 4, "FEB", 2010));
297 t.expectEquals(false, dateRange(4, "MAR", 2009, 4, "SEP", 2009));
298 };
299
300 Tests.testTimeRange = function(t) {
301 // timeRange(hour)
302 MockDate.setCurrent("Mar 03, 2009 03:34:01");
303 t.expectEquals(true, timeRange(3));
304 t.expectEquals(false, timeRange(2));
305
306 // timeRange(hour1, hour2)
307 MockDate.setCurrent("Mar 03, 2009 03:34:01");
308 t.expectEquals(true, timeRange(2, 3));
309 t.expectEquals(true, timeRange(2, 4));
310 t.expectEquals(true, timeRange(3, 5));
311 t.expectEquals(false, timeRange(1, 2));
312 t.expectEquals(false, timeRange(11, 12));
313
314 // timeRange(hour1, min1, hour2, min2)
315 MockDate.setCurrent("Mar 03, 2009 03:34:01");
316 t.expectEquals(true, timeRange(1, 0, 3, 34));
317 t.expectEquals(true, timeRange(1, 0, 3, 35));
318 t.expectEquals(true, timeRange(3, 34, 5, 0));
319 t.expectEquals(false, timeRange(1, 0, 3, 0));
320 t.expectEquals(false, timeRange(11, 0, 16, 0));
321
322 // timeRange(hour1, min1, sec1, hour2, min2, sec2)
323 MockDate.setCurrent("Mar 03, 2009 03:34:14");
324 t.expectEquals(true, timeRange(1, 0, 0, 3, 34, 14));
325 t.expectEquals(false, timeRange(1, 0, 0, 3, 34, 0));
326 t.expectEquals(true, timeRange(1, 0, 0, 3, 35, 0));
327 t.expectEquals(true, timeRange(3, 34, 0, 5, 0, 0));
328 t.expectEquals(false, timeRange(1, 0, 0, 3, 0, 0));
329 t.expectEquals(false, timeRange(11, 0, 0, 16, 0, 0));
330 };
331
332 // --------------------------
333 // TestContext
334 // --------------------------
335
336 // |name| is the name of the test being executed, it will be used when logging
337 // errors.
338 function TestContext(name) {
339 this.numFailures_ = 0;
340 this.name_ = name;
341 };
342
343 TestContext.prototype.failed = function() {
344 return this.numFailures_ != 0;
345 };
346
347 TestContext.prototype.expectEquals = function(expectation, actual) {
348 if (!(expectation === actual)) {
349 this.numFailures_++;
350 this.log("FAIL: expected: " + expectation + ", actual: " + actual);
351 }
352 };
353
354 TestContext.prototype.expectTrue = function(x) {
355 this.expectEquals(true, x);
356 };
357
358 TestContext.prototype.expectFalse = function(x) {
359 this.expectEquals(false, x);
360 };
361
362 TestContext.prototype.log = function(x) {
363 // Prefix with the test name that generated the log.
364 try {
365 alert(this.name_ + ": " + x);
366 } catch(e) {
367 // In case alert() is not defined.
368 }
369 };
370
371 // --------------------------
372 // MockDate
373 // --------------------------
374
375 function MockDate() {
376 this.wrappedDate_ = new MockDate.super_(MockDate.currentDateString_);
377 };
378
379 // Setup the MockDate so it forwards methods to "this.wrappedDate_" (which is a
380 // real Date object). We can't simply chain the prototypes since Date() doesn't
381 // allow it.
382 MockDate.init = function() {
383 MockDate.super_ = Date;
384
385 function createProxyMethod(methodName) {
386 return function() {
387 return this.wrappedDate_[methodName]
388 .apply(this.wrappedDate_, arguments);
389 }
390 };
391
392 for (i in MockDate.methodNames_) {
393 var methodName = MockDate.methodNames_[i];
394 // Don't define the closure directly in the loop body, since Javascript's
395 // crazy scoping rules mean |methodName| actually bleeds out of the loop!
396 MockDate.prototype[methodName] = createProxyMethod(methodName);
397 }
398
399 // Replace the native Date() with our mock.
400 Date = MockDate;
401 };
402
403 // Unfortunately Date()'s methods are non-enumerable, therefore list manually.
404 MockDate.methodNames_ = [
405 "toString", "toDateString", "toTimeString", "toLocaleString",
406 "toLocaleDateString", "toLocaleTimeString", "valueOf", "getTime",
407 "getFullYear", "getUTCFullYear", "getMonth", "getUTCMonth",
408 "getDate", "getUTCDate", "getDay", "getUTCDay", "getHours", "getUTCHours",
409 "getMinutes", "getUTCMinutes", "getSeconds", "getUTCSeconds",
410 "getMilliseconds", "getUTCMilliseconds", "getTimezoneOffset", "setTime",
411 "setMilliseconds", "setUTCMilliseconds", "setSeconds", "setUTCSeconds",
412 "setMinutes", "setUTCMinutes", "setHours", "setUTCHours", "setDate",
413 "setUTCDate", "setMonth", "setUTCMonth", "setFullYear", "setUTCFullYear",
414 "toGMTString", "toUTCString", "getYear", "setYear"
415 ];
416
417 MockDate.setCurrent = function(currentDateString) {
418 MockDate.currentDateString_ = currentDateString;
419 }
420
421 // Bind the methods to proxy requests to the wrapped Date().
422 MockDate.init();
423
OLDNEW
« no previous file with comments | « net/data/proxy_resolver_v8_unittest/no_entrypoint.js ('k') | net/data/proxy_resolver_v8_unittest/passthrough.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698