From 039da5874abd6d4f6c5ec33bf63f98a2bbc03859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Gasterst=C3=A4dt?= Date: Sat, 21 Nov 2020 23:22:51 +0100 Subject: [PATCH] JUnit parameterized tests Issue #973 --- .../cucumber/json/Embedding.java | 18 +- .../cucumber/json/EmbeddingTest.java | 381 ++++-------------- .../cucumber/json/EmbeddingWithNameTest.java | 126 ++++++ 3 files changed, 212 insertions(+), 313 deletions(-) create mode 100644 src/test/java/net/masterthought/cucumber/json/EmbeddingWithNameTest.java diff --git a/src/main/java/net/masterthought/cucumber/json/Embedding.java b/src/main/java/net/masterthought/cucumber/json/Embedding.java index 8ff41cc1c..af316229b 100644 --- a/src/main/java/net/masterthought/cucumber/json/Embedding.java +++ b/src/main/java/net/masterthought/cucumber/json/Embedding.java @@ -95,25 +95,15 @@ public String getExtension() { mime = mime.toLowerCase(Locale.ENGLISH).trim(); switch (mime) { - case "image/png": - case "image/gif": - case "image/bmp": - case "image/jpeg": - case "image/svg": - case "text/html": - case "text/xml": - case "text/csv": - case "application/json": - case "application/pdf": - case "application/xml": - case "application/zip": - case "video/mp4": - return mime.substring(mime.indexOf('/') + 1); // image available remotely stored as link/url case "image/url": return "image"; case "text/plain": return "txt"; + case "application/ecmascript": + return "es"; + case "application/javascript": + return "js"; case "application/x-tar": return "tar"; case "application/x-bzip2": diff --git a/src/test/java/net/masterthought/cucumber/json/EmbeddingTest.java b/src/test/java/net/masterthought/cucumber/json/EmbeddingTest.java index 65d9cb6d8..2da2ff2e7 100644 --- a/src/test/java/net/masterthought/cucumber/json/EmbeddingTest.java +++ b/src/test/java/net/masterthought/cucumber/json/EmbeddingTest.java @@ -1,362 +1,145 @@ package net.masterthought.cucumber.json; -import org.junit.Test; - +import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assumptions.assumeThat; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; /** * @author Damian Szczepanik (damianszczepanik@github) + * @author Stefan Gasterstädt */ +@RunWith(Parameterized.class) public class EmbeddingTest { + private static final String NO_DECODING = null; + + @Parameters(name = "\"{0}\" with \"{1}\"") + public static Iterable data() { + return asList(new Object[][] { + { "application/ecmascript", "console.log('Hello world');", NO_DECODING, ".es" }, + { "application/gzip", "c29tZSBkYXRh", "some data", "embedding_-1003041823.gz" }, + { "application/javascript", "alert('Hello World!');", NO_DECODING, ".js" }, + { "application/json", "c29tZSBkYXRh", "some data", "embedding_-1003041823.json" }, + { "application/pdf", "c29tZSBkYXRh", "some data", "embedding_-1003041823.pdf" }, + { "application/vnd.ms-excel", "c29tZSBkYXRh", "some data", "embedding_-1003041823.xls" }, + { "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "c29tZSBkYXRh", "some data", "embedding_-1003041823.xlsx" }, + { "application/vnd.tcpdump.pcap", "c29tZSBkYXRh", "some data", "embedding_-1003041823.unknown" }, + { "application/xml", "c29tZSBkYXRh", "some data", "embedding_-1003041823.xml" }, + { "application/xslt+xml", "", NO_DECODING, ".xslt" }, + { "application/x-bzip2", "c29tZSBkYXRh", "some data", "embedding_-1003041823.bz2" }, + { "application/x-tar", "c29tZSBkYXRh", "some data", "embedding_-1003041823.tar" }, + { "application/zip", "c29tZSBkYXRh", "some data", "embedding_-1003041823.zip" }, + { "image/bmp", "c29tZSBkYXRh", "some data", "embedding_-1003041823.bmp" }, + { "image/gif", "c29tZSBkYXRh", "some data", "embedding_-1003041823.gif" }, + { "image/jpeg", "c29tZSBkYXRh", "some data", "embedding_-1003041823.jpeg" }, + { "image/png", "c29tZSBkYXRh", "some data", "embedding_-1003041823.png" }, + { "image/svg", "c29tZSBkYXRh", "some data", "embedding_-1003041823.svg" }, + { "image/svg+xml", "c29tZSBkYXRh", "some data", "embedding_-1003041823.svg" }, + { "image/url", "c29tZSBkYXRh", "some data", "embedding_-1003041823.image" }, + { "js", "c29tZSBkYXRh", "some data", "embedding_-1003041823.unknown" }, + { "mime/type", "your data", NO_DECODING, ".type" }, + { "mime/type", "ZnVuY3Rpb24gbG9nZ2VyKG1lc3NhZ2UpIHsgIH0=", "function logger(message) { }", ".type" }, + { "my mime TYPE", "abc", NO_DECODING, ".unknown" }, + { "text/html", "", NO_DECODING, ".html" }, + { "text/html; charset=UTF-8", "c29tZSBkYXRh", "some data", "embedding_-1003041823.html" }, + { "text/php", "echo 'Hello World!';", NO_DECODING, ".php" }, + { "text/plain", "c29tZSBkYXRh", "some data", "embedding_-1003041823.txt" }, + { "text/xml", "c29tZSBkYXRh", "some data", "embedding_-1003041823.xml" }, + { "video/mp4", "c29tZSBkYXRh", "some data", "embedding_-1003041823.mp4" }, + }); + } + + @Parameter(0) + public String mimeType; + + @Parameter(1) + public String data; + + @Parameter(2) + public String decodedData; + + @Parameter(3) + public String fileName; + @Test public void getMimeType_ReturnsMimeType() { - // given - final String refMimeType = "my mime TYPE"; - Embedding embedding = new Embedding(refMimeType, "abc"); + Embedding embedding = new Embedding(this.mimeType, this.data); // when - String mimeType = embedding.getMimeType(); + String actualMimeType = embedding.getMimeType(); // then - assertThat(mimeType).isEqualTo(refMimeType); + assertThat(actualMimeType).isEqualTo(this.mimeType); } @Test public void getData_ReturnsContent() { - // given - final String data = "your data"; - Embedding embedding = new Embedding("mime/type", data); + Embedding embedding = new Embedding(this.mimeType, this.data); // when - String content = embedding.getData(); + String actualContent = embedding.getData(); // then - assertThat(content).isEqualTo(data); + assertThat(actualContent).isEqualTo(data); } @Test public void getDecodedData_ReturnsDecodedContent() { - + assumeThat(this.decodedData).isNotEqualTo(NO_DECODING); + // given - Embedding embedding = new Embedding("mime/type", "ZnVuY3Rpb24gbG9nZ2VyKG1lc3NhZ2UpIHsgIH0="); + Embedding embedding = new Embedding(this.mimeType, this.data); // when - String content = embedding.getDecodedData(); + String actualDecodedContent = embedding.getDecodedData(); // then - assertThat(content).isEqualTo("function logger(message) { }"); + assertThat(actualDecodedContent).isEqualTo(this.decodedData); } - @Test public void getFileName_ReturnsFileName() { + assumeThat(this.fileName).matches("^[^\\.]+\\.[^\\.]+$"); // given - Embedding embedding = new Embedding("text/xml", "some data"); - - // when - String fileName = embedding.getFileName(); - - // then - assertThat(fileName).isEqualTo("embedding_-642587818.xml"); - } - - @Test - public void getFileName_ReturnsFileNameForSVG() { - - // given - Embedding embedding = new Embedding("image/svg+xml", "some data"); - - // when - String fileName = embedding.getFileName(); - - // then - assertThat(fileName).isEqualTo("embedding_-642587818.svg"); - } - - @Test - public void getExtension__OnCommonMimeType_ReturnsFileExtension() { - - // given - Embedding embedding = new Embedding("text/html", ""); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("html"); - } - - @Test - public void getExtension__OnCommonMimeTypeWithEncoding_ReturnsFileExtension() { - - // given - Embedding embedding = new Embedding("text/html; charset=UTF-8", ""); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("html"); - } - - @Test - public void getExtension__OnTextMimeType_ReturnsText() { - - // given - Embedding embedding = new Embedding("text/plain", ""); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("txt"); - } - - @Test - public void getExtension__OnImageUrlMimeType_ReturnsTxt() { - - // given - Embedding embedding = new Embedding("image/url", ""); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("image"); - } - - @Test - public void getExtension__OnApplicationPdfMimeType_ReturnsPdf() { - - // given - Embedding embedding = new Embedding("application/pdf", ""); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("pdf"); - } - - @Test - public void getExtension__OnApplicationZipMimeType_ReturnsZip() { - - // given - Embedding embedding = new Embedding("application/zip", ""); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("zip"); - } - - @Test - public void getExtension__OnApplicationXTarMimeType_ReturnsTar() { - - // given - Embedding embedding = new Embedding("application/x-tar", ""); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("tar"); - } - - @Test - public void getExtension__OnApplicationXBZip2MimeType_ReturnsBZ2() { - - // given - Embedding embedding = new Embedding("application/x-bzip2", ""); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("bz2"); - } - - @Test - public void getExtension__OnApplicationGZipMimeType_ReturnsGZ() { - - // given - Embedding embedding = new Embedding("application/gzip", ""); + Embedding embedding = new Embedding(this.mimeType, this.data); // when - String extension = embedding.getExtension(); + String actualFileName = embedding.getFileName(); // then - assertThat(extension).isEqualTo("gz"); + assertThat(actualFileName).isEqualTo(this.fileName); } @Test - public void getExtension__OnVideoMp4MimeType_ReturnsMp4() { + public void getExtension_ReturnsFileExtension() { // given - Embedding embedding = new Embedding("video/mp4", ""); + Embedding embedding = new Embedding(this.mimeType, this.data); // when - String extension = embedding.getExtension(); + String actualExtension = embedding.getExtension(); // then - assertThat(extension).isEqualTo("mp4"); + assertThat(actualExtension).isEqualTo(this.fileName.split("\\.")[1]); } @Test - public void getExtension__OnApplicationOpenXMLFormatsOfficeDocumentSpreadsheetMimeType_ReturnsXlsx() { + public void getName_ReturnsNull() { // given - Embedding embedding = new Embedding("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ""); + Embedding embedding = new Embedding(this.mimeType, this.data); // when - String extension = embedding.getExtension(); + String actualName = embedding.getName(); // then - assertThat(extension).isEqualTo("xlsx"); + assertThat(actualName).isNull(); } - @Test - public void getExtension__OnApplicationVNDMsExcelMimeType_ReturnsXls() { - // given - Embedding embedding = new Embedding("application/vnd.ms-excel", ""); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("xls"); - } - - @Test - public void getExtension__OnUnknownType_DeducesPhpFromMimeType() { - - // given - Embedding embedding = new Embedding("text/php", "echo 'Hello World!';"); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("php"); - } - - @Test - public void getExtension__OnUnknownType_DeducesPhp7FromName() { - - // given - Embedding embedding = new Embedding("text/php", "echo 'Hello World!';", "hello-world.php7"); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("php7"); - } - - @Test - public void getExtension__OnUnknownType_DeducesJsFromName() { - - // given - Embedding embedding = new Embedding("application/javascript", "alert('Hello World!');", "hello-world.js"); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("js"); - } - - @Test - public void getExtension__OnUnknownType_DeducesXsltFromMimeType() { - - // given - Embedding embedding = new Embedding("application/xslt+xml", ""); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("xslt"); - } - - @Test - public void getExtension__OnUnknownType_DeducesXslFromName() { - - // given - Embedding embedding = new Embedding("application/xslt+xml", "", "empty-xslt.xsl"); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("xsl"); - } - - @Test - public void getExtension__OnUnknownType_DeducesXsltFromMimeType_NameNotUsable() { - - // given - Embedding embedding = new Embedding("application/xslt+xml", "", "just-some-xslt"); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("xslt"); - } - - @Test - public void getExtension__OnUnknownType_DeducesXsltFromMimeType_FileExtensionNotUsable() { - - // given - Embedding embedding = new Embedding("application/xslt+xml", "", "just-some-xslt.weird_extension"); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("xslt"); - } - - @Test - public void getExtension__OnUnknownType_ReturnsUnknown() { - - // given - Embedding embedding = new Embedding("js", ""); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("unknown"); - } - - @Test - public void getExtension__OnUnknownType_ReturnsUnknown_MimeTypeNotUsable() { - - // given - Embedding embedding = new Embedding("application/vnd.tcpdump.pcap", ""); - - // when - String extension = embedding.getExtension(); - - // then - assertThat(extension).isEqualTo("unknown"); - } - - @Test - public void getName_ReturnsName() { - - // given - String embeddingName = "embeddingName"; - Embedding embedding = new Embedding("application/pdf", "some data", embeddingName); - - String name = embedding.getName(); - - // then - assertThat(name).isEqualTo(embeddingName); - } } diff --git a/src/test/java/net/masterthought/cucumber/json/EmbeddingWithNameTest.java b/src/test/java/net/masterthought/cucumber/json/EmbeddingWithNameTest.java new file mode 100644 index 000000000..9465d6096 --- /dev/null +++ b/src/test/java/net/masterthought/cucumber/json/EmbeddingWithNameTest.java @@ -0,0 +1,126 @@ +package net.masterthought.cucumber.json; + +import static java.util.Arrays.asList; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assumptions.assumeThat; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; + +/** + * @author Damian Szczepanik (damianszczepanik@github) + * @author Stefan Gasterstädt + */ +@RunWith(Parameterized.class) +public class EmbeddingWithNameTest { + + private static final String NO_DECODING = null; + + @Parameters(name = "\"{0}\" into \"{2}\"") + public static Iterable data() { + return asList(new Object[][] { + { "application/javascript", "alert('Hello World!');", "hello-world.js", NO_DECODING, ".js" }, + { "application/xhtml+xml; charset=UTF-8", "c29tZSBkYXRh", "data.xhtm", "some data", "embedding_-1003041823.xhtm" }, + { "application/xslt+xml", "", "filename-with-different-extension.xsl", NO_DECODING, ".xsl" }, + { "application/xslt+xml", "", "filename-without-extension", NO_DECODING, ".xslt" }, + { "application/xslt+xml", "", "filename-with.invalid_extension", NO_DECODING, ".xslt" }, + { "text/jscript", "alert('Hello World!');", "hello-world.js", NO_DECODING, ".js" }, + { "text/markdown", "c29tZSBkYXRh", "memo.md", "some data", "embedding_-1003041823.md" }, + { "text/php", "echo 'Hello World!';", "hello-world.php7", NO_DECODING, ".php7" }, + }); + } + + @Parameter(0) + public String mimeType; + + @Parameter(1) + public String data; + + @Parameter(2) + public String name; + + @Parameter(3) + public String decodedData; + + @Parameter(4) + public String fileName; + + @Test + public void getMimeType_ReturnsMimeType() { + // given + Embedding embedding = new Embedding(this.mimeType, this.data, this.name); + + // when + String actualMimeType = embedding.getMimeType(); + + // then + assertThat(actualMimeType).isEqualTo(this.mimeType); + } + + @Test + public void getData_ReturnsContent() { + // given + Embedding embedding = new Embedding(this.mimeType, this.data, this.name); + + // when + String actualContent = embedding.getData(); + + // then + assertThat(actualContent).isEqualTo(data); + } + + @Test + public void getDecodedData_ReturnsDecodedContent() { + assumeThat(this.decodedData).isNotEqualTo(NO_DECODING); + + // given + Embedding embedding = new Embedding(this.mimeType, this.data, this.name); + + // when + String actualDecodedContent = embedding.getDecodedData(); + + // then + assertThat(actualDecodedContent).isEqualTo(this.decodedData); + } + + @Test + public void getFileName_ReturnsFileName() { + assumeThat(this.fileName).matches("^[^\\.]+\\.[^\\.]+$"); + + // given + Embedding embedding = new Embedding(this.mimeType, this.data, this.name); + + // when + String actualFileName = embedding.getFileName(); + + // then + assertThat(actualFileName).isEqualTo(this.fileName); + } + + @Test + public void getExtension_ReturnsFileExtension() { + // given + Embedding embedding = new Embedding(this.mimeType, this.data, this.name); + + // when + String actualExtension = embedding.getExtension(); + + // then + assertThat(actualExtension).isEqualTo(this.fileName.split("\\.")[1]); + } + + @Test + public void getName_ReturnsName() { + // given + Embedding embedding = new Embedding(this.mimeType, this.data, this.name); + + // when + String actualName = embedding.getName(); + + // then + assertThat(actualName).isEqualTo(this.name); + } + +}