This is an automated email from the ASF dual-hosted git repository.

SvenO3 pushed a commit to branch 
4564-ensure-correct-escaping-and-quoting-of-string-values-in-csv-export
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to 
refs/heads/4564-ensure-correct-escaping-and-quoting-of-string-values-in-csv-export
 by this push:
     new be82944796 Add tests
be82944796 is described below

commit be829447965a2ddc254a11c962e6f5e264e2d502
Author: Sven Oehler <[email protected]>
AuthorDate: Tue Jun 23 10:04:53 2026 +0200

    Add tests
---
 .../export/TestConfiguredCsvOutputWriter.java      | 24 +++++++++++++++
 .../dataexplorer/export/TestCsvItemGenerator.java  | 34 ++++++++++++++++++++++
 2 files changed, 58 insertions(+)

diff --git 
a/streampipes-data-explorer-export/src/test/java/org/apache/streampipes/dataexplorer/export/TestConfiguredCsvOutputWriter.java
 
b/streampipes-data-explorer-export/src/test/java/org/apache/streampipes/dataexplorer/export/TestConfiguredCsvOutputWriter.java
index 15a6b66e28..60c3b67388 100644
--- 
a/streampipes-data-explorer-export/src/test/java/org/apache/streampipes/dataexplorer/export/TestConfiguredCsvOutputWriter.java
+++ 
b/streampipes-data-explorer-export/src/test/java/org/apache/streampipes/dataexplorer/export/TestConfiguredCsvOutputWriter.java
@@ -25,8 +25,10 @@ import org.junit.jupiter.api.Test;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
 import java.util.HashMap;
 
+import static 
org.apache.streampipes.model.datalake.param.SupportedRestQueryParams.QP_CSV_DELIMITER;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class TestConfiguredCsvOutputWriter extends TestConfiguredOutputWriter {
@@ -49,4 +51,26 @@ public class TestConfiguredCsvOutputWriter extends 
TestConfiguredOutputWriter {
       assertEquals(Expected, outputStream.toString(StandardCharsets.UTF_8));
     }
   }
+
+  @Test
+  public void testCsvOutputWriterEscapesConfiguredDelimiter() throws 
IOException {
+    var writer = new ConfiguredCsvOutputWriter();
+    var params = new HashMap<String, String>();
+    params.put(QP_CSV_DELIMITER, "semicolon");
+    writer.configure(null, new ProvidedRestQueryParams(null, params), true);
+    var columns = Arrays.asList("time", "string;header");
+    var row = Arrays.<Object>asList(1781515964488L, "abc=;,");
+
+    try (var outputStream = new ByteArrayOutputStream()) {
+      writer.beforeFirstItem(outputStream);
+
+      writer.writeItem(outputStream, row, columns, true);
+
+      writer.afterLastItem(outputStream);
+      assertEquals(
+          "time;\"string;header\"\n1781515964488;\"abc=;,\"\n",
+          outputStream.toString(StandardCharsets.UTF_8)
+      );
+    }
+  }
 }
diff --git 
a/streampipes-data-explorer-export/src/test/java/org/apache/streampipes/dataexplorer/export/TestCsvItemGenerator.java
 
b/streampipes-data-explorer-export/src/test/java/org/apache/streampipes/dataexplorer/export/TestCsvItemGenerator.java
index d1b088bcd3..2efa579c41 100644
--- 
a/streampipes-data-explorer-export/src/test/java/org/apache/streampipes/dataexplorer/export/TestCsvItemGenerator.java
+++ 
b/streampipes-data-explorer-export/src/test/java/org/apache/streampipes/dataexplorer/export/TestCsvItemGenerator.java
@@ -22,6 +22,8 @@ import 
org.apache.streampipes.dataexplorer.export.item.CsvItemGenerator;
 
 import org.junit.jupiter.api.Test;
 
+import java.util.Arrays;
+
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class TestCsvItemGenerator extends TestItemGenerator {
@@ -46,4 +48,36 @@ public class TestCsvItemGenerator extends TestItemGenerator {
 
     assertEquals(ExpectedSemicolon, result);
   }
+
+  @Test
+  public void testCsvItemWriterEscapesSpecialCharactersCommaSeparated() {
+    var writer = new CsvItemGenerator(",");
+    var row = Arrays.<Object>asList(
+        1668578077051L,
+        "abc=;,",
+        "quoted \"value\"",
+        "line\nbreak"
+    );
+    var columns = Arrays.asList("time", "string", "quoted", "multiline");
+
+    String result = writer.createItem(row, columns);
+
+    assertEquals("1668578077051,\"abc=;,\",\"quoted 
\"\"value\"\"\",\"line\nbreak\"", result);
+  }
+
+  @Test
+  public void testCsvItemWriterEscapesSpecialCharactersSemicolonSeparated() {
+    var writer = new CsvItemGenerator(";");
+    var row = Arrays.<Object>asList(
+        1668578077051L,
+        "abc=;,",
+        "quoted \"value\"",
+        "line\nbreak"
+    );
+    var columns = Arrays.asList("time", "string", "quoted", "multiline");
+
+    String result = writer.createItem(row, columns);
+
+    assertEquals("1668578077051;\"abc=;,\";\"quoted 
\"\"value\"\"\";\"line\nbreak\"", result);
+  }
 }

Reply via email to