Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions metafacture-io/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ dependencies {
runtimeOnly "org.tukaani:xz:${versions.tukaani}"
testImplementation "com.github.tomakehurst:wiremock-jre8:${versions.wiremock}"
testImplementation "junit:junit:${versions.junit}"
testImplementation "org.junit.jupiter:junit-jupiter-api:${versions.junit_jupiter}"
testImplementation "org.mockito:mockito-core:${versions.mockito}"
testImplementation "org.assertj:assertj-core:${versions.assertj}"
testRuntimeOnly "org.slf4j:slf4j-simple:${versions.slf4j}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,8 @@ public void process(final Reader reader) {
private void emitRecord() {
final String record = builder.toString();
if (!skipEmptyRecords || !record.isEmpty()) {
getReceiver().process(record);
builder.delete(0, builder.length());
getReceiver().process(record);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,20 @@
package org.metafacture.io;

import org.metafacture.framework.ObjectReceiver;
import org.metafacture.framework.helpers.DefaultObjectReceiver;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

/**
* Tests for {@link RecordReader}.
Expand Down Expand Up @@ -223,7 +227,38 @@ public void testShouldProcessMultipleReaders() {
ordered.verify(receiver, Mockito.times(2)).process(RECORD2);
ordered.verify(receiver).process(RECORD1);
Mockito.verifyNoMoreInteractions(receiver);
}

@Test
public void issue584_shouldResetBufferOnException() {
final String error = "ERROR:";
final String success = "SUCCESS:";

final List<String> actual = new ArrayList<>();
final String[] expected = new String[]{error + RECORD1, success + RECORD2};

recordReader.setReceiver(new DefaultObjectReceiver<String>() {
@Override
public void process(final String obj) {
if (RECORD1.equals(obj)) {
throw new IllegalArgumentException(obj);
}
else {
actual.add(success + obj);
}
}
});

try {
recordReader.process(new StringReader(RECORD1));
}
catch (final IllegalArgumentException e) {
actual.add(error + e.getMessage());
}

recordReader.process(new StringReader(RECORD2));

Assertions.assertArrayEquals(expected, actual.toArray());
}

}