Benutzer:Schnark/js/Template.js/test.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

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
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
 //<nowiki>
 /*global mediaWiki, QUnit*/
 (function($,mw,Template,getLastError){
 "use strict";
 QUnit.module('Template');

 QUnit.test('Umgebung',function(assert){
 assert.expect(2);
 assert.ok(Template,'Template ist definiert');
 assert.ok(getLastError,'getLastError ist definiert');
 });
 QUnit.test('Funktioniert auch ohne new',function(assert){
 /*jshint newcap: false*/
 assert.expect(2);
 vartext='{{V|a=1}}{{V|a=2}}',template;
 template=Template('V',text);
 assert.ok(template!==null,'Parsen erfolgreich (ohne Nummer)');
 template=Template('V',text,2);
 assert.strictEqual(template,null,'Parsen fehlgeschlagen (mit 2)');
 });
 QUnit.test('Standard',function(assert){
 vartext='Vorne\n'+
 '{{Infobox <!--Hilfe?-->\n'+
 '| Param1 = Wert1\n'+
 '| Parameter2 = Wert2\n'+
 '| Param3 = Wert3\n'+
 '}}\n'+
 'Hinten',
 template=newTemplate('Infobox',text);

 assert.expect(14);

 assert.strictEqual(template.getVal('Param1'),'Wert1','Wert von Param1 erkannt');
 assert.strictEqual(template.getVal('Param4'),undefined,'Unbekannter Parameter erkannt');
 assert.strictEqual(template.toString(),text,'Roundtrip erfolgreich');

 assert.ok(template.insert('Param1.5','Wert1.5','Param1'),'Param1.5 erfolgreich eingfügt');
 assert.ok(template.toString().indexOf('| Param1 = Wert1\n| Param1.5 = Wert1.5\n|')!==-1,
 'Einrückung und Einfügung korrekt');

 assert.ok(template.remove('Param1'),'Param1 erfolgreich gelöscht');
 assert.ok(template.toString().indexOf('<!--Hilfe?-->\n| Param1.5')!==-1,'Löschung korrekt');

 assert.ok(template.rename('Param1.5','Param1'),'Umbenennung erfolgreich');
 assert.ok(template.change('Param1','Wert1'),'Änderung erfolgreich');
 assert.strictEqual(template.toString(),text,'Ursprungszustand erfolgreich wieder hergestellt');

 assert.ok(template.insert('Param4','Wert4'),'Param4 erfolgreich angehängt');
 assert.ok(template.toString().indexOf('| Param3 = Wert3\n| Param4 = Wert4\n}}')!==-1,'Anfügung korrekt');

 assert.ok(template.move('Param4','Param1'),'Verschiebung erfolgreich');
 assert.ok(template.toString().indexOf('| Param1 = Wert1\n| Param4 = Wert4\n|')!==-1,'Verschiebung korrekt');
 });
 QUnit.test('Finden',function(assert){
 vartext='{{TeMpLaTe:infobox_x|\n'+
 ' a =1|b= {{2}}|c\n'+
 '=3 }}',
 template=newTemplate('Infobox x',text);

 assert.expect(6);

 assert.strictEqual(template.getVal('a'),'1','Wert von Parameter a erkannt');
 assert.strictEqual(template.getVal('b'),'{{2}}','Wert von Parameter b erkannt');
 assert.strictEqual(template.getVal('c'),'3 ','Wert von Parameter c erkannt');
 assert.strictEqual(template.toString(),'{{Infobox x|\n a =1|b= {{2}}|c\n=3 }}',
 'Roundtrip erfolgreich (nur Vorlagenname angepasst)');
 assert.ok(template.insert('d','d'),'Parameter d erfolgreich angehängt');
 assert.strictEqual(template.toString(),'{{Infobox x|\n a =1|b= {{2}}|c\n=3 |d =d}}',
 'Formatierung so gut wie möglich');
 });
 QUnit.test('Kommentare',function(assert){
 vartext1='{{asdf}}\n'+
 '{{Infobox<!--Hilfe?-->\n'+
 '<!-- 1 -->\n'+
 '|a=1 <!--zu a}}-->\n',
 text2='<!--|b= -->\n',
 text3='<!-- 3| -->\n'+
 '|c=3}}<!--Ende-->',
 text=text1+text2+text3,
 template=newTemplate('Infobox',text);

 assert.expect(3);

 assert.strictEqual(template.getVal('a'),'1 <!--zu a}}-->','Wert von Parameter a erkannt');
 assert.strictEqual(template.getVal('b'),undefined,'Parameter b nicht gefunden');
 assert.strictEqual(template.toString(),text1+text3,'Roundtrip erfolgreich (nur auskommentierten Parameter entfernt)');
 });
 QUnit.test('Pipe',function(assert){
 vartext='{{Infobox|a=<!--|--><nowiki>|</nowiki>|b={{2|3}} [[2|3]]}}',//<nowiki>
 template=newTemplate('Infobox',text);

 assert.expect(3);

 assert.strictEqual(template.getVal('a'),'<!--|--><nowiki>|</nowiki>','Wert von Parameter a erkannt');//<nowiki>
 assert.strictEqual(template.getVal('b'),'{{2|3}} [[2|3]]','Wert von Parameter b erkannt');
 assert.strictEqual(template.toString(),text,'Roundtrip erfolgreich');
 });
 QUnit.test('Mehrfaches Vorkommen der Vorlage',function(assert){
 vartext='{{V|a=1}}{{V|a=2}}',template;

 assert.expect(5);

 template=newTemplate('V',text);
 assert.strictEqual(template.getVal('a'),'1','Wert von Parameter a erkannt');
 assert.strictEqual(template.toString(),text,'Roundtrip erfolgreich');

 template=newTemplate('V',text,1);
 assert.strictEqual(template.getVal('a'),'2','Wert von Parameter a erkannt');
 assert.strictEqual(template.toString(),text,'Roundtrip erfolgreich');

 assert.throws(function(){
 template=newTemplate('V',text,2);
 },'Parsen fehlgeschlagen (mit 2)');
 });
 QUnit.test('Mehrfache Parameter',function(assert){
 vartext='{{V|a=1|a=2}}',template;

 assert.expect(3);

 assert.throws(function(){
 template=newTemplate('V',text);
 },'Parsen fehlgeschlagen (ohne Erlaubnis mehrfacher Parameter)');

 template=newTemplate('V',text,0,true);
 assert.strictEqual(template.getVal('a'),'2','Wert von Parameter a erkannt');
 assert.strictEqual(template.toString(),'{{V|a=2}}','Roundtrip erfolgreich (nur überflüssigen Parameter entfernt)');
 });
 QUnit.test('Unbenannte Parameter',function(assert){
 vartext='{{V|a|b|3=c|d=4}}',template;

 assert.expect(7);

 assert.throws(function(){
 template=newTemplate('V',text);
 },'Parsen fehlgeschlagen (unbenannte Parameter verboten)');

 template=newTemplate('V',text,0,false,true);
 assert.strictEqual(template.getVal('2'),'b','Wert von Parameter 2 erkannt');
 assert.strictEqual(template.toString(),'{{V|a|b|c|d=4}}','Roundtrip erfolgreich (nur überflüssiges 3= entfernt)');

 assert.ok(template.change('2','='),'Parameter 2 erfolgreich geändert');
 assert.strictEqual(template.toString(),'{{V|a|2==|3=c|d=4}}','Korrekte Ausgabe bei Gleichheitszeichen');

 assert.ok(template.rename('2','b'),'Parameter 2 erfolgreich umbenannt');
 assert.strictEqual(template.toString(),'{{V|a|b==|3=c|d=4}}','Korrekte Ausgabe bei Umbenennung');
 });
 QUnit.test('Einrückung',function(assert){
 vartext1='Einleitung\n'+
 '{{Infobox\n'+
 '| a = a\n'+
 '| bc = bc\n'+
 '<!-- Zwischenüberschrift -->\n',
 text2=
 '| d =d\n'+
 '|e=e\n'+
 '}}',
 text=text1+text2,
 template=newTemplate('Infobox',text);

 assert.expect(5);

 assert.strictEqual(template.toString(),text,'Roundtrip erfolgreich');
 assert.deepEqual(template.getIndention(),[1,0,1,-9,1,0],'Einrückung richtig erkannt');
 template.normalize();
 assert.strictEqual(template.toString(),text1+'| d = d\n| e = e\n}}','Normalisierung erfolgreich');
 template.setIndention(undefined,undefined,undefined,1);
 template.normalize();
 assert.strictEqual(template.toString(),'Einleitung\n'+
 '{{Infobox\n'+
 '| a = a\n'+
 '| bc = bc\n'+
 '<!-- Zwischenüberschrift -->\n'+
 '| d = d\n'+
 '| e = e\n'+
 '}}','Änderung der Einrückung erfolgreich');
 template.remove('~~~~comment0');
 template.setIndention(0,0,0,0,0);
 template.normalize();
 assert.strictEqual(template.toString(),'Einleitung\n{{Infobox|a=a|bc=bc|d=d|e=e}}',
 'Änderung der Einrückung erfolgreich');
 });
 QUnit.test('Leerzeichen am Zeilenende',function(assert){
 vartext='{{Infobox \n'+
 '| a = a \n'+
 '| b = b\n'+
 '| c =\n'+
 '| d = \n'+
 '}}',
 template=newTemplate('Infobox',text);

 assert.expect(5);

 assert.strictEqual(template.toString(),text,'Roundtrip erfolgreich');
 template.normalize();
 assert.strictEqual(template.toString(),'{{Infobox \n| a = a \n| b = b\n| c =\n| d =\n}}',
 'Leerzeichen bei leeren Parametern entfernt');
 template.setIndention(undefined,undefined,undefined,undefined,undefined,1);
 template.normalize();
 assert.strictEqual(template.toString(),'{{Infobox \n| a = a \n| b = b\n| c = \n| d = \n}}',
 'Leerzeichen bei leeren Parametern angefügt');
 template.trim();
 assert.strictEqual(template.toString(),'{{Infobox\n| a = a\n| b = b\n| c = \n| d = \n}}',
 'Schließende Leerzeichen entfernt');
 template.setIndention(undefined,undefined,undefined,undefined,undefined,0);
 template.normalize();
 template.change('b','');
 template.change('c','c');
 assert.strictEqual(template.toString(),'{{Infobox\n| a = a\n| b =\n| c = c\n| d =\n}}',
 'Leerzeichen genau bei leeren Parametern auch nach Änderung');
 });
 QUnit.test('Leerzeichen bei einzeiligen Vorlagen',function(assert){
 vartext='{{V | a = a | b = b }}',
 template=newTemplate('V',text);

 assert.expect(3);

 assert.strictEqual(template.toString(),text,'Roundtrip erfolgreich');
 assert.ok(template.change('a','a'),'Wert erfolgreich auf sich selbst gesetzt');
 assert.strictEqual(template.toString(),text,'Leerzeichen bleiben erhalten');
 });
 QUnit.test('Einfügen',function(assert){
 vartext='{{V|b=b|e=e}}',template=newTemplate('V',text);

 assert.expect(11);

 assert.ok(template.insert('c','c','b'),'c nach b eingfügt');
 assert.strictEqual(template.toString(),'{{V|b=b|c=c|e=e}}','Korrekte Vorlage nach Einfügen von c');

 assert.ok(template.insert('g','g','f'),'g nach f eingfügt');
 assert.strictEqual(template.toString(),'{{V|b=b|c=c|e=e|g=g}}','Korrekte Vorlage nach Einfügen von g');

 assert.ok(template.insert('h','h'),'h angehängt');
 assert.strictEqual(template.toString(),'{{V|b=b|c=c|e=e|g=g|h=h}}','Korrekte Vorlage nach Einfügen von h');

 assert.ok(template.insert('f','f','g',true),'f vor g eingfügt');
 assert.strictEqual(template.toString(),'{{V|b=b|c=c|e=e|f=f|g=g|h=h}}','Korrekte Vorlage nach Einfügen von f');

 assert.ok(template.insert('a','a','d',true),'a vor d eingfügt');
 assert.strictEqual(template.toString(),'{{V|a=a|b=b|c=c|e=e|f=f|g=g|h=h}}','Korrekte Vorlage nach Einfügen von a');

 assert.ok(!template.insert('a','a'),'a nicht nochmals eingfügt');
 });
 QUnit.test('Sortieren',function(assert){
 varanfang='{{Infobox <!--Hilfe?-->\n',
 bc='<!-- zu b + c-->\n'+
 '|b=b\n'+
 '|c=c\n',
 a='<!-- zu a -->\n'+
 '|a=a\n',
 d='|d=d\n'+
 '<!--Ende-->\n'+
 '}}',
 text=anfang+bc+a+d,
 template1=newTemplate('Infobox',text),
 template2=newTemplate('Infobox',text),
 folge=['a','b','c'];

 assert.expect(5);

 assert.ok(!template1.sort(folge),'Sortieren gescheitert, unbekannter Parameter');

 assert.ok(template1.sort(folge,true),'Sortieren erfolgreich');
 assert.strictEqual(template1.toString(),anfang+a+bc+d,'Sortierung korrekt');

 folge.push('d');
 assert.ok(template2.sort(folge),'Sortieren erfolgreich');
 assert.strictEqual(template2.toString(),anfang+a+bc+d,'Sortierung korrekt');
 });
 QUnit.test('Validieren - Parameter und Werte',function(assert){
 vartext1='{{V|Pflicht=A|Optional=B|Zahl=3}}',
 text2='{{V|Pflicht=A}}',
 text3='{{V|Optional=B}}',
 text4='{{V|Pflicht=A|Zahl=C}}',
 text5='{{V|Pflicht=A|Optional=B|Zahl=3|Unbekannt=D}}',
 template1=newTemplate('V',text1),
 template2=newTemplate('V',text2),
 template3=newTemplate('V',text3),
 template4=newTemplate('V',text4),
 template5=newTemplate('V',text5),

 val={'Zahl':{optional:true,re:/^\d+\s*$/},
 'Pflicht':{},
 'Optional':{optional:true}
 };

 assert.expect(5);

 assert.ok(template1.validate(val),'vieles da -> OK');
 assert.ok(template2.validate(val),'Pflicht da -> OK');
 assert.ok(!template3.validate(val),'Pflicht fehlt -> Fehler');
 assert.ok(!template4.validate(val),'keine Zahl -> Fehler');
 assert.ok(!template5.validate(val),'unbekannter Parameter -> Fehler');
 });
 QUnit.test('Validieren - oneGroup',function(assert){
 vartext1='{{V|Rest=}}',
 text2='{{V|Herr=A|Rest=}}',
 text3='{{V|Rest=|Herrin=B}}',
 text4='{{V|Herrin=B|Rest=|Herr=A}}',
 template1=newTemplate('V',text1),
 template2=newTemplate('V',text2),
 template3=newTemplate('V',text3),
 template4=newTemplate('V',text4),

 val1={'Rest':{},'Herr':{oneGroup:'HerrIn'},'Herrin':{oneGroup:'HerrIn'}},
 val2={'Rest':{},'Herr':{oneGroup:'HerrIn',optional:true},'Herrin':{oneGroup:'HerrIn',optional:true}};

 assert.expect(8);

 assert.ok(!template1.validate(val1),'nichts vorhanden -> Fehler');
 assert.ok(template1.validate(val2),'nichts vorhanden, aber optional -> OK');

 assert.ok(template2.validate(val1),'eins vorhanden -> OK');
 assert.ok(template2.validate(val2),'eins vorhanden -> OK');

 assert.ok(template3.validate(val1),'eins vorhanden -> OK');
 assert.ok(template3.validate(val2),'eins vorhanden -> OK');

 assert.ok(!template4.validate(val1),'beide vorhanden -> Fehler');
 assert.ok(!template4.validate(val2),'beide vorhanden -> Fehler');
 });
 QUnit.test('Validieren - allGroup',function(assert){
 vartext1='{{V|Rest=}}',
 text2='{{V|Rest=|Daten=viele}}',
 text3='{{V|Stand=gestern|Rest=}}',
 text4='{{V|Daten=viele|Stand=gestern|Rest=}}',
 template1=newTemplate('V',text1),
 template2=newTemplate('V',text2),
 template3=newTemplate('V',text3),
 template4=newTemplate('V',text4),

 val={
 'Rest':{},
 'Daten':{allGroup:'Daten + Stand',optional:true},
 'Stand':{allGroup:'Daten + Stand',optional:true}
 };

 assert.expect(4);

 assert.ok(template1.validate(val),'nichts vorhanden -> OK');
 assert.ok(!template2.validate(val),'eins vorhanden -> Fehler');
 assert.ok(!template3.validate(val),'eins vorhanden -> Fehler');
 assert.ok(template4.validate(val),'beide vorhanden -> OK');
 });
 })(jQuery,mediaWiki,mediaWiki.libs.Template,mediaWiki.libs.templateGetLastError);
 //</nowiki>
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Benutzer:Schnark/js/Template.js/test.js&oldid=152640348"