class CacheWriter extends Writer {
private final StringWriter bufferWriter;
private final Writer outputWriter;
+ private boolean isClosed;
CacheWriter(Writer outputWriter) {
this.bufferWriter = new StringWriter();
this.outputWriter = outputWriter;
+ this.isClosed = false;
}
@Override
@Override
public void close() throws IOException {
+ if (isClosed) {
+ return;
+ }
+
IOUtils.write(bufferWriter.toString(), outputWriter);
outputWriter.close();
+ this.isClosed = true;
}
}
import java.io.IOException;
import java.io.StringWriter;
+import java.io.Writer;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
public class CacheWriterTest {
- private StringWriter writer = new StringWriter();
+ private Writer writer = new StringWriter();
private CacheWriter underTest = new CacheWriter(writer);
@Test
assertThat(writer.toString()).isEqualTo("content");
}
+
+ @Test
+ public void close_encapsulated_writer_once() throws IOException {
+ writer = mock(Writer.class);
+ underTest = new CacheWriter(writer);
+
+ underTest.close();
+ underTest.close();
+
+ verify(writer, times(1)).close();
+ }
}