You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by pv...@apache.org on 2019/08/08 19:39:56 UTC
[nifi] branch master updated: NIFI-6529 Updated
TestFormatUtils.testFormatDataSize to use DecimalFormatSymbols when
verifying results of FormatUtils.formatDataSize
This is an automated email from the ASF dual-hosted git repository.
pvillard pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/master by this push:
new 403c07d NIFI-6529 Updated TestFormatUtils.testFormatDataSize to use DecimalFormatSymbols when verifying results of FormatUtils.formatDataSize
403c07d is described below
commit 403c07d4e8462b5ffc6b50ed9f63a9095c94daed
Author: Jeff Storck <jt...@gmail.com>
AuthorDate: Mon Aug 5 15:25:13 2019 -0400
NIFI-6529 Updated TestFormatUtils.testFormatDataSize to use DecimalFormatSymbols when verifying results of FormatUtils.formatDataSize
NIFI-6529 Updated tests that fail with non en_US locales
Signed-off-by: Pierre Villard <pi...@gmail.com>
This closes #3639.
---
.../org/apache/nifi/processor/TestFormatUtils.java | 16 +-
.../TestPutElasticsearchHttpRecord.java | 21 +-
.../processors/image/ExtractImageMetadataTest.java | 3 +-
.../poi/ConvertExcelToCSVProcessorTest.java | 222 ++++++++++++++-------
4 files changed, 171 insertions(+), 91 deletions(-)
diff --git a/nifi-commons/nifi-utils/src/test/java/org/apache/nifi/processor/TestFormatUtils.java b/nifi-commons/nifi-utils/src/test/java/org/apache/nifi/processor/TestFormatUtils.java
index fc80d85..deb4b9e 100644
--- a/nifi-commons/nifi-utils/src/test/java/org/apache/nifi/processor/TestFormatUtils.java
+++ b/nifi-commons/nifi-utils/src/test/java/org/apache/nifi/processor/TestFormatUtils.java
@@ -19,6 +19,7 @@ package org.apache.nifi.processor;
import org.apache.nifi.util.FormatUtils;
import org.junit.Test;
+import java.text.DecimalFormatSymbols;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertEquals;
@@ -87,18 +88,19 @@ public class TestFormatUtils {
@Test
public void testFormatDataSize() {
+ DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
assertEquals("0 bytes", FormatUtils.formatDataSize(0d));
- assertEquals("10.4 bytes", FormatUtils.formatDataSize(10.4d));
- assertEquals("1,024 bytes", FormatUtils.formatDataSize(1024d));
+ assertEquals(String.format("10%s4 bytes", decimalFormatSymbols.getDecimalSeparator()), FormatUtils.formatDataSize(10.4d));
+ assertEquals(String.format("1%s024 bytes", decimalFormatSymbols.getGroupingSeparator()), FormatUtils.formatDataSize(1024d));
assertEquals("1 KB", FormatUtils.formatDataSize(1025d));
- assertEquals("1.95 KB", FormatUtils.formatDataSize(2000d));
- assertEquals("195.31 KB", FormatUtils.formatDataSize(200_000d));
+ assertEquals(String.format("1%s95 KB", decimalFormatSymbols.getDecimalSeparator()), FormatUtils.formatDataSize(2000d));
+ assertEquals(String.format("195%s31 KB", decimalFormatSymbols.getDecimalSeparator()), FormatUtils.formatDataSize(200_000d));
- assertEquals("190.73 MB", FormatUtils.formatDataSize(200_000_000d));
+ assertEquals(String.format("190%s73 MB", decimalFormatSymbols.getDecimalSeparator()), FormatUtils.formatDataSize(200_000_000d));
- assertEquals("186.26 GB", FormatUtils.formatDataSize(200_000_000_000d));
+ assertEquals(String.format("186%s26 GB", decimalFormatSymbols.getDecimalSeparator()), FormatUtils.formatDataSize(200_000_000_000d));
- assertEquals("181.9 TB", FormatUtils.formatDataSize(200_000_000_000_000d));
+ assertEquals(String.format("181%s9 TB", decimalFormatSymbols.getDecimalSeparator()), FormatUtils.formatDataSize(200_000_000_000_000d));
}
}
diff --git a/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestPutElasticsearchHttpRecord.java b/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestPutElasticsearchHttpRecord.java
index 1df672f..afe2055 100644
--- a/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestPutElasticsearchHttpRecord.java
+++ b/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestPutElasticsearchHttpRecord.java
@@ -45,6 +45,9 @@ import java.net.ConnectException;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -68,34 +71,36 @@ public class TestPutElasticsearchHttpRecord {
@Test
public void testPutElasticSearchOnTriggerIndex() throws IOException {
PutElasticsearchHttpRecordTestProcessor processor = new PutElasticsearchHttpRecordTestProcessor(false);
+ DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("h:m a");
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("d/M/YYYY h:m a");
processor.setRecordChecks(record -> {
assertEquals(1, record.get("id"));
assertEquals("reç1", record.get("name"));
assertEquals(101, record.get("code"));
assertEquals("20/12/2018", record.get("date"));
- assertEquals("6:55 PM", record.get("time"));
- assertEquals("20/12/2018 6:55 PM", record.get("ts"));
+ assertEquals(LocalTime.of(18, 55).format(timeFormatter), record.get("time"));
+ assertEquals(LocalDateTime.of(2018, 12, 20, 18, 55).format(dateTimeFormatter), record.get("ts"));
}, record -> {
assertEquals(2, record.get("id"));
assertEquals("reç2", record.get("name"));
assertEquals(102, record.get("code"));
assertEquals("20/12/2018", record.get("date"));
- assertEquals("6:55 PM", record.get("time"));
- assertEquals("20/12/2018 6:55 PM", record.get("ts"));
+ assertEquals(LocalTime.of(18, 55).format(timeFormatter), record.get("time"));
+ assertEquals(LocalDateTime.of(2018, 12, 20, 18, 55).format(dateTimeFormatter), record.get("ts"));
}, record -> {
assertEquals(3, record.get("id"));
assertEquals("reç3", record.get("name"));
assertEquals(103, record.get("code"));
assertEquals("20/12/2018", record.get("date"));
- assertEquals("6:55 PM", record.get("time"));
- assertEquals("20/12/2018 6:55 PM", record.get("ts"));
+ assertEquals(LocalTime.of(18, 55).format(timeFormatter), record.get("time"));
+ assertEquals(LocalDateTime.of(2018, 12, 20, 18, 55).format(dateTimeFormatter), record.get("ts"));
}, record -> {
assertEquals(4, record.get("id"));
assertEquals("reç4", record.get("name"));
assertEquals(104, record.get("code"));
assertEquals("20/12/2018", record.get("date"));
- assertEquals("6:55 PM", record.get("time"));
- assertEquals("20/12/2018 6:55 PM", record.get("ts"));
+ assertEquals(LocalTime.of(18, 55).format(timeFormatter), record.get("time"));
+ assertEquals(LocalDateTime.of(2018, 12, 20, 18, 55).format(dateTimeFormatter), record.get("ts"));
});
runner = TestRunners.newTestRunner(processor); // no failures
generateTestData();
diff --git a/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/test/java/org/apache/nifi/processors/image/ExtractImageMetadataTest.java b/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/test/java/org/apache/nifi/processors/image/ExtractImageMetadataTest.java
index ee45f76..40af4ae 100644
--- a/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/test/java/org/apache/nifi/processors/image/ExtractImageMetadataTest.java
+++ b/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/test/java/org/apache/nifi/processors/image/ExtractImageMetadataTest.java
@@ -27,6 +27,7 @@ import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.text.DecimalFormatSymbols;
import java.util.Map;
import static org.junit.Assert.assertEquals;
@@ -93,7 +94,7 @@ public class ExtractImageMetadataTest {
assertEquals("8", attributes.get(PNG_HEADER + "IHDR.Image Width"));
assertEquals("12", attributes.get(PNG_HEADER + "IHDR.Image Height"));
- assertEquals("0.455", attributes.get(PNG_HEADER + "gAMA.Image Gamma"));
+ assertEquals(String.format("0%s455", DecimalFormatSymbols.getInstance().getDecimalSeparator()), attributes.get(PNG_HEADER + "gAMA.Image Gamma"));
assertEquals("Deflate", attributes.get(PNG_HEADER + "IHDR.Compression Type"));
assertEquals("No Interlace", attributes.get(PNG_HEADER + "IHDR.Interlace Method"));
assertEquals("Perceptual", attributes.get(PNG_HEADER + "sRGB.sRGB Rendering Intent"));
diff --git a/nifi-nar-bundles/nifi-poi-bundle/nifi-poi-processors/src/test/java/org/apache/nifi/processors/poi/ConvertExcelToCSVProcessorTest.java b/nifi-nar-bundles/nifi-poi-bundle/nifi-poi-processors/src/test/java/org/apache/nifi/processors/poi/ConvertExcelToCSVProcessorTest.java
index 5314781..828e94c 100644
--- a/nifi-nar-bundles/nifi-poi-bundle/nifi-poi-processors/src/test/java/org/apache/nifi/processors/poi/ConvertExcelToCSVProcessorTest.java
+++ b/nifi-nar-bundles/nifi-poi-bundle/nifi-poi-processors/src/test/java/org/apache/nifi/processors/poi/ConvertExcelToCSVProcessorTest.java
@@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
+import java.text.DecimalFormatSymbols;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
@@ -125,15 +126,24 @@ public class ConvertExcelToCSVProcessorTest {
assertTrue(rowsSheet == 9);
LocalDateTime localDt = LocalDateTime.of(2017, 1, 1, 12, 0, 0);
+ DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
+ char decimalSeparator = decimalFormatSymbols.getDecimalSeparator();
+ char groupingSeparator = decimalFormatSymbols.getGroupingSeparator();
ff.assertContentEquals("Numbers,Timestamps,Money\n" +
- "1234.456," + DateTimeFormatter.ofPattern("d/M/yy").format(localDt) + ",$ 123.45\n" +
- "1234.46," + DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + ",£ 123.45\n" +
- "1234.5,\"" + DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy").format(localDt) + "\",¥ 123.45\n" +
- "\"1,234.46\"," + DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + ",\"$ 1,023.45\"\n" +
- "\"1,234.4560\"," + DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + ",\"£ 1,023.45\"\n" +
- "9.88E+08," + DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + ",\"¥ 1,023.45\"\n" +
- "9.877E+08,,\n" +
- "9.8765E+08,,\n");
+ addQuotingIfNeeded(String.format("1234%1$s456", decimalSeparator)) + "," + DateTimeFormatter.ofPattern("d/M/yy").format(localDt) + "," +
+ addQuotingIfNeeded(String.format("$ 123%1$s45", decimalSeparator)) + "\n" +
+ addQuotingIfNeeded(String.format("1234%1$s46", decimalSeparator)) + "," + DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + "," +
+ addQuotingIfNeeded(String.format("£ 123%1$s45", decimalSeparator)) + "\n" +
+ addQuotingIfNeeded(String.format("1234%1$s5", decimalSeparator)) + ",\"" + DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy").format(localDt) + "\"," +
+ addQuotingIfNeeded(String.format("¥ 123%1$s45", decimalSeparator)) + "\n" +
+ addQuotingIfNeeded(String.format("1%2$s234%1$s46", decimalSeparator, groupingSeparator)) + "," + DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + "," +
+ addQuotingIfNeeded(String.format("$ 1%2$s023%1$s45", decimalSeparator, groupingSeparator)) + "\n" +
+ addQuotingIfNeeded(String.format("1%2$s234%1$s4560", decimalSeparator, groupingSeparator)) + "," + DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + "," +
+ addQuotingIfNeeded(String.format("£ 1%2$s023%1$s45", decimalSeparator, groupingSeparator)) + "\n" +
+ addQuotingIfNeeded(String.format("9%1$s88E+08", decimalSeparator)) + "," + DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + "," +
+ addQuotingIfNeeded(String.format("¥ 1%2$s023%1$s45", decimalSeparator, groupingSeparator)) + "\n" +
+ addQuotingIfNeeded(String.format("9%1$s877E+08", decimalSeparator)) + ",,\n" +
+ addQuotingIfNeeded(String.format("9%1$s8765E+08", decimalSeparator)) + ",,\n");
}
@Test
@@ -154,13 +164,16 @@ public class ConvertExcelToCSVProcessorTest {
assertEquals("Row count does match expected value.", "7", rowsSheet.toString());
LocalDateTime localDt = LocalDateTime.of(2017, 1, 1, 12, 0, 0);
- ff.assertContentEquals("1234.46," + DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + ",£ 123.45\n" +
- "1234.5," + DateTimeFormatter.ofPattern("EEEE\\, MMMM dd\\, yyyy").format(localDt) + ",¥ 123.45\n" +
- "1\\,234.46," + DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + ",$ 1\\,023.45\n" +
- "1\\,234.4560," + DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + ",£ 1\\,023.45\n" +
- "9.88E+08," + DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + ",¥ 1\\,023.45\n" +
- "9.877E+08,,\n" +
- "9.8765E+08,,\n");
+ DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
+ String decimalSeparator = decimalFormatSymbols.getDecimalSeparator() == ',' ? "\\," : String.valueOf(decimalFormatSymbols.getDecimalSeparator());
+ String groupingSeparator = decimalFormatSymbols.getGroupingSeparator() == ',' ? "\\," : String.valueOf(decimalFormatSymbols.getGroupingSeparator());
+ ff.assertContentEquals(String.format("1234%1$s46," + DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + ",£ 123%1$s45\n" +
+ "1234%1$s5," + DateTimeFormatter.ofPattern("EEEE\\, MMMM dd\\, yyyy").format(localDt) + ",¥ 123%1$s45\n" +
+ "1%2$s234%1$s46," + DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + ",$ 1%2$s023%1$s45\n" +
+ "1%2$s234%1$s4560," + DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + ",£ 1%2$s023%1$s45\n" +
+ "9%1$s88E+08," + DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + ",¥ 1%2$s023%1$s45\n" +
+ "9%1$s877E+08,,\n" +
+ "9%1$s8765E+08,,\n", decimalSeparator, groupingSeparator));
}
@Test
@@ -183,13 +196,16 @@ public class ConvertExcelToCSVProcessorTest {
assertEquals("Row count does match expected value.", "7", rowsSheet.toString());
LocalDateTime localDt = LocalDateTime.of(2017, 1, 1, 12, 0, 0);
- ff.assertContentEquals("1234.46," + DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + ",£ 123.45\n" +
- "1234.5," + DateTimeFormatter.ofPattern("EEEE\\, MMMM dd\\, yyyy").format(localDt) + ",¥ 123.45\n" +
- "1\\,234.46," + DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + ",$ 1\\,023.45\n" +
- "1\\,234.4560," + DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + ",£ 1\\,023.45\n" +
- "9.88E+08," + DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + ",¥ 1\\,023.45\n" +
- "9.877E+08,,\n" +
- "9.8765E+08,,\n");
+ DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
+ String decimalSeparator = decimalFormatSymbols.getDecimalSeparator() == ',' ? "\\," : String.valueOf(decimalFormatSymbols.getDecimalSeparator());
+ String groupingSeparator = decimalFormatSymbols.getGroupingSeparator() == ',' ? "\\," : String.valueOf(decimalFormatSymbols.getGroupingSeparator());
+ ff.assertContentEquals(String.format("1234%1$s46," + DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + ",£ 123%1$s45\n" +
+ "1234%1$s5," + DateTimeFormatter.ofPattern("EEEE\\, MMMM dd\\, yyyy").format(localDt) + ",¥ 123%1$s45\n" +
+ "1%2$s234%1$s46," + DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + ",$ 1%2$s023%1$s45\n" +
+ "1%2$s234%1$s4560," + DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + ",£ 1%2$s023%1$s45\n" +
+ "9%1$s88E+08," + DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + ",¥ 1%2$s023%1$s45\n" +
+ "9%1$s877E+08,,\n" +
+ "9%1$s8765E+08,,\n", decimalSeparator, groupingSeparator));
}
@Test
@@ -209,15 +225,18 @@ public class ConvertExcelToCSVProcessorTest {
Long rowsSheet = new Long(ff.getAttribute(ConvertExcelToCSVProcessor.ROW_NUM));
assertTrue(rowsSheet == 9);
- ff.assertContentEquals("Numbers,Money\n" +
- "1234.456,$ 123.45\n" +
- "1234.46,£ 123.45\n" +
- "1234.5,¥ 123.45\n" +
- "1\\,234.46,$ 1\\,023.45\n" +
- "1\\,234.4560,£ 1\\,023.45\n" +
- "9.88E+08,¥ 1\\,023.45\n" +
- "9.877E+08,\n" +
- "9.8765E+08,\n");
+ DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
+ String decimalSeparator = decimalFormatSymbols.getDecimalSeparator() == ',' ? "\\," : String.valueOf(decimalFormatSymbols.getDecimalSeparator());
+ String groupingSeparator = decimalFormatSymbols.getGroupingSeparator() == ',' ? "\\," : String.valueOf(decimalFormatSymbols.getGroupingSeparator());
+ ff.assertContentEquals(String.format("Numbers,Money\n" +
+ "1234%1$s456,$ 123%1$s45\n" +
+ "1234%1$s46,£ 123%1$s45\n" +
+ "1234%1$s5,¥ 123%1$s45\n" +
+ "1%2$s234%1$s46,$ 1%2$s023%1$s45\n" +
+ "1%2$s234%1$s4560,£ 1%2$s023%1$s45\n" +
+ "9%1$s88E+08,¥ 1%2$s023%1$s45\n" +
+ "9%1$s877E+08,\n" +
+ "9%1$s8765E+08,\n", decimalSeparator, groupingSeparator));
}
@Test
@@ -239,15 +258,18 @@ public class ConvertExcelToCSVProcessorTest {
Long rowsSheet = new Long(ff.getAttribute(ConvertExcelToCSVProcessor.ROW_NUM));
assertTrue(rowsSheet == 9);
- ff.assertContentEquals("Numbers,Money\n" +
- "1234.456,$ 123.45\n" +
- "1234.46,£ 123.45\n" +
- "1234.5,¥ 123.45\n" +
- "1\\,234.46,$ 1\\,023.45\n" +
- "1\\,234.4560,£ 1\\,023.45\n" +
- "9.88E+08,¥ 1\\,023.45\n" +
- "9.877E+08,\n" +
- "9.8765E+08,\n");
+ DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
+ String decimalSeparator = decimalFormatSymbols.getDecimalSeparator() == ',' ? "\\," : String.valueOf(decimalFormatSymbols.getDecimalSeparator());
+ String groupingSeparator = decimalFormatSymbols.getGroupingSeparator() == ',' ? "\\," : String.valueOf(decimalFormatSymbols.getGroupingSeparator());
+ ff.assertContentEquals(String.format("Numbers,Money\n" +
+ "1234%1$s456,$ 123%1$s45\n" +
+ "1234%1$s46,£ 123%1$s45\n" +
+ "1234%1$s5,¥ 123%1$s45\n" +
+ "1%2$s234%1$s46,$ 1%2$s023%1$s45\n" +
+ "1%2$s234%1$s4560,£ 1%2$s023%1$s45\n" +
+ "9%1$s88E+08,¥ 1%2$s023%1$s45\n" +
+ "9%1$s877E+08,\n" +
+ "9%1$s8765E+08,\n", decimalSeparator, groupingSeparator));
}
@Test
@@ -269,15 +291,21 @@ public class ConvertExcelToCSVProcessorTest {
assertTrue(rowsSheet == 9);
LocalDateTime localDt = LocalDateTime.of(2017, 1, 1, 12, 0, 0);
- ff.assertContentEquals("Numbers|Timestamps|Money\r\n" +
- "1234.456|" + DateTimeFormatter.ofPattern("d/M/yy").format(localDt) + "|$ 123.45\r\n" +
- "1234.46|" + DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + "|£ 123.45\r\n" +
- "1234.5|" + DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy").format(localDt) + "|¥ 123.45\r\n" +
- "1,234.46|" + DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + "|$ 1,023.45\r\n" +
- "1,234.4560|" + DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + "|£ 1,023.45\r\n" +
- "9.88E+08|" + DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + "|¥ 1,023.45\r\n" +
- "9.877E+08||\r\n" +
- "9.8765E+08||\r\n");
+ DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
+ String valueSeparator = testRunner.getProcessContext().getProperty(CSVUtils.VALUE_SEPARATOR).evaluateAttributeExpressions(ff).getValue();
+ String decimalSeparator = (String.valueOf(decimalFormatSymbols.getDecimalSeparator()).equals(valueSeparator))
+ ? ("\\" + decimalFormatSymbols.getDecimalSeparator()) : String.valueOf(decimalFormatSymbols.getDecimalSeparator());
+ String groupingSeparator = String.valueOf(decimalFormatSymbols.getGroupingSeparator()).equals(valueSeparator)
+ ? "\\" + decimalFormatSymbols.getGroupingSeparator() : String.valueOf(decimalFormatSymbols.getGroupingSeparator());
+ ff.assertContentEquals(String.format("Numbers|Timestamps|Money\r\n" +
+ "1234%1$s456|" + DateTimeFormatter.ofPattern("d/M/yy").format(localDt) + "|$ 123%1$s45\r\n" +
+ "1234%1$s46|" + DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + "|£ 123%1$s45\r\n" +
+ "1234%1$s5|" + DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy").format(localDt) + "|¥ 123%1$s45\r\n" +
+ "1%2$s234%1$s46|" + DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + "|$ 1%2$s023%1$s45\r\n" +
+ "1%2$s234%1$s4560|" + DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + "|£ 1%2$s023%1$s45\r\n" +
+ "9%1$s88E+08|" + DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + "|¥ 1%2$s023%1$s45\r\n" +
+ "9%1$s877E+08||\r\n" +
+ "9%1$s8765E+08||\r\n", decimalSeparator, groupingSeparator));
}
@Test
@@ -300,15 +328,21 @@ public class ConvertExcelToCSVProcessorTest {
assertTrue(rowsSheet == 9);
LocalDateTime localDt = LocalDateTime.of(2017, 1, 1, 12, 0, 0);
- ff.assertContentEquals("Numbers|Timestamps|Money\n" +
- "1234.456|" + DateTimeFormatter.ofPattern("d/M/yy").format(localDt) + "|$ 123.45\n" +
- "1234.46|" + DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + "|£ 123.45\n" +
- "1234.5|" + DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy").format(localDt) + "|¥ 123.45\n" +
- "1,234.46|" + DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + "|$ 1,023.45\n" +
- "1,234.4560|" + DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + "|£ 1,023.45\n" +
- "9.88E+08|" + DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + "|¥ 1,023.45\n" +
- "9.877E+08||\n" +
- "9.8765E+08||\n");
+ DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
+ String valueSeparator = testRunner.getProcessContext().getProperty(CSVUtils.VALUE_SEPARATOR).evaluateAttributeExpressions(ff).getValue();
+ String decimalSeparator = (String.valueOf(decimalFormatSymbols.getDecimalSeparator()).equals(valueSeparator))
+ ? ("\\" + decimalFormatSymbols.getDecimalSeparator()) : String.valueOf(decimalFormatSymbols.getDecimalSeparator());
+ String groupingSeparator = String.valueOf(decimalFormatSymbols.getGroupingSeparator()).equals(valueSeparator)
+ ? "\\" + decimalFormatSymbols.getGroupingSeparator() : String.valueOf(decimalFormatSymbols.getGroupingSeparator());
+ ff.assertContentEquals(String.format("Numbers|Timestamps|Money\n" +
+ "1234%1$s456|" + DateTimeFormatter.ofPattern("d/M/yy").format(localDt) + "|$ 123%1$s45\n" +
+ "1234%1$s46|" + DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + "|£ 123%1$s45\n" +
+ "1234%1$s5|" + DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy").format(localDt) + "|¥ 123%1$s45\n" +
+ "1%2$s234%1$s46|" + DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + "|$ 1%2$s023%1$s45\n" +
+ "1%2$s234%1$s4560|" + DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + "|£ 1%2$s023%1$s45\n" +
+ "9%1$s88E+08|" + DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + "|¥ 1%2$s023%1$s45\n" +
+ "9%1$s877E+08||\n" +
+ "9%1$s8765E+08||\n", decimalSeparator, groupingSeparator));
}
@Test
@@ -332,15 +366,31 @@ public class ConvertExcelToCSVProcessorTest {
assertTrue(rowsSheet == 9);
LocalDateTime localDt = LocalDateTime.of(2017, 1, 1, 12, 0, 0);
+ String quoteCharValue = testRunner.getProcessContext().getProperty(CSVUtils.QUOTE_CHAR).evaluateAttributeExpressions(ff).getValue();
+ DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
+ char decimalSeparator = decimalFormatSymbols.getDecimalSeparator();
+ char groupingSeparator = decimalFormatSymbols.getGroupingSeparator();
ff.assertContentEquals("'Numbers','Timestamps','Money'\n" +
- "'1234.456','" + DateTimeFormatter.ofPattern("d/M/yy").format(localDt) + "','$ 123.45'\n" +
- "'1234.46','" + DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + "','£ 123.45'\n" +
- "'1234.5','" + DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy").format(localDt) + "','¥ 123.45'\n" +
- "'1,234.46','" + DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + "','$ 1,023.45'\n" +
- "'1,234.4560','" + DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + "','£ 1,023.45'\n" +
- "'9.88E+08','" + DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + "','¥ 1,023.45'\n" +
- "'9.877E+08',,\n" +
- "'9.8765E+08',,\n");
+ addQuotingIfNeeded(String.format("1234%1$s456", decimalSeparator), ",", quoteCharValue, true) + "," + quoteCharValue +
+ DateTimeFormatter.ofPattern("d/M/yy").format(localDt) + quoteCharValue + "," +
+ addQuotingIfNeeded(String.format("$ 123%1$s45", decimalSeparator), ",", quoteCharValue, true) + "\n" +
+ addQuotingIfNeeded(String.format("1234%1$s46", decimalSeparator), ",", quoteCharValue, true) + "," + quoteCharValue +
+ DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + quoteCharValue + "," +
+ addQuotingIfNeeded(String.format("£ 123%1$s45", decimalSeparator), ",", quoteCharValue, true) + "\n" +
+ addQuotingIfNeeded(String.format("1234%1$s5", decimalSeparator), ",", quoteCharValue, true) + "," + quoteCharValue +
+ DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy").format(localDt) + quoteCharValue + "," +
+ addQuotingIfNeeded(String.format("¥ 123%1$s45", decimalSeparator), ",", quoteCharValue, true) + "\n" +
+ addQuotingIfNeeded(String.format("1%2$s234%1$s46", decimalSeparator, groupingSeparator), ",", quoteCharValue, true) + "," + quoteCharValue +
+ DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + quoteCharValue + "," +
+ addQuotingIfNeeded(String.format("$ 1%2$s023%1$s45", decimalSeparator, groupingSeparator), ",", quoteCharValue, true) + "\n" +
+ addQuotingIfNeeded(String.format("1%2$s234%1$s4560", decimalSeparator, groupingSeparator), ",", quoteCharValue, true) + "," + quoteCharValue +
+ DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + quoteCharValue + "," +
+ addQuotingIfNeeded(String.format("£ 1%2$s023%1$s45", decimalSeparator, groupingSeparator), ",", quoteCharValue, true) + "\n" +
+ addQuotingIfNeeded(String.format("9%1$s88E+08", decimalSeparator), ",", quoteCharValue, true) + "," + quoteCharValue +
+ DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + quoteCharValue + "," +
+ addQuotingIfNeeded(String.format("¥ 1%2$s023%1$s45", decimalSeparator, groupingSeparator), ",", quoteCharValue, true) + "\n" +
+ addQuotingIfNeeded(String.format("9%1$s877E+08", decimalSeparator), ",", quoteCharValue, true) + ",,\n" +
+ addQuotingIfNeeded(String.format("9%1$s8765E+08", decimalSeparator), ",", quoteCharValue, true) + ",,\n");
}
@Test
@@ -363,15 +413,21 @@ public class ConvertExcelToCSVProcessorTest {
assertTrue(rowsSheet == 9);
LocalDateTime localDt = LocalDateTime.of(2017, 1, 1, 12, 0, 0);
- ff.assertContentEquals("Numbers,Timestamps,Money\n" +
- "1234.456," + DateTimeFormatter.ofPattern("d/M/yy").format(localDt) + ",$ 123.45\n" +
- "1234.46," + DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + ",£ 123.45\n" +
- "1234.5," + DateTimeFormatter.ofPattern("EEEE^, MMMM dd^, yyyy").format(localDt) + ",¥ 123.45\n" +
- "1^,234.46," + DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + ",$ 1^,023.45\n" +
- "1^,234.4560," + DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + ",£ 1^,023.45\n" +
- "9.88E+08," + DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + ",¥ 1^,023.45\n" +
- "9.877E+08,,\n" +
- "9.8765E+08,,\n");
+ DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
+ String escapeCharValue = testRunner.getProcessContext().getProperty(CSVUtils.ESCAPE_CHAR).evaluateAttributeExpressions(ff).getValue();
+ String decimalSeparator = String.valueOf(decimalFormatSymbols.getDecimalSeparator()).equals(",")
+ ? escapeCharValue + decimalFormatSymbols.getDecimalSeparator() : String.valueOf(decimalFormatSymbols.getDecimalSeparator());
+ String groupingSeparator = String.valueOf(decimalFormatSymbols.getGroupingSeparator()).equals(",")
+ ? escapeCharValue + decimalFormatSymbols.getGroupingSeparator() : String.valueOf(decimalFormatSymbols.getGroupingSeparator());
+ ff.assertContentEquals(String.format("Numbers,Timestamps,Money\n" +
+ "1234%1$s456," + DateTimeFormatter.ofPattern("d/M/yy").format(localDt) + ",$ 123%1$s45\n" +
+ "1234%1$s46," + DateTimeFormatter.ofPattern("hh:mm:ss a").format(localDt) + ",£ 123%1$s45\n" +
+ "1234%1$s5," + DateTimeFormatter.ofPattern(String.format("EEEE%1$s, MMMM dd%1$s, yyyy", escapeCharValue)).format(localDt) + ",¥ 123%1$s45\n" +
+ "1%2$s234%1$s46," + DateTimeFormatter.ofPattern("d/M/yy HH:mm").format(localDt) + ",$ 1%2$s023%1$s45\n" +
+ "1%2$s234%1$s4560," + DateTimeFormatter.ofPattern("hh:mm a").format(localDt) + ",£ 1%2$s023%1$s45\n" +
+ "9%1$s88E+08," + DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm").format(localDt) + ",¥ 1%2$s023%1$s45\n" +
+ "9%1$s877E+08,,\n" +
+ "9%1$s8765E+08,,\n", decimalSeparator, groupingSeparator));
}
/**
@@ -496,4 +552,20 @@ public class ConvertExcelToCSVProcessorTest {
String messageText = errorMessages.get(0).getMsg();
Assert.assertTrue(messageText.contains("Excel") && messageText.contains("OLE2"));
}
+
+ private String addQuotingIfNeeded(String csvField) {
+ return addQuotingIfNeeded(csvField, ",");
+ }
+
+ private String addQuotingIfNeeded(String csvField, String csvSeparator) {
+ return addQuotingIfNeeded(csvField, csvSeparator, "\"");
+ }
+
+ private String addQuotingIfNeeded(String csvField, String csvSeparator, String csvQuote) {
+ return addQuotingIfNeeded(csvField, csvSeparator, csvQuote, false);
+ }
+
+ private String addQuotingIfNeeded(String csvField, String csvSeparator, String csvQuote, boolean force) {
+ return csvField.contains(csvSeparator) || force ? String.format("%2$s%1$s%2$s", csvField, csvQuote) : csvField;
+ }
}
\ No newline at end of file