Skip to content

Commit

Permalink
Created AsciidoctorAsserter to simplify tests
Browse files Browse the repository at this point in the history
  • Loading branch information
abelsromero committed Mar 10, 2021
1 parent ae4716a commit 09d919b
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 76 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -138,38 +138,6 @@ class AsciidoctorMojoTest extends Specification {
text.contains('i class="fa icon-tip"')
}

def "override output file with absolute path"() {
setup:
File srcDir = new File(DEFAULT_SOURCE_DIRECTORY)
File outputDir = newOutputTestDirectory()
File outputFile = new File(newOutputTestDirectory().absolutePath, 'custom_output_file.html')

if (!outputDir.exists())
outputDir.mkdir()
when:
AsciidoctorMojo mojo = new AsciidoctorMojo()
mojo.attributes["icons"] = "font"
mojo.embedAssets = true
mojo.outputDirectory = outputDir
mojo.outputFile = outputFile
mojo.sourceDirectory = srcDir
mojo.sourceDocumentName = 'sample-embedded.adoc'
mojo.backend = 'html'
mojo.resources = [new Resource(directory: '.', excludes: ['**/**'])]
mojo.execute()
then:
outputDir.list().toList().isEmpty()
!outputDir.list().toList().contains('custom_output_file.html')

File sampleOutput = outputFile
sampleOutput.length() > 0
String text = sampleOutput.getText()
text.contains('Asciidoctor default stylesheet')
text.contains('data:image/png;base64,iVBORw0KGgo')
text.contains('font-awesome.min.css')
text.contains('i class="fa icon-tip"')
}

def "missing-attribute skip"() {
given:
File srcDir = new File(DEFAULT_SOURCE_DIRECTORY)
Expand Down
46 changes: 46 additions & 0 deletions src/test/java/org/asciidoctor/maven/AsciidoctorAsserter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package org.asciidoctor.maven;

import org.assertj.core.api.AbstractFileAssert;
import org.assertj.core.api.AbstractStringAssert;
import org.assertj.core.api.Assertions;

import java.io.File;

public class AsciidoctorAsserter {

private final AbstractFileAssert<?> fileAssert;
private final AbstractStringAssert<?> contentAssert;

private AsciidoctorAsserter(File generatedFile) {
this.fileAssert = Assertions.assertThat(generatedFile);
this.contentAssert = Assertions.assertThat(TestUtils.readAsString(generatedFile));
}

public static AsciidoctorAsserter assertThat(File file) {
return new AsciidoctorAsserter(file);
}

public static AsciidoctorAsserter assertThat(File parentPath, String filename) {
return new AsciidoctorAsserter(new File(parentPath, filename));
}

public AsciidoctorAsserter isNotEmpty() {
fileAssert.exists().isNotEmpty();
return this;
}

public AsciidoctorAsserter contains(String text) {
contentAssert.contains(text);
return this;
}

public AsciidoctorAsserter doesNotContain(String text) {
contentAssert.doesNotContain(text);
return this;
}

public AsciidoctorAsserter startsWith(String prefix) {
contentAssert.startsWith(prefix);
return this;
}
}
96 changes: 52 additions & 44 deletions src/test/java/org/asciidoctor/maven/AsciidoctorMojoTest.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
package org.asciidoctor.maven;

import lombok.SneakyThrows;
import org.apache.commons.io.IOUtils;
import org.apache.maven.model.Resource;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.assertj.core.api.Assertions;
import org.junit.Test;

import java.io.File;
import java.io.FileOutputStream;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;

import static java.util.Collections.singletonList;
import static org.asciidoctor.maven.AsciidoctorAsserter.assertThat;
import static org.asciidoctor.maven.TestUtils.*;
import static org.asciidoctor.maven.io.TestFilesHelper.newOutputTestDirectory;
import static org.assertj.core.api.Assertions.assertThat;

public class AsciidoctorMojoTest {

Expand All @@ -38,8 +35,10 @@ public void should_convert_to_docbook() throws MojoFailureException, MojoExecuti
mojo.execute();

// then
assertThat(outputDir.list()).contains("sample.xml");
assertThat(new File(outputDir, "sample.xml")).isNotEmpty();
assertThat(outputDir, "sample.xml")
.isNotEmpty()
.startsWith("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
.contains("<article xmlns=\"http://docbook.org/ns/docbook\" xmlns:xl=\"http://www.w3.org/1999/xlink\" version=\"5.0\" xml:lang=\"en\">");
}

@Test
Expand All @@ -58,11 +57,8 @@ public void should_convert_to_html5_with_defaults() throws MojoFailureException,
mojo.execute();

// then
assertThat(outputDir.list()).contains("sample.html");

File convertedFile = new File(outputDir, "sample.html");
assertThat(convertedFile).isNotEmpty();
assertThat(readAsString(convertedFile))
assertThat(outputDir, "sample.html")
.isNotEmpty()
.contains("<body class=\"article\">")
.contains("Asciidoctor default stylesheet")
.contains("<pre class=\"highlight\"><code class=\"language-ruby\" data-lang=\"ruby\">")
Expand Down Expand Up @@ -92,11 +88,8 @@ public void should_convert_to_html_with_attributes() throws MojoFailureException
mojo.execute();

// then
assertThat(outputDir.list()).contains("sample.html");

File convertedFile = new File(outputDir, "sample.html");
assertThat(convertedFile).isNotEmpty();
assertThat(readAsString(convertedFile))
assertThat(outputDir, "sample.html")
.isNotEmpty()
.contains("<body class=\"article\">")
.contains("id=\"toc\"")
.contains("Asciidoctor default stylesheet")
Expand Down Expand Up @@ -125,11 +118,8 @@ public void should_convert_to_html_with_a_custom_template() throws MojoFailureEx
mojo.execute();

// then
assertThat(outputDir.list()).contains("sample.html");

File convertedFile = new File(outputDir, "sample.html");
assertThat(convertedFile).isNotEmpty();
assertThat(readAsString(convertedFile))
assertThat(outputDir, "sample.html")
.isNotEmpty()
.contains("custom-admonition-block")
.contains("custom-block-style");
}
Expand All @@ -142,7 +132,7 @@ public void should_set_output_file() throws MojoFailureException, MojoExecutionE

// when
AsciidoctorMojo mojo = newFakeAsciidoctorMojo();
mojo.backend = "html";
mojo.backend = "html5";
mojo.attributes = map("icons", "font");
mojo.embedAssets = true;
mojo.sourceDirectory = srcDir;
Expand All @@ -152,11 +142,39 @@ public void should_set_output_file() throws MojoFailureException, MojoExecutionE
mojo.execute();

// then
assertThat(outputDir.list()).contains("custom_output_file.html");
assertThat(outputDir, "custom_output_file.html")
.isNotEmpty()
.contains("Asciidoctor default stylesheet")
.contains("data:image/png;base64,iVBORw0KGgo")
.contains("font-awesome.min.css")
.contains("i class=\"fa icon-tip\"");
}

