Benutzer:Schnark/js/search++.js/test.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
//<nowiki>
/*global mediaWiki, QUnit*/
(function ($, mw, s, simpleMockAjax) {
"use strict";
function searchTest (name, query, result, ajax, assert, wait) {
var cont, d;
cont = assert.async();
d = wait || $.Deferred().resolve();
function onEnd () {
simpleMockAjax(false, assert);
cont();
}
d = d.then(function () {
simpleMockAjax(true, assert).answerWith(ajax);
return s.queryByString(query);
});
if (result) {
d = d.then(function (r) {
assert.deepEqual(r, result, name);
});
} else {
d = d.then(null, function () {
assert.ok(true, name);
});
}
return d.then(onEnd, onEnd);
}
QUnit.module('search++');
QUnit.test('Umgebung', function (assert) {
assert.expect(6);
assert.ok(s, 'libs["search++"] vorhanden');
assert.ok(s.addPropertyGetter, 'addPropertyGetter vorhanden');
assert.ok(s.addSearchEngine, 'addSearchEngine vorhanden');
assert.ok(s.getHelp, 'getHelp vorhanden');
assert.ok(s.doQuery, 'doQuery vorhanden');
assert.ok(s.queryByString, 'queryByString vorhanden');
});
QUnit.test('Falsche Anfragen', function (assert) {
assert.expect(3);
searchTest('Falsche Syntax', 'prefix("Foo") ODER prefix("Bar")', false, {}, assert);
searchTest('Fehlende Funktion', 'praefix("Foo")', false, {}, assert);
searchTest('Kein Erzeuger', 'redir()', false, {}, assert);
});
QUnit.test('Foo und Bar', function (assert) {
var wait;
assert.expect(8);
wait = searchTest('Einfache Anfrage', 'prefix("Foo")', ['Foo', 'Foobar'], {
'apprefix=Foo&aplimit=max&action=query&list=allpages&format=json&formatversion=2&continue=':
'{"query":{"allpages":[{"ns":0,"title":"Foo"},{"ns":0,"title":"Foobar"}]}}'
}, assert);
wait = searchTest('Gecachte Anfrage', 'prefix("Foo")', ['Foo', 'Foobar'], {}, assert, wait);
wait = searchTest('Anfrage mit continue', 'prefix("Bar")', ['Bar', 'Barfoo'], {
'apprefix=Bar&aplimit=max&action=query&list=allpages&format=json&formatversion=2&continue=':
'{"query":{"allpages":[{"ns":0,"title":"Bar"}]},"continue":{"apcontinue":"Barf","continue":"-||"}}',
'apprefix=Bar&aplimit=max&action=query&list=allpages&format=json&formatversion=2&continue=-%7C%7C&apcontinue=Barf':
'{"query":{"allpages":[{"ns":0,"title":"Barfoo"}]}}'
}, assert, wait);
wait = searchTest('Doppelte gecachte Anfrage mit Sortierung', 'prefix("Foo") OR prefix("Bar") SORT title()',
['Bar', 'Barfoo', 'Foo', 'Foobar'], {}, assert, wait);
wait = searchTest('Anfrage mit Selektierung', 'prefix("Foo") AND minSize(50)', ['Foobar'], {
'action=query&prop=info&titles=Foo%7CFoobar&format=json&formatversion=2&continue=':
'{"query":{"pages":[{"pageid":321,"ns":0,"title":"Foo","length":20},' +
'{"pageid":789,"ns":0,"title":"Foobar","length":200}]}}'
}, assert, wait);
wait = searchTest('Anfrage mit Sortierung', 'prefix("Foo") SORT maxSize()', ['Foobar', 'Foo'], {}, assert, wait);
wait = searchTest('Anfrage mit Abbildung', 'prefix("Bar") MAP iw("en")', [':en:BAR'], {
'lllimit=max&action=query&prop=langlinks&titles=Bar%7CBarfoo&format=json&formatversion=2&continue=':
'{"query":{"pages":[{"pageid":123,"ns":0,"title":"Bar","langlinks":[' +
'{"lang":"fr","title":"Bár"},{"lang":"en","title":"BAR"}]},{"pageid":987,"ns":0,"title":"Barfoo"}]}}'
}, assert, wait);
searchTest('Anfrage mit Ausschluss', 'prefix("Bar") NOT iw("fr")', ['Barfoo'], {}, assert, wait);
});
QUnit.test('Viele Titel', function (assert) {
assert.expect(3);
var viele = [], gerade = [], weiter = [], i, q1, q2, a1, a2, id, from, to, wait;
q1 = 'redirects=true&action=query&prop=&titles=';
q2 = q1;
a1 = {
query: {
redirects: [],
pages: []
}
};
a2 = $.extend(true, {}, a1);
for (i = 0; i < 100; i++) {
id = 100 * i;
from = String(i);
to = i % 2 === 0 ? 'a' + i : from;
if (from !== to) {
gerade.push(from);
}
viele.push(from);
weiter.push(to);
if (i < 50) {
q1 += (i === 0 ? '' : '%7C') + i;
if (from !== to) {
a1.query.redirects.push({from: from, to: to});
}
a1.query.pages.push({
ns: 0, pageid: id, title: to
});
} else {
q2 += (i === 50 ? '' : '%7C') + i;
if (from !== to) {
a2.query.redirects.push({from: from, to: to});
}
a2.query.pages.push({
ns: 0, pageid: id, title: to
});
}
}
q1 += '&format=json&formatversion=2&continue=';
q2 += '&format=json&formatversion=2&continue=';
a1 = JSON.stringify(a1);
a2 = JSON.stringify(a2);
i = {};
i[q1] = a1;
i[q2] = a2;
s.addSearchEngine('qunit', {
get: function () {
return $.Deferred().resolve(viele).promise();
}
});
wait = searchTest('Einfache Anfrage', 'qunit()', viele, {}, assert);
wait = searchTest('Einschränken auf Weiterleitungen', 'qunit() AND redir()', gerade, i, assert, wait);
searchTest('Abbildung auf Weiterleitungen', 'qunit() MAP redir()', weiter, {}, assert, wait);
});
QUnit.test('Cattree', function (assert) {
assert.expect(1);
searchTest('Cattree', 'cattree("Kategorie:1")', ['A', 'B', 'C', 'D'], {
//jscs:disable maximumLineLength
'cmtype=subcat&cmtitle=Kategorie%3A1&cmlimit=max&action=query&list=categorymembers&format=json&formatversion=2&continue=':
'{"query":{"categorymembers":[{"ns":14,"title":"Kategorie:2"}]}}',
'cmtype=subcat&cmtitle=Kategorie%3A2&cmlimit=max&action=query&list=categorymembers&format=json&formatversion=2&continue=':
'{"query":{"categorymembers":[{"ns":14,"title":"Kategorie:1"},{"ns":14,"title":"Kategorie:3"}]}}',
'cmtype=subcat&cmtitle=Kategorie%3A3&cmlimit=max&action=query&list=categorymembers&format=json&formatversion=2&continue=':
'{"query":{"categorymembers":[]}}',
'cmtype=page&cmtitle=Kategorie%3A1&cmlimit=max&action=query&list=categorymembers&format=json&formatversion=2&continue=':
'{"query":{"categorymembers":[{"ns":0,"title":"A"}]}}',
'cmtype=page&cmtitle=Kategorie%3A2&cmlimit=max&action=query&list=categorymembers&format=json&formatversion=2&continue=':
'{"query":{"categorymembers":[{"ns":0,"title":"A"},{"ns":0,"title":"B"},{"ns":0,"title":"C"}]}}',
'cmtype=page&cmtitle=Kategorie%3A3&cmlimit=max&action=query&list=categorymembers&format=json&formatversion=2&continue=':
'{"query":{"categorymembers":[{"ns":0,"title":"D"}]}}'
//jscs:enable maximumLineLength
}, assert);
});
})(jQuery, mediaWiki, mediaWiki.libs['search++'], mediaWiki.libs.qunit.simpleMockAjax);
//</nowiki>