From 31f27e33efb329ded37f1120c8caf1a8f60babc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=CC=88rg=20Prante?= Date: Mon, 30 May 2022 17:20:31 +0200 Subject: [PATCH] fix CSV generation --- .../xbib/datastructures/csv/Generator.java | 17 ++++++------ .../csv/test/GeneratorTest.java | 27 ++++++++++++++++++- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/datastructures-csv/src/main/java/org/xbib/datastructures/csv/Generator.java b/datastructures-csv/src/main/java/org/xbib/datastructures/csv/Generator.java index 47ed313..f9df05f 100644 --- a/datastructures-csv/src/main/java/org/xbib/datastructures/csv/Generator.java +++ b/datastructures-csv/src/main/java/org/xbib/datastructures/csv/Generator.java @@ -37,19 +37,20 @@ public class Generator implements Constants, Closeable, Flushable { return this; } - public void write(String value) throws IOException { - if (col > 0) { - writer.write(COMMA); + public synchronized void write(String value) throws IOException { + if (col >= keys.size()) { + writer.write(LF); + row++; + col = 0; + } else { + if (col > 0) { + writer.write(COMMA); + } } if (value != null) { writer.write(escape(value)); } col++; - if (col > keys.size()) { - writer.write(LF); - row++; - col = 0; - } } public int getColumn() { diff --git a/datastructures-csv/src/test/java/org/xbib/datastructures/csv/test/GeneratorTest.java b/datastructures-csv/src/test/java/org/xbib/datastructures/csv/test/GeneratorTest.java index 67f71a8..2dd3894 100644 --- a/datastructures-csv/src/test/java/org/xbib/datastructures/csv/test/GeneratorTest.java +++ b/datastructures-csv/src/test/java/org/xbib/datastructures/csv/test/GeneratorTest.java @@ -10,7 +10,32 @@ import java.util.Arrays; public class GeneratorTest { @Test - public void test() throws IOException { + public void testOneColumn() throws IOException { + StringWriter writer = new StringWriter(); + Generator gen = new Generator(writer); + gen.keys(Arrays.asList("a")); + for (int i = 0; i < 2; i++) { + gen.write("val" + i); + } + gen.close(); + assertEquals("val0\nval1", writer.toString()); + } + + @Test + public void testTwoColumns() throws IOException { + StringWriter writer = new StringWriter(); + Generator gen = new Generator(writer); + gen.keys(Arrays.asList("a", "b")); + for (int i = 0; i < 2; i++) { + gen.write("val" + i); + gen.write("val" + i); + } + gen.close(); + assertEquals("val0,val0\nval1,val1", writer.toString()); + } + + @Test + public void testThreeColumns() throws IOException { StringWriter writer = new StringWriter(); Generator gen = new Generator(writer); gen.keys(Arrays.asList("a", "b", "c"));