diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..7f69afd3afc7416f82c934795d8386cce4e5ed5e --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Eclipse +.classpath +.project +.settings/ + +# Intellij +.idea/ +*.iml +*.iws + +# Mac +.DS_Store + +# Maven +log/ +target/ \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..873b812d3715ab124ae35e8b3f859dd4be13d245 --- /dev/null +++ b/pom.xml @@ -0,0 +1,60 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>cz.vsb.fei.java2</groupId> + <artifactId>lab01-text2asciiart</artifactId> + <version>0.0.1-SNAPSHOT</version> + + <name>lab01-text2asciiart</name> + + <packaging>jar</packaging> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.release>21</maven.compiler.release> + <JUnit.version>5.10.1</JUnit.version> + </properties> + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.junit</groupId> + <artifactId>junit-bom</artifactId> + <version>${JUnit.version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + + <dependencies> + <!-- https://mvnrepository.com/artifact/io.leego/banana --> + <dependency> + <groupId>io.leego</groupId> + <artifactId>banana</artifactId> + <version>2.1.0</version> + </dependency> + + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest</artifactId> + <version>2.2</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <version>3.2.1</version> + </plugin> + </plugins> + </build> + +</project> diff --git a/src/main/java/cz/vsb/fei/java2/lab01text2asciiart/ConversionException.java b/src/main/java/cz/vsb/fei/java2/lab01text2asciiart/ConversionException.java new file mode 100644 index 0000000000000000000000000000000000000000..f9d9bc1bd43df9c09e422dab9ded841cac90fb8d --- /dev/null +++ b/src/main/java/cz/vsb/fei/java2/lab01text2asciiart/ConversionException.java @@ -0,0 +1,11 @@ +package cz.vsb.fei.java2.lab01text2asciiart; + +public class ConversionException extends Exception { + + private static final long serialVersionUID = 195515812503598135L; + + public ConversionException(String message) { + super(message); + } + +} diff --git a/src/main/java/cz/vsb/fei/java2/lab01text2asciiart/Text2AsciiArt.java b/src/main/java/cz/vsb/fei/java2/lab01text2asciiart/Text2AsciiArt.java new file mode 100644 index 0000000000000000000000000000000000000000..7536e5f5d80c92963178d857d870968345ff7566 --- /dev/null +++ b/src/main/java/cz/vsb/fei/java2/lab01text2asciiart/Text2AsciiArt.java @@ -0,0 +1,34 @@ +package cz.vsb.fei.java2.lab01text2asciiart; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +import io.leego.banana.BananaUtils; +import io.leego.banana.Font; + +/** + * Class <b>App</b> - extends class Application and it is an entry point of the + * program + * + * @author Java I + */ +public class Text2AsciiArt { + + public String convert(String text) throws ConversionException { + return convert(text, Font.STANDARD.getName()); + } + + public String convert(String text, String fontName) throws ConversionException { + Optional<Font> selectedFont = Font.values().stream().filter(font -> Objects.equals(font.getName(), fontName)) + .findAny(); + if (selectedFont.isEmpty()) { + throw new ConversionException("Uknown font name: " + fontName); + } + return BananaUtils.bananaify(text, selectedFont.get()); + } + + public List<String> getAllfontNames() { + return Font.values().stream().map(Font::getName).toList(); + } +} \ No newline at end of file diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java new file mode 100644 index 0000000000000000000000000000000000000000..ff366e99a4e7f4e58b04300fa7f631abd3b27b10 --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,3 @@ +module cz.vsb.fei.java2.lab01text2asciiart { + requires banana; +} \ No newline at end of file diff --git a/src/test/java/cz/vsb/fei/java2/jez04best/AppTest.java b/src/test/java/cz/vsb/fei/java2/jez04best/AppTest.java new file mode 100644 index 0000000000000000000000000000000000000000..ef9c8eb8a77a59f12069857a96dda846a4462310 --- /dev/null +++ b/src/test/java/cz/vsb/fei/java2/jez04best/AppTest.java @@ -0,0 +1,19 @@ +package cz.vsb.fei.java2.jez04best; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +/** + * Unit test for simple App. + */ +class AppTest { + + /** + * Rigorous Test :-) + */ + @Test + void shouldAnswerWithTrue() { + assertTrue(true); + } +} diff --git a/src/test/java/cz/vsb/fei/java2/lab01text2asciiart/Text2AsciiArtTest.java b/src/test/java/cz/vsb/fei/java2/lab01text2asciiart/Text2AsciiArtTest.java new file mode 100644 index 0000000000000000000000000000000000000000..d34bfa437a60d6880d0bbd147d7ac2860ff429b2 --- /dev/null +++ b/src/test/java/cz/vsb/fei/java2/lab01text2asciiart/Text2AsciiArtTest.java @@ -0,0 +1,48 @@ +package cz.vsb.fei.java2.lab01text2asciiart; + +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.emptyOrNullString; +import static org.hamcrest.Matchers.not; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.hamcrest.MatcherAssert; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import io.leego.banana.Font; + +class Text2AsciiArtTest { + + Text2AsciiArt text2AsciiArt; + + @BeforeEach + void init() { + text2AsciiArt = new Text2AsciiArt(); + } + + @Test + void testConvertText() throws ConversionException { + MatcherAssert.assertThat(text2AsciiArt.convert("TEST"), not(emptyOrNullString())); + } + + @Test + void testConvertTextAndFont() throws ConversionException { + MatcherAssert.assertThat(text2AsciiArt.convert("TEST", "ANSI Shadow"), not(emptyOrNullString())); + } + + @Test + void testConvertTextUknownFont(){ + assertThrows(ConversionException.class, () -> text2AsciiArt.convert("TEST", "uknown font")); + } + + @Test + void testGetAllfontNames() { + List<String> result = text2AsciiArt.getAllfontNames(); + MatcherAssert.assertThat(result, not(empty())); + assertTrue(result.contains(Font.STANDARD.getName())); + } + +}