OutputStreamInitTest.java
package com.fasterxml.jackson.core.json;
import java.io.*;
import org.junit.jupiter.api.Test;
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import static org.junit.jupiter.api.Assertions.*;
//[core#764] (and [databind#3508]
class OutputStreamInitTest
extends com.fasterxml.jackson.core.JUnit5TestBase
{
static class FailingOutputStream extends OutputStream {
public int written = 0;
public boolean failWrites = false;
public boolean closed = false;
public void startFailingWrites() {
failWrites = true;
}
@Override
public void close() {
closed = true;
}
@Override
public void write(int b) throws IOException {
++written;
if (failWrites) {
throw new IOException("No writes!");
}
}
}
static class FailingJsonFactory extends JsonFactory {
private static final long serialVersionUID = 1L;
public FailingOutputStream lastStream;
@Override
protected OutputStream _fileOutputStream(File f) {
return (lastStream = new FailingOutputStream());
}
}
@Test
void forFile() throws Exception
{
final FailingJsonFactory jsonF = new FailingJsonFactory();
try {
JsonGenerator g = jsonF.createGenerator(new File("/tmp/test.json"),
JsonEncoding.UTF8);
g.writeString("foo");
jsonF.lastStream.startFailingWrites();
g.close();
fail("Should not pass");
} catch (Exception e) {
verifyException(e, "No writes");
}
assertNotNull(jsonF.lastStream);
assertTrue(jsonF.lastStream.closed);
}
}