refactor(tests): replaced redundant setups, simplified exception handling, and optimized code readability. (#4710)

# Description of Changes

This pull request primarily refactors and improves the test code across
several modules, focusing on modernization, simplification, and
consistency of assertions and test setup. The changes include formatting
updates and improvements to utility methods. These updates help make the
tests easier to maintain and read, and ensure they use current best
practices.

**Test code modernization and assertion improvements:**

* Replaced legacy assertion methods such as `assertTrue(x instanceof Y)`
with more specific `assertInstanceOf` assertions in multiple test files,
improving clarity and type safety.
* Updated exception assertion checks to use `assertInstanceOf` for error
types instead of `assertTrue`, ensuring more precise test validation.
* Refactored test setup in `ResourceMonitorTest` to use `final` for
`AtomicReference` fields, clarifying intent and thread safety.
* Changed some test method signatures to remove unnecessary `throws
Exception` clauses, simplifying the test code.

**Test code simplification and cleanup:**

* Removed unused mock fields and simplified array initializations in
`AutoJobPostMappingIntegrationTest`, streamlining test setup and
reducing clutter.
* Updated YAML string initialization in
`ApplicationPropertiesDynamicYamlPropertySourceTest` to use Java text
blocks for improved readability.
* Improved null handling in assertions for collection validity checks.
* Updated byte array encoding to use `StandardCharsets.UTF_8` for
reliability and clarity.

**PDF document factory test refactoring:**

* Refactored `CustomPDFDocumentFactoryTest` to move helper methods for
inflating PDFs and writing temp files to the top of the class, and
restructured parameterized tests for better organization and
maintainability.



<!--
Please provide a summary of the changes, including:

- What was changed
- Why the change was made
- Any challenges encountered

Closes #(issue_number)
-->

---

## Checklist

### General

- [ ] I have read the [Contribution
Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [ ] I have read the [Stirling-PDF Developer
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md)
(if applicable)
- [ ] I have read the [How to add new languages to
Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md)
(if applicable)
- [ ] I have performed a self-review of my own code
- [ ] My changes generate no new warnings

### Documentation

- [ ] I have updated relevant docs on [Stirling-PDF's doc
repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/)
(if functionality has heavily changed)
- [ ] I have read the section [Add New Translation
Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)

### UI Changes (if applicable)

- [ ] Screenshots or videos demonstrating the UI changes are attached
(e.g., as comments or direct attachments in the PR)

### Testing (if applicable)

- [ ] I have tested my changes locally. Refer to the [Testing
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing)
for more details.

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
This commit is contained in:
Balázs Szücs
2025-10-30 20:39:55 +01:00
committed by GitHub
parent 83922c4131
commit a7900aead8
46 changed files with 676 additions and 739 deletions

View File

@@ -31,8 +31,6 @@ import stirling.software.common.aop.AutoJobAspect;
import stirling.software.common.model.api.PDFFile;
import stirling.software.common.service.FileStorage;
import stirling.software.common.service.JobExecutorService;
import stirling.software.common.service.JobQueue;
import stirling.software.common.service.ResourceMonitor;
@ExtendWith(MockitoExtension.class)
class AutoJobPostMappingIntegrationTest {
@@ -45,10 +43,6 @@ class AutoJobPostMappingIntegrationTest {
@Mock private FileStorage fileStorage;
@Mock private ResourceMonitor resourceMonitor;
@Mock private JobQueue jobQueue;
@BeforeEach
void setUp() {
autoJobAspect = new AutoJobAspect(jobExecutorService, request, fileStorage);
@@ -73,7 +67,7 @@ class AutoJobPostMappingIntegrationTest {
// Given
PDFFile pdfFile = new PDFFile();
pdfFile.setFileId("test-file-id");
Object[] args = new Object[] {pdfFile};
Object[] args = {pdfFile};
when(joinPoint.getArgs()).thenReturn(args);
when(request.getParameter("async")).thenReturn("true");
@@ -153,7 +147,7 @@ class AutoJobPostMappingIntegrationTest {
// Given
PDFFile pdfFile = new PDFFile();
pdfFile.setFileInput(mock(MultipartFile.class));
Object[] args = new Object[] {pdfFile};
Object[] args = {pdfFile};
when(joinPoint.getArgs()).thenReturn(args);
when(request.getParameter("async")).thenReturn("true");

View File

@@ -20,11 +20,13 @@ class ApplicationPropertiesDynamicYamlPropertySourceTest {
void loads_yaml_into_environment() throws Exception {
// YAML-Config in Temp-Datei schreiben
String yaml =
""
+ "ui:\n"
+ " appName: \"My App\"\n"
+ "system:\n"
+ " enableAnalytics: true\n";
"""
\
ui:
appName: "My App"
system:
enableAnalytics: true
""";
Path tmp = Files.createTempFile("spdf-settings-", ".yml");
Files.writeString(tmp, yaml);
@@ -44,7 +46,7 @@ class ApplicationPropertiesDynamicYamlPropertySourceTest {
}
@Test
void throws_when_settings_file_missing() throws Exception {
void throws_when_settings_file_missing() {
String missing = "/path/does/not/exist/spdf.yml";
try (MockedStatic<InstallationPathConfig> mocked =
Mockito.mockStatic(InstallationPathConfig.class)) {

View File

@@ -232,7 +232,7 @@ class ApplicationPropertiesLogicTest {
Collection<String> nullColl = null;
Collection<String> empty = List.of();
assertFalse(oauth2.isValid(nullColl, "scopes"));
assertFalse(oauth2.isValid((Collection<String>) null, "scopes"));
assertFalse(oauth2.isValid(empty, "scopes"));
}

View File

@@ -61,7 +61,7 @@ class ApplicationPropertiesSaml2HttpTest {
Resource r = s.getSpCert();
assertNotNull(r);
assertTrue(r instanceof FileSystemResource, "Expected FileSystemResource for FS path");
assertInstanceOf(FileSystemResource.class, r, "Expected FileSystemResource for FS path");
assertTrue(r.exists(), "Temp file should exist");
}
@@ -75,7 +75,7 @@ class ApplicationPropertiesSaml2HttpTest {
Resource r = s.getIdpCert();
assertNotNull(r);
assertTrue(r instanceof FileSystemResource, "Expected FileSystemResource for FS path");
assertInstanceOf(FileSystemResource.class, r, "Expected FileSystemResource for FS path");
assertFalse(r.exists(), "Resource should not exist for missing file");
}
}

View File

@@ -7,6 +7,7 @@ import java.io.InputStream;
import java.io.Reader;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import org.junit.jupiter.api.Test;
@@ -47,7 +48,7 @@ public class InputStreamTemplateResourceTest {
@Test
void readerReturnsCorrectContent() throws Exception {
String content = "Hello, world!";
InputStream is = new ByteArrayInputStream(content.getBytes("UTF-8"));
InputStream is = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));
InputStreamTemplateResource resource = new InputStreamTemplateResource(is, "UTF-8");
try (Reader reader = resource.reader()) {

View File

@@ -41,58 +41,7 @@ class CustomPDFDocumentFactoryTest {
}
}
@ParameterizedTest
@CsvSource({"5,MEMORY_ONLY", "20,MIXED", "60,TEMP_FILE"})
void testStrategy_FileInput(int sizeMB, StrategyType expected) throws IOException {
File file = writeTempFile(inflatePdf(basePdfBytes, sizeMB));
try (PDDocument doc = factory.load(file)) {
Assertions.assertEquals(expected, factory.lastStrategyUsed);
}
}
@ParameterizedTest
@CsvSource({"5,MEMORY_ONLY", "20,MIXED", "60,TEMP_FILE"})
void testStrategy_ByteArray(int sizeMB, StrategyType expected) throws IOException {
byte[] inflated = inflatePdf(basePdfBytes, sizeMB);
try (PDDocument doc = factory.load(inflated)) {
Assertions.assertEquals(expected, factory.lastStrategyUsed);
}
}
@ParameterizedTest
@CsvSource({"5,MEMORY_ONLY", "20,MIXED", "60,TEMP_FILE"})
void testStrategy_InputStream(int sizeMB, StrategyType expected) throws IOException {
byte[] inflated = inflatePdf(basePdfBytes, sizeMB);
try (PDDocument doc = factory.load(new ByteArrayInputStream(inflated))) {
Assertions.assertEquals(expected, factory.lastStrategyUsed);
}
}
@ParameterizedTest
@CsvSource({"5,MEMORY_ONLY", "20,MIXED", "60,TEMP_FILE"})
void testStrategy_MultipartFile(int sizeMB, StrategyType expected) throws IOException {
byte[] inflated = inflatePdf(basePdfBytes, sizeMB);
MockMultipartFile multipart =
new MockMultipartFile("file", "doc.pdf", MediaType.APPLICATION_PDF_VALUE, inflated);
try (PDDocument doc = factory.load(multipart)) {
Assertions.assertEquals(expected, factory.lastStrategyUsed);
}
}
@ParameterizedTest
@CsvSource({"5,MEMORY_ONLY", "20,MIXED", "60,TEMP_FILE"})
void testStrategy_PDFFile(int sizeMB, StrategyType expected) throws IOException {
byte[] inflated = inflatePdf(basePdfBytes, sizeMB);
MockMultipartFile multipart =
new MockMultipartFile("file", "doc.pdf", MediaType.APPLICATION_PDF_VALUE, inflated);
PDFFile pdfFile = new PDFFile();
pdfFile.setFileInput(multipart);
try (PDDocument doc = factory.load(pdfFile)) {
Assertions.assertEquals(expected, factory.lastStrategyUsed);
}
}
private byte[] inflatePdf(byte[] input, int sizeInMB) throws IOException {
private static byte[] inflatePdf(byte[] input, int sizeInMB) throws IOException {
try (PDDocument doc = Loader.loadPDF(input)) {
byte[] largeData = new byte[sizeInMB * 1024 * 1024];
Arrays.fill(largeData, (byte) 'A');
@@ -111,6 +60,46 @@ class CustomPDFDocumentFactoryTest {
}
}
private static File writeTempFile(byte[] content) throws IOException {
File file = Files.createTempFile("pdf-test-", ".pdf").toFile();
Files.write(file.toPath(), content);
return file;
}
@ParameterizedTest
@CsvSource({"5,MEMORY_ONLY", "20,MIXED", "60,TEMP_FILE"})
void testStrategy_FileInput(int sizeMB, StrategyType expected) throws IOException {
File file = writeTempFile(inflatePdf(basePdfBytes, sizeMB));
factory.load(file);
Assertions.assertEquals(expected, factory.lastStrategyUsed);
}
@ParameterizedTest
@CsvSource({"5,MEMORY_ONLY", "20,MIXED", "60,TEMP_FILE"})
void testStrategy_ByteArray(int sizeMB, StrategyType expected) throws IOException {
byte[] inflated = inflatePdf(basePdfBytes, sizeMB);
factory.load(inflated);
Assertions.assertEquals(expected, factory.lastStrategyUsed);
}
@ParameterizedTest
@CsvSource({"5,MEMORY_ONLY", "20,MIXED", "60,TEMP_FILE"})
void testStrategy_InputStream(int sizeMB, StrategyType expected) throws IOException {
byte[] inflated = inflatePdf(basePdfBytes, sizeMB);
factory.load(new ByteArrayInputStream(inflated));
Assertions.assertEquals(expected, factory.lastStrategyUsed);
}
@ParameterizedTest
@CsvSource({"5,MEMORY_ONLY", "20,MIXED", "60,TEMP_FILE"})
void testStrategy_MultipartFile(int sizeMB, StrategyType expected) throws IOException {
byte[] inflated = inflatePdf(basePdfBytes, sizeMB);
MockMultipartFile multipart =
new MockMultipartFile("file", "doc.pdf", MediaType.APPLICATION_PDF_VALUE, inflated);
factory.load(multipart);
Assertions.assertEquals(expected, factory.lastStrategyUsed);
}
@Test
void testLoadFromPath() throws IOException {
File file = writeTempFile(inflatePdf(basePdfBytes, 5));
@@ -210,10 +199,16 @@ class CustomPDFDocumentFactoryTest {
assertTrue(newBytes.length > 0);
}
private File writeTempFile(byte[] content) throws IOException {
File file = Files.createTempFile("pdf-test-", ".pdf").toFile();
Files.write(file.toPath(), content);
return file;
@ParameterizedTest
@CsvSource({"5,MEMORY_ONLY", "20,MIXED", "60,TEMP_FILE"})
void testStrategy_PDFFile(int sizeMB, StrategyType expected) throws IOException {
byte[] inflated = inflatePdf(basePdfBytes, sizeMB);
MockMultipartFile multipart =
new MockMultipartFile("file", "doc.pdf", MediaType.APPLICATION_PDF_VALUE, inflated);
PDFFile pdfFile = new PDFFile();
pdfFile.setFileInput(multipart);
factory.load(pdfFile);
Assertions.assertEquals(expected, factory.lastStrategyUsed);
}
@BeforeEach

View File

@@ -1,8 +1,6 @@
package stirling.software.common.service;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
@@ -63,7 +61,7 @@ class JobExecutorServiceTest {
}
@Test
void shouldRunSyncJobSuccessfully() throws Exception {
void shouldRunSyncJobSuccessfully() {
// Given
Supplier<Object> work = () -> "test-result";
@@ -79,7 +77,7 @@ class JobExecutorServiceTest {
}
@Test
void shouldRunAsyncJobSuccessfully() throws Exception {
void shouldRunAsyncJobSuccessfully() {
// Given
Supplier<Object> work = () -> "test-result";
@@ -88,7 +86,7 @@ class JobExecutorServiceTest {
// Then
assertEquals(HttpStatus.OK, response.getStatusCode());
assertTrue(response.getBody() instanceof JobResponse);
assertInstanceOf(JobResponse.class, response.getBody());
JobResponse<?> jobResponse = (JobResponse<?>) response.getBody();
assertTrue(jobResponse.isAsync());
assertNotNull(jobResponse.getJobId());
@@ -113,6 +111,7 @@ class JobExecutorServiceTest {
@SuppressWarnings("unchecked")
Map<String, String> errorMap = (Map<String, String>) response.getBody();
assertNotNull(errorMap);
assertEquals("Job failed: Test error", errorMap.get("error"));
}
@@ -133,7 +132,7 @@ class JobExecutorServiceTest {
// Then
assertEquals(HttpStatus.OK, response.getStatusCode());
assertTrue(response.getBody() instanceof JobResponse);
assertInstanceOf(JobResponse.class, response.getBody());
// Verify job was queued
verify(jobQueue).queueJob(anyString(), eq(80), any(), eq(5000L));
@@ -186,7 +185,7 @@ class JobExecutorServiceTest {
try {
executeMethod.invoke(jobExecutorService, work, 1L); // Very short timeout
} catch (Exception e) {
assertTrue(e.getCause() instanceof TimeoutException);
assertInstanceOf(TimeoutException.class, e.getCause());
}
}
}

View File

@@ -33,11 +33,11 @@ class ResourceMonitorTest {
@Mock private MemoryMXBean memoryMXBean;
@Spy
private AtomicReference<ResourceStatus> currentStatus =
private final AtomicReference<ResourceStatus> currentStatus =
new AtomicReference<>(ResourceStatus.OK);
@Spy
private AtomicReference<ResourceMetrics> latestMetrics =
private final AtomicReference<ResourceMetrics> latestMetrics =
new AtomicReference<>(new ResourceMetrics());
@BeforeEach

View File

@@ -215,7 +215,7 @@ class TaskManagerTest {
}
@Test
void testCleanupOldJobs() throws Exception {
void testCleanupOldJobs() {
// Arrange
// 1. Create a recent completed job
String recentJobId = "recent-job";
@@ -253,6 +253,7 @@ class TaskManagerTest {
taskManager.createTask(activeJobId);
// Verify all jobs are in the map
assertNotNull(jobResultsMap);
assertTrue(jobResultsMap.containsKey(recentJobId));
assertTrue(jobResultsMap.containsKey(oldJobId));
assertTrue(jobResultsMap.containsKey(activeJobId));
@@ -268,7 +269,7 @@ class TaskManagerTest {
}
@Test
void testShutdown() throws Exception {
void testShutdown() {
// This mainly tests that the shutdown method doesn't throw exceptions
taskManager.shutdown();

View File

@@ -219,9 +219,9 @@ public class TempFileCleanupServiceTest {
});
// Act - set containerMode to false for this test
invokeCleanupDirectoryStreaming(systemTempDir, false, 0, 3600000);
invokeCleanupDirectoryStreaming(customTempDir, false, 0, 3600000);
invokeCleanupDirectoryStreaming(libreOfficeTempDir, false, 0, 3600000);
invokeCleanupDirectoryStreaming(systemTempDir, false, 3600000);
invokeCleanupDirectoryStreaming(customTempDir, false, 3600000);
invokeCleanupDirectoryStreaming(libreOfficeTempDir, false, 3600000);
// Assert - Only old temp files and empty files should be deleted
assertTrue(deletedFiles.contains(oldTempFile), "Old temp file should be deleted");
@@ -306,7 +306,7 @@ public class TempFileCleanupServiceTest {
});
// Act - set containerMode to true and maxAgeMillis to 0 for container startup cleanup
invokeCleanupDirectoryStreaming(systemTempDir, true, 0, 0);
invokeCleanupDirectoryStreaming(systemTempDir, true, 0);
// Assert - In container mode, both our temp files and system temp files should be
// deleted
@@ -379,7 +379,7 @@ public class TempFileCleanupServiceTest {
});
// Act
invokeCleanupDirectoryStreaming(systemTempDir, false, 0, 3600000);
invokeCleanupDirectoryStreaming(systemTempDir, false, 3600000);
// Assert
assertTrue(
@@ -462,7 +462,7 @@ public class TempFileCleanupServiceTest {
});
// Act
invokeCleanupDirectoryStreaming(systemTempDir, false, 0, 3600000);
invokeCleanupDirectoryStreaming(systemTempDir, false, 3600000);
// Debug - print what was deleted
System.out.println("Deleted files: " + deletedFiles);
@@ -479,8 +479,7 @@ public class TempFileCleanupServiceTest {
/** Helper method to invoke the private cleanupDirectoryStreaming method using reflection */
private void invokeCleanupDirectoryStreaming(
Path directory, boolean containerMode, int depth, long maxAgeMillis)
throws IOException {
Path directory, boolean containerMode, long maxAgeMillis) {
try {
// Create a consumer that tracks deleted files
AtomicInteger deleteCount = new AtomicInteger(0);
@@ -503,7 +502,7 @@ public class TempFileCleanupServiceTest {
cleanupService,
directory,
containerMode,
depth,
0,
maxAgeMillis,
false,
deleteCallback);

View File

@@ -49,7 +49,7 @@ class CheckProgramInstallTest {
}
/** Reset static fields in the CheckProgramInstall class using reflection */
private void resetStaticFields() throws Exception {
private static void resetStaticFields() throws Exception {
Field pythonAvailableCheckedField =
CheckProgramInstall.class.getDeclaredField("pythonAvailableChecked");
pythonAvailableCheckedField.setAccessible(true);
@@ -108,8 +108,7 @@ class CheckProgramInstallTest {
}
@Test
void testGetAvailablePythonCommand_WhenPythonReturnsNonZeroExitCode()
throws IOException, InterruptedException, Exception {
void testGetAvailablePythonCommand_WhenPythonReturnsNonZeroExitCode() throws Exception {
// Arrange
// Reset the static fields again to ensure clean state
resetStaticFields();

View File

@@ -46,7 +46,7 @@ public class ChecksumUtilsTest {
@Test
void crc32_unsignedFormatting_highBitSet() throws Exception {
// CRC32 of single zero byte (0x00) is 0xD202EF8D (>= 0x8000_0000)
byte[] data = new byte[] {0x00};
byte[] data = {0x00};
// Hex (unsigned, 8 chars, lowercase)
try (InputStream is = new ByteArrayInputStream(data)) {

View File

@@ -765,7 +765,7 @@ class EmlToPdfTest {
}
// Helper methods
private String getTimestamp() {
private static String getTimestamp() {
java.time.ZonedDateTime fixedDateTime =
java.time.ZonedDateTime.of(2023, 1, 1, 12, 0, 0, 0, java.time.ZoneId.of("GMT"));
return java.time.format.DateTimeFormatter.RFC_1123_DATE_TIME.format(fixedDateTime);
@@ -1039,13 +1039,13 @@ class EmlToPdfTest {
}
// Creates a basic EmlToPdfRequest with default settings
private EmlToPdfRequest createBasicRequest() {
private static EmlToPdfRequest createBasicRequest() {
EmlToPdfRequest request = new EmlToPdfRequest();
request.setIncludeAttachments(false);
return request;
}
private EmlToPdfRequest createRequestWithAttachments() {
private static EmlToPdfRequest createRequestWithAttachments() {
EmlToPdfRequest request = new EmlToPdfRequest();
request.setIncludeAttachments(true);
request.setMaxAttachmentSizeMB(10);

View File

@@ -11,10 +11,18 @@ import org.junit.jupiter.api.Test;
public class ImageProcessingUtilsTest {
private static void fillImageWithColor(BufferedImage image) {
for (int y = 0; y < image.getHeight(); y++) {
for (int x = 0; x < image.getWidth(); x++) {
image.setRGB(x, y, Color.RED.getRGB());
}
}
}
@Test
void testConvertColorTypeToGreyscale() {
BufferedImage sourceImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
fillImageWithColor(sourceImage, Color.RED);
fillImageWithColor(sourceImage);
BufferedImage convertedImage =
ImageProcessingUtils.convertColorType(sourceImage, "greyscale");
@@ -33,7 +41,7 @@ public class ImageProcessingUtilsTest {
@Test
void testConvertColorTypeToBlackWhite() {
BufferedImage sourceImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
fillImageWithColor(sourceImage, Color.RED);
fillImageWithColor(sourceImage);
BufferedImage convertedImage =
ImageProcessingUtils.convertColorType(sourceImage, "blackwhite");
@@ -51,7 +59,7 @@ public class ImageProcessingUtilsTest {
@Test
void testConvertColorTypeToFullColor() {
BufferedImage sourceImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
fillImageWithColor(sourceImage, Color.RED);
fillImageWithColor(sourceImage);
BufferedImage convertedImage =
ImageProcessingUtils.convertColorType(sourceImage, "fullcolor");
@@ -63,7 +71,7 @@ public class ImageProcessingUtilsTest {
@Test
void testConvertColorTypeInvalid() {
BufferedImage sourceImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
fillImageWithColor(sourceImage, Color.RED);
fillImageWithColor(sourceImage);
BufferedImage convertedImage =
ImageProcessingUtils.convertColorType(sourceImage, "invalidtype");
@@ -71,12 +79,4 @@ public class ImageProcessingUtilsTest {
assertNotNull(convertedImage);
assertEquals(sourceImage, convertedImage);
}
private void fillImageWithColor(BufferedImage image, Color color) {
for (int y = 0; y < image.getHeight(); y++) {
for (int x = 0; x < image.getWidth(); x++) {
image.setRGB(x, y, color.getRGB());
}
}
}
}

View File

@@ -329,12 +329,10 @@ class PDFToFileTest {
boolean foundImage = false;
while ((entry = zipStream.getNextEntry()) != null) {
if ("test.html".equals(entry.getName())) {
foundMainHtml = true;
} else if ("test_ind.html".equals(entry.getName())) {
foundIndexHtml = true;
} else if ("test_img.png".equals(entry.getName())) {
foundImage = true;
switch (entry.getName()) {
case "test.html" -> foundMainHtml = true;
case "test_ind.html" -> foundIndexHtml = true;
case "test_img.png" -> foundImage = true;
}
zipStream.closeEntry();
}
@@ -382,6 +380,7 @@ class PDFToFileTest {
}
// Create output file
assertNotNull(outDir);
Files.write(
Path.of(outDir, "document.docx"),
"Fake DOCX content".getBytes());
@@ -442,6 +441,7 @@ class PDFToFileTest {
// Create multiple output files (simulating a presentation with
// multiple files)
assertNotNull(outDir);
Files.write(
Path.of(outDir, "document.odp"),
"Fake ODP content".getBytes());
@@ -530,6 +530,7 @@ class PDFToFileTest {
}
// Create text output file
assertNotNull(outDir);
Files.write(
Path.of(outDir, "document.txt"),
"Extracted text content".getBytes());
@@ -587,6 +588,7 @@ class PDFToFileTest {
}
// Create output file - uses default name
assertNotNull(outDir);
Files.write(
Path.of(outDir, "output.docx"),
"Fake DOCX content".getBytes());

View File

@@ -48,9 +48,7 @@ public class ProcessExecutorTest {
IOException thrown =
assertThrows(
IOException.class,
() -> {
processExecutor.runCommandWithOutputHandling(command);
});
() -> processExecutor.runCommandWithOutputHandling(command));
// Check the exception message to ensure it indicates the command was not found
String errorMessage = thrown.getMessage();

View File

@@ -1,6 +1,7 @@
package stirling.software.common.util;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.Arrays;
import java.util.List;
@@ -22,7 +23,7 @@ public class PropertyConfigsTest {
boolean result = PropertyConfigs.getBooleanValue(keys, defaultValue);
// Verify the result
assertEquals(true, result);
assertTrue(result);
}
@Test
@@ -51,7 +52,7 @@ public class PropertyConfigsTest {
boolean result = PropertyConfigs.getBooleanValue(key, defaultValue);
// Verify the result
assertEquals(true, result);
assertTrue(result);
}
@Test

View File

@@ -62,17 +62,11 @@ public class RegexPatternUtilsTest {
@Test
void testNullRegexHandling() {
assertThrows(
IllegalArgumentException.class,
() -> {
utils.getPattern(null);
});
assertThrows(IllegalArgumentException.class, () -> utils.getPattern(null));
assertThrows(
IllegalArgumentException.class,
() -> {
utils.getPattern(null, Pattern.CASE_INSENSITIVE);
});
() -> utils.getPattern(null, Pattern.CASE_INSENSITIVE));
assertFalse(utils.isCached(null));
assertFalse(utils.removeFromCache(null));

View File

@@ -57,8 +57,7 @@ class SpringContextHolderTest {
void testGetBean_BeanNotFound() {
// Arrange
contextHolder.setApplicationContext(mockApplicationContext);
when(mockApplicationContext.getBean(TestBean.class))
.thenThrow(new org.springframework.beans.BeansException("Bean not found") {});
when(mockApplicationContext.getBean(TestBean.class)).thenThrow(new MyBeansException());
// Act
TestBean result = SpringContextHolder.getBean(TestBean.class);
@@ -69,4 +68,10 @@ class SpringContextHolderTest {
// Simple test class
private static class TestBean {}
private static class MyBeansException extends org.springframework.beans.BeansException {
public MyBeansException() {
super("Bean not found");
}
}
}

View File

@@ -33,22 +33,9 @@ import stirling.software.common.model.api.misc.ReplaceAndInvert;
class InvertFullColorStrategyTest {
private InvertFullColorStrategy strategy;
private MultipartFile mockPdfFile;
@BeforeEach
void setUp() throws Exception {
// Create a simple PDF document for testing
byte[] pdfBytes = createSimplePdfWithRectangle();
mockPdfFile =
new MockMultipartFile(
"file", "test.pdf", MediaType.APPLICATION_PDF_VALUE, pdfBytes);
// Create the strategy instance
strategy = new InvertFullColorStrategy(mockPdfFile, ReplaceAndInvert.FULL_INVERSION);
}
/** Helper method to create a simple PDF with a colored rectangle for testing */
private byte[] createSimplePdfWithRectangle() throws IOException {
private static byte[] createSimplePdfWithRectangle() throws IOException {
PDDocument document = new PDDocument();
PDPage page = new PDPage(PDRectangle.A4);
document.addPage(page);
@@ -68,6 +55,18 @@ class InvertFullColorStrategyTest {
return baos.toByteArray();
}
@BeforeEach
void setUp() throws Exception {
// Create a simple PDF document for testing
byte[] pdfBytes = createSimplePdfWithRectangle();
MultipartFile mockPdfFile =
new MockMultipartFile(
"file", "test.pdf", MediaType.APPLICATION_PDF_VALUE, pdfBytes);
// Create the strategy instance
strategy = new InvertFullColorStrategy(mockPdfFile, ReplaceAndInvert.FULL_INVERSION);
}
@Test
void testReplace() throws IOException {
// Test the replace method

View File

@@ -1,7 +1,6 @@
package stirling.software.common.util.misc;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -16,7 +15,6 @@ class PdfTextStripperCustomTest {
private PdfTextStripperCustom stripper;
private PDPage mockPage;
private PDRectangle mockMediaBox;
@BeforeEach
void setUp() throws IOException {
@@ -25,7 +23,7 @@ class PdfTextStripperCustomTest {
// Create mock objects
mockPage = mock(PDPage.class);
mockMediaBox = mock(PDRectangle.class);
PDRectangle mockMediaBox = mock(PDRectangle.class);
// Configure mock behavior
when(mockPage.getMediaBox()).thenReturn(mockMediaBox);
@@ -43,14 +41,14 @@ class PdfTextStripperCustomTest {
}
@Test
void testBasicFunctionality() throws IOException {
void testBasicFunctionality() {
// Simply test that the method runs without exceptions
try {
stripper.addRegion("testRegion", new java.awt.geom.Rectangle2D.Float(0, 0, 100, 100));
stripper.extractRegions(mockPage);
assertTrue(true, "Should execute without errors");
} catch (Exception e) {
assertTrue(false, "Method should not throw exception: " + e.getMessage());
fail("Method should not throw exception: " + e.getMessage());
}
}
}

View File

@@ -1,9 +1,6 @@
package stirling.software.common.util.propertyeditor;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.*;
import java.util.List;
@@ -33,7 +30,7 @@ class StringToArrayListPropertyEditorTest {
// Assert
assertNotNull(value, "Value should not be null");
assertTrue(value instanceof List, "Value should be a List");
assertInstanceOf(List.class, value, "Value should be a List");
@SuppressWarnings("unchecked")
List<RedactionArea> list = (List<RedactionArea>) value;
@@ -63,7 +60,7 @@ class StringToArrayListPropertyEditorTest {
// Assert
assertNotNull(value, "Value should not be null");
assertTrue(value instanceof List, "Value should be a List");
assertInstanceOf(List.class, value, "Value should be a List");
@SuppressWarnings("unchecked")
List<RedactionArea> list = (List<RedactionArea>) value;
@@ -91,7 +88,7 @@ class StringToArrayListPropertyEditorTest {
// Assert
assertNotNull(value, "Value should not be null");
assertTrue(value instanceof List, "Value should be a List");
assertInstanceOf(List.class, value, "Value should be a List");
@SuppressWarnings("unchecked")
List<RedactionArea> list = (List<RedactionArea>) value;
@@ -106,7 +103,7 @@ class StringToArrayListPropertyEditorTest {
// Assert
assertNotNull(value, "Value should not be null");
assertTrue(value instanceof List, "Value should be a List");
assertInstanceOf(List.class, value, "Value should be a List");
@SuppressWarnings("unchecked")
List<RedactionArea> list = (List<RedactionArea>) value;
@@ -125,7 +122,7 @@ class StringToArrayListPropertyEditorTest {
// Assert
assertNotNull(value, "Value should not be null");
assertTrue(value instanceof List, "Value should be a List");
assertInstanceOf(List.class, value, "Value should be a List");
@SuppressWarnings("unchecked")
List<RedactionArea> list = (List<RedactionArea>) value;

View File

@@ -1,9 +1,6 @@
package stirling.software.common.util.propertyeditor;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.*;
import java.util.Map;
@@ -30,7 +27,7 @@ class StringToMapPropertyEditorTest {
// Assert
assertNotNull(value, "Value should not be null");
assertTrue(value instanceof Map, "Value should be a Map");
assertInstanceOf(Map.class, value, "Value should be a Map");
@SuppressWarnings("unchecked")
Map<String, String> map = (Map<String, String>) value;
@@ -50,7 +47,7 @@ class StringToMapPropertyEditorTest {
// Assert
assertNotNull(value, "Value should not be null");
assertTrue(value instanceof Map, "Value should be a Map");
assertInstanceOf(Map.class, value, "Value should be a Map");
@SuppressWarnings("unchecked")
Map<String, String> map = (Map<String, String>) value;
@@ -68,7 +65,7 @@ class StringToMapPropertyEditorTest {
// Assert
assertNotNull(value, "Value should not be null");
assertTrue(value instanceof Map, "Value should be a Map");
assertInstanceOf(Map.class, value, "Value should be a Map");
@SuppressWarnings("unchecked")
Map<String, String> map = (Map<String, String>) value;
@@ -87,7 +84,7 @@ class StringToMapPropertyEditorTest {
// Assert
assertNotNull(value, "Value should not be null");
assertTrue(value instanceof Map, "Value should be a Map");
assertInstanceOf(Map.class, value, "Value should be a Map");
@SuppressWarnings("unchecked")
Map<String, String> map = (Map<String, String>) value;