summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/tough-cookie/test/domain_and_path_test.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/tough-cookie/test/domain_and_path_test.js')
-rw-r--r--deps/npm/node_modules/tough-cookie/test/domain_and_path_test.js200
1 files changed, 200 insertions, 0 deletions
diff --git a/deps/npm/node_modules/tough-cookie/test/domain_and_path_test.js b/deps/npm/node_modules/tough-cookie/test/domain_and_path_test.js
new file mode 100644
index 0000000000..175fa9f70b
--- /dev/null
+++ b/deps/npm/node_modules/tough-cookie/test/domain_and_path_test.js
@@ -0,0 +1,200 @@
+/*!
+ * Copyright (c) 2015, Salesforce.com, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+'use strict';
+var vows = require('vows');
+var assert = require('assert');
+var tough = require('../lib/cookie');
+var Cookie = tough.Cookie;
+
+function matchVows(func, table) {
+ var theVows = {};
+ table.forEach(function (item) {
+ var str = item[0];
+ var dom = item[1];
+ var expect = item[2];
+ var label = str + (expect ? " matches " : " doesn't match ") + dom;
+ theVows[label] = function () {
+ assert.equal(func(str, dom), expect);
+ };
+ });
+ return theVows;
+}
+
+function defaultPathVows(table) {
+ var theVows = {};
+ table.forEach(function (item) {
+ var str = item[0];
+ var expect = item[1];
+ var label = str + " gives " + expect;
+ theVows[label] = function () {
+ assert.equal(tough.defaultPath(str), expect);
+ };
+ });
+ return theVows;
+}
+
+vows
+ .describe('Domain and Path')
+ .addBatch({
+ "domain normalization": {
+ "simple": function () {
+ var c = new Cookie();
+ c.domain = "EXAMPLE.com";
+ assert.equal(c.canonicalizedDomain(), "example.com");
+ },
+ "extra dots": function () {
+ var c = new Cookie();
+ c.domain = ".EXAMPLE.com";
+ assert.equal(c.cdomain(), "example.com");
+ },
+ "weird trailing dot": function () {
+ var c = new Cookie();
+ c.domain = "EXAMPLE.ca.";
+ assert.equal(c.canonicalizedDomain(), "example.ca.");
+ },
+ "weird internal dots": function () {
+ var c = new Cookie();
+ c.domain = "EXAMPLE...ca.";
+ assert.equal(c.canonicalizedDomain(), "example...ca.");
+ },
+ "IDN": function () {
+ var c = new Cookie();
+ c.domain = "δοκιμή.δοκιμή"; // "test.test" in greek
+ assert.equal(c.canonicalizedDomain(), "xn--jxalpdlp.xn--jxalpdlp");
+ }
+ }
+ })
+ .addBatch({
+ "Domain Match": matchVows(tough.domainMatch, [
+ // str, dom, expect
+ ["example.com", "example.com", true],
+ ["eXaMpLe.cOm", "ExAmPlE.CoM", true],
+ ["no.ca", "yes.ca", false],
+ ["wwwexample.com", "example.com", false],
+ ["www.example.com", "example.com", true],
+ ["example.com", "www.example.com", false],
+ ["www.subdom.example.com", "example.com", true],
+ ["www.subdom.example.com", "subdom.example.com", true],
+ ["example.com", "example.com.", false], // RFC6265 S4.1.2.3
+ ["192.168.0.1", "168.0.1", false], // S5.1.3 "The string is a host name"
+ [null, "example.com", null],
+ ["example.com", null, null],
+ [null, null, null],
+ [undefined, undefined, null],
+ ])
+ })
+
+ .addBatch({
+ "default-path": defaultPathVows([
+ [null, "/"],
+ ["/", "/"],
+ ["/file", "/"],
+ ["/dir/file", "/dir"],
+ ["noslash", "/"],
+ ])
+ })
+ .addBatch({
+ "Path-Match": matchVows(tough.pathMatch, [
+ // request, cookie, match
+ ["/", "/", true],
+ ["/dir", "/", true],
+ ["/", "/dir", false],
+ ["/dir/", "/dir/", true],
+ ["/dir/file", "/dir/", true],
+ ["/dir/file", "/dir", true],
+ ["/directory", "/dir", false],
+ ])
+ })
+ .addBatch({
+ "permuteDomain": {
+ "base case": {
+ topic: tough.permuteDomain.bind(null, 'example.com'),
+ "got the domain": function (list) {
+ assert.deepEqual(list, ['example.com']);
+ }
+ },
+ "two levels": {
+ topic: tough.permuteDomain.bind(null, 'foo.bar.example.com'),
+ "got three things": function (list) {
+ assert.deepEqual(list, ['example.com', 'bar.example.com', 'foo.bar.example.com']);
+ }
+ },
+ "local domain": {
+ topic: tough.permuteDomain.bind(null, 'foo.bar.example.localduhmain'),
+ "got three things": function (list) {
+ assert.deepEqual(list, ['example.localduhmain', 'bar.example.localduhmain', 'foo.bar.example.localduhmain']);
+ }
+ }
+ },
+ "permutePath": {
+ "base case": {
+ topic: tough.permutePath.bind(null, '/'),
+ "just slash": function (list) {
+ assert.deepEqual(list, ['/']);
+ }
+ },
+ "single case": {
+ topic: tough.permutePath.bind(null, '/foo'),
+ "two things": function (list) {
+ assert.deepEqual(list, ['/foo', '/']);
+ },
+ "path matching": function (list) {
+ list.forEach(function (e) {
+ assert.ok(tough.pathMatch('/foo', e));
+ });
+ }
+ },
+ "double case": {
+ topic: tough.permutePath.bind(null, '/foo/bar'),
+ "four things": function (list) {
+ assert.deepEqual(list, ['/foo/bar', '/foo', '/']);
+ },
+ "path matching": function (list) {
+ list.forEach(function (e) {
+ assert.ok(tough.pathMatch('/foo/bar', e));
+ });
+ }
+ },
+ "trailing slash": {
+ topic: tough.permutePath.bind(null, '/foo/bar/'),
+ "three things": function (list) {
+ assert.deepEqual(list, ['/foo/bar', '/foo', '/']);
+ },
+ "path matching": function (list) {
+ list.forEach(function (e) {
+ assert.ok(tough.pathMatch('/foo/bar/', e));
+ });
+ }
+ }
+ }
+ })
+ .export(module);