blob: 6b993e8a7272915bc7e228550d315933e57cefbe [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 David Green.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* David Green - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.wikitext.commonmark;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import org.eclipse.mylyn.internal.wikitext.commonmark.spec.SimplifiedHtmlDocumentBuilder;
import org.eclipse.mylyn.wikitext.commonmark.CommonMarkLanguage;
import org.eclipse.mylyn.wikitext.core.parser.DocumentBuilder;
import org.eclipse.mylyn.wikitext.core.parser.HtmlParser;
import org.eclipse.mylyn.wikitext.core.parser.MarkupParser;
import org.eclipse.mylyn.wikitext.core.parser.builder.HtmlDocumentBuilder;
import org.eclipse.mylyn.wikitext.core.parser.builder.HtmlDocumentHandler;
import org.eclipse.mylyn.wikitext.core.parser.markup.MarkupLanguage;
import org.eclipse.mylyn.wikitext.core.util.XmlStreamWriter;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import com.google.common.base.Throwables;
public class CommonMarkAsserts {
public static void assertContent(String expectedHtml, String input) {
String html = parseToHtml(new CommonMarkLanguage(), input);
assertHtmlEquals(expectedHtml, html);
}
public static void assertContent(MarkupLanguage language, String expectedHtml, String input) {
String html = parseToHtml(language, input);
assertHtmlEquals(expectedHtml, html);
}
private static void assertHtmlEquals(String expectedHtml, String html) {
if (expectedHtml.trim().equals(html.trim())) {
return;
}
assertEquals(toComparisonValue(expectedHtml), toComparisonValue(html));
}
private static String toComparisonValue(String html) {
if (html == null) {
return null;
}
try {
StringWriter out = new StringWriter();
DocumentBuilder builder = createDocumentBuilder(out);
HtmlParser.instance().parse(new InputSource(new StringReader(html)), builder);
return out.toString().trim();
} catch (IOException | SAXException e) {
throw new RuntimeException(html, e);
}
}
private static String parseToHtml(MarkupLanguage markupLanguage, String input) {
StringWriter out = new StringWriter();
DocumentBuilder builder = createDocumentBuilder(out);
MarkupParser parser = new MarkupParser(markupLanguage, builder);
try {
parser.parse(new StringReader(input));
} catch (IOException e) {
throw Throwables.propagate(e);
}
return out.toString();
}
private static DocumentBuilder createDocumentBuilder(StringWriter out) {
HtmlDocumentBuilder builder = new SimplifiedHtmlDocumentBuilder(out);
builder.setDocumentHandler(new HtmlDocumentHandler() {
@Override
public void endDocument(HtmlDocumentBuilder builder, XmlStreamWriter writer) {
}
@Override
public void beginDocument(HtmlDocumentBuilder builder, XmlStreamWriter writer) {
}
});
return builder;
}
}