blob: 05943c218eae982d45fd4e1094a3f0d187f138e3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008 David Green and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* David Green - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.wikitext.parser.builder;
import static java.text.MessageFormat.format;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import org.eclipse.mylyn.wikitext.parser.MarkupParser;
import org.eclipse.mylyn.wikitext.parser.builder.HtmlDocumentBuilder;
import org.eclipse.mylyn.wikitext.splitter.DefaultSplittingStrategy;
import org.eclipse.mylyn.wikitext.splitter.SplitOutlineItem;
import org.eclipse.mylyn.wikitext.splitter.SplittingHtmlDocumentBuilder;
import org.eclipse.mylyn.wikitext.splitter.SplittingOutlineParser;
import org.eclipse.mylyn.wikitext.textile.TextileLanguage;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import com.google.common.io.Resources;
public class SplittingHtmlDocumentBuilderTest {
@Rule
public final TemporaryFolder temporaryFolderRule = new TemporaryFolder();
private final SplittingHtmlDocumentBuilder builder = new SplittingHtmlDocumentBuilder();
private HtmlDocumentBuilder rootBuilder;
private File outputFile;
@Before
public void before() throws IOException {
outputFile = temporaryFolderRule.newFile("index.html");
}
@Test
public void embeddedTableOfContents() throws IOException {
assertFalse(builder.isEmbeddedTableOfContents());
generateContents("h1. First\n\nh2. First.1\n\nh1. Second\n\nh2. Second.1\n\ntext", true);
assertFileContents("embeddedTableOfContents_First.html.txt", outputFile);
assertFileContents("embeddedTableOfContents_Second.html.txt",
new File(outputFile.getParentFile(), "Second.html"));
}
@Test
public void headingLinks() throws IOException {
generateContents(
"{toc}\n\nh1. First\n\nh2. First.1\n\nh1. Second\n\n\"link to first\":#First and \"link to first.1\":#First.1\n\nh2. Second.1\n\ntext",
false);
assertFileContents("headingLinks_First.html.txt", outputFile);
assertFileContents("headingLinks_Second.html.txt", new File(outputFile.getParentFile(), "Second.html"));
}
private void generateContents(String markup, boolean embeddedTableOfContents)
throws IOException, FileNotFoundException {
try (OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(outputFile),
StandardCharsets.UTF_8)) {
rootBuilder = new HtmlDocumentBuilder(out, true);
SplittingOutlineParser outlineParser = new SplittingOutlineParser();
outlineParser.setMarkupLanguage(new TextileLanguage());
outlineParser.setSplittingStrategy(new DefaultSplittingStrategy());
SplitOutlineItem outline = outlineParser.parse(markup);
outline.setSplitTarget(outputFile.getName());
builder.setEmbeddedTableOfContents(embeddedTableOfContents);
builder.setRootBuilder(rootBuilder);
builder.setRootFile(outputFile);
builder.setFormatting(true);
builder.setOutline(outline);
MarkupParser parser = new MarkupParser(new TextileLanguage());
parser.setBuilder(builder);
parser.parse(markup);
}
}
private void assertFileContents(String resource, File outputFile) throws IOException {
String resourcePath = "resources/SplittingHtmlDocumentBuilderTest_" + resource;
String resourceContents = Resources.toString(SplittingHtmlDocumentBuilderTest.class.getResource(resourcePath),
StandardCharsets.UTF_8);
String actualContents = Resources.toString(outputFile.toURI().toURL(), StandardCharsets.UTF_8);
assertEquals(format("Resource {0} differs", resourcePath), resourceContents, actualContents);
}
}