157 lines
5.8 KiB
JavaScript
157 lines
5.8 KiB
JavaScript
|
/*
|
||
|
* JavaScript tracker for Snowplow: tests/nonfunctional/helpers.js
|
||
|
*
|
||
|
* Significant portions copyright 2010 Anthon Pang. Remainder copyright
|
||
|
* 2012-2014 Snowplow Analytics Ltd. All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions are
|
||
|
* met:
|
||
|
*
|
||
|
* * Redistributions of source code must retain the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer.
|
||
|
*
|
||
|
* * 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.
|
||
|
*
|
||
|
* * Neither the name of Anthon Pang nor Snowplow Analytics Ltd nor the
|
||
|
* names of their 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
|
||
|
* OWNER 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.
|
||
|
*/
|
||
|
|
||
|
define([
|
||
|
"intern!object",
|
||
|
"intern/chai!assert",
|
||
|
"intern/dojo/node!../../src/js/lib/helpers"
|
||
|
], function (registerSuite, assert, helpers) {
|
||
|
|
||
|
var decorateQuerystring = helpers.decorateQuerystring;
|
||
|
var resolveDynamicContexts = helpers.resolveDynamicContexts;
|
||
|
|
||
|
registerSuite({
|
||
|
name: "decorateQuerystring test",
|
||
|
"Decorate a URL with no querystring or fragment": function () {
|
||
|
var url = 'http://www.example.com';
|
||
|
var expected = 'http://www.example.com?_sp=a.b';
|
||
|
var actual = decorateQuerystring(url, '_sp', 'a.b');
|
||
|
assert.equal(actual, expected);
|
||
|
},
|
||
|
|
||
|
"Decorate a URL with a fragment but no querystring": function () {
|
||
|
var url = 'http://www.example.com#fragment';
|
||
|
var expected = 'http://www.example.com?_sp=a.b#fragment';
|
||
|
var actual = decorateQuerystring(url, '_sp', 'a.b');
|
||
|
assert.equal(actual, expected);
|
||
|
},
|
||
|
|
||
|
"Decorate a URL with an empty querystring": function () {
|
||
|
var url = 'http://www.example.com?';
|
||
|
var expected = 'http://www.example.com?_sp=a.b';
|
||
|
var actual = decorateQuerystring(url, '_sp', 'a.b');
|
||
|
assert.equal(actual, expected);
|
||
|
},
|
||
|
|
||
|
"Decorate a URL with a nonempty querystring": function () {
|
||
|
var url = 'http://www.example.com?name=value';
|
||
|
var expected = 'http://www.example.com?_sp=a.b&name=value';
|
||
|
var actual = decorateQuerystring(url, '_sp', 'a.b');
|
||
|
assert.equal(actual, expected);
|
||
|
},
|
||
|
|
||
|
"Override an existing field": function () {
|
||
|
var url = 'http://www.example.com?_sp=outdated';
|
||
|
var expected = 'http://www.example.com?_sp=a.b';
|
||
|
var actual = decorateQuerystring(url, '_sp', 'a.b');
|
||
|
assert.equal(actual, expected);
|
||
|
},
|
||
|
|
||
|
"Decorate a URL whose querystring contains multiple question marks": function () {
|
||
|
var url = 'http://www.example.com?test=working?&name=value';
|
||
|
var expected = 'http://www.example.com?_sp=a.b&test=working?&name=value';
|
||
|
var actual = decorateQuerystring(url, '_sp', 'a.b');
|
||
|
assert.equal(actual, expected);
|
||
|
},
|
||
|
|
||
|
"Override a field in a querystring containing a question mark": function () {
|
||
|
var url = 'http://www.example.com?test=working?&_sp=outdated';
|
||
|
var expected = 'http://www.example.com?test=working?&_sp=a.b';
|
||
|
var actual = decorateQuerystring(url, '_sp', 'a.b');
|
||
|
assert.equal(actual, expected);
|
||
|
},
|
||
|
|
||
|
"Decorate a querystring with multiple ?s and #s": function () {
|
||
|
var url = 'http://www.example.com?test=working?&_sp=outdated?&?name=value#fragment?#?#';
|
||
|
var expected = 'http://www.example.com?test=working?&_sp=a.b&?name=value#fragment?#?#';
|
||
|
var actual = decorateQuerystring(url, '_sp', 'a.b');
|
||
|
assert.equal(actual, expected);
|
||
|
},
|
||
|
});
|
||
|
|
||
|
registerSuite({
|
||
|
name: "getCssClasses test",
|
||
|
"Tokenize a DOM element's className field": function () {
|
||
|
var element = {
|
||
|
className: ' the quick brown_fox-jumps/over\nthe\t\tlazy dog '
|
||
|
};
|
||
|
var expected = ['the', 'quick', 'brown_fox-jumps/over', 'the', 'lazy', 'dog'];
|
||
|
var actual = helpers.getCssClasses(element);
|
||
|
assert.deepEqual(actual, expected);
|
||
|
},
|
||
|
});
|
||
|
|
||
|
registerSuite({
|
||
|
name: "resolveDynamicContexts tests",
|
||
|
"Resolves context generators and static contexts": function () {
|
||
|
var contextGenerator = function () {
|
||
|
return {
|
||
|
'schema': 'iglu:com.acme.marketing/some_event/jsonschema/1-0-0',
|
||
|
'data': {'test': 1}
|
||
|
}
|
||
|
};
|
||
|
var staticContext = {
|
||
|
'schema': 'iglu:com.acme.marketing/some_event/jsonschema/1-0-0',
|
||
|
'data': {'test': 1}
|
||
|
};
|
||
|
var expected = [contextGenerator(), staticContext];
|
||
|
var actual = resolveDynamicContexts([contextGenerator, staticContext]);
|
||
|
assert.deepEqual(actual, expected);
|
||
|
},
|
||
|
|
||
|
"Resolves context generators with arguments": function () {
|
||
|
var contextGenerator = function (argOne, argTwo) {
|
||
|
return {
|
||
|
'schema': 'iglu:com.acme.marketing/some_event/jsonschema/1-0-0',
|
||
|
'data': {
|
||
|
'firstVal': argOne,
|
||
|
'secondVal': argTwo
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
var expected = [
|
||
|
{
|
||
|
'schema': 'iglu:com.acme.marketing/some_event/jsonschema/1-0-0',
|
||
|
'data': {
|
||
|
'firstVal': 1,
|
||
|
'secondVal': 2
|
||
|
}
|
||
|
}
|
||
|
];
|
||
|
var actual = resolveDynamicContexts([contextGenerator], 1, 2);
|
||
|
assert.deepEqual(actual, expected);
|
||
|
},
|
||
|
});
|
||
|
});
|