Benutzer:Schnark/js/qunit.js
aus Wikipedia, der freien Enzyklopädie
< Benutzer:Schnark | js
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
//Dokumentation unter [[Benutzer:Schnark/js/qunit]] <nowiki>
/*global mediaWiki, QUnit*/
(function ($, mw, libs) {
"use strict";
var tests = {
bandersnatch: ['Benutzer:Schnark/js/bandersnatch.js', 'Benutzer:Schnark/js/bandersnatch.js/test.js'],
diff: ['Benutzer:Schnark/js/diff.js/core.js', 'Benutzer:Schnark/js/diff.js/core.js/test.js'],
link: ['Benutzer:Schnark/js/linkUnlinked.js', 'Benutzer:Schnark/js/linkUnlinked.js/test.js'],
personendaten: ['Benutzer:Schnark/js/personendaten.js', 'Benutzer:Schnark/js/personendaten.js/test.js'],
rpc: ['Benutzer:Schnark/js/rpc.js', 'Benutzer:Schnark/js/rpc.js/test.js'],
search: ['Benutzer:Schnark/js/search++.js', 'Benutzer:Schnark/js/search++.js/test.js'],
syntaxhighlight: ['Benutzer:Schnark/js/syntaxhighlight.js', 'Benutzer:Schnark/js/syntaxhighlight.js/test.js'],
template: ['Benutzer:Schnark/js/Template.js', 'Benutzer:Schnark/js/Template.js/test.js'],
templateeditor: ['Benutzer:Schnark/js/templateEditor.js', 'Benutzer:Schnark/js/templateEditor.js/test.js']
}, modules = {}, running = 0, hasOwn = Object.prototype.hasOwnProperty;
function mockAjaxEnabler () {
var mockAjax = false, answers = {}, cachedAssert;
$.ajaxPrefilter(function (_, data) {
if (mockAjax && data.url.indexOf(mw.util.wikiScript('api')) === 0) {
return 'simple-mock-qunit';
}
});
$.ajaxTransport('simple-mock-qunit', function (o, data) {
o.dataTypes = o.dataTypes.filter(function (dt) {
return dt !== 'simple-mock-qunit';
});
var query = typeof data.data === 'string' ? data.data : $.param(data.data);
return {
send: function (h, callback) {
var answer;
if (query in answers) {
answer = answers[query].shift();
if (answers[query].length === 0) {
delete answers[query];
}
callback(200, 'success', {text: answer});
} else {
cachedAssert.strictEqual(false, query, 'Missing data for query');
callback(500, 'error');
}
},
abort: $.noop
};
});
function simpleMock (enable, assert) {
var q;
if (!enable) {
for (q in answers) {
if (hasOwn.call(answers, q)) {
assert.strictEqual(q, false, 'Unused query');
}
}
}
mockAjax = enable;
answers = {};
cachedAssert = assert;
return simpleMock;
}
function answerWith (query, data) {
var q;
if (data === undefined) {
for (q in query) {
if (hasOwn.call(query, q)) {
answerWith(q, query[q]);
}
}
return;
}
answers[query] = Array.isArray(data) ? data : [data];
}
simpleMock.answerWith = answerWith;
return simpleMock;
}
function loadFiles (f, name, callback) {
var i = 0;
function loadNext () {
if (i < f.length) {
$.getScript(mw.util.wikiScript() + '?' +
$.param({title: f[i++], action: 'raw', ctype: 'text/javascript'})
).then(loadNext, function () {
error(name, f[i - 1] + ' did not load', callback);
});
} else {
callback();
}
}
loadNext();
}
function error (name, text, callback) {
QUnit.module(name);
QUnit.test('Error: ' + name, function (assert) {
assert.expect(1);
assert.ok(false, text);
});
callback();
}
function loadTests (t, callback) {
var i, test, files, todo = t.length;
function checkDone () {
todo--;
if (todo === 0) {
callback();
}
}
for (i = 0; i < t.length; i++) {
test = t[i];
files = tests[test];
if (files) {
loadFiles(files, test, checkDone);
} else {
error(test, '(missing)', checkDone);
}
}
}
function loadQunit () {
var version = '2.9.2';
if (mw.loader.getState('jquery.qunit')) {
return mw.loader.using('jquery.qunit');
}
$('<link>', {
rel: 'stylesheet',
type: 'text/css',
href: 'https://code.jquery.com/qunit/qunit-' + version + '.css'
}).appendTo('head');
return $.getScript('https://code.jquery.com/qunit/qunit-' + version + '.js');
}
function init () {
document.title = 'QUnit-Tests';
$('#firstHeading').hide();
$('#mw-content-text').html('<div class="mw-content-ltr"><div id="qunit"></div>' +
'<div id="qunit-fixture"></div></div>');
window.QUnit = {
config: {
autostart: false,
requireExpects: true
}
};
loadQunit().then(function () {
QUnit.moduleDone(function (data) {
if (data.failed) {
modules[data.name] = 'error';
}
if (modules[data.name] !== 'error') {
modules[data.name] = 'done';
}
});
QUnit.testStart(function () {
running++;
});
QUnit.testDone(function () {
setTimeout(function () {
running--;
}, 1000);
});
loadTests((mw.util.getParamValue('tests') || 'No parameter "tests"').split('|'), function () {
QUnit.start();
});
});
}
function getStatus (log) {
var module, data = {error: [], done: [], running: running};
for (module in modules) {
if (hasOwn.call(modules, module)) {
data[modules[module]].push(module);
if (log && modules[module] !== 'done') {
mw.log.warn(module + ': ' + modules[module]);
}
}
}
return data;
}
mw.loader.using('mediawiki.util').then(function () {
if (
mw.config.get('wgCanonicalSpecialPageName') === 'Blankpage' &&
mw.util.getParamValue('action') === 'qunit'
) {
libs.qunit = {};
libs.qunit.simpleMockAjax = mockAjaxEnabler();
libs.qunit.getQunitStatus = getStatus;
$(init);
}
});
})(jQuery, mediaWiki, mediaWiki.libs);
//</nowiki>