Skip to content

Commit 96605ab

Browse files
committed
Use stream test; format (#483)
1 parent 96811da commit 96605ab

File tree

2 files changed

+106
-112
lines changed

2 files changed

+106
-112
lines changed

metafacture-csv/src/main/java/org/metafacture/csv/CsvEncoder.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import java.io.StringWriter;
3232
import java.util.ArrayList;
3333
import java.util.List;
34-
import java.util.stream.Collectors;
3534

3635
/**
3736
* A csv encoder that converts a record into a csv line (Default separator: {@value #DEFAULT_SEP}).
@@ -139,11 +138,9 @@ public void setNoQuotes(final boolean noQuotes) {
139138
private void initialize() {
140139
writer = new StringWriter();
141140
final String emptyLineEnd = "";
142-
csvWriter = new CSVWriter(writer,
143-
separator,
144-
noQuotes ? CSVWriter.NO_QUOTE_CHARACTER : CSVWriter.DEFAULT_QUOTE_CHARACTER,
145-
CSVWriter.DEFAULT_ESCAPE_CHARACTER,
146-
emptyLineEnd);
141+
csvWriter = new CSVWriter(writer, separator,
142+
noQuotes ? CSVWriter.NO_QUOTE_CHARACTER : CSVWriter.DEFAULT_QUOTE_CHARACTER,
143+
CSVWriter.DEFAULT_ESCAPE_CHARACTER, emptyLineEnd);
147144
}
148145

149146
private String[] arrayOf(final List<String> list) {
@@ -190,7 +187,6 @@ public void endRecord() {
190187
}
191188

192189
writeRow(rowItems);
193-
194190
resetCaches();
195191
}
196192

@@ -217,7 +213,6 @@ public void onResetStream() {
217213
this.includeRecordId = false;
218214
this.includeHeader = false;
219215
this.header = new ArrayList<>();
220-
221216
this.isFirstRecord = true;
222217
this.rowItems = new ArrayList<>();
223218
}

metafacture-csv/src/test/java/org/metafacture/csv/CsvEncoderTest.java

Lines changed: 103 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -16,165 +16,164 @@
1616

1717
package org.metafacture.csv;
1818

19-
import org.junit.After;
19+
import org.metafacture.framework.ObjectReceiver;
20+
2021
import org.junit.Before;
2122
import org.junit.Test;
22-
import org.metafacture.framework.ObjectReceiver;
23+
2324
import org.mockito.InOrder;
2425
import org.mockito.Mock;
26+
import org.mockito.Mockito;
2527
import org.mockito.MockitoAnnotations;
28+
import org.mockito.exceptions.base.MockitoAssertionError;
2629

27-
import static org.mockito.Mockito.inOrder;
30+
import java.util.Arrays;
31+
import java.util.function.Consumer;
2832

2933
/**
3034
* Tests for {@link CsvEncoder}.
3135
*
3236
* @author eberhardtj ([email protected])
3337
* @author Pascal Christoph (dr0i)
38+
* @author Jens Wille
3439
*/
3540
public final class CsvEncoderTest {
3641

37-
private CsvEncoder encoder;
38-
3942
@Mock
4043
private ObjectReceiver<String> receiver;
44+
private static final String LITERAL1 = "column 1";
45+
private static final String LITERAL2 = "column 2";
46+
private static final String RECORD_ID1 = "1";
47+
private static final String RECORD_ID2 = "2";
48+
private static final String RECORD_ID3 = "3";
49+
private static final String VALUE1 = "a";
50+
private static final String VALUE2 = "b";
51+
private static final String VALUE3 = "c";
52+
private static final String VALUE4 = "d";
53+
private static final String VALUE5 = "e";
54+
private static final String VALUE6 = "f";
4155

4256
@Before
4357
public void setup() {
4458
MockitoAnnotations.initMocks(this);
45-
encoder = new CsvEncoder();
46-
encoder.setIncludeHeader(false);
59+
CsvEncoder encoder = new CsvEncoder();
4760
encoder.setReceiver(receiver);
4861
}
4962

50-
@After
51-
public void cleanup() {
52-
encoder.closeStream();
53-
}
5463

5564
@Test
5665
public void shouldReceiveSingleRecord() {
57-
encoder.startRecord("1");
58-
encoder.literal("column 1", "a");
59-
encoder.literal("column 2", "b");
60-
encoder.endRecord();
61-
encoder.closeStream();
62-
63-
final InOrder ordered = inOrder(receiver);
64-
ordered.verify(receiver).process("\"a\",\"b\"");
66+
assertEncode(i -> {
67+
i.startRecord(RECORD_ID1);
68+
i.literal(LITERAL1, VALUE1);
69+
i.literal(LITERAL2, VALUE2);
70+
i.endRecord();
71+
}, "\"a\",\"b\"");
6572
}
6673

6774
@Test
6875
public void shouldHaveNoQuotes() {
69-
encoder.setNoQuotes(true);
70-
encoder.startRecord("1");
71-
encoder.literal("column 1", "a");
72-
encoder.literal("column 2", "b");
73-
encoder.endRecord();
74-
encoder.closeStream();
75-
76-
final InOrder ordered = inOrder(receiver);
77-
ordered.verify(receiver).process("a,b");
76+
assertEncode(i -> {
77+
i.setNoQuotes(true);
78+
i.startRecord(RECORD_ID1);
79+
i.literal(LITERAL1, VALUE1);
80+
i.literal(LITERAL2, VALUE2);
81+
i.endRecord();
82+
}, "a,b");
7883
}
7984

8085
@Test
8186
public void shouldReceiveSingleRecordWithHeader() {
82-
encoder.setIncludeHeader(true);
83-
84-
encoder.startRecord("1");
85-
encoder.literal("column 1", "a");
86-
encoder.literal("column 2", "b");
87-
encoder.endRecord();
88-
encoder.closeStream();
89-
90-
final InOrder ordered = inOrder(receiver);
91-
ordered.verify(receiver).process("\"column 1\",\"column 2\"");
92-
ordered.verify(receiver).process("\"a\",\"b\"");
87+
assertEncode(i -> {
88+
i.setIncludeHeader(true);
89+
i.startRecord(RECORD_ID1);
90+
i.literal(LITERAL1, VALUE1);
91+
i.literal(LITERAL2, VALUE2);
92+
i.endRecord();
93+
}, "\"column 1\",\"column 2\"", "\"a\",\"b\"");
9394
}
9495

9596
@Test
9697
public void shouldReceiveSingleRecordWithRecordId() {
97-
encoder.setIncludeRecordId(true);
98-
99-
encoder.startRecord("1");
100-
encoder.literal("column 1", "a");
101-
encoder.literal("column 2", "b");
102-
encoder.endRecord();
103-
encoder.closeStream();
104-
105-
final InOrder ordered = inOrder(receiver);
106-
ordered.verify(receiver).process("\"1\",\"a\",\"b\"");
98+
assertEncode(i -> {
99+
i.setIncludeRecordId(true);
100+
i.startRecord(RECORD_ID1);
101+
i.literal(LITERAL1, VALUE1);
102+
i.literal(LITERAL2, VALUE2);
103+
i.endRecord();
104+
}, "\"1\",\"a\",\"b\"");
107105
}
108106

109107
@Test
110108
public void shouldReceiveSingleRecordWithRecordIdAndHeader() {
111-
encoder.setIncludeRecordId(true);
112-
encoder.setIncludeHeader(true);
113-
114-
encoder.startRecord("1");
115-
encoder.literal("column 1", "a");
116-
encoder.literal("column 2", "b");
117-
encoder.endRecord();
118-
encoder.closeStream();
119-
120-
final InOrder ordered = inOrder(receiver);
121-
ordered.verify(receiver).process("\"record id\",\"column 1\",\"column 2\"");
122-
ordered.verify(receiver).process("\"1\",\"a\",\"b\"");
109+
assertEncode(i -> {
110+
i.setIncludeRecordId(true);
111+
i.setIncludeHeader(true);
112+
i.startRecord(RECORD_ID1);
113+
i.literal(LITERAL1, VALUE1);
114+
i.literal(LITERAL2, VALUE2);
115+
i.endRecord();
116+
}, "\"record id\",\"column 1\",\"column 2\"", "\"1\",\"a\",\"b\"");
123117
}
124118

125119
@Test
126120
public void shouldReceiveThreeRows() {
127-
encoder.startRecord("1");
128-
encoder.literal("column 1", "a");
129-
encoder.literal("column 2", "b");
130-
encoder.endRecord();
131-
encoder.startRecord("2");
132-
encoder.literal("column 1", "c");
133-
encoder.literal("column 2", "d");
134-
encoder.endRecord();
135-
encoder.startRecord("3");
136-
encoder.literal("column 1", "e");
137-
encoder.literal("column 2", "f");
138-
encoder.endRecord();
139-
encoder.closeStream();
140-
141-
final InOrder ordered = inOrder(receiver);
142-
ordered.verify(receiver).process("\"a\",\"b\"");
143-
ordered.verify(receiver).process("\"c\",\"d\"");
144-
ordered.verify(receiver).process("\"e\",\"f\"");
121+
assertEncode(i -> {
122+
i.startRecord(RECORD_ID1);
123+
i.literal(LITERAL1, VALUE1);
124+
i.literal(LITERAL2, VALUE2);
125+
i.endRecord();
126+
i.startRecord(RECORD_ID2);
127+
i.literal(LITERAL1, VALUE3);
128+
i.literal(LITERAL2, VALUE4);
129+
i.endRecord();
130+
i.startRecord(RECORD_ID3);
131+
i.literal(LITERAL1, VALUE5);
132+
i.literal(LITERAL2, VALUE6);
133+
i.endRecord();
134+
}, "\"a\",\"b\"", "\"c\",\"d\"", "\"e\",\"f\"");
145135
}
146136

147137
@Test
148138
public void shouldUseTabulatorAsSeparator() {
149-
encoder.setSeparator('\t');
150-
151-
encoder.startRecord("1");
152-
encoder.literal("column 1", "a");
153-
encoder.literal("column 2", "b");
154-
encoder.endRecord();
155-
encoder.startRecord("2");
156-
encoder.literal("column 1", "c");
157-
encoder.literal("column 2", "d");
158-
encoder.endRecord();
159-
encoder.closeStream();
160-
161-
final InOrder ordered = inOrder(receiver);
162-
ordered.verify(receiver).process("\"a\"\t\"b\"");
163-
ordered.verify(receiver).process("\"c\"\t\"d\"");
139+
assertEncode(i -> {
140+
i.setSeparator('\t');
141+
i.startRecord(RECORD_ID1);
142+
i.literal(LITERAL1, VALUE1);
143+
i.literal(LITERAL2, VALUE2);
144+
i.endRecord();
145+
}, "\"a\"\t\"b\"");
164146
}
165147

166148
@Test
167149
public void shouldNotCreateNestedCsvInColumn() {
168-
encoder.startRecord("1");
169-
encoder.literal("name", "a");
170-
encoder.literal("alias", "a1");
171-
encoder.literal("alias", "a2");
172-
encoder.literal("alias", "a3");
173-
encoder.endRecord();
174-
encoder.closeStream();
175-
176-
final InOrder ordered = inOrder(receiver);
177-
ordered.verify(receiver).process("\"a\",\"a1\",\"a2\",\"a3\"");
150+
assertEncode(i -> {
151+
i.startRecord(RECORD_ID1);
152+
i.literal(LITERAL1, VALUE1);
153+
i.literal(LITERAL2, VALUE2);
154+
i.literal(LITERAL2, VALUE3);
155+
i.literal(LITERAL2, VALUE4);
156+
i.endRecord();
157+
}, "\"a\",\"b\",\"c\",\"d\"");
178158
}
179159

160+
private void assertEncode(final Consumer<CsvEncoder> in, final String... out) {
161+
final InOrder ordered = Mockito.inOrder(receiver);
162+
163+
final CsvEncoder csvEncoder = new CsvEncoder();
164+
csvEncoder.setReceiver(receiver);
165+
in.accept(csvEncoder);
166+
167+
try {
168+
Arrays.stream(out).forEach(s -> ordered.verify(receiver).process(s));
169+
170+
ordered.verifyNoMoreInteractions();
171+
Mockito.verifyNoMoreInteractions(receiver);
172+
}
173+
catch (final MockitoAssertionError e) {
174+
System.out.println(Mockito.mockingDetails(receiver).printInvocations());
175+
throw e;
176+
}
177+
178+
}
180179
}

0 commit comments

Comments
 (0)