public static String markupToHTML(String content) {
// ampersand and lt and gt
content = content.replace("&", "&");
content = content.replace("<<", "<");
content = content.replace(">>", ">");
// add links
content = content.replaceAll("\\[([^\\]]+)\\s+(http[^\\]]+)\\]", "<a href=\"$2\">$1</a>");
content = content.replaceAll("\\[(http[^\\]\\s]+)\\s+([^\\]]+)\\]", "<a href=\"$1\">$2</a>");
content = content.replaceAll("\\[(http[^\\]\\s]+)\\]", "<a href=\"$1\">$1</a>");
// formatting
content = content.replaceAll("\\*\\*([^*]*)\\*\\*", "<b>$1</b>");
content = content.replaceAll("\\_\\_([^_]*)\\_\\_", "<i>$1</i>");
content = content.replaceAll("\\-\\-([^_]*)\\-\\-", "<strike>$1</strike>");
content = content.replaceAll("\\^\\^([^_]*)\\^\\^", "<sup>$1</sup>");
return content;
}
Ma dokonywać konwersji postów z Bloggeroidowego markup'a do HTMLa.
I mam do tego trochę testów (które dopisuję ostatnio, bo wcześniej UT na Androidzie były tak sobie możliwe)
@Test public void strike() {
// setup
String input="This is --strike--";
// examine
String result = Markup.markupToHTML(input);
// verify
assertEquals("This is <strike>strike</strike>", result);
}
@Test public void sup() {
// setup
String input="E=mc^^2^^";
// examine
String result = Markup.markupToHTML(input);
// verify
assertEquals("E=mc<sup>2</sup>", result);
}
@Test public void link1Https() {
// setup
String input="Go to [przemelek https://przemelek.blogspot.com]";
// examine
String result = Markup.markupToHTML(input);
// verify
assertEquals("Go to <a href=\"https://przemelek.blogspot.com\">przemelek</a>", result);
}
Dużo ich jest i wiele osób byłoby za tym by zamiast robić tyle małych testów mieć jeden mniej więcej taki:
@Test public void text() {
// setup
String input="Most **famouse** __equation__ is E=mc^^2^^\nGo to [http://przemelek.blogspot.com]";
// examine
String result = Markup.markupToHTML(input);
// verify
assertEquals("Most <b>famouse</b> <i>equation</i> is E=mc<sup>2</sup>\nGo to <a href=\"http://przemelek.blogspot.com\">http://przemelek.blogspot.com</a>", result);
}
Bo ten test testuje praktycznie wszystko co moje multum małych testów.
Niejeden byłby za tym by w ogóle testować jeszcze wyżej, żeby sprawdzić jeszcze inne konwersje za jednym zamachem.
I niby coś w tym jest, w końcu one wszystkie razem występują....
Ale problem jest w tym, że jak taki test padnie to trzeba dość dużo czasu by dojść do tego co w ogóle nie działa.
Jeśli nawet w drugiej wersji testu okaże się, że __ nie jest tłumaczone na kursywę to dojdę do tego dopiero oglądając dokładnie różnicę między tekstem oczekiwanym, a otrzymanym.
W pierwszej wersji testów po prostu padnie mi test italic().
Stąd lepiej czasem napisać trochę głupich i malutkich testów, niż 1 mega test.
Ogólnie jak w teście pojawia się if albo for to wiedź, że coś się dzieje ;-)
Podobne postybeta
Skróty klawiszowe
Tworzenie poprawnych nazw plików :-)
Pomnóżmy sobie duże liczby ;-)
Eksperyment, czyli z Google+ do Bloggera ;-)
Data binding w Polymerze jest oszukany ;-)
Brak komentarzy:
Prześlij komentarz