More work on async parsing: now handles String values with escapes, utf-8 split codepoints.
diff --git a/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.java b/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.java
index 8899443..52e4740 100644
--- a/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.java
+++ b/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.java
@@ -4,6 +4,7 @@
import java.io.OutputStream;
import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.core.JsonParser.Feature;
import com.fasterxml.jackson.core.async.ByteArrayFeeder;
import com.fasterxml.jackson.core.async.NonBlockingInputFeeder;
import com.fasterxml.jackson.core.io.CharTypes;
@@ -17,7 +18,7 @@
implements ByteArrayFeeder
{
// This is the main input-code lookup table, fetched eagerly
-// private final static int[] _icUTF8 = CharTypes.getInputCodeUtf8();
+ private final static int[] _icUTF8 = CharTypes.getInputCodeUtf8();
// Latin1 encoding is not supported, but we do use 8-bit subset for
// pre-processing task, to simplify first pass, keep it fast.
@@ -63,14 +64,6 @@
/*
/**********************************************************************
- /* Other state
- /**********************************************************************
- */
-
- protected int _currentQuote;
-
- /*
- /**********************************************************************
/* Life-cycle
/**********************************************************************
*/
@@ -268,6 +261,32 @@
return _finishFloatExponent(true, _inputBuffer[_inputPtr++] & 0xFF);
case MINOR_NUMBER_EXPONENT_DIGITS:
return _finishFloatExponent(false, _inputBuffer[_inputPtr++] & 0xFF);
+
+ case MINOR_VALUE_STRING:
+ return _finishRegularString();
+ case MINOR_VALUE_STRING_UTF8_2:
+ _textBuffer.append((char) _decodeUTF8_2(_pending32, _inputBuffer[_inputPtr++]));
+ return _finishRegularString();
+ case MINOR_VALUE_STRING_UTF8_3:
+ if (!_decodeSplitUTF8_3(_pending32, _pendingBytes, _inputBuffer[_inputPtr++])) {
+ return JsonToken.NOT_AVAILABLE;
+ }
+ return _finishRegularString();
+ case MINOR_VALUE_STRING_UTF8_4:
+ if (!_decodeSplitUTF8_3(_pending32, _pendingBytes, _inputBuffer[_inputPtr++])) {
+ return JsonToken.NOT_AVAILABLE;
+ }
+ return _finishRegularString();
+
+ case MINOR_VALUE_STRING_ESCAPE:
+ {
+ int c = _decodeSplitEscaped(_quoted32, _quotedDigits);
+ if (c < 0) {
+ return JsonToken.NOT_AVAILABLE;
+ }
+ _textBuffer.append((char) c);
+ }
+ return _finishRegularString();
}
VersionUtil.throwInternal();
return null;
@@ -397,7 +416,7 @@
}
if (ch == INT_QUOTE) {
- return _startString(ch);
+ return _startString();
}
switch (ch) {
case '-':
@@ -475,7 +494,7 @@
}
}
if (ch == INT_QUOTE) {
- return _startString(ch);
+ return _startString();
}
switch (ch) {
case '-':
@@ -552,7 +571,7 @@
}
}
if (ch == INT_QUOTE) {
- return _startString(ch);
+ return _startString();
}
switch (ch) {
case '-':
@@ -601,8 +620,10 @@
switch (ch) {
case '\'':
- return _startString(ch);
-
+ if (isEnabled(Feature.ALLOW_SINGLE_QUOTES)) {
+ return _startAposString();
+ }
+ break;
case ',':
// If Feature.ALLOW_MISSING_VALUES is enabled we may allow "missing values",
// that is, encountering a trailing comma or closing marker where value would be expected
@@ -1835,13 +1856,17 @@
return _parseEscapedName(_quadLength, currQuad, currQuadBytes);
}
- protected int _decodeCharEscape() throws IOException
+ private final int _decodeCharEscape() throws IOException
{
int left = _inputEnd - _inputPtr;
-
if (left < 5) { // offline boundary-checking case:
return _decodeSplitEscaped(0, -1);
}
+ return _decodeFastCharEscape();
+ }
+
+ private final int _decodeFastCharEscape() throws IOException
+ {
int c = (int) _inputBuffer[_inputPtr++];
switch (c) {
// First, ones that are mapped
@@ -1906,7 +1931,6 @@
_quotedDigits = bytesRead;
return -1;
}
-
int c = _inputBuffer[_inputPtr++];
if (bytesRead == -1) { // expecting first char after backslash
switch (c) {
@@ -1926,7 +1950,7 @@
case '"':
case '/':
case '\\':
- return (char) c;
+ return c;
case 'u': // and finally hex-escaped
break;
@@ -1972,16 +1996,305 @@
/**********************************************************************
*/
- protected JsonToken _startString(int q) throws IOException
+ protected JsonToken _startAposString() throws IOException
{
- _currentQuote = q;
+ VersionUtil.throwInternal();
return null;
}
+ protected JsonToken _startString() throws IOException
+ {
+ int ptr = _inputPtr;
+ int outPtr = 0;
+ char[] outBuf = _textBuffer.emptyAndGetCurrentSegment();
+ final int[] codes = _icUTF8;
+
+ final int max = Math.min(_inputEnd, (ptr + outBuf.length));
+ final byte[] inputBuffer = _inputBuffer;
+ while (ptr < max) {
+ int c = (int) inputBuffer[ptr] & 0xFF;
+ if (codes[c] != 0) {
+ if (c == INT_QUOTE) {
+ _inputPtr = ptr+1;
+ _textBuffer.setCurrentLength(outPtr);
+ return _valueComplete(JsonToken.VALUE_STRING);
+ }
+ break;
+ }
+ ++ptr;
+ outBuf[outPtr++] = (char) c;
+ }
+ _textBuffer.setCurrentLength(outPtr);
+ _inputPtr = ptr;
+ return _finishRegularString();
+ }
+
+ private final JsonToken _finishRegularString() throws IOException
+ {
+ int c;
+
+ // Here we do want to do full decoding, hence:
+ final int[] codes = _icUTF8;
+ final byte[] inputBuffer = _inputBuffer;
+
+ char[] outBuf = _textBuffer.getBufferWithoutReset();
+ int outPtr = _textBuffer.getCurrentSegmentSize();
+ int ptr = _inputPtr;
+ final int safeEnd = _inputEnd - 5; // longest escape is 6 chars
+
+ main_loop:
+ while (true) {
+ // Then the tight ASCII non-funny-char loop:
+ ascii_loop:
+ while (true) {
+ if (ptr >= _inputEnd) {
+ _inputPtr = ptr;
+ _minorState = MINOR_VALUE_STRING;
+ _textBuffer.setCurrentLength(outPtr);
+ return (_currToken = JsonToken.NOT_AVAILABLE);
+ }
+ if (outPtr >= outBuf.length) {
+ outBuf = _textBuffer.finishCurrentSegment();
+ outPtr = 0;
+ }
+ final int max = Math.min(_inputEnd, (ptr + (outBuf.length - outPtr)));
+ while (ptr < max) {
+ c = inputBuffer[ptr++] & 0xFF;
+ if (codes[c] != 0) {
+ break ascii_loop;
+ }
+ outBuf[outPtr++] = (char) c;
+ }
+ }
+ // Ok: end marker, escape or multi-byte?
+ if (c == INT_QUOTE) {
+ _inputPtr = ptr;
+ _textBuffer.setCurrentLength(outPtr);
+ return _valueComplete(JsonToken.VALUE_STRING);
+ }
+ // If possibly split, use off-lined longer version
+ if (ptr >= safeEnd) {
+ _inputPtr = ptr;
+ _textBuffer.setCurrentLength(outPtr);
+ if (!_decodeSplitMultiByte(c, codes[c], ptr < _inputEnd)) {
+ return (_currToken = JsonToken.NOT_AVAILABLE);
+ }
+ outBuf = _textBuffer.getBufferWithoutReset();
+ outPtr = _textBuffer.getCurrentSegmentSize();
+ ptr = _inputPtr;
+ continue main_loop;
+ }
+ // otherwise use inlined
+ switch (codes[c]) {
+ case 1: // backslash
+ c = _decodeFastCharEscape(); // since we know it's not split
+ break;
+ case 2: // 2-byte UTF
+ c = _decodeUTF8_2(c, _inputBuffer[ptr++]);
+ break;
+ case 3: // 3-byte UTF
+ c = _decodeUTF8_3(c, _inputBuffer[ptr++], _inputBuffer[ptr++]);
+ break;
+ case 4: // 4-byte UTF
+ c = _decodeUTF8_4(c, _inputBuffer[ptr++], _inputBuffer[ptr++],
+ _inputBuffer[ptr++]);
+ // Let's add first part right away:
+ outBuf[outPtr++] = (char) (0xD800 | (c >> 10));
+ if (outPtr >= outBuf.length) {
+ outBuf = _textBuffer.finishCurrentSegment();
+ outPtr = 0;
+ }
+ c = 0xDC00 | (c & 0x3FF);
+ // And let the other char output down below
+ break;
+ default:
+ if (c < INT_SPACE) {
+ // Note: call can now actually return (to allow unquoted linefeeds)
+ _throwUnquotedSpace(c, "string value");
+ } else {
+ // Is this good enough error message?
+ _reportInvalidChar(c);
+ }
+ }
+ // Need more room?
+ if (outPtr >= outBuf.length) {
+ outBuf = _textBuffer.finishCurrentSegment();
+ outPtr = 0;
+ }
+ // Ok, let's add char to output:
+ outBuf[outPtr++] = (char) c;
+ }
+ }
+
+ private final boolean _decodeSplitMultiByte(int c, int type, boolean gotNext)
+ throws IOException
+ {
+ switch (type) {
+ case 1:
+ c = _decodeSplitEscaped(0, -1);
+ if (c < 0) {
+ _minorState = MINOR_VALUE_STRING_ESCAPE;
+ return false;
+ }
+ _textBuffer.append((char) c);
+ return true;
+ case 2: // 2-byte UTF; easy, either got both, or just miss one
+ if (gotNext) {
+ // NOTE: always succeeds, no need to check
+ c = _decodeUTF8_2(c, _inputBuffer[_inputPtr++]);
+ _textBuffer.append((char) c);
+ return true;
+ }
+ _minorState = MINOR_VALUE_STRING_UTF8_2;
+ _pending32 = c;
+ return false;
+ case 3: // 3-byte UTF
+ c &= 0x0F;
+ if (gotNext) {
+ return _decodeSplitUTF8_3(c, 1, _inputBuffer[_inputPtr++]);
+ }
+ _minorState = MINOR_VALUE_STRING_UTF8_3;
+ _pending32 = c;
+ _pendingBytes = 1;
+ return false;
+ case 4: // 4-byte UTF
+ c &= 0x07;
+ if (gotNext) {
+ return _decodeSplitUTF8_4(c, 1, _inputBuffer[_inputPtr++]);
+ }
+ _pending32 = c;
+ _pendingBytes = 1;
+ _minorState = MINOR_VALUE_STRING_UTF8_4;
+ return false;
+ default:
+ if (c < INT_SPACE) {
+ // Note: call can now actually return (to allow unquoted linefeeds)
+ _throwUnquotedSpace(c, "string value");
+ } else {
+ // Is this good enough error message?
+ _reportInvalidChar(c);
+ }
+ _textBuffer.append((char) c);
+ return true;
+ }
+ }
+
+ private final boolean _decodeSplitUTF8_3(int prev, int prevCount, int next)
+ throws IOException
+ {
+ if (prevCount == 1) {
+ if ((next & 0xC0) != 0x080) {
+ _reportInvalidOther(next & 0xFF, _inputPtr);
+ }
+ prev = (prev << 6) | (next & 0x3F);
+ if (_inputPtr >= _inputEnd) {
+ _minorState = MINOR_VALUE_STRING_UTF8_3;
+ _pending32 = prev;
+ _pendingBytes = 2;
+ return false;
+ }
+ next = _inputBuffer[_inputPtr++];
+ }
+ if ((next & 0xC0) != 0x080) {
+ _reportInvalidOther(next & 0xFF, _inputPtr);
+ }
+ _textBuffer.append((char) ((prev << 6) | (next & 0x3F)));
+ return true;
+ }
+
+ // @return Character value <b>minus 0x10000</c>; this so that caller
+ // can readily expand it to actual surrogates
+ private final boolean _decodeSplitUTF8_4(int prev, int prevCount, int next)
+ throws IOException
+ {
+ if (prevCount == 1) {
+ if ((next & 0xC0) != 0x080) {
+ _reportInvalidOther(next & 0xFF, _inputPtr);
+ }
+ prev = (prev << 6) | (next & 0x3F);
+ if (_inputPtr >= _inputEnd) {
+ _minorState = MINOR_VALUE_STRING_UTF8_4;
+ _pending32 = prev;
+ _pendingBytes = 2;
+ return false;
+ }
+ prevCount = 2;
+ next = _inputBuffer[_inputPtr++];
+ }
+ if (prevCount == 2) {
+ if ((next & 0xC0) != 0x080) {
+ _reportInvalidOther(next & 0xFF, _inputPtr);
+ }
+ if (_inputPtr >= _inputEnd) {
+ _minorState = MINOR_VALUE_STRING_UTF8_4;
+ _pending32 = prev;
+ _pendingBytes = 3;
+ return false;
+ }
+ next = _inputBuffer[_inputPtr++];
+ }
+ if ((next & 0xC0) != 0x080) {
+ _reportInvalidOther(next & 0xFF, _inputPtr);
+ }
+ int c = ((prev << 6) | (next & 0x3F)) - 0x10000;
+
+ // Let's add first part right away:
+ _textBuffer.append((char) (0xD800 | (c >> 10)));
+ c = 0xDC00 | (c & 0x3FF);
+ // And let the other char output down below
+ _textBuffer.append((char) c);
+ return true;
+ }
+
// !!! TODO: only temporarily here
private final boolean _loadMore() {
VersionUtil.throwInternal();
return false;
}
+
+ /*
+ /**********************************************************************
+ /* Internal methods, UTF8 decoding
+ /**********************************************************************
+ */
+
+ private final int _decodeUTF8_2(int c, int d) throws IOException
+ {
+ if ((d & 0xC0) != 0x080) {
+ _reportInvalidOther(d & 0xFF, _inputPtr);
+ }
+ return ((c & 0x1F) << 6) | (d & 0x3F);
+ }
+
+ private final int _decodeUTF8_3(int c, int d, int e) throws IOException
+ {
+ c &= 0x0F;
+ if ((d & 0xC0) != 0x080) {
+ _reportInvalidOther(d & 0xFF, _inputPtr);
+ }
+ c = (c << 6) | (d & 0x3F);
+ if ((e & 0xC0) != 0x080) {
+ _reportInvalidOther(e & 0xFF, _inputPtr);
+ }
+ return (c << 6) | (e & 0x3F);
+ }
+
+ // @return Character value <b>minus 0x10000</c>; this so that caller
+ // can readily expand it to actual surrogates
+ private final int _decodeUTF8_4(int c, int d, int e, int f) throws IOException
+ {
+ if ((d & 0xC0) != 0x080) {
+ _reportInvalidOther(d & 0xFF, _inputPtr);
+ }
+ c = ((c & 0x07) << 6) | (d & 0x3F);
+ if ((e & 0xC0) != 0x080) {
+ _reportInvalidOther(e & 0xFF, _inputPtr);
+ }
+ c = (c << 6) | (e & 0x3F);
+ if ((f & 0xC0) != 0x080) {
+ _reportInvalidOther(f & 0xFF, _inputPtr);
+ }
+ return ((c << 6) | (f & 0x3F)) - 0x10000;
+ }
}
diff --git a/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.java b/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.java
index 464771a..b718b09 100644
--- a/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.java
+++ b/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.java
@@ -94,8 +94,11 @@
protected final static int MINOR_NUMBER_EXPONENT_MARKER = 25;
protected final static int MINOR_NUMBER_EXPONENT_DIGITS = 27;
- protected final static int MINOR_VALUE_STRING = 45;
-
+ protected final static int MINOR_VALUE_STRING = 30;
+ protected final static int MINOR_VALUE_STRING_ESCAPE = 31;
+ protected final static int MINOR_VALUE_STRING_UTF8_2 = 32;
+ protected final static int MINOR_VALUE_STRING_UTF8_3 = 33;
+ protected final static int MINOR_VALUE_STRING_UTF8_4 = 34;
/**
* Special state at which point decoding of a non-quoted token has encountered
@@ -748,6 +751,14 @@
_tokenInputCol = ptr - _currInputRowStart;
}
+ protected void _reportInvalidChar(int c) throws JsonParseException {
+ // Either invalid WS or illegal UTF-8 start char
+ if (c < INT_SPACE) {
+ _throwInvalidSpace(c);
+ }
+ _reportInvalidInitial(c);
+ }
+
protected void _reportInvalidInitial(int mask) throws JsonParseException {
_reportError("Invalid UTF-8 start byte 0x"+Integer.toHexString(mask));
}
diff --git a/src/test/java/com/fasterxml/jackson/core/async/AsyncFieldNamesTest.java b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncFieldNamesTest.java
similarity index 95%
rename from src/test/java/com/fasterxml/jackson/core/async/AsyncFieldNamesTest.java
rename to src/test/java/com/fasterxml/jackson/core/json/async/AsyncFieldNamesTest.java
index 76aee0e..641bc88 100644
--- a/src/test/java/com/fasterxml/jackson/core/async/AsyncFieldNamesTest.java
+++ b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncFieldNamesTest.java
@@ -1,8 +1,9 @@
-package com.fasterxml.jackson.core.async;
+package com.fasterxml.jackson.core.json.async;
import java.io.*;
import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.core.async.AsyncTestBase;
import com.fasterxml.jackson.core.testsupport.AsyncReaderWrapper;
public class AsyncFieldNamesTest extends AsyncTestBase
diff --git a/src/test/java/com/fasterxml/jackson/core/async/AsyncNumberCoercionTest.java b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncNumberCoercionTest.java
similarity index 98%
rename from src/test/java/com/fasterxml/jackson/core/async/AsyncNumberCoercionTest.java
rename to src/test/java/com/fasterxml/jackson/core/json/async/AsyncNumberCoercionTest.java
index 042a503..cc92576 100644
--- a/src/test/java/com/fasterxml/jackson/core/async/AsyncNumberCoercionTest.java
+++ b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncNumberCoercionTest.java
@@ -1,4 +1,4 @@
-package com.fasterxml.jackson.core.async;
+package com.fasterxml.jackson.core.json.async;
import java.io.IOException;
import java.math.BigDecimal;
@@ -7,6 +7,7 @@
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser.NumberType;
+import com.fasterxml.jackson.core.async.AsyncTestBase;
import com.fasterxml.jackson.core.testsupport.AsyncReaderWrapper;
import com.fasterxml.jackson.core.JsonToken;
diff --git a/src/test/java/com/fasterxml/jackson/core/async/AsyncRootValuesTest.java b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncRootValuesTest.java
similarity index 98%
rename from src/test/java/com/fasterxml/jackson/core/async/AsyncRootValuesTest.java
rename to src/test/java/com/fasterxml/jackson/core/json/async/AsyncRootValuesTest.java
index 344315d..eae4a44 100644
--- a/src/test/java/com/fasterxml/jackson/core/async/AsyncRootValuesTest.java
+++ b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncRootValuesTest.java
@@ -1,9 +1,10 @@
-package com.fasterxml.jackson.core.async;
+package com.fasterxml.jackson.core.json.async;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.core.async.AsyncTestBase;
import com.fasterxml.jackson.core.testsupport.AsyncReaderWrapper;
public class AsyncRootValuesTest extends AsyncTestBase
diff --git a/src/test/java/com/fasterxml/jackson/core/async/AsyncScalarArrayTest.java b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncScalarArrayTest.java
similarity index 98%
rename from src/test/java/com/fasterxml/jackson/core/async/AsyncScalarArrayTest.java
rename to src/test/java/com/fasterxml/jackson/core/json/async/AsyncScalarArrayTest.java
index bfcb914..8541d8f 100644
--- a/src/test/java/com/fasterxml/jackson/core/async/AsyncScalarArrayTest.java
+++ b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncScalarArrayTest.java
@@ -1,9 +1,10 @@
-package com.fasterxml.jackson.core.async;
+package com.fasterxml.jackson.core.json.async;
import java.io.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.JsonParser.NumberType;
+import com.fasterxml.jackson.core.async.AsyncTestBase;
import com.fasterxml.jackson.core.testsupport.AsyncReaderWrapper;
public class AsyncScalarArrayTest extends AsyncTestBase
diff --git a/src/test/java/com/fasterxml/jackson/core/async/AsyncSimpleNestedTest.java b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncSimpleNestedTest.java
similarity index 98%
rename from src/test/java/com/fasterxml/jackson/core/async/AsyncSimpleNestedTest.java
rename to src/test/java/com/fasterxml/jackson/core/json/async/AsyncSimpleNestedTest.java
index a8fe84f..5922db0 100644
--- a/src/test/java/com/fasterxml/jackson/core/async/AsyncSimpleNestedTest.java
+++ b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncSimpleNestedTest.java
@@ -1,8 +1,9 @@
-package com.fasterxml.jackson.core.async;
+package com.fasterxml.jackson.core.json.async;
import java.io.IOException;
import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.core.async.AsyncTestBase;
import com.fasterxml.jackson.core.testsupport.AsyncReaderWrapper;
public class AsyncSimpleNestedTest extends AsyncTestBase
diff --git a/src/test/java/com/fasterxml/jackson/core/async/AsyncSimpleObjectTest.java b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncSimpleObjectTest.java
similarity index 99%
rename from src/test/java/com/fasterxml/jackson/core/async/AsyncSimpleObjectTest.java
rename to src/test/java/com/fasterxml/jackson/core/json/async/AsyncSimpleObjectTest.java
index 907c954..9e29475 100644
--- a/src/test/java/com/fasterxml/jackson/core/async/AsyncSimpleObjectTest.java
+++ b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncSimpleObjectTest.java
@@ -1,4 +1,4 @@
-package com.fasterxml.jackson.core.async;
+package com.fasterxml.jackson.core.json.async;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
diff --git a/src/test/java/com/fasterxml/jackson/failing/async/AsyncStringObjectTest.java b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncStringObjectTest.java
similarity index 92%
rename from src/test/java/com/fasterxml/jackson/failing/async/AsyncStringObjectTest.java
rename to src/test/java/com/fasterxml/jackson/core/json/async/AsyncStringObjectTest.java
index cd4a370..e9dd38b 100644
--- a/src/test/java/com/fasterxml/jackson/failing/async/AsyncStringObjectTest.java
+++ b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncStringObjectTest.java
@@ -1,4 +1,4 @@
-package com.fasterxml.jackson.failing.async;
+package com.fasterxml.jackson.core.json.async;
import java.io.IOException;
@@ -17,15 +17,7 @@
private final JsonFactory JSON_F = new JsonFactory();
- public void testBasicFieldsNamesSharedNames() throws IOException {
- _testBasicFieldsNames(true);
- }
-
- public void testBasicFieldsNamesNonShared() throws IOException {
- _testBasicFieldsNames(false);
- }
-
- private void _testBasicFieldsNames(boolean sharedNames) throws IOException
+ public void testBasicFieldsNames() throws IOException
{
final String json = aposToQuotes(String.format("{'%s':'%s','%s':'%s','%s':'%s'}",
UNICODE_SHORT_NAME, UNICODE_LONG_NAME,
diff --git a/src/test/java/com/fasterxml/jackson/core/async/ConfigTest.java b/src/test/java/com/fasterxml/jackson/core/json/async/ConfigTest.java
similarity index 90%
rename from src/test/java/com/fasterxml/jackson/core/async/ConfigTest.java
rename to src/test/java/com/fasterxml/jackson/core/json/async/ConfigTest.java
index 664432e..83c959b 100644
--- a/src/test/java/com/fasterxml/jackson/core/async/ConfigTest.java
+++ b/src/test/java/com/fasterxml/jackson/core/json/async/ConfigTest.java
@@ -1,8 +1,9 @@
-package com.fasterxml.jackson.core.async;
+package com.fasterxml.jackson.core.json.async;
import java.io.*;
import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.core.async.AsyncTestBase;
import com.fasterxml.jackson.core.testsupport.AsyncReaderWrapper;
public class ConfigTest extends AsyncTestBase
diff --git a/src/test/java/com/fasterxml/jackson/failing/async/AsyncStringArrayTest.java b/src/test/java/com/fasterxml/jackson/failing/async/AsyncStringArrayTest.java
index f01667f..49636cf 100644
--- a/src/test/java/com/fasterxml/jackson/failing/async/AsyncStringArrayTest.java
+++ b/src/test/java/com/fasterxml/jackson/failing/async/AsyncStringArrayTest.java
@@ -90,9 +90,9 @@
byte[] data = _stringDoc(f, input);
// first: require headers, no offsets
+ _testStrings(f, input, data, 0, 9000);
_testStrings(f, input, data, 0, 1);
_testStrings(f, input, data, 0, 3);
- _testStrings(f, input, data, 0, 9000);
// then with some offsets:
_testStrings(f, input, data, 1, 9000);