Skip to content

Commit 3ecc985

Browse files
authored
Merge pull request #717 from metafacture/584-recordReaderResetBufferOnException
Fix `RecordReader` to reset buffer on exception.
2 parents f868484 + c74f30e commit 3ecc985

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

metafacture-io/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ dependencies {
2525
runtimeOnly "org.tukaani:xz:${versions.tukaani}"
2626
testImplementation "com.github.tomakehurst:wiremock-jre8:${versions.wiremock}"
2727
testImplementation "junit:junit:${versions.junit}"
28+
testImplementation "org.junit.jupiter:junit-jupiter-api:${versions.junit_jupiter}"
2829
testImplementation "org.mockito:mockito-core:${versions.mockito}"
2930
testImplementation "org.assertj:assertj-core:${versions.assertj}"
3031
testRuntimeOnly "org.slf4j:slf4j-simple:${versions.slf4j}"

metafacture-io/src/main/java/org/metafacture/io/RecordReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ public void process(final Reader reader) {
141141
private void emitRecord() {
142142
final String record = builder.toString();
143143
if (!skipEmptyRecords || !record.isEmpty()) {
144-
getReceiver().process(record);
145144
builder.delete(0, builder.length());
145+
getReceiver().process(record);
146146
}
147147
}
148148

metafacture-io/src/test/java/org/metafacture/io/RecordReaderTest.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,20 @@
1717
package org.metafacture.io;
1818

1919
import org.metafacture.framework.ObjectReceiver;
20+
import org.metafacture.framework.helpers.DefaultObjectReceiver;
2021

2122
import org.junit.After;
2223
import org.junit.Before;
2324
import org.junit.Test;
25+
import org.junit.jupiter.api.Assertions;
2426
import org.mockito.InOrder;
2527
import org.mockito.Mock;
2628
import org.mockito.Mockito;
2729
import org.mockito.MockitoAnnotations;
2830

2931
import java.io.StringReader;
32+
import java.util.ArrayList;
33+
import java.util.List;
3034

3135
/**
3236
* Tests for {@link RecordReader}.
@@ -223,7 +227,38 @@ public void testShouldProcessMultipleReaders() {
223227
ordered.verify(receiver, Mockito.times(2)).process(RECORD2);
224228
ordered.verify(receiver).process(RECORD1);
225229
Mockito.verifyNoMoreInteractions(receiver);
230+
}
226231

232+
@Test
233+
public void issue584_shouldResetBufferOnException() {
234+
final String error = "ERROR:";
235+
final String success = "SUCCESS:";
236+
237+
final List<String> actual = new ArrayList<>();
238+
final String[] expected = new String[]{error + RECORD1, success + RECORD2};
239+
240+
recordReader.setReceiver(new DefaultObjectReceiver<String>() {
241+
@Override
242+
public void process(final String obj) {
243+
if (RECORD1.equals(obj)) {
244+
throw new IllegalArgumentException(obj);
245+
}
246+
else {
247+
actual.add(success + obj);
248+
}
249+
}
250+
});
251+
252+
try {
253+
recordReader.process(new StringReader(RECORD1));
254+
}
255+
catch (final IllegalArgumentException e) {
256+
actual.add(error + e.getMessage());
257+
}
258+
259+
recordReader.process(new StringReader(RECORD2));
260+
261+
Assertions.assertArrayEquals(expected, actual.toArray());
227262
}
228263

229264
}

0 commit comments

Comments
 (0)