uhr/test/test.js

142 lines
4.3 KiB
JavaScript

suite('Bärneruhr', function () {
'use strict';
var assert = chai.assert;
var $ = jQuery;
var elem;
setup(function () {
elem = $('#u');
});
function cleanupCookies(id) {
$.removeCookie('uhr-language' + id);
$.removeCookie('uhr-mode' + id);
$.removeCookie('uhr-status' + id);
$.removeCookie('uhr-theme' + id);
}
teardown(function () {
var uhr = elem.uhr('instance');
if (uhr !== undefined) {
cleanupCookies(uhr.id);
}
try {
elem.uhr('destroy');
} catch (e) {
// just TRY to clean up, but don't DIE trying.
}
window.location.hash = '';
});
test('create and destroy widget', function () {
var uhr = elem.uhr('instance');
var id;
assert.isUndefined(uhr);
elem.uhr();
uhr = elem.uhr('instance');
assert.isNotNull(uhr);
assert.isDefined(uhr);
id = uhr.id;
elem.uhr('destroy');
uhr = elem.uhr('instance');
assert.isUndefined(uhr);
// cookies need to be cleaned up separately in this case, because in teardown(), the uhr widget doesn't exist anymore
cleanupCookies(id);
});
test('default config', function () {
var options;
elem.uhr();
options = elem.uhr('instance').options;
assert.isTrue(options.autoresize);
assert.isTrue(options.controls);
assert.isUndefined(options.cookiePath);
assert.isFalse(options.force);
assert.equal(options.language, 'de_CH');
assert.equal(options.mode, 'normal');
assert.equal(options.status, 'on');
assert.equal(options.theme, 'black');
});
test('custom config', function () {
var options;
var realWidth;
var myWidth = 100;
var myOptions = {
autoresize: false,
controls: false,
cookiePath: '/foo/bar',
force: true,
language: 'de',
mode: 'seconds',
status: 'off',
theme: 'red',
width: myWidth + 'px'
};
elem.uhr(myOptions);
options = elem.uhr('instance').options;
assert.equal(options.autoresize, myOptions.autoresize);
assert.equal(options.controls, myOptions.controls);
assert.equal(options.cookiePath, myOptions.cookiePath);
assert.equal(options.force, myOptions.force);
assert.equal(options.language, myOptions.language);
assert.equal(options.mode, myOptions.mode);
assert.equal(options.status, myOptions.status);
assert.equal(options.theme, myOptions.theme);
assert.equal(options.width, myOptions.width);
realWidth = elem.width();
assert.equal(myWidth, realWidth);
});
test('unknown language', function () {
var uhr;
elem.uhr({
language: 'klingon'
});
uhr = elem.uhr('instance');
// The 'uhr' element must be created, and a fall-back language must have been selected
assert.isTrue(!!uhr);
assert.isTrue(!!uhr.options.language);
assert.notEqual(uhr.options.language, 'klingon');
});
test('unknown theme', function () {
var uhr;
elem.uhr({
theme: 'klingon'
});
uhr = elem.uhr('instance');
// NB: 'black' is the first theme that is included in the test page.
assert.equal(uhr.options.theme, 'black');
});
test('URL params, short', function () {
var options;
window.location.hash = '#t=red&l=dk&m=seconds&s=on';
elem.uhr();
options = elem.uhr('instance').options;
assert.isTrue(options.force);
assert.equal(options.language, 'dk');
assert.equal(options.mode, 'seconds');
assert.equal(options.status, 'on');
assert.equal(options.theme, 'red');
});
test('URL params, long', function () {
var options;
window.location.hash = '#theme=pink&language=de_CH&mode=normal&status=off';
elem.uhr();
options = elem.uhr('instance').options;
assert.isTrue(options.force);
assert.equal(options.language, 'de_CH');
assert.equal(options.mode, 'normal');
assert.equal(options.status, 'off');
assert.equal(options.theme, 'pink');
});
});