npm
Version:
a package manager for JavaScript
202 lines (195 loc) • 6.7 kB
JavaScript
/*!
* 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.
*/
;
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);