blob: 9477a23340618ca7a45f6a28a649fd5a7b397a78 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
QUnit.begin(function() {
var headElement = document.getElementsByTagName('head')[0],
headElementContent = headElement.innerHTML;
headElementContent += '\
<link rel="canonical" href="http://www.example.com/index.html">\
<link rel="alternate" data-bmap-devgroups="browser" hreflang="en" href="http://www.example.com/en/index.html" data-bmap-currentvar="true">\
<link rel="alternate" data-bmap-devgroups="browser" hreflang="de" href="http://www.example.com/de/index.html">\
<link rel="alternate" data-bmap-devgroups="smartphone" hreflang="de" href="http://www.example.com/de/index.smartphone.html">\
<link rel="alternate" data-bmap-devgroups="smartphone" hreflang="en" href="http://www.example.com/en/index.smartphone.html">\
<meta name="browsermap.enabled" content="false">';
headElement.innerHTML = headElementContent;
});
module('BrowserMapUtil');
test('merge', function() {
var hash1 = {a : 1, b : 2};
var hash2 = {b : 3, c : 3};
var hash3 = {a : 1, b : 3, c : 3};
deepEqual(BrowserMapUtil.merge(hash1, hash2), hash3, 'merge');
});
test('getArrayDifference', function() {
var a = [1, 2, 3];
var b = [4, 5, 6];
var c = [3, 4, 5];
deepEqual(BrowserMapUtil.getArrayDifference(a, b), [1, 2, 3], 'getArrayDifference - different sets');
deepEqual(BrowserMapUtil.getArrayDifference(a, a), [], 'getArrayDifference - identical sets');
deepEqual(BrowserMapUtil.getArrayDifference(a, c), [1, 2], 'getArrayDifference - sets with some common elements');
});
test('cookiemanager', function() {
var c = 'test=test';
document.cookie = c;
ok(BrowserMapUtil.CookieManager.cookieExists('test'), 'cookieExists');
var cookie = BrowserMapUtil.CookieManager.getCookie('test');
ok(cookie instanceof Cookie, 'getCookie - returned object type');
strictEqual(cookie.name, 'test', 'getCookie - test cookie name');
cookie.value = 'test2';
BrowserMapUtil.CookieManager.setCookie(cookie);
strictEqual(BrowserMapUtil.CookieManager.getCookie('test').value, 'test2', 'setCookie');
BrowserMapUtil.CookieManager.removeCookie('test');
equal(BrowserMapUtil.CookieManager.getCookie('test'), null, 'removeCookie');
});
test('file', function() {
strictEqual(BrowserMapUtil.File.getFileExtension('index.html'), 'html', 'getFileExtension - file with extension');
strictEqual(BrowserMapUtil.File.getFileExtension('index.html.exe'), 'exe', 'getFileExtension - file with 2 extensions');
strictEqual(BrowserMapUtil.File.getFileExtension('index'), '', 'getFileExtension - file without extension');
strictEqual(BrowserMapUtil.File.removeSelectorsFromFile('index.a.b.html'), 'index.html', 'removeSelectorsFromFile - two selectors');
strictEqual(BrowserMapUtil.File.removeSelectorsFromFile('index.html'), 'index.html', 'removeSelectorsFromFile - no selectors');
});
test('url', function() {
strictEqual(BrowserMapUtil.Url.getDomainFromURL('http://www.example.com'), 'www.example.com', 'getDomainFromURL - http, no parameters');
strictEqual(BrowserMapUtil.Url.getDomainFromURL('http://www.example.com/?s='), 'www.example.com', 'getDomainFromURL - http, 1 parameter');
strictEqual(BrowserMapUtil.Url.decodeURLParameterValue('test+te%20st'), 'test te st', 'decodeURLParameterValue');
deepEqual(BrowserMapUtil.Url.getURLParameters('http://www.example.com/?a=a&b=b'), {a : 'a', b : 'b'}, 'getURLParameters - 2 parameters');
deepEqual(BrowserMapUtil.Url.getURLParameters('http://www.example.com/'), {}, 'getURLParameters - no parameters');
strictEqual(BrowserMapUtil.Url.getValueForParameter('http://www.example.com/?a=test', 'a'), 'test', 'getValueForParameter - 1 parameter');
equal(BrowserMapUtil.Url.getValueForParameter('http://www.example.com/', 'a'), null, 'getValueForParameter - no parameters');
strictEqual(BrowserMapUtil.Url.getURLParametersString('http://www.example.com?a=test&b=test'), '?a=test&b=test', 'getURLParametersString - with parameters');
strictEqual(BrowserMapUtil.Url.getURLParametersString('http://www.example.com'), '', 'getURLParametersString - without parameters');
strictEqual(BrowserMapUtil.Url.getFileFromURL('http://www.example.com/index.html?param=true'), 'index.html', 'getFileFromURL - with parameters');
strictEqual(BrowserMapUtil.Url.getFileFromURL('http://www.example.com/folder/index.html?param=true'), 'index.html', 'getFileFromURL - with parameters + folder');
strictEqual(BrowserMapUtil.Url.getFileFromURL('http://www.example.com/folder/'), '', 'getFileFromURL - no file + folder');
strictEqual(BrowserMapUtil.Url.getFileFromURL('http://www.example.com'), '', 'getFileFromURL - web root');
strictEqual(BrowserMapUtil.Url.getFolderPathFromURL('http://www.example.com/index.html'), 'http://www.example.com/', 'getFolderPathFromURL - url ends with file');
strictEqual(BrowserMapUtil.Url.getFolderPathFromURL('http://www.example.com/'), 'http://www.example.com/', 'getFolderPathFromURL - url ends with /');
strictEqual(BrowserMapUtil.Url.getFolderPathFromURL('http://www.example.com'), '', 'getFolderPathFromURL - url ends with TLD');
deepEqual(BrowserMapUtil.Url.getSelectorsFromURL('http://www.example.com/index.a.b.html'), ['a', 'b'], 'getSelectorsFromURL - two selectors');
deepEqual(BrowserMapUtil.Url.getSelectorsFromURL('http://www.example.com/index.html'), [], 'getSelectorsFromURL - no selectors');
strictEqual(BrowserMapUtil.Url.addSelectorsToURL('http://www.example.com/index.html', ['a', 'b']), 'http://www.example.com/index.a.b.html', 'addSelectorsToURL - two selectors');
strictEqual(BrowserMapUtil.Url.addSelectorsToURL('http://www.example.com/index.html', []), 'http://www.example.com/index.html', 'addSelectorsToURL - no selectors');
strictEqual(BrowserMapUtil.Url.getCanonicalURL(), 'http://www.example.com/index.html', 'getCanonicalURL');
});
module('Array.indexOf polyfill');
test('Array.indexOf', function() {
ok(!!Array.prototype.indexOf, 'Array.indexOf is defined');
});
module('BrowserMap');
test("getAllAlternateSites", function() {
var alternateSites = [
{href: 'http://www.example.com/en/index.html', hreflang : 'en', devgroups : 'browser', id : ''},
{href: 'http://www.example.com/de/index.html', hreflang : 'de', devgroups : 'browser', id : ''},
{href: 'http://www.example.com/de/index.smartphone.html', hreflang : 'de', devgroups : 'smartphone', id : ''},
{href: 'http://www.example.com/en/index.smartphone.html', hreflang : 'en', devgroups : 'smartphone', id : ''}
];
deepEqual(BrowserMap.getAllAlternateSites(), alternateSites);
});
test("getAlternateSite", function() {
var filter = function(link) {return link.hreflang == 'de'};
deepEqual(BrowserMap.getAlternateSite(['browser'], filter), {href: 'http://www.example.com/de/index.html', hreflang : 'de', devgroups : 'browser', id : ''});
});
test("getDeviceGroupsInRankingOrder", function() {
var expectedDgs = [
{ranking: 0, testFunction : function() {}, name : 'smartphone'},
{ranking: 10, testFunction : function() {}, name : 'tablet'},
{ranking: 20, testFunction : function() {}, name : 'highResolutionDisplay'},
{ranking: 30, testFunction : function() {}, name : 'browser'},
{ranking: Number.MAX_VALUE, testFunction: function() {}, name : 'oldBrowser'}
];
var dgs = BrowserMap.getDeviceGroupsInRankingOrder();
for (var i = 0; i < expectedDgs.length; i++) {
strictEqual(dgs[i].name, expectedDgs[i].name);
strictEqual(dgs[i].ranking, expectedDgs[i].ranking);
}
});
test("probe", function() {
equal(null, BrowserMap.probe('nothingHere'));
equal('number', typeof BrowserMap.probe('clientWidth'));
});
test("getNewURL", function() {
strictEqual(BrowserMap.getNewURL('http://www.example.com/en/index.html', ['smartphone'], ['smartphone']), 'http://www.example.com/en/index.smartphone.html');
// assume fallback to selectors-based URL even if no variant is present
strictEqual(BrowserMap.getNewURL('http://www.example.com/en/index.html', ['tablet'], ['tablet']), 'http://www.example.com/en/index.tablet.html');
});
test("getCurrentVariant", function() {
deepEqual(BrowserMap.getCurrentVariant(), {href: 'http://www.example.com/en/index.html', hreflang : 'en', devgroups : 'browser', id : ''});
});
test("isEnabled", function() {
strictEqual(BrowserMap.isEnabled(), false);
// now disable BrowserMap by removing the meta tag and call BrowserMap.isEnabled() once more
var headElement = document.getElementsByTagName('head')[0],
metaTags,
i,
tag,
name;
if (headElement) {
metaTags = headElement.getElementsByTagName('meta');
for (i = 0; i < metaTags.length; i++) {
if ((tag = metaTags[i]) && (name = tag.getAttribute('name'))) {
if (name === 'browsermap.enabled' && tag.getAttribute('content') === 'false') {
headElement.removeChild(tag);
strictEqual(BrowserMap.isEnabled(), true);
break;
}
}
}
}
// re-add the removed tag
if (tag) {
headElement.appendChild(tag);
}
});