package org.jooby.internal;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.jooby.MediaType;
import org.jooby.Renderer;
import org.jooby.test.MockUnit;
import org.jooby.test.MockUnit.Block;
import org.junit.Test;
public class BytesRendererTest {
private Block defaultType = unit -> {
Renderer.Context ctx = unit.get(Renderer.Context.class);
expect(ctx.type(MediaType.octetstream)).andReturn(ctx);
};
@Test
public void render() throws Exception {
byte[] bytes = "bytes".getBytes();
new MockUnit(Renderer.Context.class)
.expect(defaultType)
.expect(unit -> {
Renderer.Context ctx = unit.get(Renderer.Context.class);
ctx.send(bytes);
})
.run(unit -> {
BuiltinRenderer.bytes
.render(bytes, unit.get(Renderer.Context.class));
});
}
@Test
public void renderIgnoredAnyOtherArray() throws Exception {
int[] bytes = new int[0];
new MockUnit(Renderer.Context.class)
.run(unit -> {
BuiltinRenderer.bytes
.render(bytes, unit.get(Renderer.Context.class));
});
}
@Test
public void renderIgnore() throws Exception {
new MockUnit(Renderer.Context.class)
.run(unit -> {
BuiltinRenderer.bytes
.render(new Object(), unit.get(Renderer.Context.class));
});
}
@Test(expected = IOException.class)
public void renderWithFailure() throws Exception {
byte[] bytes = "bytes".getBytes();
new MockUnit(Renderer.Context.class, InputStream.class, OutputStream.class)
.expect(defaultType)
.expect(unit -> {
Renderer.Context ctx = unit.get(Renderer.Context.class);
ctx.send(bytes);
expectLastCall().andThrow(new IOException("intentational err"));
})
.run(unit -> {
BuiltinRenderer.bytes
.render(bytes, unit.get(Renderer.Context.class));
});
}
}