@Test
public void should_override_output_directory_with_output_file_with_absolute_path() throws MojoFailureException, MojoExecutionException {
// setup
File srcDir = new File(DEFAULT_SOURCE_DIRECTORY);
File outputDir = newOutputTestDirectory();
File outputFile = new File(newOutputTestDirectory().getAbsolutePath(), "custom_output_file_absolute.html");

// when
AsciidoctorMojo mojo = newFakeAsciidoctorMojo();
mojo.backend = "html5";
mojo.attributes = map("icons", "font");
mojo.embedAssets = true;
mojo.sourceDirectory = srcDir;
mojo.sourceDocumentName = "sample-embedded.adoc";
mojo.outputDirectory = outputDir;
mojo.outputFile = outputFile;
mojo.resources = excludeAll();
mojo.execute();

// then
// NOTE: the plugin cr
Assertions.assertThat(outputDir).exists();

File convertedFile = new File(outputDir, "custom_output_file.html");
assertThat(convertedFile).isNotEmpty();
assertThat(readAsString(convertedFile))
assertThat(outputFile)
.isNotEmpty()
.contains("Asciidoctor default stylesheet")
.contains("data:image/png;base64,iVBORw0KGgo")
.contains("font-awesome.min.css")
Expand All @@ -167,12 +185,12 @@ public void should_set_output_file() throws MojoFailureException, MojoExecutionE
public void should_set_file_extension() throws MojoFailureException, MojoExecutionException {
// given
File outputDir = newOutputTestDirectory();
assertThat(outputDir).doesNotExist();
Assertions.assertThat(outputDir).doesNotExist();

File srcDir = new File(DEFAULT_SOURCE_DIRECTORY);
outputDir.mkdirs();
writeToFile(srcDir, "sample1.foo", "= Document Title\n\nfoo");
writeToFile(srcDir, "sample1.foo", "= Document Title\n\nbar");
writeToFile(srcDir, "sample2.bar", "= Document Title\n\nbar");

// when
AsciidoctorMojo mojo = newFakeAsciidoctorMojo();
Expand All @@ -183,23 +201,13 @@ public void should_set_file_extension() throws MojoFailureException, MojoExecuti
mojo.execute();

// then
assertThat(outputDir.list()).hasSizeGreaterThan(2);
assertThat(outputDir.list())
.contains("sample1.html")
.contains("sample2.html");

assertThat(readAsString(new File(outputDir, "sample1.html")))
assertThat(outputDir, "sample1.html")
.isNotEmpty()
.contains("foo");
assertThat(readAsString(new File(outputDir, "sample2.html")))
.contains("bar");
}

@SneakyThrows
private void writeToFile(File parent, String filename, String... lines) {
FileOutputStream fileOutputStream = new FileOutputStream(new File(parent, filename));
for (String line : lines) {
IOUtils.write(line, fileOutputStream, StandardCharsets.UTF_8);
}
assertThat(outputDir, "sample2.html")
.isNotEmpty()
.contains("bar");
}

private List<Resource> excludeAll() {
Expand Down
10 changes: 10 additions & 0 deletions src/test/java/org/asciidoctor/maven/TestUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
import org.sonatype.plexus.build.incremental.DefaultBuildContext;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.nio.charset.StandardCharsets;
import java.util.*;

import static org.codehaus.plexus.util.ReflectionUtils.setVariableValueInObject;
Expand Down Expand Up @@ -82,6 +84,14 @@ public static String readAsString(File file) {
return IOUtils.toString(new FileReader(file));
}

@SneakyThrows
public static void writeToFile(File parent, String filename, String... lines) {
FileOutputStream fileOutputStream = new FileOutputStream(new File(parent, filename));
for (String line : lines) {
IOUtils.write(line, fileOutputStream, StandardCharsets.UTF_8);
}
}

public static class ResourceBuilder {
private final Resource resource = new Resource();

Expand Down

0 comments on commit 09d919b

Please sign in to comment.