Andrew Grant 3 долоо хоног өмнө
parent
commit
a08e3e107d

+ 1 - 1
src/main/java/scot/carricksoftware/grantswriter/constants/ApplicationConstants.java

@@ -20,6 +20,6 @@ public class ApplicationConstants {
     public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd/MM/yyyy");
     public static final String DATE_FORMAT = "dd/MM/yyyy";
     public static final String DATE_TIME_FORMAT = "dd/MM/yyyy hh:mm";
-    public final static String EMPTY_STRING = "";
+    public static final String EMPTY_STRING = "";
 
 }

+ 0 - 1
src/main/java/scot/carricksoftware/grantswriter/constants/LatexLevels.java

@@ -23,5 +23,4 @@ public class LatexLevels {
     public static final Integer LATEX_PARAGRAPH  = 4;
     public static final Integer LATEX_SUBPARAGRAPH = 5;
 
-
 }

+ 5 - 1
src/main/java/scot/carricksoftware/grantswriter/data/helpers/LatexDivisionImpl.java

@@ -39,6 +39,10 @@ public class LatexDivisionImpl implements  LatexDivision {
 
     @Override
     public String header(Integer level) {
-        return headers.get(level);
+        String result = headers.get(level);
+        if (result == null) {
+            throw new RuntimeException("No header found for level " + level);
+        }
+        return result;
     }
 }

+ 11 - 0
src/main/java/scot/carricksoftware/grantswriter/writer/latex/LatexDivisionHeader.java

@@ -0,0 +1,11 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grantswriter.writer.latex;
+
+public interface LatexDivisionHeader {
+
+    void write(Integer level, String title);
+}

+ 33 - 0
src/main/java/scot/carricksoftware/grantswriter/writer/latex/LatexDivisionHeaderImpl.java

@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grantswriter.writer.latex;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import scot.carricksoftware.grantswriter.constants.LatexConstants;
+import scot.carricksoftware.grantswriter.data.helpers.LatexDivision;
+import scot.carricksoftware.grantswriter.writer.FileWriter;
+
+public class LatexDivisionHeaderImpl implements LatexDivisionHeader {
+
+    private static final Logger logger = LogManager.getLogger(LatexDivisionHeaderImpl.class);
+
+    private final FileWriter fileWriter;
+
+    private final LatexDivision latexDivision;
+
+    public LatexDivisionHeaderImpl(FileWriter fileWriter, LatexDivision latexDivision) {
+        this.fileWriter = fileWriter;
+        this.latexDivision = latexDivision;
+    }
+
+    @Override
+    public void write(Integer level, String title) {
+        logger.debug("LatexDivisionHeaderImpl::write");
+        fileWriter.writeLine(latexDivision.header(level)
+                + title + LatexConstants.TERM_END);
+    }
+}

+ 0 - 1
src/main/java/scot/carricksoftware/grantswriter/writer/latex/LatexSectionHeaderImpl.java

@@ -24,7 +24,6 @@ public class LatexSectionHeaderImpl implements LatexSectionHeader {
         this.latexDivision = latexDivision;
     }
 
-
     @Override
     public void write(String title) {
         String sb =  latexDivision.header(LATEX_SECTION) +

+ 6 - 0
src/test/java/scot/carricksoftware/grantswriter/GenerateRandomNumberValues.java

@@ -19,5 +19,11 @@ public class GenerateRandomNumberValues {
         return rand.nextLong();
     }
 
+    public static Integer GetRandomInteger() {
+        return rand.nextInt();
+    }
+
+
+
 
 }

+ 61 - 0
src/test/java/scot/carricksoftware/grantswriter/data/helpers/LatexDivisionTest.java

@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grantswriter.data.helpers;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_BOOK;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_CHAPTER;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_PARAGRAPH;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_PART;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_SECTION;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_SUBPARAGRAPH;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_SUBSECTION;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_SUB_SUBSECTION;
+
+class LatexDivisionTest {
+
+    private LatexDivision latexDivision;
+
+    private Map<Integer, String> headers;
+
+    @BeforeEach
+    void setUp() {
+        latexDivision = new LatexDivisionImpl();
+        headers = new HashMap<>();
+        headers.put(LATEX_BOOK, "\\book{");
+        headers.put(LATEX_PART, "\\part{");
+        headers.put(LATEX_CHAPTER, "\\chapter{");
+        headers.put(LATEX_SECTION, "\\section{");
+        headers.put(LATEX_SUBSECTION, "\\subsection{");
+        //noinspection SpellCheckingInspection
+        headers.put(LATEX_SUB_SUBSECTION, "\\subsubsection{");
+        headers.put(LATEX_PARAGRAPH, "\\paragraph{");
+        headers.put(LATEX_SUBPARAGRAPH, "\\subparagraph{");
+    }
+
+    @Test
+    void validTest() {
+        for (int i = LATEX_BOOK; i <= LATEX_SUBPARAGRAPH; i++) {
+            assertEquals(headers.get(i), latexDivision.header(i));
+        }
+    }
+
+    @Test
+    void lowLevelThrowsAnExceptionTest() {
+        assertThrows(RuntimeException.class, () -> latexDivision.header(LATEX_BOOK - 1));
+    }
+
+    @Test
+    void highLevelThrowsAnExceptionTest() {
+        assertThrows(RuntimeException.class, () -> latexDivision.header(LATEX_SUBPARAGRAPH + 1));
+    }
+}

+ 49 - 0
src/test/java/scot/carricksoftware/grantswriter/writer/latex/LatexDivisionHeaderTest.java

@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grantswriter.writer.latex;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import scot.carricksoftware.grantswriter.data.helpers.LatexDivision;
+import scot.carricksoftware.grantswriter.writer.FileWriter;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static scot.carricksoftware.grantswriter.GenerateCertificateRandomValues.GetRandomString;
+import static scot.carricksoftware.grantswriter.GenerateRandomNumberValues.GetRandomInteger;
+
+@ExtendWith(MockitoExtension.class)
+class LatexDivisionHeaderTest {
+
+    private LatexDivisionHeader header;
+
+    @Mock
+    private FileWriter fileWriterMock;
+
+    @Mock
+    private LatexDivision latexDivisionMock;
+
+    @BeforeEach
+    void setUp() {
+        header = new LatexDivisionHeaderImpl(fileWriterMock, latexDivisionMock);
+    }
+
+    @Test
+    void writeTest() {
+        Integer level = GetRandomInteger();
+        String title = GetRandomString();
+        String heading = GetRandomString();
+        when(latexDivisionMock.header(level)).thenReturn(heading);
+        String requiredString = heading + title + "}";
+        header.write(level, title);
+
+        verify(fileWriterMock).writeLine(requiredString);
+    }
+
+}