|
|
|
package net.yacy.data.wiki;
|
|
|
|
|
|
|
|
import org.junit.Test;
|
|
|
|
|
|
|
|
import static org.junit.Assert.*;
|
|
|
|
|
|
|
|
|
|
|
|
public class WikiCodeTest {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* test geo location metadata convert
|
|
|
|
*/
|
|
|
|
@Test
|
|
|
|
public void testProcessMetadataCoordinates() {
|
|
|
|
String[] testmeta = new String[]{
|
|
|
|
"{{coordinate|NS=52.205944|EW=0.117593|region=GB-CAM|type=landmark}}", // decimal N-E location
|
|
|
|
"{{coordinate|NS=43/50/29/N|EW=73/23/17/W|type=landmark|region=US-NY}}", // N-W location
|
|
|
|
|
|
|
|
"{{Coordinate |text=DMS |NS=50/7/49/N |EW=6/8/09/E |type=landmark |region=BE-WLG |name=Monument des trois Frontières}}",
|
|
|
|
"{{Coordinate |text=DMS |NS= 49.047169|EW=7.899148|region=DE-RP |type=landmark |name=Europadenkmal (Rheinland-Pfalz)}}",
|
|
|
|
"{{Coordinate |text=DMS |NS= 49.047169|EW=7.899148|region=DE-RP |type=landmark |name={{de}}Europadenkmal (Rheinland-Pfalz)}}",// with nested language template
|
|
|
|
|
|
|
|
"{{coordinate|NS=0.00000|EW=0.117593}}", // testing equator coord
|
|
|
|
"{{coordinate|NS=-10.00000|EW=-10.10000}}", // testing S-E location
|
|
|
|
"{{coordinate|NS=12a5|EW=-10.10000}}" // testing malformed coordinates value
|
|
|
|
|
|
|
|
};
|
|
|
|
WikiCode wc = new WikiCode();
|
|
|
|
for (int i = 0; i < testmeta.length; i++) {
|
|
|
|
String result = wc.transform("http://wiki:8080",testmeta[i]);
|
|
|
|
System.out.println(testmeta[i] + " --> " + result);
|
|
|
|
// simply check if replacement took place, if no coordinate recognized original string is just html encoded
|
|
|
|
assertFalse(result.contains("#123;")); // simple check - result not containing char code for "{",
|
|
|
|
assertFalse(result.contains("#125;")); // simple check - result not containing char code for "}"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test multi-line template inclusion processing
|
|
|
|
*/
|
|
|
|
@Test
|
|
|
|
public void testTransformMultilineTemplateInclusion() {
|
|
|
|
String wikitext = "{{Infobox|Example\n"
|
|
|
|
+ "<!-- *** Name section *** -->\n"
|
|
|
|
+ "| name = Example\n"
|
|
|
|
+ "| category = [[Infobox Examples|Example]]\n"
|
|
|
|
+ "<!-- *** Website *** -->\n"
|
|
|
|
+ "| website = {{URL|http://example.com}}\n"
|
|
|
|
+ "}}";
|
|
|
|
WikiCode wc = new WikiCode();
|
|
|
|
String result = wc.transform("http://wiki:8080", wikitext);
|
|
|
|
System.out.println(wikitext + " --> " + result);
|
|
|
|
assertFalse(result.contains("#123;")); // simple check - result not containing char code for "{",
|
|
|
|
assertFalse(result.contains("#125;")); // simple check - result not containing char code for "}"
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test single line template inclusion processing
|
|
|
|
*/
|
|
|
|
@Test
|
|
|
|
public void testProcessMetadataTransclusion() {
|
|
|
|
final String[] wikitexts = new String[]{
|
|
|
|
"{{Like}}", // most simple template inclusion
|
|
|
|
"{{Stochastic processes}}", // page name including space
|
|
|
|
"{{:Stochastic processes}}", // page inclusion with implicit namespace
|
|
|
|
"{{WP:Assume good faith}}", // page inclusion from Wikipedia namespace
|
|
|
|
"{{Pagename|parameter1|parameter2|parameter3}}", // with unnamed parameters
|
|
|
|
"{{Pagename|parameter1=value1|parameter2=value2|parameter3=value3}}", // with named parameters
|
|
|
|
"{{Template|This is the title text|This is a custom warning line}}", // with parameters including spaces
|
|
|
|
"{{Special:Recentchangeslinked/General}}", // subpage inclusion
|
|
|
|
"{{Template1}} text {{Template2}} {{Template3|parameter value1|param2}}", // multiple templates on the same line
|
|
|
|
"{{Template|[[Page]]}}", // with link parameter
|
|
|
|
"{{Template|parameter1={{en}}value1|parameter2}}", // nested template inclusion
|
|
|
|
"{{Template|parameter1={{en|param1|param2=val2}}value1}}", // nested template with parameters inclusion
|
|
|
|
"{{Template", // Multi-line template inclusion beginning
|
|
|
|
"simple text {{Template", // Multi-line template inclusion beginning with text before
|
|
|
|
"{{Template|parameter1={{en}} value1", // Multi-line template inclusion beginning with nested tag
|
|
|
|
"{{Template|parameter1={{subTemplate", // Multi-line nested template inclusion
|
|
|
|
"|parameter", // Multi-line template inclusion unnamed parameter line
|
|
|
|
"|parameter=value", // Multi-line template inclusion named parameter line
|
|
|
|
"|parameter={{subTemplate|param1|param2}}value", // Multi-line template inclusion with nested template inclusion
|
|
|
|
"|[[Page]]", // Multi-line template inclusion with unnamed link parameter
|
|
|
|
"|parameter=[[Page]]", // Multi-line template inclusion with named link parameter
|
|
|
|
"}}", // Multi-line template inclusion closing
|
|
|
|
"|lastParameter}}", // Multi-line template inclusion closing with unnamed parameter
|
|
|
|
"|lastParameter=value}}", // Multi-line template inclusion closing with named parameter
|
|
|
|
"|lastParameter={{en}}value}}", // Multi-line template inclusion closing with nested tag
|
|
|
|
"}}}}" // Multi-line nested template inclusion closing
|
|
|
|
};
|
|
|
|
|
|
|
|
for (String wikitext : wikitexts) {
|
|
|
|
String result = WikiCode.processMetadata(wikitext);
|
|
|
|
System.out.println(wikitext + " --> " + result);
|
|
|
|
// simply check if replacement took place
|
|
|
|
assertFalse(result.contains("{"));
|
|
|
|
assertFalse(result.contains("|"));
|
|
|
|
assertFalse(result.contains("="));
|
|
|
|
assertFalse(result.contains("}"));
|
|
|
|
}
|
|
|
|
|
|
|
|
final String[] wikitextsNotToModify = new String[]{
|
|
|
|
"", // empty string
|
|
|
|
"Simple text",
|
|
|
|
"<pre>Simple preformatted text</pre>",
|
|
|
|
"[[Page]]", // link
|
|
|
|
"{|", // table start
|
|
|
|
"|-", // new table line
|
|
|
|
"||", // table cell divider
|
|
|
|
"|}", // table end
|
|
|
|
};
|
|
|
|
for (String wikitext : wikitextsNotToModify) {
|
|
|
|
assertEquals("Text sould not have been modified", wikitext, WikiCode.processMetadata(wikitext));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* test header wiki markup
|
|
|
|
*/
|
|
|
|
@Test
|
|
|
|
public void testProcessLineOfWikiCode() {
|
|
|
|
String[] hdrTeststr = new String[]{ // ok test header
|
|
|
|
"== Header ==", "==Header=="};
|
|
|
|
|
|
|
|
String[] nohdrTeststr = new String[]{ // wrong test header
|
|
|
|
"Text of = Header, false = wrong", "One=Two"};
|
|
|
|
|
|
|
|
WikiCode wc = new WikiCode();
|
|
|
|
|
|
|
|
for (String s : hdrTeststr) { // test ok header
|
|
|
|
String erg = wc.transform("8090", s);
|
|
|
|
assertTrue("<h2> tag expected:"+erg, erg.contains("<h2>"));
|
|
|
|
}
|
|
|
|
for (String s : nohdrTeststr) { // test wrong header
|
|
|
|
String erg = wc.transform("8090", s);
|
|
|
|
assertFalse("no header tag expected:"+erg, erg.contains("<h1>"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test internal link markup processing
|
|
|
|
*/
|
|
|
|
@Test
|
|
|
|
public void testInternalLink() {
|
|
|
|
WikiCode wc = new WikiCode();
|
|
|
|
|
|
|
|
/* Link to another wiki article */
|
|
|
|
String result = wc.transform("http://wiki:8080", "[[article]]");
|
|
|
|
assertTrue(result.contains("<a"));
|
|
|
|
assertTrue(result.contains("href=\"Wiki.html?page=article\""));
|
|
|
|
|
|
|
|
/* Renamed link */
|
|
|
|
result = wc.transform("http://wiki:8080", "[[article|renamed article]]");
|
|
|
|
assertTrue(result.contains("<a"));
|
|
|
|
assertTrue(result.contains("href=\"Wiki.html?page=article\""));
|
|
|
|
assertTrue(result.contains(">renamed article<"));
|
|
|
|
|
|
|
|
/* Multiple links on the same line */
|
|
|
|
result = wc.transform("http://wiki:8080", "[[article1]] [[article2]]");
|
|
|
|
assertTrue(result.contains("<a"));
|
|
|
|
assertTrue(result.contains("href=\"Wiki.html?page=article1\""));
|
|
|
|
assertTrue(result.contains("href=\"Wiki.html?page=article2\""));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test external link markup processing
|
|
|
|
*/
|
|
|
|
@Test
|
|
|
|
public void testExternalLink() {
|
|
|
|
WikiCode wc = new WikiCode();
|
|
|
|
|
|
|
|
/* Unamed link */
|
|
|
|
String result = wc.transform("http://wiki:8080", "[http://yacy.net]");
|
|
|
|
assertTrue(result.contains("<a"));
|
|
|
|
assertTrue(result.contains("href=\"http://yacy.net\""));
|
|
|
|
|
|
|
|
/* Named link */
|
|
|
|
result = wc.transform("http://wiki:8080", "[http://yacy.net YaCy]");
|
|
|
|
assertTrue(result.contains("<a"));
|
|
|
|
assertTrue(result.contains("href=\"http://yacy.net\""));
|
|
|
|
assertTrue(result.contains(">YaCy<"));
|
|
|
|
|
|
|
|
/* Lua Script array parameter : should not crash the transform process */
|
|
|
|
result = wc.transform("http://wiki:8080", "'[[[[2,1],[4,3],[6,5],[2,1]],[[12,11],[14,13],[16,15],[12,11]]]]'");
|
|
|
|
}
|
|
|
|
}
|