-
-
Notifications
You must be signed in to change notification settings - Fork 135
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add bit more Smile/stream/decorator testing
- Loading branch information
1 parent
725de8f
commit 7fc8d59
Showing
4 changed files
with
181 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 45 additions & 0 deletions
45
.../src/test/java/com/fasterxml/jackson/dataformat/smile/filter/StreamingDecoratorsTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package com.fasterxml.jackson.dataformat.smile.filter; | ||
|
||
import java.io.ByteArrayOutputStream; | ||
|
||
import com.fasterxml.jackson.core.*; | ||
|
||
import com.fasterxml.jackson.dataformat.smile.*; | ||
import com.fasterxml.jackson.dataformat.smile.testutil.PrefixInputDecorator; | ||
import com.fasterxml.jackson.dataformat.smile.testutil.PrefixOutputDecorator; | ||
|
||
public class StreamingDecoratorsTest extends BaseTestForSmile | ||
{ | ||
public void testInputDecorators() throws Exception | ||
{ | ||
final byte[] DOC = _smileDoc("[ 42 ]"); | ||
final SmileFactory streamF = smileFactory(false, true, false); | ||
streamF.setInputDecorator(new PrefixInputDecorator(DOC)); | ||
JsonParser p = streamF.createParser(new byte[0]); | ||
assertToken(JsonToken.START_ARRAY, p.nextToken()); | ||
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); | ||
assertEquals(42, p.getIntValue()); | ||
assertToken(JsonToken.END_ARRAY, p.nextToken()); | ||
p.close(); | ||
} | ||
|
||
public void testOutputDecorators() throws Exception | ||
{ | ||
final byte[] DOC = _smileDoc(" 137"); | ||
// important! Do not add document header for this test | ||
final SmileFactory streamF = smileFactory(false, false, false); | ||
streamF.setOutputDecorator(new PrefixOutputDecorator(DOC)); | ||
ByteArrayOutputStream bytes = new ByteArrayOutputStream(); | ||
|
||
JsonGenerator g = streamF.createGenerator(bytes); | ||
g.writeString("foo"); | ||
g.close(); | ||
|
||
JsonParser p = streamF.createParser(bytes.toByteArray()); | ||
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); | ||
assertEquals(137, p.getIntValue()); | ||
assertToken(JsonToken.VALUE_STRING, p.nextToken()); | ||
assertEquals("foo", p.getText()); | ||
p.close(); | ||
} | ||
} |
71 changes: 71 additions & 0 deletions
71
...e/src/test/java/com/fasterxml/jackson/dataformat/smile/testutil/PrefixInputDecorator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
package com.fasterxml.jackson.dataformat.smile.testutil; | ||
|
||
import java.io.ByteArrayInputStream; | ||
import java.io.IOException; | ||
import java.io.InputStream; | ||
import java.io.Reader; | ||
import java.io.SequenceInputStream; | ||
import java.io.StringReader; | ||
import java.nio.charset.StandardCharsets; | ||
|
||
import com.fasterxml.jackson.core.io.IOContext; | ||
import com.fasterxml.jackson.core.io.InputDecorator; | ||
|
||
@SuppressWarnings("serial") | ||
public class PrefixInputDecorator extends InputDecorator | ||
{ | ||
protected final byte[] _prefix; | ||
|
||
public PrefixInputDecorator(byte[] p) { | ||
_prefix = p; | ||
} | ||
|
||
@Override | ||
public InputStream decorate(IOContext ctxt, InputStream in) { | ||
return new SequenceInputStream(new ByteArrayInputStream(_prefix), in); | ||
} | ||
|
||
@Override | ||
public InputStream decorate(IOContext ctxt, byte[] src, int offset, int length) { | ||
return decorate(ctxt, new ByteArrayInputStream(src, offset, length)); | ||
} | ||
|
||
@Override | ||
public Reader decorate(IOContext ctxt, Reader r) throws IOException { | ||
String str = new String(_prefix, StandardCharsets.UTF_8); | ||
return new SequenceReader(new StringReader(str), r); | ||
} | ||
|
||
private static class SequenceReader extends Reader { | ||
protected Reader _reader1, _reader2; | ||
|
||
public SequenceReader(Reader r1, Reader r2) { | ||
_reader1 = r1; | ||
_reader2 = r2; | ||
} | ||
|
||
@Override | ||
public int read(char[] cbuf, int off, int len) throws IOException { | ||
if (_reader1 != null) { | ||
int count = _reader1.read(cbuf, off, len); | ||
if (count > 0) { | ||
return count; | ||
} | ||
_reader1 = null; | ||
} | ||
if (_reader2 != null) { | ||
int count = _reader2.read(cbuf, off, len); | ||
if (count > 0) { | ||
return count; | ||
} | ||
_reader2 = null; | ||
} | ||
return -1; | ||
} | ||
|
||
@Override | ||
public void close() throws IOException { | ||
_reader1 = _reader2 = null; | ||
} | ||
} | ||
} |
62 changes: 62 additions & 0 deletions
62
.../src/test/java/com/fasterxml/jackson/dataformat/smile/testutil/PrefixOutputDecorator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
package com.fasterxml.jackson.dataformat.smile.testutil; | ||
|
||
import java.io.FilterOutputStream; | ||
import java.io.IOException; | ||
import java.io.OutputStream; | ||
import java.io.Writer; | ||
|
||
import com.fasterxml.jackson.core.io.IOContext; | ||
import com.fasterxml.jackson.core.io.OutputDecorator; | ||
|
||
@SuppressWarnings("serial") | ||
public class PrefixOutputDecorator extends OutputDecorator | ||
{ | ||
protected final byte[] _prefix; | ||
|
||
public PrefixOutputDecorator(byte[] p) { | ||
_prefix = p; | ||
} | ||
|
||
@Override | ||
public OutputStream decorate(IOContext ctxt, OutputStream out) | ||
throws IOException | ||
{ | ||
out.write(_prefix); | ||
return out; | ||
} | ||
|
||
@Override | ||
public Writer decorate(IOContext ctxt, Writer w) throws IOException { | ||
for (byte b : _prefix) { | ||
w.write((char) (b & 0xFF)); | ||
} | ||
return w; | ||
} | ||
|
||
static class Buffered extends FilterOutputStream { | ||
protected byte[] _prefix; | ||
|
||
public Buffered(OutputStream b, byte[] prefix) { | ||
super(b); | ||
_prefix = prefix; | ||
} | ||
|
||
@Override | ||
public void write(int b) throws IOException { | ||
if (_prefix != null) { | ||
out.write(_prefix); | ||
_prefix = null; | ||
} | ||
super.write(b); | ||
} | ||
|
||
@Override | ||
public void write(byte[] b, int offset, int len) throws IOException { | ||
if (_prefix != null) { | ||
out.write(_prefix); | ||
_prefix = null; | ||
} | ||
super.write(b, offset, len); | ||
} | ||
} | ||
} |