diff --git a/README.md b/README.md index dd2cec01c..719f788c0 100644 --- a/README.md +++ b/README.md @@ -193,56 +193,37 @@ public class Main { #### HTML ```java -String html = new HtmlRender("Changelog", - "http://deepoove.com/swagger-diff/stylesheets/demo.css") - .render(diff); - -try { - FileWriter fw = new FileWriter("testNewApi.html"); - fw.write(html); - fw.close(); -} catch (IOException e) { - e.printStackTrace(); -} +String htmlRender = new HtmlRender("Changelog", "http://deepoove.com/swagger-diff/stylesheets/demo.css"); +FileOutputStream outputStream = new FileOutputStream("testDiff.html"); +OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); +htmlRender.render(diff, outputStreamWriter); ``` #### Markdown ```java -String render = new MarkdownRender().render(diff); -try { - FileWriter fw = new FileWriter("testDiff.md"); - fw.write(render); - fw.close(); -} catch (IOException e) { - e.printStackTrace(); -} +JsonRender markdownRender = new MarkdownRender(); +FileOutputStream outputStream = new FileOutputStream("testDiff.md"); +OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); +markdownRender.render(diff, outputStreamWriter); ``` #### Asciidoc ```java -String render = new AsciidocRender().render(diff); -try { - FileWriter fw = new FileWriter("testDiff.adoc"); - fw.write(render); - fw.close(); -} catch (IOException e) { - e.printStackTrace(); -} +JsonRender asciidocRender = new AsciidocRender(); +FileOutputStream outputStream = new FileOutputStream("testDiff.adoc"); +OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); +asciidocRender.render(diff, outputStreamWriter); ``` #### JSON ```java -String render = new JsonRender().render(diff); -try { - FileWriter fw = new FileWriter("testDiff.json"); - fw.write(render); - fw.close(); -} catch (IOException e) { - e.printStackTrace(); -} +JsonRender jsonRender = new JsonRender(); +FileOutputStream outputStream = new FileOutputStream("testDiff.json"); +OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); +jsonRender.render(diff, outputStreamWriter); ``` ### Extensions diff --git a/core/src/main/java/org/openapitools/openapidiff/core/output/Render.java b/core/src/main/java/org/openapitools/openapidiff/core/output/Render.java index 8169f31cd..529a290b9 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/output/Render.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/output/Render.java @@ -1,5 +1,6 @@ package org.openapitools.openapidiff.core.output; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import org.openapitools.openapidiff.core.exception.RendererException; @@ -7,7 +8,38 @@ public interface Render { - void render(ChangedOpenApi diff, OutputStreamWriter outputStreamWriter); + /** + * render provided diff object + * + * @param diff diff object to render + * @param outputStreamWriter writer for rendered results + */ + void render(ChangedOpenApi diff, OutputStreamWriter outputStreamWriter) throws RendererException; + + /** + * render provided diff object + * + * @deprecated since 2.1.0, use {@link Render#render(ChangedOpenApi, OutputStreamWriter)} to avoid + * massive String output issues. details #543 + * @param diff diff object to render + * @return rendered output + */ + @Deprecated + default String render(ChangedOpenApi diff) throws RendererException { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(byteArrayOutputStream); + render(diff, outputStreamWriter); + String result = byteArrayOutputStream.toString(); + + try { + outputStreamWriter.close(); + } catch (IOException e) { + throw new RendererException(e); + } + + return result; + } default void safelyAppend(OutputStreamWriter outputStreamWriter, String csq) { try { diff --git a/core/src/test/java/org/openapitools/openapidiff/core/AsciidocRenderTest.java b/core/src/test/java/org/openapitools/openapidiff/core/output/AsciidocRenderTest.java similarity index 97% rename from core/src/test/java/org/openapitools/openapidiff/core/AsciidocRenderTest.java rename to core/src/test/java/org/openapitools/openapidiff/core/output/AsciidocRenderTest.java index dae2440eb..228623a2c 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/AsciidocRenderTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/output/AsciidocRenderTest.java @@ -1,12 +1,12 @@ -package org.openapitools.openapidiff.core; +package org.openapitools.openapidiff.core.output; import static org.assertj.core.api.Assertions.assertThat; import java.io.ByteArrayOutputStream; import java.io.OutputStreamWriter; import org.junit.jupiter.api.Test; +import org.openapitools.openapidiff.core.OpenApiCompare; import org.openapitools.openapidiff.core.model.ChangedOpenApi; -import org.openapitools.openapidiff.core.output.AsciidocRender; public class AsciidocRenderTest { @Test diff --git a/core/src/test/java/org/openapitools/openapidiff/core/ConsoleRenderTest.java b/core/src/test/java/org/openapitools/openapidiff/core/output/ConsoleRenderTest.java similarity index 96% rename from core/src/test/java/org/openapitools/openapidiff/core/ConsoleRenderTest.java rename to core/src/test/java/org/openapitools/openapidiff/core/output/ConsoleRenderTest.java index 83d024669..675633fcd 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/ConsoleRenderTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/output/ConsoleRenderTest.java @@ -1,12 +1,12 @@ -package org.openapitools.openapidiff.core; +package org.openapitools.openapidiff.core.output; import static org.assertj.core.api.Assertions.assertThat; import java.io.ByteArrayOutputStream; import java.io.OutputStreamWriter; import org.junit.jupiter.api.Test; +import org.openapitools.openapidiff.core.OpenApiCompare; import org.openapitools.openapidiff.core.model.ChangedOpenApi; -import org.openapitools.openapidiff.core.output.ConsoleRender; public class ConsoleRenderTest { @Test diff --git a/core/src/test/java/org/openapitools/openapidiff/core/HtmlRenderTest.java b/core/src/test/java/org/openapitools/openapidiff/core/output/HtmlRenderTest.java similarity index 87% rename from core/src/test/java/org/openapitools/openapidiff/core/HtmlRenderTest.java rename to core/src/test/java/org/openapitools/openapidiff/core/output/HtmlRenderTest.java index aa44725c4..e62268d10 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/HtmlRenderTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/output/HtmlRenderTest.java @@ -1,12 +1,12 @@ -package org.openapitools.openapidiff.core; +package org.openapitools.openapidiff.core.output; import static org.assertj.core.api.Assertions.assertThat; import java.io.ByteArrayOutputStream; import java.io.OutputStreamWriter; import org.junit.jupiter.api.Test; +import org.openapitools.openapidiff.core.OpenApiCompare; import org.openapitools.openapidiff.core.model.ChangedOpenApi; -import org.openapitools.openapidiff.core.output.HtmlRender; public class HtmlRenderTest { @Test diff --git a/core/src/test/java/org/openapitools/openapidiff/core/JsonRenderTest.java b/core/src/test/java/org/openapitools/openapidiff/core/output/JsonRenderTest.java similarity index 91% rename from core/src/test/java/org/openapitools/openapidiff/core/JsonRenderTest.java rename to core/src/test/java/org/openapitools/openapidiff/core/output/JsonRenderTest.java index 280dce9d0..da5ce9ecc 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/JsonRenderTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/output/JsonRenderTest.java @@ -1,12 +1,12 @@ -package org.openapitools.openapidiff.core; +package org.openapitools.openapidiff.core.output; import static org.assertj.core.api.Assertions.assertThat; import java.io.ByteArrayOutputStream; import java.io.OutputStreamWriter; import org.junit.jupiter.api.Test; +import org.openapitools.openapidiff.core.OpenApiCompare; import org.openapitools.openapidiff.core.model.ChangedOpenApi; -import org.openapitools.openapidiff.core.output.JsonRender; public class JsonRenderTest { @Test diff --git a/core/src/test/java/org/openapitools/openapidiff/core/MarkdownRenderTest.java b/core/src/test/java/org/openapitools/openapidiff/core/output/MarkdownRenderTest.java similarity index 94% rename from core/src/test/java/org/openapitools/openapidiff/core/MarkdownRenderTest.java rename to core/src/test/java/org/openapitools/openapidiff/core/output/MarkdownRenderTest.java index d30c6e0b1..fb1f24fef 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/MarkdownRenderTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/output/MarkdownRenderTest.java @@ -1,12 +1,12 @@ -package org.openapitools.openapidiff.core; +package org.openapitools.openapidiff.core.output; import static org.assertj.core.api.Assertions.assertThat; import java.io.ByteArrayOutputStream; import java.io.OutputStreamWriter; import org.junit.jupiter.api.Test; +import org.openapitools.openapidiff.core.OpenApiCompare; import org.openapitools.openapidiff.core.model.ChangedOpenApi; -import org.openapitools.openapidiff.core.output.MarkdownRender; public class MarkdownRenderTest { @Test diff --git a/core/src/test/java/org/openapitools/openapidiff/core/output/RenderTest.java b/core/src/test/java/org/openapitools/openapidiff/core/output/RenderTest.java new file mode 100644 index 000000000..86f1e5842 --- /dev/null +++ b/core/src/test/java/org/openapitools/openapidiff/core/output/RenderTest.java @@ -0,0 +1,27 @@ +package org.openapitools.openapidiff.core.output; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +import java.io.IOException; +import org.junit.jupiter.api.Test; +import org.openapitools.openapidiff.core.exception.RendererException; +import org.openapitools.openapidiff.core.model.ChangedOpenApi; + +class RenderTest { + + private final Render testRenderImpl = + (diff, outputStreamWriter) -> { + try { + outputStreamWriter.write("Output"); + outputStreamWriter.close(); + } catch (IOException e) { + throw new RendererException(e); + } + }; + + @Test + void testDefaultRenderMethod() { + ChangedOpenApi diff = new ChangedOpenApi(null); + assertThat(testRenderImpl.render(diff)).isEqualTo("Output"); + } +}