This is an automated email from the ASF dual-hosted git repository.
hansva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git
The following commit(s) were added to refs/heads/main by this push:
new 8f84817ac5 Get filenames was only listing files, fixes #5848 (#5876)
8f84817ac5 is described below
commit 8f84817ac5b263d871a2d95241b176cb2a388af5
Author: Hans Van Akelyen <[email protected]>
AuthorDate: Thu Oct 23 16:52:10 2025 +0200
Get filenames was only listing files, fixes #5848 (#5876)
---
assemblies/debug/pom.xml | 6 +
.../pipeline/transforms/getfilenames/FileItem.java | 44 +---
.../transforms/getfilenames/FilterItem.java | 12 +-
.../transforms/getfilenames/GetFileNames.java | 12 +-
.../transforms/getfilenames/GetFileNamesData.java | 4 +-
.../getfilenames/GetFileNamesDialog.java | 61 ++---
.../transforms/getfilenames/GetFileNamesMeta.java | 165 +-------------
.../transforms/getfilenames/FileItemTest.java | 167 ++++++++++++++
.../transforms/getfilenames/FilterItemTest.java | 128 +++++++++++
.../getfilenames/GetFileNamesDataTest.java | 175 +++++++++++++++
.../getfilenames/GetFileNamesEdgeCasesTest.java | 245 +++++++++++++++++++++
.../GetFileNamesMetaAdditionalTest.java | 229 +++++++++++++++++++
.../getfilenames/GetFileNamesMetaTest.java | 20 +-
.../getfilenames/GetFileNamesTransformTest.java | 239 ++++++++++++++++++++
14 files changed, 1235 insertions(+), 272 deletions(-)
diff --git a/assemblies/debug/pom.xml b/assemblies/debug/pom.xml
index 8f63d95224..6124165d55 100644
--- a/assemblies/debug/pom.xml
+++ b/assemblies/debug/pom.xml
@@ -445,6 +445,12 @@
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.hop</groupId>
+ <artifactId>hop-transform-getfilenames</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>org.apache.hop</groupId>
<artifactId>hop-transform-getvariable</artifactId>
diff --git
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/FileItem.java
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/FileItem.java
index 6dd56f59d4..bbc8606b2e 100644
---
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/FileItem.java
+++
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/FileItem.java
@@ -18,9 +18,13 @@
package org.apache.hop.pipeline.transforms.getfilenames;
import java.util.Objects;
+import lombok.Getter;
+import lombok.Setter;
import org.apache.hop.core.util.Utils;
import org.apache.hop.metadata.api.HopMetadataProperty;
+@Getter
+@Setter
public class FileItem {
private static final String NO = "N";
@@ -77,46 +81,6 @@ public class FileItem {
this.includeSubFolders = NO;
}
- public String getFileName() {
- return fileName;
- }
-
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
-
- public String getFileMask() {
- return fileMask;
- }
-
- public void setFileMask(String fileMask) {
- this.fileMask = fileMask;
- }
-
- public String getExcludeFileMask() {
- return excludeFileMask;
- }
-
- public void setExcludeFileMask(String excludeFileMask) {
- this.excludeFileMask = excludeFileMask;
- }
-
- public String getFileRequired() {
- return fileRequired;
- }
-
- public void setFileRequired(String fileRequired) {
- this.fileRequired = fileRequired;
- }
-
- public String getIncludeSubFolders() {
- return includeSubFolders;
- }
-
- public void setIncludeSubFolders(String includeSubFolders) {
- this.includeSubFolders = includeSubFolders;
- }
-
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/FilterItem.java
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/FilterItem.java
index 1685b9890d..0f7d2ecdf4 100644
---
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/FilterItem.java
+++
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/FilterItem.java
@@ -18,8 +18,12 @@
package org.apache.hop.pipeline.transforms.getfilenames;
import java.util.Objects;
+import lombok.Getter;
+import lombok.Setter;
import org.apache.hop.metadata.api.HopMetadataProperty;
+@Getter
+@Setter
public class FilterItem {
/** The file filter type selection */
@@ -34,14 +38,6 @@ public class FilterItem {
this.fileTypeFilterSelection = fileTypeFilterSelection;
}
- public String getFileTypeFilterSelection() {
- return fileTypeFilterSelection;
- }
-
- public void setFileTypeFilterSelection(String fileTypeFilterSelection) {
- this.fileTypeFilterSelection = fileTypeFilterSelection;
- }
-
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNames.java
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNames.java
index 25f56e539b..41a994989c 100644
---
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNames.java
+++
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNames.java
@@ -227,16 +227,16 @@ public class GetFileNames extends
BaseTransform<GetFileNamesMeta, GetFileNamesDa
extraData[outputIndex++] = data.file.getType().toString();
// exists
- extraData[outputIndex++] = Boolean.valueOf(data.file.exists());
+ extraData[outputIndex++] = data.file.exists();
// ishidden
- extraData[outputIndex++] = Boolean.valueOf(data.file.isHidden());
+ extraData[outputIndex++] = data.file.isHidden();
// isreadable
- extraData[outputIndex++] = Boolean.valueOf(data.file.isReadable());
+ extraData[outputIndex++] = data.file.isReadable();
// iswriteable
- extraData[outputIndex++] = Boolean.valueOf(data.file.isWriteable());
+ extraData[outputIndex++] = data.file.isWriteable();
// lastmodifiedtime
extraData[outputIndex++] = new
Date(data.file.getContent().getLastModifiedTime());
@@ -244,7 +244,7 @@ public class GetFileNames extends
BaseTransform<GetFileNamesMeta, GetFileNamesDa
// size
Long size = null;
if (data.file.getType().equals(FileType.FILE)) {
- size = Long.valueOf(data.file.getContent().getSize());
+ size = data.file.getContent().getSize();
}
extraData[outputIndex++] = size;
@@ -264,7 +264,7 @@ public class GetFileNames extends
BaseTransform<GetFileNamesMeta, GetFileNamesDa
// See if we need to add the row number to the row...
if (meta.isIncludeRowNumber() &&
!Utils.isEmpty(meta.getRowNumberField())) {
- extraData[outputIndex++] = Long.valueOf(data.rownr + 1);
+ extraData[outputIndex++] = data.rownr + 1;
}
data.rownr++;
diff --git
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesData.java
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesData.java
index 3f221c4e42..31ebda3e27 100644
---
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesData.java
+++
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesData.java
@@ -41,7 +41,7 @@ public class GetFileNamesData extends BaseTransformData
implements ITransformDat
public Object[] previousRow;
- public int nr_repeats;
+ public int nrRepeats;
public int nrLinesOnPage;
@@ -114,7 +114,7 @@ public class GetFileNamesData extends BaseTransformData
implements ITransformDat
daf = new SimpleDateFormat();
dafs = new DateFormatSymbols();
- nr_repeats = 0;
+ nrRepeats = 0;
previousRow = null;
filenr = 0;
filessize = 0;
diff --git
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesDialog.java
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesDialog.java
index 8d13e0900e..6695595543 100644
---
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesDialog.java
+++
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesDialog.java
@@ -76,64 +76,25 @@ public class GetFileNamesDialog extends BaseTransformDialog
{
private Label wlRaiseAnExceptionIfNoFile;
private Button wRaiseAnExceptionIfNoFile;
- private Label wlFilename;
-
- private Button wbbFilename; // Browse: add file or directory
-
- private Button wbdFilename; // Delete
-
- private Button wbeFilename; // Edit
-
- private Button wbaFilename; // Add or change
-
private TextVar wFilename;
-
- private Label wlFilenameList;
-
private TableView wFilenameList;
-
- private Label wlExcludeFilemask;
-
private TextVar wExcludeFilemask;
-
- private Label wlFilemask;
-
private TextVar wFilemask;
-
- private Button wbShowFiles;
-
private CCombo wFilterFileType;
-
private final GetFileNamesMeta input;
-
private Button wFileField;
- private Label wFileFieldWarning;
-
- private Label wlFilenameField;
private CCombo wFilenameField;
-
- private Label wlWildcardField;
private CCombo wWildcardField;
-
- private Label wlExcludeWildcardField;
private CCombo wExcludeWildcardField;
-
- private Label wlIncludeSubFolder;
private Button wIncludeSubFolder;
-
private Button wAddResult;
-
private Text wLimit;
-
private Button wInclRownum;
-
private TextVar wInclRownumField;
-
private boolean getPreviousFields = false;
-
private Group groupAsDefined;
-
private Group groupFromField;
+ private Label wFileFieldWarning;
public GetFileNamesDialog(
Shell parent,
@@ -228,7 +189,7 @@ public class GetFileNamesDialog extends BaseTransformDialog
{
WidgetUtils.setFormLayout(group, 10);
// Filename field
- wlFilenameField = new Label(group, SWT.RIGHT);
+ Label wlFilenameField = new Label(group, SWT.RIGHT);
wlFilenameField.setText(BaseMessages.getString(PKG,
"GetFileNamesDialog.FilenameField.Label"));
PropsUi.setLook(wlFilenameField);
wlFilenameField.setLayoutData(
@@ -250,7 +211,7 @@ public class GetFileNamesDialog extends BaseTransformDialog
{
.result());
// Wildcard field
- wlWildcardField = new Label(group, SWT.RIGHT);
+ Label wlWildcardField = new Label(group, SWT.RIGHT);
wlWildcardField.setText(BaseMessages.getString(PKG,
"GetFileNamesDialog.WildcardField.Label"));
PropsUi.setLook(wlWildcardField);
wlWildcardField.setLayoutData(
@@ -272,7 +233,7 @@ public class GetFileNamesDialog extends BaseTransformDialog
{
.result());
// ExcludeWildcard field
- wlExcludeWildcardField = new Label(group, SWT.RIGHT);
+ Label wlExcludeWildcardField = new Label(group, SWT.RIGHT);
wlExcludeWildcardField.setText(
BaseMessages.getString(PKG,
"GetFileNamesDialog.ExcludeWildcardField.Label"));
PropsUi.setLook(wlExcludeWildcardField);
@@ -295,7 +256,7 @@ public class GetFileNamesDialog extends BaseTransformDialog
{
.result());
// Is includeSubFoldername defined in a Field
- wlIncludeSubFolder = new Label(group, SWT.RIGHT);
+ Label wlIncludeSubFolder = new Label(group, SWT.RIGHT);
wlIncludeSubFolder.setText(
BaseMessages.getString(PKG,
"GetFileNamesDialog.IncludeSubFolder.Label"));
PropsUi.setLook(wlIncludeSubFolder);
@@ -329,6 +290,15 @@ public class GetFileNamesDialog extends
BaseTransformDialog {
private Group createGroupAsDefined(
Composite parent, int margin, int middle, ModifyListener lsMod) {
+ Button wbShowFiles;
+ Label wlFilemask;
+ Label wlExcludeFilemask;
+ Label wlFilenameList;
+ Button wbaFilename;
+ Button wbeFilename;
+ Button wbdFilename;
+ Button wbbFilename;
+ Label wlFilename;
Group group = new Group(parent, SWT.SHADOW_NONE);
PropsUi.setLook(group);
group.setText(BaseMessages.getString(PKG,
"GetFileNamesDialog.Group.ByDefinition.Label"));
@@ -655,7 +625,8 @@ public class GetFileNamesDialog extends BaseTransformDialog
{
new FormDataBuilder().left(0, margin).top(0, 3 * margin).right(middle,
-margin).result());
wFilterFileType = new CCombo(wFilterComp, SWT.SINGLE | SWT.READ_ONLY |
SWT.BORDER);
- BaseMessages.getString(PKG,
"GetFileNamesDialog.FilterTab.FileType.All.Label");
+ wFilterFileType.add(
+ BaseMessages.getString(PKG,
"GetFileNamesDialog.FilterTab.FileType.All.Label"));
wFilterFileType.add(
BaseMessages.getString(PKG,
"GetFileNamesDialog.FilterTab.FileType.OnlyFile.Label"));
wFilterFileType.add(
diff --git
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesMeta.java
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesMeta.java
index daffd46c04..a579046621 100644
---
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesMeta.java
+++
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesMeta.java
@@ -20,6 +20,8 @@ package org.apache.hop.pipeline.transforms.getfilenames;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import lombok.Getter;
+import lombok.Setter;
import org.apache.commons.vfs2.FileObject;
import org.apache.hop.core.CheckResult;
import org.apache.hop.core.ICheckResult;
@@ -56,6 +58,8 @@ import org.apache.hop.resource.ResourceReference;
categoryDescription =
"i18n:org.apache.hop.pipeline.transform:BaseTransform.Category.Input",
keywords = "i18n::GetFileNamesMeta.keyword",
documentationUrl = "/pipeline/transforms/getfilenames.html")
+@Getter
+@Setter
public class GetFileNamesMeta extends BaseTransformMeta<GetFileNames,
GetFileNamesData> {
private static final Class<?> PKG = GetFileNamesMeta.class;
@@ -154,153 +158,6 @@ public class GetFileNamesMeta extends
BaseTransformMeta<GetFileNames, GetFileNam
filterItemList = new ArrayList<>();
}
- public List<FileItem> getFilesList() {
- return filesList;
- }
-
- public void setFilesList(List<FileItem> filesList) {
- this.filesList = filesList;
- }
-
- public List<FilterItem> getFilterItemList() {
- return filterItemList;
- }
-
- public void setFilterItemList(List<FilterItem> filterItemList) {
- this.filterItemList = filterItemList;
- }
-
- /**
- * @return the doNotFailIfNoFile flag
- */
- public boolean isDoNotFailIfNoFile() {
- return doNotFailIfNoFile;
- }
-
- /**
- * @param doNotFailIfNoFile the doNotFailIfNoFile to set
- */
- public void setDoNotFailIfNoFile(boolean doNotFailIfNoFile) {
- this.doNotFailIfNoFile = doNotFailIfNoFile;
- }
-
- /**
- * @return the raiseAnExceptionIfNoFile flag
- */
- public boolean isRaiseAnExceptionIfNoFile() {
- return raiseAnExceptionIfNoFile;
- }
-
- /**
- * @param raiseAnExceptionIfNoFile the raiseAnExceptionIfNoFile to set
- */
- public void setRaiseAnExceptionIfNoFile(boolean raiseAnExceptionIfNoFile) {
- this.raiseAnExceptionIfNoFile = raiseAnExceptionIfNoFile;
- }
-
- /**
- * @return Returns the rowNumberField.
- */
- public String getRowNumberField() {
- return rowNumberField;
- }
-
- /**
- * @param dynamicFilenameField The dynamic filename field to set.
- */
- public void setDynamicFilenameField(String dynamicFilenameField) {
- this.dynamicFilenameField = dynamicFilenameField;
- }
-
- /**
- * @param dynamicWildcardField The dynamic wildcard field to set.
- */
- public void setDynamicWildcardField(String dynamicWildcardField) {
- this.dynamicWildcardField = dynamicWildcardField;
- }
-
- /**
- * @param rowNumberField The rowNumberField to set.
- */
- public void setRowNumberField(String rowNumberField) {
- this.rowNumberField = rowNumberField;
- }
-
- /**
- * @return Returns the dynamic filename field (from previous transforms)
- */
- public String getDynamicFilenameField() {
- return dynamicFilenameField;
- }
-
- /**
- * @return Returns the dynamic wildcard field (from previous transforms)
- */
- public String getDynamicWildcardField() {
- return dynamicWildcardField;
- }
-
- public String getDynamicExcludeWildcardField() {
- return this.dynamicExcludeWildcardField;
- }
-
- /**
- * @param dynamicExcludeWildcardField The dynamic excludeWildcard field to
set.
- */
- public void setDynamicExcludeWildcardField(String
dynamicExcludeWildcardField) {
- this.dynamicExcludeWildcardField = dynamicExcludeWildcardField;
- }
-
- /**
- * @return Returns the includeRowNumber.
- */
- public boolean isIncludeRowNumber() {
- return includeRowNumber;
- }
-
- /**
- * @return Returns the File field.
- */
- public boolean isFileField() {
- return fileField;
- }
-
- /**
- * @param fileField The filefield to set.
- */
- public void setFileField(boolean fileField) {
- this.fileField = fileField;
- }
-
- public boolean isDynamicIncludeSubFolders() {
- return dynamicIncludeSubFolders;
- }
-
- public void setDynamicIncludeSubFolders(boolean dynamicIncludeSubFolders) {
- this.dynamicIncludeSubFolders = dynamicIncludeSubFolders;
- }
-
- /**
- * @param includeRowNumber The includeRowNumber to set.
- */
- public void setIncludeRowNumber(boolean includeRowNumber) {
- this.includeRowNumber = includeRowNumber;
- }
-
- /**
- * @param addResultFile The isaddresult to set.
- */
- public void setAddResultFile(boolean addResultFile) {
- this.addResultFile = addResultFile;
- }
-
- /**
- * @return Returns isaddresult.
- */
- public boolean isAddResultFile() {
- return addResultFile;
- }
-
public String getRequiredFilesDesc(String tt) {
if (tt == null) {
return RequiredFilesDesc[0];
@@ -312,20 +169,6 @@ public class GetFileNamesMeta extends
BaseTransformMeta<GetFileNames, GetFileNam
}
}
- /**
- * @return Returns the rowLimit.
- */
- public long getRowLimit() {
- return rowLimit;
- }
-
- /**
- * @param rowLimit The rowLimit to set.
- */
- public void setRowLimit(long rowLimit) {
- this.rowLimit = rowLimit;
- }
-
@Override
public Object clone() {
return (GetFileNamesMeta) super.clone();
diff --git
a/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/FileItemTest.java
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/FileItemTest.java
new file mode 100644
index 0000000000..0b7a35898f
--- /dev/null
+++
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/FileItemTest.java
@@ -0,0 +1,167 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hop.pipeline.transforms.getfilenames;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
+
+/** Test class for FileItem */
+class FileItemTest {
+
+ @Test
+ void testDefaultConstructor() {
+ FileItem fileItem = new FileItem();
+
+ assertNotNull(fileItem);
+ assertNull(fileItem.getFileName());
+ assertNull(fileItem.getFileMask());
+ assertNull(fileItem.getExcludeFileMask());
+ assertEquals("N", fileItem.getFileRequired());
+ assertEquals("N", fileItem.getIncludeSubFolders());
+ }
+
+ @Test
+ void stParameterizedConstructor() {
+ String fileName = "test.txt";
+ String fileMask = "*.txt";
+ String excludeFileMask = "*.tmp";
+ String fileRequired = "Y";
+ String includeSubFolders = "Y";
+
+ FileItem fileItem =
+ new FileItem(fileName, fileMask, excludeFileMask, fileRequired,
includeSubFolders);
+
+ assertEquals(fileName, fileItem.getFileName());
+ assertEquals(fileMask, fileItem.getFileMask());
+ assertEquals(excludeFileMask, fileItem.getExcludeFileMask());
+ assertEquals(fileRequired, fileItem.getFileRequired());
+ assertEquals(includeSubFolders, fileItem.getIncludeSubFolders());
+ }
+
+ @Test
+ void testParameterizedConstructorWithEmptyValues() {
+ String fileName = "test.txt";
+ String fileMask = "*.txt";
+ String excludeFileMask = "*.tmp";
+
+ FileItem fileItem = new FileItem(fileName, fileMask, excludeFileMask, "",
"");
+
+ assertEquals(fileName, fileItem.getFileName());
+ assertEquals(fileMask, fileItem.getFileMask());
+ assertEquals(excludeFileMask, fileItem.getExcludeFileMask());
+ assertEquals("N", fileItem.getFileRequired());
+ assertEquals("N", fileItem.getIncludeSubFolders());
+ }
+
+ @Test
+ void testParameterizedConstructorWithNullValues() {
+ String fileName = "test.txt";
+ String fileMask = "*.txt";
+ String excludeFileMask = "*.tmp";
+
+ FileItem fileItem = new FileItem(fileName, fileMask, excludeFileMask,
null, null);
+
+ assertEquals(fileName, fileItem.getFileName());
+ assertEquals(fileMask, fileItem.getFileMask());
+ assertEquals(excludeFileMask, fileItem.getExcludeFileMask());
+ assertEquals("N", fileItem.getFileRequired());
+ assertEquals("N", fileItem.getIncludeSubFolders());
+ }
+
+ @Test
+ void testSettersAndGetters() {
+ FileItem fileItem = new FileItem();
+
+ fileItem.setFileName("newfile.txt");
+ fileItem.setFileMask("*.txt");
+ fileItem.setExcludeFileMask("*.tmp");
+ fileItem.setFileRequired("Y");
+ fileItem.setIncludeSubFolders("Y");
+
+ assertEquals("newfile.txt", fileItem.getFileName());
+ assertEquals("*.txt", fileItem.getFileMask());
+ assertEquals("*.tmp", fileItem.getExcludeFileMask());
+ assertEquals("Y", fileItem.getFileRequired());
+ assertEquals("Y", fileItem.getIncludeSubFolders());
+ }
+
+ @Test
+ void testEquals() {
+ FileItem fileItem1 = new FileItem("test.txt", "*.txt", "*.tmp", "Y", "N");
+ FileItem fileItem2 = new FileItem("test.txt", "*.txt", "*.tmp", "Y", "N");
+ FileItem fileItem3 = new FileItem("test.txt", "*.txt", "*.tmp", "N", "Y");
+ FileItem fileItem4 = new FileItem("other.txt", "*.txt", "*.tmp", "Y", "N");
+
+ assertEquals(fileItem1, fileItem2);
+ assertEquals(fileItem1, fileItem3); // equals only considers fileName,
fileMask, excludeFileMask
+ assertNotEquals(fileItem1, fileItem4);
+ assertNotEquals(null, fileItem1);
+ assertNotEquals("not a FileItem", fileItem1);
+ }
+
+ @Test
+ void testEqualsWithNullValues() {
+ FileItem fileItem1 = new FileItem("test.txt", null, null, "Y", "N");
+ FileItem fileItem2 = new FileItem("test.txt", null, null, "Y", "N");
+ FileItem fileItem3 = new FileItem("test.txt", "*.txt", null, "Y", "N");
+
+ assertEquals(fileItem1, fileItem2);
+ assertNotEquals(fileItem1, fileItem3);
+ }
+
+ @Test
+ void testHashCode() {
+ FileItem fileItem1 = new FileItem("test.txt", "*.txt", "*.tmp", "Y", "N");
+ FileItem fileItem2 = new FileItem("test.txt", "*.txt", "*.tmp", "Y", "N");
+ FileItem fileItem3 = new FileItem("test.txt", "*.txt", "*.tmp", "N", "Y");
+ FileItem fileItem4 = new FileItem("other.txt", "*.txt", "*.tmp", "Y", "N");
+
+ assertEquals(fileItem1.hashCode(), fileItem2.hashCode());
+ assertEquals(
+ fileItem1.hashCode(),
+ fileItem3.hashCode()); // hashCode only considers fileName, fileMask,
excludeFileMask
+ assertNotEquals(fileItem1.hashCode(), fileItem4.hashCode());
+ }
+
+ @Test
+ void testHashCodeWithNullValues() {
+ FileItem fileItem1 = new FileItem("test.txt", null, null, "Y", "N");
+ FileItem fileItem2 = new FileItem("test.txt", null, null, "Y", "N");
+
+ assertEquals(fileItem1.hashCode(), fileItem2.hashCode());
+ }
+
+ @Test
+ void testSelfEquality() {
+ FileItem fileItem = new FileItem("test.txt", "*.txt", "*.tmp", "Y", "N");
+ assertEquals(fileItem, fileItem);
+ }
+
+ @Test
+ void testToString() {
+ FileItem fileItem = new FileItem("test.txt", "*.txt", "*.tmp", "Y", "N");
+ String result = fileItem.toString();
+ assertNotNull(result);
+ assertTrue(result.contains("FileItem"));
+ }
+}
diff --git
a/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/FilterItemTest.java
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/FilterItemTest.java
new file mode 100644
index 0000000000..865c3f3eea
--- /dev/null
+++
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/FilterItemTest.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hop.pipeline.transforms.getfilenames;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
+
+/** Test class for FilterItem */
+class FilterItemTest {
+
+ @Test
+ void testDefaultConstructor() {
+ FilterItem filterItem = new FilterItem();
+
+ assertNotNull(filterItem);
+ assertNull(filterItem.getFileTypeFilterSelection());
+ }
+
+ @Test
+ void testParameterizedConstructor() {
+ String fileTypeFilterSelection = "FILES_ONLY";
+
+ FilterItem filterItem = new FilterItem(fileTypeFilterSelection);
+
+ assertEquals(fileTypeFilterSelection,
filterItem.getFileTypeFilterSelection());
+ }
+
+ @Test
+ void testParameterizedConstructorWithNull() {
+ FilterItem filterItem = new FilterItem(null);
+
+ assertNull(filterItem.getFileTypeFilterSelection());
+ }
+
+ @Test
+ void testSettersAndGetters() {
+ FilterItem filterItem = new FilterItem();
+
+ filterItem.setFileTypeFilterSelection("FILES_AND_FOLDERS");
+
+ assertEquals("FILES_AND_FOLDERS", filterItem.getFileTypeFilterSelection());
+ }
+
+ @Test
+ void testEquals() {
+ FilterItem filterItem1 = new FilterItem("FILES_ONLY");
+ FilterItem filterItem2 = new FilterItem("FILES_ONLY");
+ FilterItem filterItem3 = new FilterItem("FILES_AND_FOLDERS");
+ FilterItem filterItem4 = new FilterItem(null);
+
+ assertEquals(filterItem1, filterItem2);
+ assertNotEquals(filterItem1, filterItem3);
+ assertNotEquals(filterItem1, filterItem4);
+ assertNotEquals(null, filterItem1);
+ assertNotEquals("not a FilterItem", filterItem1);
+ }
+
+ @Test
+ void testEqualsWithNullValues() {
+ FilterItem filterItem1 = new FilterItem(null);
+ FilterItem filterItem2 = new FilterItem(null);
+ FilterItem filterItem3 = new FilterItem("FILES_ONLY");
+
+ assertEquals(filterItem1, filterItem2);
+ assertNotEquals(filterItem1, filterItem3);
+ }
+
+ @Test
+ void testHashCode() {
+ FilterItem filterItem1 = new FilterItem("FILES_ONLY");
+ FilterItem filterItem2 = new FilterItem("FILES_ONLY");
+ FilterItem filterItem3 = new FilterItem("FILES_AND_FOLDERS");
+
+ assertEquals(filterItem1.hashCode(), filterItem2.hashCode());
+ assertNotEquals(filterItem1.hashCode(), filterItem3.hashCode());
+ }
+
+ @Test
+ void testHashCodeWithNullValues() {
+ FilterItem filterItem1 = new FilterItem(null);
+ FilterItem filterItem2 = new FilterItem(null);
+
+ assertEquals(filterItem1.hashCode(), filterItem2.hashCode());
+ }
+
+ @Test
+ void testSelfEquality() {
+ FilterItem filterItem = new FilterItem("FILES_ONLY");
+ assertEquals(filterItem, filterItem);
+ }
+
+ @Test
+ void testToString() {
+ FilterItem filterItem = new FilterItem("FILES_ONLY");
+ String result = filterItem.toString();
+ assertNotNull(result);
+ assertTrue(result.contains("FilterItem"));
+ }
+
+ @Test
+ void testEmptyString() {
+ FilterItem filterItem = new FilterItem("");
+
+ assertEquals("", filterItem.getFileTypeFilterSelection());
+ assertEquals(new FilterItem(""), filterItem);
+ assertEquals(filterItem.hashCode(), new FilterItem("").hashCode());
+ }
+}
diff --git
a/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesDataTest.java
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesDataTest.java
new file mode 100644
index 0000000000..cb0cdc4610
--- /dev/null
+++
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesDataTest.java
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hop.pipeline.transforms.getfilenames;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
+
+/** Test class for GetFileNamesData */
+class GetFileNamesDataTest {
+
+ @Test
+ void testDefaultConstructor() {
+ GetFileNamesData data = new GetFileNamesData();
+
+ assertNotNull(data);
+ assertNotNull(data.lineBuffer);
+ assertTrue(data.lineBuffer.isEmpty());
+ assertNull(data.previousRow);
+ assertEquals(0, data.nrRepeats);
+ assertEquals(0, data.nrLinesOnPage);
+ assertNotNull(data.nf);
+ assertNotNull(data.df);
+ assertNotNull(data.dfs);
+ assertNotNull(data.daf);
+ assertNull(data.outputRowMeta);
+ assertNotNull(data.dafs);
+ assertNull(data.files);
+ assertFalse(data.isLastFile);
+ assertNull(data.filename);
+ assertEquals(0, data.filenr);
+ assertEquals(0, data.filessize);
+ assertNull(data.fr);
+ assertNull(data.zi);
+ assertNull(data.isr);
+ assertFalse(data.doneReading);
+ assertEquals(0, data.headerLinesRead);
+ assertEquals(0, data.footerLinesRead);
+ assertEquals(0, data.pageLinesRead);
+ assertFalse(data.doneWithHeader);
+ assertNull(data.dataErrorLineHandler);
+ assertNull(data.filePlayList);
+ assertNull(data.file);
+ assertEquals(0, data.rownr);
+ assertEquals(0, data.totalpreviousfields);
+ assertEquals(-1, data.indexOfFilenameField);
+ assertEquals(-1, data.indexOfWildcardField);
+ assertEquals(-1, data.indexOfExcludeWildcardField);
+ assertNull(data.inputRowMeta);
+ assertNull(data.readrow);
+ assertEquals(0, data.nrTransformFields);
+ }
+
+ @Test
+ void testSetDateFormatLenient() {
+ GetFileNamesData data = new GetFileNamesData();
+
+ // Test setting lenient to true
+ data.setDateFormatLenient(true);
+ assertTrue(data.daf.isLenient());
+
+ // Test setting lenient to false
+ data.setDateFormatLenient(false);
+ assertFalse(data.daf.isLenient());
+ }
+
+ @Test
+ void testFieldAssignments() {
+ GetFileNamesData data = new GetFileNamesData();
+
+ // Test various field assignments
+ data.nrRepeats = 5;
+ data.nrLinesOnPage = 10;
+ data.isLastFile = true;
+ data.filename = "test.txt";
+ data.filenr = 3;
+ data.filessize = 100;
+ data.doneReading = true;
+ data.headerLinesRead = 2;
+ data.footerLinesRead = 1;
+ data.pageLinesRead = 5;
+ data.doneWithHeader = true;
+ data.rownr = 50L;
+ data.totalpreviousfields = 3;
+ data.indexOfFilenameField = 0;
+ data.indexOfWildcardField = 1;
+ data.indexOfExcludeWildcardField = 2;
+ data.nrTransformFields = 5;
+
+ assertEquals(5, data.nrRepeats);
+ assertEquals(10, data.nrLinesOnPage);
+ assertTrue(data.isLastFile);
+ assertEquals("test.txt", data.filename);
+ assertEquals(3, data.filenr);
+ assertEquals(100, data.filessize);
+ assertTrue(data.doneReading);
+ assertEquals(2, data.headerLinesRead);
+ assertEquals(1, data.footerLinesRead);
+ assertEquals(5, data.pageLinesRead);
+ assertTrue(data.doneWithHeader);
+ assertEquals(50L, data.rownr);
+ assertEquals(3, data.totalpreviousfields);
+ assertEquals(0, data.indexOfFilenameField);
+ assertEquals(1, data.indexOfWildcardField);
+ assertEquals(2, data.indexOfExcludeWildcardField);
+ assertEquals(5, data.nrTransformFields);
+ }
+
+ @Test
+ void testLineBufferOperations() {
+ GetFileNamesData data = new GetFileNamesData();
+
+ assertTrue(data.lineBuffer.isEmpty());
+
+ data.lineBuffer.add("line1");
+ data.lineBuffer.add("line2");
+
+ assertEquals(2, data.lineBuffer.size());
+ assertEquals("line1", data.lineBuffer.get(0));
+ assertEquals("line2", data.lineBuffer.get(1));
+
+ data.lineBuffer.clear();
+ assertTrue(data.lineBuffer.isEmpty());
+ }
+
+ @Test
+ void testPreviousRowAssignment() {
+ GetFileNamesData data = new GetFileNamesData();
+
+ assertNull(data.previousRow);
+
+ Object[] row = {"value1", "value2", "value3"};
+ data.previousRow = row;
+
+ assertNotNull(data.previousRow);
+ assertEquals(3, data.previousRow.length);
+ assertEquals("value1", data.previousRow[0]);
+ assertEquals("value2", data.previousRow[1]);
+ assertEquals("value3", data.previousRow[2]);
+ }
+
+ @Test
+ void testReadrowAssignment() {
+ GetFileNamesData data = new GetFileNamesData();
+
+ assertNull(data.readrow);
+
+ Object[] row = {"input1", "input2"};
+ data.readrow = row;
+
+ assertNotNull(data.readrow);
+ assertEquals(2, data.readrow.length);
+ assertEquals("input1", data.readrow[0]);
+ assertEquals("input2", data.readrow[1]);
+ }
+}
diff --git
a/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesEdgeCasesTest.java
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesEdgeCasesTest.java
new file mode 100644
index 0000000000..36d038937b
--- /dev/null
+++
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesEdgeCasesTest.java
@@ -0,0 +1,245 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hop.pipeline.transforms.getfilenames;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.hop.core.HopEnvironment;
+import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.plugins.PluginRegistry;
+import org.apache.hop.junit.rules.RestoreHopEngineEnvironmentExtension;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+/** Test class for GetFileNames edge cases and error conditions */
+class GetFileNamesEdgeCasesTest {
+
+ @RegisterExtension
+ static RestoreHopEngineEnvironmentExtension env = new
RestoreHopEngineEnvironmentExtension();
+
+ private GetFileNamesMeta meta;
+
+ @BeforeEach
+ void setUp() throws HopException {
+ HopEnvironment.init();
+ PluginRegistry.init();
+ meta = new GetFileNamesMeta();
+ }
+
+ @Test
+ void testFileItemWithNullValues() {
+ FileItem fileItem = new FileItem(null, null, null, null, null);
+
+ assertNull(fileItem.getFileName());
+ assertNull(fileItem.getFileMask());
+ assertNull(fileItem.getExcludeFileMask());
+ assertEquals("N", fileItem.getFileRequired());
+ assertEquals("N", fileItem.getIncludeSubFolders());
+ }
+
+ @Test
+ void testFileItemWithEmptyStrings() {
+ FileItem fileItem = new FileItem("", "", "", "", "");
+
+ assertEquals("", fileItem.getFileName());
+ assertEquals("", fileItem.getFileMask());
+ assertEquals("", fileItem.getExcludeFileMask());
+ assertEquals("N", fileItem.getFileRequired());
+ assertEquals("N", fileItem.getIncludeSubFolders());
+ }
+
+ @Test
+ void testFileItemEqualityWithNulls() {
+ FileItem fileItem1 = new FileItem("test.txt", null, null, "Y", "N");
+ FileItem fileItem2 = new FileItem("test.txt", null, null, "Y", "N");
+ FileItem fileItem3 = new FileItem("test.txt", "*.txt", null, "Y", "N");
+
+ assertEquals(fileItem1, fileItem2);
+ assertNotEquals(fileItem1, fileItem3);
+ }
+
+ @Test
+ void testFilterItemWithNullValue() {
+ FilterItem filterItem = new FilterItem(null);
+
+ assertNull(filterItem.getFileTypeFilterSelection());
+ assertEquals(new FilterItem(null), filterItem);
+ assertEquals(filterItem.hashCode(), new FilterItem(null).hashCode());
+ }
+
+ @Test
+ void testFilterItemWithEmptyString() {
+ FilterItem filterItem = new FilterItem("");
+
+ assertEquals("", filterItem.getFileTypeFilterSelection());
+ assertEquals(new FilterItem(""), filterItem);
+ assertEquals(filterItem.hashCode(), new FilterItem("").hashCode());
+ }
+
+ @Test
+ void testGetFileNamesMetaWithEmptyLists() {
+ meta.setFilesList(new ArrayList<>());
+ meta.setFilterItemList(new ArrayList<>());
+
+ assertTrue(meta.getFilesList().isEmpty());
+ assertTrue(meta.getFilterItemList().isEmpty());
+ }
+
+ @Test
+ void testGetFileNamesMetaWithNullLists() {
+ meta.setFilesList(null);
+ meta.setFilterItemList(null);
+
+ assertNull(meta.getFilesList());
+ assertNull(meta.getFilterItemList());
+ }
+
+ @Test
+ void testGetFileNamesMetaWithLargeLists() {
+ List<FileItem> largeFileList = new ArrayList<>();
+ List<FilterItem> largeFilterList = new ArrayList<>();
+
+ for (int i = 0; i < 1000; i++) {
+ largeFileList.add(new FileItem("file" + i + ".txt", "*.txt", "*.tmp",
"Y", "N"));
+ largeFilterList.add(new FilterItem("FILES_ONLY"));
+ }
+
+ meta.setFilesList(largeFileList);
+ meta.setFilterItemList(largeFilterList);
+
+ assertEquals(1000, meta.getFilesList().size());
+ assertEquals(1000, meta.getFilterItemList().size());
+ }
+
+ @Test
+ void testGetFileNamesMetaWithSpecialCharacters() {
+ String specialFileName = "file with spaces & symbols!@#$%^&*().txt";
+ String specialMask = "*.txt";
+ String specialExclude = "*.tmp";
+
+ FileItem fileItem = new FileItem(specialFileName, specialMask,
specialExclude, "Y", "N");
+
+ assertEquals(specialFileName, fileItem.getFileName());
+ assertEquals(specialMask, fileItem.getFileMask());
+ assertEquals(specialExclude, fileItem.getExcludeFileMask());
+ }
+
+ @Test
+ void testGetFileNamesMetaWithUnicodeCharacters() {
+ String unicodeFileName = "файл_中文_한글.txt";
+ String unicodeMask = "*.txt";
+
+ FileItem fileItem = new FileItem(unicodeFileName, unicodeMask, "*.tmp",
"Y", "N");
+
+ assertEquals(unicodeFileName, fileItem.getFileName());
+ assertEquals(unicodeMask, fileItem.getFileMask());
+ }
+
+ @Test
+ void testGetFileNamesMetaWithVeryLongStrings() {
+ String veryLongString = "a".repeat(1000);
+
+ FileItem fileItem = new FileItem(veryLongString, veryLongString,
veryLongString, "Y", "N");
+
+ assertEquals(veryLongString, fileItem.getFileName());
+ assertEquals(veryLongString, fileItem.getFileMask());
+ assertEquals(veryLongString, fileItem.getExcludeFileMask());
+ }
+
+ @Test
+ void testGetFileNamesMetaWithNegativeRowLimit() {
+ meta.setRowLimit(-100);
+ assertEquals(-100, meta.getRowLimit());
+ }
+
+ @Test
+ void testGetFileNamesMetaWithMaxLongRowLimit() {
+ meta.setRowLimit(Long.MAX_VALUE);
+ assertEquals(Long.MAX_VALUE, meta.getRowLimit());
+ }
+
+ @Test
+ void testGetFileNamesMetaWithZeroRowLimit() {
+ meta.setRowLimit(0);
+ assertEquals(0, meta.getRowLimit());
+ }
+
+ @Test
+ void testGetFileNamesMetaWithAllBooleanCombinations() {
+ // Test all possible combinations of boolean flags
+ boolean[] flags = {true, false};
+
+ for (boolean includeRowNumber : flags) {
+ for (boolean fileField : flags) {
+ for (boolean dynamicIncludeSubFolders : flags) {
+ for (boolean addResultFile : flags) {
+ for (boolean doNotFailIfNoFile : flags) {
+ for (boolean raiseAnExceptionIfNoFile : flags) {
+ meta.setIncludeRowNumber(includeRowNumber);
+ meta.setFileField(fileField);
+ meta.setDynamicIncludeSubFolders(dynamicIncludeSubFolders);
+ meta.setAddResultFile(addResultFile);
+ meta.setDoNotFailIfNoFile(doNotFailIfNoFile);
+ meta.setRaiseAnExceptionIfNoFile(raiseAnExceptionIfNoFile);
+
+ assertEquals(includeRowNumber, meta.isIncludeRowNumber());
+ assertEquals(fileField, meta.isFileField());
+ assertEquals(dynamicIncludeSubFolders,
meta.isDynamicIncludeSubFolders());
+ assertEquals(addResultFile, meta.isAddResultFile());
+ assertEquals(doNotFailIfNoFile, meta.isDoNotFailIfNoFile());
+ assertEquals(raiseAnExceptionIfNoFile,
meta.isRaiseAnExceptionIfNoFile());
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ void testGetFileNamesMetaWithEmptyStringFields() {
+ meta.setRowNumberField("");
+ meta.setDynamicFilenameField("");
+ meta.setDynamicWildcardField("");
+ meta.setDynamicExcludeWildcardField("");
+
+ assertEquals("", meta.getRowNumberField());
+ assertEquals("", meta.getDynamicFilenameField());
+ assertEquals("", meta.getDynamicWildcardField());
+ assertEquals("", meta.getDynamicExcludeWildcardField());
+ }
+
+ @Test
+ void testGetFileNamesMetaWithNullStringFields() {
+ meta.setRowNumberField(null);
+ meta.setDynamicFilenameField(null);
+ meta.setDynamicWildcardField(null);
+ meta.setDynamicExcludeWildcardField(null);
+
+ assertNull(meta.getRowNumberField());
+ assertNull(meta.getDynamicFilenameField());
+ assertNull(meta.getDynamicWildcardField());
+ assertNull(meta.getDynamicExcludeWildcardField());
+ }
+}
diff --git
a/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesMetaAdditionalTest.java
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesMetaAdditionalTest.java
new file mode 100644
index 0000000000..f0045457e1
--- /dev/null
+++
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesMetaAdditionalTest.java
@@ -0,0 +1,229 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hop.pipeline.transforms.getfilenames;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.hop.core.HopEnvironment;
+import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.plugins.PluginRegistry;
+import org.apache.hop.junit.rules.RestoreHopEngineEnvironmentExtension;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+/** Additional test class for GetFileNamesMeta */
+class GetFileNamesMetaAdditionalTest {
+
+ @RegisterExtension
+ static RestoreHopEngineEnvironmentExtension env = new
RestoreHopEngineEnvironmentExtension();
+
+ private GetFileNamesMeta meta;
+
+ @BeforeEach
+ void setUp() throws HopException {
+ HopEnvironment.init();
+ PluginRegistry.init();
+ meta = new GetFileNamesMeta();
+ }
+
+ @Test
+ void testDefaultConstructor() {
+ assertNotNull(meta);
+ assertNotNull(meta.getFilesList());
+ assertNotNull(meta.getFilterItemList());
+ assertTrue(meta.getFilesList().isEmpty());
+ assertTrue(meta.getFilterItemList().isEmpty());
+ }
+
+ @Test
+ void testSetDefault() {
+ meta.setDefault();
+
+ assertFalse(meta.isDoNotFailIfNoFile());
+ assertTrue(meta.isAddResultFile());
+ assertFalse(meta.isFileField());
+ assertFalse(meta.isIncludeRowNumber());
+ assertEquals("", meta.getRowNumberField());
+ assertEquals("", meta.getDynamicFilenameField());
+ assertEquals("", meta.getDynamicWildcardField());
+ assertFalse(meta.isDynamicIncludeSubFolders());
+ assertEquals("", meta.getDynamicExcludeWildcardField());
+ assertFalse(meta.isRaiseAnExceptionIfNoFile());
+ assertEquals(0, meta.getRowLimit());
+
+ // Check that default filter item is added
+ assertEquals(1, meta.getFilterItemList().size());
+ assertEquals("all_files",
meta.getFilterItemList().get(0).getFileTypeFilterSelection());
+ }
+
+ @Test
+ void testClone() {
+ meta.setIncludeRowNumber(true);
+ meta.setRowNumberField("rowNum");
+ meta.setFileField(true);
+ meta.setDynamicFilenameField("filename");
+ meta.setDynamicWildcardField("wildcard");
+ meta.setDynamicExcludeWildcardField("exclude");
+ meta.setDynamicIncludeSubFolders(true);
+ meta.setAddResultFile(false);
+ meta.setDoNotFailIfNoFile(true);
+ meta.setRaiseAnExceptionIfNoFile(true);
+ meta.setRowLimit(100);
+
+ GetFileNamesMeta cloned = (GetFileNamesMeta) meta.clone();
+
+ assertNotSame(meta, cloned);
+ assertEquals(meta.isIncludeRowNumber(), cloned.isIncludeRowNumber());
+ assertEquals(meta.getRowNumberField(), cloned.getRowNumberField());
+ assertEquals(meta.isFileField(), cloned.isFileField());
+ assertEquals(meta.getDynamicFilenameField(),
cloned.getDynamicFilenameField());
+ assertEquals(meta.getDynamicWildcardField(),
cloned.getDynamicWildcardField());
+ assertEquals(meta.getDynamicExcludeWildcardField(),
cloned.getDynamicExcludeWildcardField());
+ assertEquals(meta.isDynamicIncludeSubFolders(),
cloned.isDynamicIncludeSubFolders());
+ assertEquals(meta.isAddResultFile(), cloned.isAddResultFile());
+ assertEquals(meta.isDoNotFailIfNoFile(), cloned.isDoNotFailIfNoFile());
+ assertEquals(meta.isRaiseAnExceptionIfNoFile(),
cloned.isRaiseAnExceptionIfNoFile());
+ assertEquals(meta.getRowLimit(), cloned.getRowLimit());
+ }
+
+ @Test
+ void testGetRequiredFilesDesc() {
+ assertEquals("N", meta.getRequiredFilesDesc(null));
+ assertEquals("N", meta.getRequiredFilesDesc("N"));
+ assertEquals("Y", meta.getRequiredFilesDesc("Y"));
+ assertEquals("N", meta.getRequiredFilesDesc("invalid"));
+ }
+
+ @Test
+ void testFilesListOperations() {
+ List<FileItem> filesList = new ArrayList<>();
+ filesList.add(new FileItem("file1.txt", "*.txt", "*.tmp", "Y", "N"));
+ filesList.add(new FileItem("file2.txt", "*.txt", "*.tmp", "N", "Y"));
+
+ meta.setFilesList(filesList);
+
+ assertEquals(2, meta.getFilesList().size());
+ assertEquals("file1.txt", meta.getFilesList().get(0).getFileName());
+ assertEquals("file2.txt", meta.getFilesList().get(1).getFileName());
+ }
+
+ @Test
+ void testFilterItemListOperations() {
+ List<FilterItem> filterList = new ArrayList<>();
+ filterList.add(new FilterItem("FILES_ONLY"));
+ filterList.add(new FilterItem("FILES_AND_FOLDERS"));
+
+ meta.setFilterItemList(filterList);
+
+ assertEquals(2, meta.getFilterItemList().size());
+ assertEquals("FILES_ONLY",
meta.getFilterItemList().get(0).getFileTypeFilterSelection());
+ assertEquals("FILES_AND_FOLDERS",
meta.getFilterItemList().get(1).getFileTypeFilterSelection());
+ }
+
+ @Test
+ void testBooleanSettersAndGetters() {
+ // Test includeRowNumber
+ meta.setIncludeRowNumber(true);
+ assertTrue(meta.isIncludeRowNumber());
+ meta.setIncludeRowNumber(false);
+ assertFalse(meta.isIncludeRowNumber());
+
+ // Test fileField
+ meta.setFileField(true);
+ assertTrue(meta.isFileField());
+ meta.setFileField(false);
+ assertFalse(meta.isFileField());
+
+ // Test dynamicIncludeSubFolders
+ meta.setDynamicIncludeSubFolders(true);
+ assertTrue(meta.isDynamicIncludeSubFolders());
+ meta.setDynamicIncludeSubFolders(false);
+ assertFalse(meta.isDynamicIncludeSubFolders());
+
+ // Test addResultFile
+ meta.setAddResultFile(true);
+ assertTrue(meta.isAddResultFile());
+ meta.setAddResultFile(false);
+ assertFalse(meta.isAddResultFile());
+
+ // Test doNotFailIfNoFile
+ meta.setDoNotFailIfNoFile(true);
+ assertTrue(meta.isDoNotFailIfNoFile());
+ meta.setDoNotFailIfNoFile(false);
+ assertFalse(meta.isDoNotFailIfNoFile());
+
+ // Test raiseAnExceptionIfNoFile
+ meta.setRaiseAnExceptionIfNoFile(true);
+ assertTrue(meta.isRaiseAnExceptionIfNoFile());
+ meta.setRaiseAnExceptionIfNoFile(false);
+ assertFalse(meta.isRaiseAnExceptionIfNoFile());
+ }
+
+ @Test
+ void testStringSettersAndGetters() {
+ // Test rowNumberField
+ meta.setRowNumberField("rowNum");
+ assertEquals("rowNum", meta.getRowNumberField());
+
+ // Test dynamicFilenameField
+ meta.setDynamicFilenameField("filename");
+ assertEquals("filename", meta.getDynamicFilenameField());
+
+ // Test dynamicWildcardField
+ meta.setDynamicWildcardField("wildcard");
+ assertEquals("wildcard", meta.getDynamicWildcardField());
+
+ // Test dynamicExcludeWildcardField
+ meta.setDynamicExcludeWildcardField("exclude");
+ assertEquals("exclude", meta.getDynamicExcludeWildcardField());
+ }
+
+ @Test
+ void stRowLimit() {
+ meta.setRowLimit(100);
+ assertEquals(100, meta.getRowLimit());
+
+ meta.setRowLimit(0);
+ assertEquals(0, meta.getRowLimit());
+
+ meta.setRowLimit(-1);
+ assertEquals(-1, meta.getRowLimit());
+ }
+
+ @Test
+ void testSupportsErrorHandling() {
+ assertTrue(meta.supportsErrorHandling());
+ }
+
+ @Test
+ void testConstants() {
+ assertNotNull(GetFileNamesMeta.RequiredFilesDesc);
+ assertNotNull(GetFileNamesMeta.RequiredFilesCode);
+ assertEquals(2, GetFileNamesMeta.RequiredFilesDesc.length);
+ assertEquals(2, GetFileNamesMeta.RequiredFilesCode.length);
+ assertEquals("N", GetFileNamesMeta.RequiredFilesCode[0]);
+ assertEquals("Y", GetFileNamesMeta.RequiredFilesCode[1]);
+ }
+}
diff --git
a/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesMetaTest.java
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesMetaTest.java
index 18b2f24071..55d6f56594 100644
---
a/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesMetaTest.java
+++
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesMetaTest.java
@@ -116,12 +116,12 @@ class GetFileNamesMetaTest implements
IInitializer<ITransformMeta> {
validatorFactory.registerValidator(
validatorFactory.getName(FileItem.class),
- new ObjectValidator<FileItem>(
+ new ObjectValidator<>(
validatorFactory,
FileItem.class,
Arrays.asList(
"name", "filemask", "exclude_filemask", "file_required",
"include_subfolders"),
- new HashMap<String, String>() {
+ new HashMap<>() {
{
put("name", "getFileName");
put("filemask", "getFileMask");
@@ -130,7 +130,7 @@ class GetFileNamesMetaTest implements
IInitializer<ITransformMeta> {
put("include_subfolders", "getIncludeSubFolders");
}
},
- new HashMap<String, String>() {
+ new HashMap<>() {
{
put("name", "setFileName");
put("filemask", "setFileMask");
@@ -142,20 +142,20 @@ class GetFileNamesMetaTest implements
IInitializer<ITransformMeta> {
validatorFactory.registerValidator(
validatorFactory.getName(List.class, FileItem.class),
- new ListLoadSaveValidator<FileItem>(new FileItemLoadSaveValidator()));
+ new ListLoadSaveValidator<>(new FileItemLoadSaveValidator()));
validatorFactory.registerValidator(
validatorFactory.getName(FilterItem.class),
- new ObjectValidator<FilterItem>(
+ new ObjectValidator<>(
validatorFactory,
FilterItem.class,
Arrays.asList("filterfiletype"),
- new HashMap<String, String>() {
+ new HashMap<>() {
{
put("filterfiletype", "getFileTypeFilterSelection");
}
},
- new HashMap<String, String>() {
+ new HashMap<>() {
{
put("filterfiletype", "setFileTypeFilterSelection");
}
@@ -163,7 +163,7 @@ class GetFileNamesMetaTest implements
IInitializer<ITransformMeta> {
validatorFactory.registerValidator(
validatorFactory.getName(List.class, FilterItem.class),
- new ListLoadSaveValidator<FilterItem>(new
FilterItemLoadSaveValidator()));
+ new ListLoadSaveValidator<>(new FilterItemLoadSaveValidator()));
}
@Test
@@ -198,7 +198,7 @@ class GetFileNamesMetaTest implements
IInitializer<ITransformMeta> {
}
}
- public class FilterItemLoadSaveValidator implements
IFieldLoadSaveValidator<FilterItem> {
+ public static class FilterItemLoadSaveValidator implements
IFieldLoadSaveValidator<FilterItem> {
final Random rand = new Random();
@Override
@@ -220,7 +220,7 @@ class GetFileNamesMetaTest implements
IInitializer<ITransformMeta> {
}
}
- public class FileItemLoadSaveValidator implements
IFieldLoadSaveValidator<FileItem> {
+ public static class FileItemLoadSaveValidator implements
IFieldLoadSaveValidator<FileItem> {
final Random rand = new Random();
@Override
diff --git
a/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesTransformTest.java
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesTransformTest.java
new file mode 100644
index 0000000000..f404a4086a
--- /dev/null
+++
b/plugins/transforms/getfilenames/src/test/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesTransformTest.java
@@ -0,0 +1,239 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hop.pipeline.transforms.getfilenames;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import org.apache.hop.core.HopEnvironment;
+import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.fileinput.FileInputList;
+import org.apache.hop.core.logging.ILoggingObject;
+import org.apache.hop.junit.rules.RestoreHopEngineEnvironmentExtension;
+import org.apache.hop.pipeline.transforms.mock.TransformMockHelper;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+/** Test class for GetFileNames transform */
+class GetFileNamesTransformTest {
+
+ @RegisterExtension
+ static RestoreHopEngineEnvironmentExtension env = new
RestoreHopEngineEnvironmentExtension();
+
+ private TransformMockHelper<GetFileNamesMeta, GetFileNamesData> mockHelper;
+
+ @BeforeEach
+ void setUp() throws HopException {
+ HopEnvironment.init();
+
+ mockHelper =
+ new TransformMockHelper<>("GetFileNames", GetFileNamesMeta.class,
GetFileNamesData.class);
+ when(mockHelper.logChannelFactory.create(any(), any(ILoggingObject.class)))
+ .thenReturn(mockHelper.iLogChannel);
+ when(mockHelper.pipeline.isRunning()).thenReturn(true);
+ }
+
+ @AfterEach
+ void tearDown() {
+ mockHelper.cleanUp();
+ }
+
+ @Test
+ void testConstructor() {
+ GetFileNames transform =
+ new GetFileNames(
+ mockHelper.transformMeta,
+ mockHelper.iTransformMeta,
+ mockHelper.iTransformData,
+ 0,
+ mockHelper.pipelineMeta,
+ mockHelper.pipeline);
+
+ assertNotNull(transform);
+ assertEquals(mockHelper.transformMeta, transform.getTransformMeta());
+ assertEquals(mockHelper.iTransformMeta, transform.getMeta());
+ assertEquals(mockHelper.iTransformData, transform.getData());
+ assertEquals(0, transform.getCopyNr());
+ assertEquals(mockHelper.pipelineMeta, transform.getPipelineMeta());
+ assertEquals(mockHelper.pipeline, transform.getPipeline());
+ }
+
+ @Test
+ void testInitWithFileFieldFalse() {
+ // Setup meta for non-file field mode
+ GetFileNamesMeta meta = new GetFileNamesMeta();
+ meta.setFileField(false);
+ meta.setDefault();
+
+ // Add a file item to the list
+ meta.getFilesList().add(new FileItem("/tmp/test.txt", "*.txt", "*.tmp",
"Y", "N"));
+
+ GetFileNamesData data = new GetFileNamesData();
+
+ GetFileNames transform =
+ new GetFileNames(
+ mockHelper.transformMeta, meta, data, 0, mockHelper.pipelineMeta,
mockHelper.pipeline);
+
+ // Mock the file list creation
+ FileInputList mockFileList = mock(FileInputList.class);
+ when(mockFileList.nrOfFiles()).thenReturn(1);
+ when(mockFileList.getNonExistentFiles()).thenReturn(new ArrayList<>());
+ when(mockFileList.getNonAccessibleFiles()).thenReturn(new ArrayList<>());
+
+ GetFileNames spyTransform = spy(transform);
+ // Mock the meta.getFileList method instead
+ GetFileNamesMeta spyMeta = spy(meta);
+ doReturn(mockFileList).when(spyMeta).getFileList(any());
+
+ boolean result = spyTransform.init();
+
+ assertTrue(result);
+ assertNotNull(data.outputRowMeta);
+ assertTrue(data.nrTransformFields > 0);
+ }
+
+ @Test
+ void testInitWithFileFieldTrue() {
+ // Setup meta for file field mode
+ GetFileNamesMeta meta = new GetFileNamesMeta();
+ meta.setFileField(true);
+ meta.setDefault();
+ meta.setDynamicFilenameField("filename");
+
+ GetFileNamesData data = new GetFileNamesData();
+
+ GetFileNames transform =
+ new GetFileNames(
+ mockHelper.transformMeta, meta, data, 0, mockHelper.pipelineMeta,
mockHelper.pipeline);
+
+ boolean result = transform.init();
+
+ assertTrue(result);
+ assertNotNull(data.outputRowMeta);
+ assertEquals(0, data.filessize);
+ }
+
+ @Test
+ void testProcessRowWithNoInput() throws HopException {
+ // Setup
+ GetFileNamesMeta meta = new GetFileNamesMeta();
+ meta.setFileField(false);
+ meta.setDefault();
+
+ GetFileNamesData data = new GetFileNamesData();
+ data.filessize = 0;
+
+ GetFileNames transform =
+ new GetFileNames(
+ mockHelper.transformMeta, meta, data, 0, mockHelper.pipelineMeta,
mockHelper.pipeline);
+
+ // Add empty row set (no rows)
+ transform.addRowSetToInputRowSets(mockHelper.getMockInputRowSet());
+
+ // Execute
+ boolean result = transform.processRow();
+
+ // Verify
+ assertFalse(result); // Should return false when no more input
+ }
+
+ @Test
+ void testDispose() {
+ GetFileNamesMeta meta = new GetFileNamesMeta();
+ GetFileNamesData data = new GetFileNamesData();
+
+ GetFileNames transform =
+ new GetFileNames(
+ mockHelper.transformMeta, meta, data, 0, mockHelper.pipelineMeta,
mockHelper.pipeline);
+
+ // Test dispose with null file
+ transform.dispose();
+ // Should not throw exception
+
+ // Test dispose with mock file
+ data.file = mock(org.apache.commons.vfs2.FileObject.class);
+ transform.dispose();
+ // Should not throw exception
+ }
+
+ @Test
+ void testBuildEmptyRow() {
+ GetFileNamesMeta meta = new GetFileNamesMeta();
+ GetFileNamesData data = new GetFileNamesData();
+ data.outputRowMeta = new org.apache.hop.core.row.RowMeta();
+ data.outputRowMeta.addValueMeta(new
org.apache.hop.core.row.value.ValueMetaString("field1"));
+ data.outputRowMeta.addValueMeta(new
org.apache.hop.core.row.value.ValueMetaString("field2"));
+
+ GetFileNames transform =
+ new GetFileNames(
+ mockHelper.transformMeta, meta, data, 0, mockHelper.pipelineMeta,
mockHelper.pipeline);
+
+ // Use reflection to access private method
+ try {
+ java.lang.reflect.Method method =
GetFileNames.class.getDeclaredMethod("buildEmptyRow");
+ method.setAccessible(true);
+ Object[] row = (Object[]) method.invoke(transform);
+
+ assertNotNull(row);
+ // The output row meta has more fields than just the 2 we added due to
the transform's default
+ // fields
+ assertTrue(row.length >= 2);
+ assertNull(row[0]);
+ assertNull(row[1]);
+ } catch (Exception e) {
+ fail("Failed to access buildEmptyRow method: " + e.getMessage());
+ }
+ }
+
+ @Test
+ void testConstants() {
+ // Use reflection to access private constants
+ try {
+ java.lang.reflect.Field field1 =
GetFileNames.class.getDeclaredField("CONST_LOG_NO_FILE");
+ field1.setAccessible(true);
+ String constLogNoFile = (String) field1.get(null);
+ assertEquals("GetFileNames.Log.NoFile", constLogNoFile);
+
+ java.lang.reflect.Field field2 =
+ GetFileNames.class.getDeclaredField("CONST_ERROR_FINDING_FIELD");
+ field2.setAccessible(true);
+ String constErrorFindingField = (String) field2.get(null);
+ assertEquals("GetFileNames.Log.ErrorFindingField",
constErrorFindingField);
+
+ java.lang.reflect.Field field3 =
+ GetFileNames.class.getDeclaredField("CONST_COULD_NOT_FIND_FIELD");
+ field3.setAccessible(true);
+ String constCouldNotFindField = (String) field3.get(null);
+ assertEquals("GetFileNames.Exception.CouldnotFindField",
constCouldNotFindField);
+ } catch (Exception e) {
+ fail("Failed to access constants: " + e.getMessage());
+ }
+ }
+}