-
-
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.
- Loading branch information
1 parent
7fc8d59
commit 155ec35
Showing
10 changed files
with
256 additions
and
23 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
cbor/src/test/java/com/fasterxml/jackson/dataformat/cbor/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.cbor.filter; | ||
|
||
import java.io.*; | ||
|
||
import com.fasterxml.jackson.core.*; | ||
import com.fasterxml.jackson.dataformat.cbor.*; | ||
import com.fasterxml.jackson.dataformat.cbor.util.PrefixInputDecorator; | ||
import com.fasterxml.jackson.dataformat.cbor.util.PrefixOutputDecorator; | ||
|
||
public class StreamingDecoratorsTest extends CBORTestBase | ||
{ | ||
public void testInputDecorators() throws Exception | ||
{ | ||
final byte[] DOC = cborDoc("42 37"); | ||
final CBORFactory streamF = cborFactory(); | ||
streamF.setInputDecorator(new PrefixInputDecorator(DOC)); | ||
JsonParser p = streamF.createParser(new byte[0], 0, 0); | ||
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); | ||
assertEquals(42, p.getIntValue()); | ||
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); | ||
assertEquals(37, p.getIntValue()); | ||
assertNull(p.nextToken()); | ||
p.close(); | ||
} | ||
|
||
public void testOutputDecorators() throws Exception | ||
{ | ||
final byte[] DOC = cborDoc(" 137"); | ||
final CBORFactory streamF = cborFactory(); | ||
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()); | ||
assertNull(p.nextToken()); | ||
p.close(); | ||
} | ||
} |
84 changes: 84 additions & 0 deletions
84
cbor/src/test/java/com/fasterxml/jackson/dataformat/cbor/util/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,84 @@ | ||
package com.fasterxml.jackson.dataformat.cbor.util; | ||
|
||
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) { | ||
if (in instanceof MySequenceInputStream) { | ||
throw new IllegalStateException("Trying to decorate MySequenceInputStream (double-decoration!)"); | ||
} | ||
return new MySequenceInputStream(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 { | ||
if (r instanceof SequenceReader) { | ||
throw new IllegalStateException("Trying to decorate SequenceReader (double-decoration!)"); | ||
} | ||
String str = new String(_prefix, StandardCharsets.UTF_8); | ||
return new SequenceReader(new StringReader(str), r); | ||
} | ||
|
||
// sub-class only so we can check for "double decoration" | ||
static class MySequenceInputStream extends SequenceInputStream { | ||
public MySequenceInputStream(InputStream in1, InputStream in2) { | ||
super(in1, in2); | ||
} | ||
} | ||
|
||
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; | ||
} | ||
} | ||
} |
64 changes: 64 additions & 0 deletions
64
cbor/src/test/java/com/fasterxml/jackson/dataformat/cbor/util/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,64 @@ | ||
package com.fasterxml.jackson.dataformat.cbor.util; | ||
|
||
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 | ||
{ | ||
if (out instanceof BufferedOut) { | ||
throw new IllegalStateException("Trying to decorate `Buffered` (double-decoration!)"); | ||
} | ||
return new BufferedOut(out, _prefix); | ||
} | ||
|
||
@Override | ||
public Writer decorate(IOContext ctxt, Writer w) throws IOException { | ||
for (byte b : _prefix) { | ||
w.write((char) (b & 0xFF)); | ||
} | ||
return w; | ||
} | ||
|
||
static class BufferedOut extends FilterOutputStream { | ||
protected byte[] _prefix; | ||
|
||
public BufferedOut(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); | ||
} | ||
} | ||
} |
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
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
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
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
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
Oops, something went wrong.