diff --git a/src/main/java/com/alibaba/fastjson/JSONReader.java b/src/main/java/com/alibaba/fastjson/JSONReader.java index 8228aa159..48dc8ffef 100644 --- a/src/main/java/com/alibaba/fastjson/JSONReader.java +++ b/src/main/java/com/alibaba/fastjson/JSONReader.java @@ -16,6 +16,7 @@ import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.parser.JSONLexer; import com.alibaba.fastjson.parser.JSONReaderScanner; import com.alibaba.fastjson.parser.JSONToken; +import com.alibaba.fastjson.util.IOUtils; import com.alibaba.fastjson.util.TypeUtils; public class JSONReader implements Closeable { @@ -77,6 +78,7 @@ public class JSONReader implements Closeable { case PropertyKey: parser.accept(JSONToken.COLON); break; + case PropertyValue: case ArrayValue: parser.accept(JSONToken.COMMA); break; @@ -103,6 +105,10 @@ public class JSONReader implements Closeable { case StartArray: newState = ArrayValue; break; + case PropertyValue: + case StartObject: + newState = PropertyKey; + break; default: break; } @@ -132,7 +138,7 @@ public class JSONReader implements Closeable { } public void close() { - parser.close(); + IOUtils.close(parser); } public Integer readInteger() { diff --git a/src/main/java/com/alibaba/fastjson/asm/Item.java b/src/main/java/com/alibaba/fastjson/asm/Item.java index 69c82c83d..a7ae9f315 100755 --- a/src/main/java/com/alibaba/fastjson/asm/Item.java +++ b/src/main/java/com/alibaba/fastjson/asm/Item.java @@ -174,8 +174,6 @@ final class Item { case ClassWriter.INT: case ClassWriter.FLOAT: return i.intVal == intVal; - case ClassWriter.TYPE_UNINIT: - return i.intVal == intVal && i.strVal1.equals(strVal1); case ClassWriter.NAME_TYPE: return i.strVal1.equals(strVal1) && i.strVal2.equals(strVal2); // case ClassWriter.FIELD: diff --git a/src/main/java/com/alibaba/fastjson/asm/Label.java b/src/main/java/com/alibaba/fastjson/asm/Label.java index 5adbd03e1..322091f5d 100755 --- a/src/main/java/com/alibaba/fastjson/asm/Label.java +++ b/src/main/java/com/alibaba/fastjson/asm/Label.java @@ -212,35 +212,10 @@ public class Label { while (i < referenceCount) { int source = srcAndRefPositions[i++]; int reference = srcAndRefPositions[i++]; - int offset; - if (source >= 0) { - offset = position - source; - if (offset < Short.MIN_VALUE || offset > Short.MAX_VALUE) { - /* - * changes the opcode of the jump instruction, in order to be able to find it later (see - * resizeInstructions in MethodWriter). These temporary opcodes are similar to jump instruction - * opcodes, except that the 2 bytes offset is unsigned (and can therefore represent values from 0 to - * 65535, which is sufficient since the size of a method is limited to 65535 bytes). - */ - int opcode = data[reference - 1] & 0xFF; - if (opcode <= Opcodes.JSR) { - // changes IFEQ ... JSR to opcodes 202 to 217 - data[reference - 1] = (byte) (opcode + 49); - } else { - // changes IFNULL and IFNONNULL to opcodes 218 and 219 - data[reference - 1] = (byte) (opcode + 20); - } - needUpdate = true; - } - data[reference++] = (byte) (offset >>> 8); - data[reference] = (byte) offset; - } else { - offset = position + source + 1; - data[reference++] = (byte) (offset >>> 24); - data[reference++] = (byte) (offset >>> 16); - data[reference++] = (byte) (offset >>> 8); - data[reference] = (byte) offset; - } + int offset = position - source; + data[reference++] = (byte) (offset >>> 8); + data[reference] = (byte) offset; + } return needUpdate; } diff --git a/src/main/java/com/alibaba/fastjson/parser/JSONLexer.java b/src/main/java/com/alibaba/fastjson/parser/JSONLexer.java index ebb64d6cf..97ba295de 100755 --- a/src/main/java/com/alibaba/fastjson/parser/JSONLexer.java +++ b/src/main/java/com/alibaba/fastjson/parser/JSONLexer.java @@ -160,9 +160,6 @@ public abstract class JSONLexer implements Closeable { case 'n': // new,null scanNullOrNew(); return; - case 'D': // Date - scanIdent(); - return; case '(': next(); token = LPAREN; @@ -454,14 +451,6 @@ public abstract class JSONLexer implements Closeable { if (negative) { if (i > np + 1) { if (result >= Integer.MIN_VALUE && type != 'L') { - if (type == 'S') { - return (short) result; - } - - if (type == 'B') { - return (byte) result; - } - return (int) result; } return result; @@ -992,10 +981,6 @@ public abstract class JSONLexer implements Closeable { } public final boolean isRef() { - if (hasSpecial) { - return false; - } - if (sp != 4) { return false; } diff --git a/src/main/java/com/alibaba/fastjson/parser/JSONReaderScanner.java b/src/main/java/com/alibaba/fastjson/parser/JSONReaderScanner.java index 087a963a2..347a6e6d3 100644 --- a/src/main/java/com/alibaba/fastjson/parser/JSONReaderScanner.java +++ b/src/main/java/com/alibaba/fastjson/parser/JSONReaderScanner.java @@ -91,6 +91,9 @@ public final class JSONReaderScanner extends JSONLexer { public final char charAt(int index) { if (index >= bufLength) { if (bufLength == -1) { + if (index < sp) { + return buf[index]; + } return EOI; } diff --git a/src/main/java/com/alibaba/fastjson/parser/JSONScanner.java b/src/main/java/com/alibaba/fastjson/parser/JSONScanner.java index e90884ca4..e8145f3e8 100755 --- a/src/main/java/com/alibaba/fastjson/parser/JSONScanner.java +++ b/src/main/java/com/alibaba/fastjson/parser/JSONScanner.java @@ -15,15 +15,11 @@ */ package com.alibaba.fastjson.parser; -import java.util.ArrayList; import java.util.Calendar; -import java.util.Collection; -import java.util.HashSet; import java.util.Locale; import java.util.TimeZone; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.util.Base64; //这个类,为了性能优化做了很多特别处理,一切都是为了性能!!! @@ -462,521 +458,4 @@ public final class JSONScanner extends JSONLexer { return bp == text.length() || ch == EOI && bp + 1 == text.length(); } - public int scanFieldInt(char[] fieldName) { - matchStat = UNKOWN; - int startPos = this.bp; - char startChar = this.ch; - - if (!charArrayCompare(text, bp, fieldName)) { - matchStat = NOT_MATCH_NAME; - return 0; - } - - int index = bp + fieldName.length; - - char ch = charAt(index++); - - int value; - if (ch >= '0' && ch <= '9') { - value = digits[ch]; - for (;;) { - ch = charAt(index++); - if (ch >= '0' && ch <= '9') { - value = value * 10 + digits[ch]; - } else if (ch == '.') { - matchStat = NOT_MATCH; - return 0; - } else { - bp = index - 1; - break; - } - } - if (value < 0) { - matchStat = NOT_MATCH; - return 0; - } - } else { - matchStat = NOT_MATCH; - return 0; - } - - if (ch == ',') { - this.ch = charAt(++bp); - matchStat = VALUE; - token = JSONToken.COMMA; - return value; - } - - if (ch == '}') { - ch = charAt(++bp); - if (ch == ',') { - token = JSONToken.COMMA; - this.ch = charAt(++bp); - } else if (ch == ']') { - token = JSONToken.RBRACKET; - this.ch = charAt(++bp); - } else if (ch == '}') { - token = JSONToken.RBRACE; - this.ch = charAt(++bp); - } else if (ch == EOI) { - token = JSONToken.EOF; - } else { - this.bp = startPos; - this.ch = startChar; - matchStat = NOT_MATCH; - return 0; - } - matchStat = END; - } - - return value; - } - - public String scanFieldString(char[] fieldName) { - matchStat = UNKOWN; - int startPos = this.bp; - char startChar = this.ch; - - // final int fieldNameLength = fieldName.length; - // for (int i = 0; i < fieldNameLength; ++i) { - // if (fieldName[i] != buf[bp + i]) { - // matchStat = NOT_MATCH_NAME; - // - // return stringDefaultValue(); - // } - // } - - if (!charArrayCompare(text, bp, fieldName)) { - matchStat = NOT_MATCH_NAME; - return stringDefaultValue(); - } - - int index = bp + fieldName.length; - - char ch = charAt(index++); - if (ch != '"') { - matchStat = NOT_MATCH; - - return stringDefaultValue(); - } - - boolean hasSpecial = false; - final String strVal; - { - int startIndex = index; - int endIndex = text.indexOf('"', startIndex); - if (endIndex == -1) { - throw new JSONException("unclosed str"); - } - - String stringVal = subString(startIndex, endIndex - startIndex); - for (int i = 0; i < stringVal.length(); ++i) { - if (stringVal.charAt(i) == '\\') { - hasSpecial = true; - break; - } - } - - if (hasSpecial) { - matchStat = NOT_MATCH; - - return stringDefaultValue(); - } - - bp = endIndex + 1; - this.ch = ch = charAt(bp); - strVal = stringVal; - // this.stringVal = stringVal; - // int pos = endIndex + 1; - // char ch = charAt(pos); - // if (ch != '\'') { - // this.pos = pos; - // this.ch = ch; - // token = LITERAL_CHARS; - // return; - // } - } - - // final int start = index; - // for (;;) { - // ch = charAt(index++); - // if (ch == '\"') { - // bp = index; - // this.ch = ch = charAt(bp); - // strVal = text.substring(start, index - 1); - // // strVal = new String(buf, start, index - start - 1); - // break; - // } - // - // if (ch == '\\') { - // matchStat = NOT_MATCH; - // - // return stringDefaultValue(); - // } - // } - - if (ch == ',') { - this.ch = charAt(++bp); - matchStat = VALUE; - return strVal; - } else if (ch == '}') { - ch = charAt(++bp); - if (ch == ',') { - token = JSONToken.COMMA; - this.ch = charAt(++bp); - } else if (ch == ']') { - token = JSONToken.RBRACKET; - this.ch = charAt(++bp); - } else if (ch == '}') { - token = JSONToken.RBRACE; - this.ch = charAt(++bp); - } else if (ch == EOI) { - token = JSONToken.EOF; - } else { - this.bp = startPos; - this.ch = startChar; - matchStat = NOT_MATCH; - return stringDefaultValue(); - } - matchStat = END; - } else { - matchStat = NOT_MATCH; - - return stringDefaultValue(); - } - - return strVal; - } - - public String scanFieldSymbol(char[] fieldName, final SymbolTable symbolTable) { - matchStat = UNKOWN; - - if (!charArrayCompare(text, bp, fieldName)) { - matchStat = NOT_MATCH_NAME; - return null; - } - - int index = bp + fieldName.length; - - char ch = charAt(index++); - if (ch != '"') { - matchStat = NOT_MATCH; - return null; - } - - String strVal; - int start = index; - int hash = 0; - for (;;) { - ch = charAt(index++); - if (ch == '\"') { - bp = index; - this.ch = ch = charAt(bp); - // strVal = text.substring(start, index - 1).intern(); - strVal = symbolTable.addSymbol(text, start, index - start - 1, hash); - break; - } - - hash = 31 * hash + ch; - - if (ch == '\\') { - matchStat = NOT_MATCH; - return null; - } - } - - if (ch == ',') { - this.ch = charAt(++bp); - matchStat = VALUE; - return strVal; - } else if (ch == '}') { - ch = charAt(++bp); - if (ch == ',') { - token = JSONToken.COMMA; - this.ch = charAt(++bp); - } else if (ch == ']') { - token = JSONToken.RBRACKET; - this.ch = charAt(++bp); - } else if (ch == '}') { - token = JSONToken.RBRACE; - this.ch = charAt(++bp); - } else if (ch == EOI) { - token = JSONToken.EOF; - } else { - matchStat = NOT_MATCH; - return null; - } - matchStat = END; - } else { - matchStat = NOT_MATCH; - return null; - } - - return strVal; - } - - @SuppressWarnings("unchecked") - public Collection scanFieldStringArray(char[] fieldName, Class type) { - matchStat = UNKOWN; - - if (!charArrayCompare(text, bp, fieldName)) { - matchStat = NOT_MATCH_NAME; - return null; - } - - Collection list; - - if (type.isAssignableFrom(HashSet.class)) { - list = new HashSet(); - } else if (type.isAssignableFrom(ArrayList.class)) { - list = new ArrayList(); - } else { - try { - list = (Collection) type.newInstance(); - } catch (Exception e) { - throw new JSONException(e.getMessage(), e); - } - } - - int index = bp + fieldName.length; - - char ch = charAt(index++); - - if (ch != '[') { - matchStat = NOT_MATCH; - return null; - } - - ch = charAt(index++); - - for (;;) { - if (ch != '"') { - matchStat = NOT_MATCH; - return null; - } - - String strVal; - int start = index; - for (;;) { - ch = charAt(index++); - if (ch == '\"') { - strVal = text.substring(start, index - 1); - // strVal = new String(buf, start, index - start - 1); - list.add(strVal); - ch = charAt(index++); - break; - } - - if (ch == '\\') { - matchStat = NOT_MATCH; - return null; - } - } - - if (ch == ',') { - ch = charAt(index++); - continue; - } - - if (ch == ']') { - ch = charAt(index++); - break; - } - - matchStat = NOT_MATCH; - return null; - } - - bp = index; - if (ch == ',') { - this.ch = charAt(bp); - matchStat = VALUE; - return list; - } else if (ch == '}') { - ch = charAt(bp); - if (ch == ',') { - token = JSONToken.COMMA; - this.ch = charAt(++bp); - } else if (ch == ']') { - token = JSONToken.RBRACKET; - this.ch = charAt(++bp); - } else if (ch == '}') { - token = JSONToken.RBRACE; - this.ch = charAt(++bp); - } else if (ch == EOI) { - token = JSONToken.EOF; - this.ch = ch; - } else { - matchStat = NOT_MATCH; - return null; - } - matchStat = END; - } else { - matchStat = NOT_MATCH; - return null; - } - - return list; - } - - public long scanFieldLong(char[] fieldName) { - matchStat = UNKOWN; - int startPos = this.bp; - char startChar = this.ch; - - if (!charArrayCompare(text, bp, fieldName)) { - matchStat = NOT_MATCH_NAME; - return 0; - } - - int index = bp + fieldName.length; - - char ch = charAt(index++); - - long value; - if (ch >= '0' && ch <= '9') { - value = digits[ch]; - for (;;) { - ch = charAt(index++); - if (ch >= '0' && ch <= '9') { - value = value * 10 + digits[ch]; - } else if (ch == '.') { - matchStat = NOT_MATCH; - return 0; - } else { - bp = index - 1; - break; - } - } - if (value < 0) { - this.bp = startPos; - this.ch = startChar; - matchStat = NOT_MATCH; - return 0; - } - } else { - this.bp = startPos; - this.ch = startChar; - matchStat = NOT_MATCH; - return 0; - } - - if (ch == ',') { - ch = charAt(++bp); - matchStat = VALUE; - token = JSONToken.COMMA; - return value; - } else if (ch == '}') { - ch = charAt(++bp); - if (ch == ',') { - token = JSONToken.COMMA; - this.ch = charAt(++bp); - } else if (ch == ']') { - token = JSONToken.RBRACKET; - this.ch = charAt(++bp); - } else if (ch == '}') { - token = JSONToken.RBRACE; - this.ch = charAt(++bp); - } else if (ch == EOI) { - token = JSONToken.EOF; - } else { - this.bp = startPos; - this.ch = startChar; - matchStat = NOT_MATCH; - return 0; - } - matchStat = END; - } else { - matchStat = NOT_MATCH; - return 0; - } - - return value; - } - - public boolean scanFieldBoolean(char[] fieldName) { - matchStat = UNKOWN; - - if (!charArrayCompare(text, bp, fieldName)) { - matchStat = NOT_MATCH_NAME; - return false; - } - - int index = bp + fieldName.length; - - char ch = charAt(index++); - - boolean value; - if (ch == 't') { - if (charAt(index++) != 'r') { - matchStat = NOT_MATCH; - return false; - } - if (charAt(index++) != 'u') { - matchStat = NOT_MATCH; - return false; - } - if (charAt(index++) != 'e') { - matchStat = NOT_MATCH; - return false; - } - - bp = index; - ch = charAt(bp); - value = true; - } else if (ch == 'f') { - if (charAt(index++) != 'a') { - matchStat = NOT_MATCH; - return false; - } - if (charAt(index++) != 'l') { - matchStat = NOT_MATCH; - return false; - } - if (charAt(index++) != 's') { - matchStat = NOT_MATCH; - return false; - } - if (charAt(index++) != 'e') { - matchStat = NOT_MATCH; - return false; - } - - bp = index; - ch = charAt(bp); - value = false; - } else { - matchStat = NOT_MATCH; - return false; - } - - if (ch == ',') { - this.ch = charAt(++bp); - matchStat = VALUE; - token = JSONToken.COMMA; - } else if (ch == '}') { - ch = charAt(++bp); - if (ch == ',') { - token = JSONToken.COMMA; - this.ch = charAt(++bp); - } else if (ch == ']') { - token = JSONToken.RBRACKET; - this.ch = charAt(++bp); - } else if (ch == '}') { - token = JSONToken.RBRACE; - this.ch = charAt(++bp); - } else if (ch == EOI) { - token = JSONToken.EOF; - } else { - matchStat = NOT_MATCH; - return false; - } - matchStat = END; - } else { - matchStat = NOT_MATCH; - return false; - } - - return value; - } } diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/ColorDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/ColorDeserializer.java index abc7654ef..0e7c2fc5a 100755 --- a/src/main/java/com/alibaba/fastjson/parser/deserializer/ColorDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/ColorDeserializer.java @@ -2,15 +2,13 @@ package com.alibaba.fastjson.parser.deserializer; import java.awt.Color; import java.lang.reflect.Type; -import java.util.Collections; -import java.util.Set; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.parser.DefaultJSONParser; import com.alibaba.fastjson.parser.JSONLexer; import com.alibaba.fastjson.parser.JSONToken; -public class ColorDeserializer implements AutowiredObjectDeserializer { +public class ColorDeserializer implements ObjectDeserializer { public final static ColorDeserializer instance = new ColorDeserializer(); @@ -69,9 +67,4 @@ public class ColorDeserializer implements AutowiredObjectDeserializer { public int getFastMatchToken() { return JSONToken.LBRACE; } - - public Set getAutowiredFor() { - return Collections. singleton(Color.class); - } - } diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/DateFormatDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/DateFormatDeserializer.java index f8f6a1ea7..5657cf045 100755 --- a/src/main/java/com/alibaba/fastjson/parser/deserializer/DateFormatDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/DateFormatDeserializer.java @@ -31,6 +31,6 @@ public class DateFormatDeserializer extends AbstractDateDeserializer implements } public int getFastMatchToken() { - return JSONToken.LITERAL_INT; + return JSONToken.LITERAL_STRING; } } diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/FieldDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/FieldDeserializer.java index cc3e7b76c..19420443d 100755 --- a/src/main/java/com/alibaba/fastjson/parser/deserializer/FieldDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/FieldDeserializer.java @@ -35,7 +35,9 @@ public abstract class FieldDeserializer { public abstract void parseField(DefaultJSONParser parser, Object object, Type objectType, Map fieldValues); - public abstract int getFastMatchToken(); + public int getFastMatchToken() { + return 0; + } public void setValue(Object object, boolean value) { setValue(object, Boolean.valueOf(value)); diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/FontDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/FontDeserializer.java index 8e7f05788..84ad7cc3f 100755 --- a/src/main/java/com/alibaba/fastjson/parser/deserializer/FontDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/FontDeserializer.java @@ -2,15 +2,13 @@ package com.alibaba.fastjson.parser.deserializer; import java.awt.Font; import java.lang.reflect.Type; -import java.util.Collections; -import java.util.Set; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.parser.DefaultJSONParser; import com.alibaba.fastjson.parser.JSONLexer; import com.alibaba.fastjson.parser.JSONToken; -public class FontDeserializer implements AutowiredObjectDeserializer { +public class FontDeserializer implements ObjectDeserializer { public final static FontDeserializer instance = new FontDeserializer(); @@ -81,8 +79,4 @@ public class FontDeserializer implements AutowiredObjectDeserializer { public int getFastMatchToken() { return JSONToken.LBRACE; } - - public Set getAutowiredFor() { - return Collections.singleton(Font.class); - } } diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/ListResolveFieldDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/ListResolveFieldDeserializer.java index 52bd45b62..c712393c7 100755 --- a/src/main/java/com/alibaba/fastjson/parser/deserializer/ListResolveFieldDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/ListResolveFieldDeserializer.java @@ -47,17 +47,8 @@ public final class ListResolveFieldDeserializer extends FieldDeserializer { } } - public DefaultJSONParser getParser() { - return parser; - } - - @Override public void parseField(DefaultJSONParser parser, Object object, Type objectType, Map fieldValues) { } - @Override - public int getFastMatchToken() { - return 0; - } } diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/MapResolveFieldDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/MapResolveFieldDeserializer.java index b44d850e6..9a249a799 100755 --- a/src/main/java/com/alibaba/fastjson/parser/deserializer/MapResolveFieldDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/MapResolveFieldDeserializer.java @@ -27,9 +27,4 @@ public final class MapResolveFieldDeserializer extends FieldDeserializer { public void parseField(DefaultJSONParser parser, Object object, Type objectType, Map fieldValues) { } - - @Override - public int getFastMatchToken() { - return 0; - } } diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/PointDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/PointDeserializer.java index 4f4843811..b13207060 100755 --- a/src/main/java/com/alibaba/fastjson/parser/deserializer/PointDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/PointDeserializer.java @@ -2,8 +2,6 @@ package com.alibaba.fastjson.parser.deserializer; import java.awt.Point; import java.lang.reflect.Type; -import java.util.Collections; -import java.util.Set; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONException; @@ -11,7 +9,7 @@ import com.alibaba.fastjson.parser.DefaultJSONParser; import com.alibaba.fastjson.parser.JSONLexer; import com.alibaba.fastjson.parser.JSONToken; -public class PointDeserializer implements AutowiredObjectDeserializer { +public class PointDeserializer implements ObjectDeserializer { public final static PointDeserializer instance = new PointDeserializer(); @@ -80,7 +78,4 @@ public class PointDeserializer implements AutowiredObjectDeserializer { return JSONToken.LBRACE; } - public Set getAutowiredFor() { - return Collections.singleton(Point.class); - } } diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/RectangleDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/RectangleDeserializer.java index f8b0acd17..17d376caf 100755 --- a/src/main/java/com/alibaba/fastjson/parser/deserializer/RectangleDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/RectangleDeserializer.java @@ -2,15 +2,13 @@ package com.alibaba.fastjson.parser.deserializer; import java.awt.Rectangle; import java.lang.reflect.Type; -import java.util.Collections; -import java.util.Set; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.parser.DefaultJSONParser; import com.alibaba.fastjson.parser.JSONLexer; import com.alibaba.fastjson.parser.JSONToken; -public class RectangleDeserializer implements AutowiredObjectDeserializer { +public class RectangleDeserializer implements ObjectDeserializer { public final static RectangleDeserializer instance = new RectangleDeserializer(); @@ -75,7 +73,4 @@ public class RectangleDeserializer implements AutowiredObjectDeserializer { return JSONToken.LBRACE; } - public Set getAutowiredFor() { - return Collections.singleton(Rectangle.class); - } } diff --git a/src/test/java/com/alibaba/fastjson/JSONReaderTest_array_object.java b/src/test/java/com/alibaba/fastjson/JSONReaderTest_array_object.java index 226631bee..3d0ceb9a0 100644 --- a/src/test/java/com/alibaba/fastjson/JSONReaderTest_array_object.java +++ b/src/test/java/com/alibaba/fastjson/JSONReaderTest_array_object.java @@ -42,4 +42,20 @@ public class JSONReaderTest_array_object extends TestCase { reader.endArray(); reader.close(); } + + public void test_read_3() throws Exception { + JSONReader reader = new JSONReader(new JSONScanner(text)); + reader.startArray(); + + int count = 0; + while (reader.hasNext()) { + reader.startObject(); + reader.endObject(); + count++; + } + Assert.assertEquals(10, count); + + reader.endArray(); + reader.close(); + } } diff --git a/src/test/java/com/alibaba/fastjson/JSONReaderTest_object_object.java b/src/test/java/com/alibaba/fastjson/JSONReaderTest_object_object.java index e05af43dc..ee040a972 100644 --- a/src/test/java/com/alibaba/fastjson/JSONReaderTest_object_object.java +++ b/src/test/java/com/alibaba/fastjson/JSONReaderTest_object_object.java @@ -22,6 +22,8 @@ public class JSONReaderTest_object_object extends TestCase { while (reader.hasNext()) { String key = (String) reader.readObject(); Object value = reader.readObject(); + Assert.assertNotNull(key); + Assert.assertNotNull(value); count++; } Assert.assertEquals(10, count); @@ -38,6 +40,10 @@ public class JSONReaderTest_object_object extends TestCase { while (reader.hasNext()) { String key = (String) reader.readObject(); Object value = reader.readObject(); + + Assert.assertNotNull(key); + Assert.assertNotNull(value); + count++; } Assert.assertEquals(10, count); @@ -45,4 +51,37 @@ public class JSONReaderTest_object_object extends TestCase { reader.endObject(); reader.close(); } + + public void test_read_2() throws Exception { + JSONReader reader = new JSONReader(new JSONScanner("{{}:{},{}:{}}")); + reader.startObject(); + + Assert.assertTrue(reader.hasNext()); + reader.startObject(); + reader.endObject(); + + reader.startObject(); + reader.endObject(); + + Assert.assertTrue(reader.hasNext()); + reader.startObject(); + reader.endObject(); + + reader.startObject(); + reader.endObject(); + + Assert.assertFalse(reader.hasNext()); + + reader.endObject(); + + Exception error = null; + try { + reader.hasNext(); + } catch (Exception ex) { + error = ex; + } + Assert.assertNotNull(error); + + reader.close(); + } } diff --git a/src/test/java/com/alibaba/fastjson/JSONReader_error.java b/src/test/java/com/alibaba/fastjson/JSONReader_error.java new file mode 100644 index 000000000..86efee833 --- /dev/null +++ b/src/test/java/com/alibaba/fastjson/JSONReader_error.java @@ -0,0 +1,40 @@ +package com.alibaba.fastjson; + +import java.io.StringReader; + +import junit.framework.TestCase; + +import org.junit.Assert; + +public class JSONReader_error extends TestCase { + + public void test_0() throws Exception { + JSONReader reader = new JSONReader(new StringReader("[]")); + + Exception error = null; + try { + reader.hasNext(); + } catch (Exception e) { + error = e; + } + Assert.assertNotNull(error); + + reader.close(); + } + + public void test_1() throws Exception { + JSONReader reader = new JSONReader(new StringReader("{\"id\":123}")); + + reader.startObject(); + reader.readObject(); + + Exception error = null; + try { + reader.hasNext(); + } catch (Exception e) { + error = e; + } + Assert.assertNotNull(error); + reader.close(); + } +} diff --git a/src/test/java/com/alibaba/fastjson/JSONReader_top.java b/src/test/java/com/alibaba/fastjson/JSONReader_top.java new file mode 100644 index 000000000..59cf6c96c --- /dev/null +++ b/src/test/java/com/alibaba/fastjson/JSONReader_top.java @@ -0,0 +1,26 @@ +package com.alibaba.fastjson; + +import java.io.StringReader; + +import junit.framework.TestCase; + +import org.junit.Assert; + +public class JSONReader_top extends TestCase { + + public void test_int() throws Exception { + JSONReader reader = new JSONReader(new StringReader("123")); + + Assert.assertEquals(new Integer(123), reader.readInteger()); + + reader.close(); + } + + public void test_long() throws Exception { + JSONReader reader = new JSONReader(new StringReader("123")); + + Assert.assertEquals(new Long(123), reader.readLong()); + + reader.close(); + } +} diff --git a/src/test/java/com/alibaba/json/bvt/JSONObjectTest4.java b/src/test/java/com/alibaba/json/bvt/JSONObjectTest4.java new file mode 100644 index 000000000..28e5e1ab1 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/JSONObjectTest4.java @@ -0,0 +1,24 @@ +package com.alibaba.json.bvt; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONField; + +public class JSONObjectTest4 extends TestCase { + + public void test_interface() throws Exception { + VO vo = JSON.parseObject("{id:123}", VO.class); + Assert.assertEquals(123, vo.getId()); + } + + public static interface VO { + @JSONField() + int getId(); + + @JSONField() + void setId(int val); + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/DateParserTest.java b/src/test/java/com/alibaba/json/bvt/parser/DateParserTest.java index 6fb8def18..1773c194f 100755 --- a/src/test/java/com/alibaba/json/bvt/parser/DateParserTest.java +++ b/src/test/java/com/alibaba/json/bvt/parser/DateParserTest.java @@ -2,43 +2,65 @@ package com.alibaba.json.bvt.parser; import java.util.Date; -import org.junit.Assert; import junit.framework.TestCase; +import org.junit.Assert; + import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.parser.DefaultExtJSONParser; +import com.alibaba.fastjson.parser.DefaultJSONParser; import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.parser.ParserConfig; public class DateParserTest extends TestCase { - public void test_date_0() throws Exception { - DefaultExtJSONParser parser = new DefaultExtJSONParser("1294552193254"); + public void test_date_new() throws Exception { + DefaultJSONParser parser = new DefaultJSONParser("new Date(1294552193254)"); java.util.Date date = parser.parseObject(java.util.Date.class); Assert.assertEquals(new java.util.Date(1294552193254L), date); + parser.close(); + } + + public void test_date_new_1() throws Exception { + DefaultJSONParser parser = new DefaultJSONParser("new Date(1294552193254)"); + + java.util.Date date = (java.util.Date) parser.parse(); + + Assert.assertEquals(new java.util.Date(1294552193254L), date); + parser.close(); + } + + public void test_date_0() throws Exception { + DefaultJSONParser parser = new DefaultJSONParser("1294552193254"); + + java.util.Date date = parser.parseObject(java.util.Date.class); + + Assert.assertEquals(new java.util.Date(1294552193254L), date); + parser.close(); } public void test_date_1() throws Exception { int featrues = JSON.DEFAULT_PARSER_FEATURE; featrues = Feature.config(featrues, Feature.AllowISO8601DateFormat, true); - DefaultExtJSONParser parser = new DefaultExtJSONParser("\"2011-01-09T13:49:53.254\"", ParserConfig.getGlobalInstance(), featrues); + DefaultJSONParser parser = new DefaultJSONParser("\"2011-01-09T13:49:53.254\"", ParserConfig.getGlobalInstance(), featrues); java.util.Date date = parser.parseObject(java.util.Date.class); Assert.assertEquals(new java.util.Date(1294552193254L), date); + parser.close(); } public void test_date_2() throws Exception { int featrues = JSON.DEFAULT_PARSER_FEATURE; - DefaultExtJSONParser parser = new DefaultExtJSONParser("new Date(1294552193254)", ParserConfig.getGlobalInstance(), featrues); + DefaultJSONParser parser = new DefaultJSONParser("new Date(1294552193254)", ParserConfig.getGlobalInstance(), featrues); java.util.Date date = parser.parseObject(java.util.Date.class); Assert.assertEquals(new java.util.Date(1294552193254L), date); + parser.close(); } public void test_date_3() throws Exception { @@ -50,11 +72,12 @@ public class DateParserTest extends TestCase { public void test_date_4() throws Exception { int featrues = JSON.DEFAULT_PARSER_FEATURE; featrues = Feature.config(featrues, Feature.AllowISO8601DateFormat, true); - DefaultExtJSONParser parser = new DefaultExtJSONParser("\"2011-01-09\"", ParserConfig.getGlobalInstance(), featrues); + DefaultJSONParser parser = new DefaultJSONParser("\"2011-01-09\"", ParserConfig.getGlobalInstance(), featrues); java.util.Date date = parser.parseObject(java.util.Date.class); Assert.assertEquals(new java.util.Date(1294502400000L), date); + parser.close(); } public void test_date_5() throws Exception { @@ -82,9 +105,10 @@ public class DateParserTest extends TestCase { JSONException error = null; try { - DefaultExtJSONParser parser = new DefaultExtJSONParser("true"); + DefaultJSONParser parser = new DefaultJSONParser("true"); parser.parseObject(java.util.Date.class); + parser.close(); } catch (JSONException e) { error = e; } diff --git a/src/test/java/com/alibaba/json/bvt/parser/JSONLexerTest.java b/src/test/java/com/alibaba/json/bvt/parser/JSONLexerTest.java new file mode 100644 index 000000000..e3881829f --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/JSONLexerTest.java @@ -0,0 +1,25 @@ +package com.alibaba.json.bvt.parser; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + + +public class JSONLexerTest extends TestCase { + public void test_0 () throws Exception { + StringBuilder buf = new StringBuilder("{\"value\":\""); + for (int i = 0; i < 256; ++i) { + buf.append('a'); + } + buf.append("\\n"); + buf.append("\"}"); + + JSONObject json = JSON.parseObject(buf.toString()); + Assert.assertEquals(257, json.getString("value").length()); + Assert.assertEquals('a', json.getString("value").charAt(255)); + Assert.assertEquals('\n', json.getString("value").charAt(256)); + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/JSONLexerTest_2.java b/src/test/java/com/alibaba/json/bvt/parser/JSONLexerTest_2.java new file mode 100644 index 000000000..941703710 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/JSONLexerTest_2.java @@ -0,0 +1,115 @@ +package com.alibaba.json.bvt.parser; + +import java.util.List; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; + +public class JSONLexerTest_2 extends TestCase { + + public void test_0() throws Exception { + VO vo = (VO) JSON.parseObject("{\"@type\":\"com.alibaba.json.bvt.parser.JSONLexerTest_2$VO\"}", VO.class); + Assert.assertNotNull(vo); + } + + public void test_1() throws Exception { + JSON.parseObject("{\"@type\":\"com.alibaba.json.bvt.parser.JSONLexerTest_2$VO1\"}", VO.class); + } + + public void test_2() throws Exception { + JSON.parseObject("{\"@type\":\"com.alibaba.json.bvt.parser.JSONLexerTest_2$A\"}", VO.class); + } + + public void test_a() throws Exception { + P a = JSON.parseObject("{\"vo\":{\"@type\":\"com.alibaba.json.bvt.parser.JSONLexerTest_2$VO\"}}", P.class); + Assert.assertNotNull(a); + } + + public void test_list() throws Exception { + List list = JSON.parseObject("[{\"@type\":\"com.alibaba.json.bvt.parser.JSONLexerTest_2$VO\"}]", + new TypeReference>() { + }); + Assert.assertNotNull(list); + Assert.assertNotNull(list.get(0)); + } + + public void test_list_2() throws Exception { + List list = JSON.parseObject("[{\"@type\":\"com.alibaba.json.bvt.parser.JSONLexerTest_2$VO\"},{}]", + new TypeReference>() { + }); + Assert.assertNotNull(list); + Assert.assertEquals(2, list.size()); + Assert.assertNotNull(list.get(0)); + Assert.assertNotNull(list.get(1)); + } + + public void test_error() throws Exception { + Exception error = null; + try { + JSON.parseObject("[{\"@type\":\"com.alibaba.json.bvt.parser.JSONLexerTest_2$VO\"}[]", + new TypeReference>() { + }); + } catch (Exception ex) { + error = ex; + } + Assert.assertNotNull(error); + } + + public static class P { + + private VO vo; + + public VO getVo() { + return vo; + } + + public void setVo(VO vo) { + this.vo = vo; + } + + } + + public static class VO { + + private int id; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + } + + public static class VO1 { + + private int id; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + } + + public static class A { + + private int id; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/JSONLexerTest_3.java b/src/test/java/com/alibaba/json/bvt/parser/JSONLexerTest_3.java new file mode 100644 index 000000000..232f135ee --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/JSONLexerTest_3.java @@ -0,0 +1,30 @@ +package com.alibaba.json.bvt.parser; + +import com.alibaba.fastjson.JSON; + +import junit.framework.TestCase; + +public class JSONLexerTest_3 extends TestCase { + + public void test_matchField() throws Exception { + JSON.parseObject("{\"val\":{}}", VO.class); + } + + public static class VO { + + private A value; + + public A getValue() { + return value; + } + + public void setValue(A value) { + this.value = value; + } + + } + + public static class A { + + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/JSONLexerTest_4.java b/src/test/java/com/alibaba/json/bvt/parser/JSONLexerTest_4.java new file mode 100644 index 000000000..4c4ef9133 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/JSONLexerTest_4.java @@ -0,0 +1,29 @@ +package com.alibaba.json.bvt.parser; + +import org.junit.Assert; + +import com.alibaba.fastjson.JSON; + +import junit.framework.TestCase; + +public class JSONLexerTest_4 extends TestCase { + + public void test_scanFieldString() throws Exception { + VO vo = JSON.parseObject("{\"value\":\"abc\"}", VO.class); + Assert.assertEquals("abc", vo.getValue()); + } + + public static class VO { + + private String value; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/deser/BigIntegerDeserializerTest.java b/src/test/java/com/alibaba/json/bvt/parser/deser/BigIntegerDeserializerTest.java index 919f3de8e..24b398ec7 100755 --- a/src/test/java/com/alibaba/json/bvt/parser/deser/BigIntegerDeserializerTest.java +++ b/src/test/java/com/alibaba/json/bvt/parser/deser/BigIntegerDeserializerTest.java @@ -1,29 +1,73 @@ package com.alibaba.json.bvt.parser.deser; import java.math.BigInteger; +import java.util.List; -import org.junit.Assert; import junit.framework.TestCase; +import org.junit.Assert; + import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.parser.DefaultExtJSONParser; -import com.alibaba.fastjson.parser.ParserConfig; -import com.alibaba.fastjson.parser.deserializer.BigIntegerDeserializer; public class BigIntegerDeserializerTest extends TestCase { - public void test_null() throws Exception { - String input = "null"; - DefaultExtJSONParser parser = new DefaultExtJSONParser(input, ParserConfig.getGlobalInstance(), JSON.DEFAULT_PARSER_FEATURE); - BigIntegerDeserializer deser = new BigIntegerDeserializer(); - - Assert.assertNull(deser.deserialze(parser, null, null)); - } - public void test_1() throws Exception { BigInteger value = JSON.parseObject("'123'", BigInteger.class); Assert.assertEquals(new BigInteger("123"), value); } + + public void test_vo() throws Exception { + + VO vo = JSON.parseObject("{\"value\":123}", VO.class); + + Assert.assertEquals(new BigInteger("123"), vo.getValue()); + } + + public void test_vo_null() throws Exception { + + VO vo = JSON.parseObject("{\"value\":null}", VO.class); + + Assert.assertEquals(null, vo.getValue()); + } + + public void test_vo2() throws Exception { + + VO2 vo = JSON.parseObject("{\"value\":123}", VO2.class); + + Assert.assertEquals(new BigInteger("123"), vo.getValue()); + } + + public void test_array() throws Exception { + List list = JSON.parseArray("[123,345]", BigInteger.class); + Assert.assertEquals(new BigInteger("123"), list.get(0)); + Assert.assertEquals(new BigInteger("345"), list.get(1)); + } + + public static class VO { + + private BigInteger value; + + public BigInteger getValue() { + return value; + } + + public void setValue(BigInteger value) { + this.value = value; + } + } + + private static class VO2 { + + private BigInteger value; + + public BigInteger getValue() { + return value; + } + + public void setValue(BigInteger value) { + this.value = value; + } + } } diff --git a/src/test/java/com/alibaba/json/bvt/parser/deser/DateFormatDeserializerTest.java b/src/test/java/com/alibaba/json/bvt/parser/deser/DateFormatDeserializerTest.java index 2660c1f6b..ffb7e001c 100644 --- a/src/test/java/com/alibaba/json/bvt/parser/deser/DateFormatDeserializerTest.java +++ b/src/test/java/com/alibaba/json/bvt/parser/deser/DateFormatDeserializerTest.java @@ -1,6 +1,7 @@ package com.alibaba.json.bvt.parser.deser; import java.text.SimpleDateFormat; +import java.util.List; import junit.framework.TestCase; @@ -14,6 +15,13 @@ public class DateFormatDeserializerTest extends TestCase { VO vo = JSON.parseObject("{\"format\":\"\"}", VO.class); Assert.assertEquals(null, vo.getFormat()); } + + public void test_dateFormat_array() throws Exception { + List list = JSON.parseArray("[\"\",null,\"yyyy\"]", SimpleDateFormat.class); + Assert.assertEquals(null, list.get(0)); + Assert.assertEquals(null, list.get(1)); + Assert.assertEquals(new SimpleDateFormat("yyyy"), list.get(2)); + } public void test_dateFormat_null() throws Exception { VO vo = JSON.parseObject("{\"format\":null}", VO.class); diff --git a/src/test/java/com/alibaba/json/bvt/parser/deser/IntegerFieldDeserializerTest3.java b/src/test/java/com/alibaba/json/bvt/parser/deser/IntegerFieldDeserializerTest3.java new file mode 100644 index 000000000..47eb45a0d --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/deser/IntegerFieldDeserializerTest3.java @@ -0,0 +1,51 @@ +package com.alibaba.json.bvt.parser.deser; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONCreator; +import com.alibaba.fastjson.annotation.JSONField; + +public class IntegerFieldDeserializerTest3 extends TestCase { + + public void test_0() throws Exception { + Entity a = JSON.parseObject("{f1:123, f2:null}", Entity.class); + Assert.assertEquals(123, a.getF1()); + Assert.assertEquals(null, a.getF2()); + } + + public void test_1() throws Exception { + Entity a = JSON.parseObject("{f1:22, f2:'33'}", Entity.class); + Assert.assertEquals(22, a.getF1()); + Assert.assertEquals(33, a.getF2().intValue()); + } + + public void test_2() throws Exception { + Entity a = JSON.parseObject("{f1:'22', f2:33}", Entity.class); + Assert.assertEquals(22, a.getF1()); + Assert.assertEquals(33, a.getF2().intValue()); + } + + public static class Entity { + + private int f1 = 124; + private Integer f2 = 123; + + @JSONCreator + public Entity(@JSONField(name="f1") int f1, @JSONField(name="f2") Integer f2){ + this.f1 = f1; + this.f2 = f2; + } + + public int getF1() { + return f1; + } + + public Integer getF2() { + return f2; + } + + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/deser/LongFieldDeserializerTest3.java b/src/test/java/com/alibaba/json/bvt/parser/deser/LongFieldDeserializerTest3.java new file mode 100644 index 000000000..74e7e116b --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/deser/LongFieldDeserializerTest3.java @@ -0,0 +1,51 @@ +package com.alibaba.json.bvt.parser.deser; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONCreator; +import com.alibaba.fastjson.annotation.JSONField; + +public class LongFieldDeserializerTest3 extends TestCase { + + public void test_0() throws Exception { + Entity a = JSON.parseObject("{f1:123, f2:null}", Entity.class); + Assert.assertEquals(123L, a.getF1()); + Assert.assertEquals(null, a.getF2()); + } + + public void test_1() throws Exception { + Entity a = JSON.parseObject("{f1:22, f2:'33'}", Entity.class); + Assert.assertEquals(22L, a.getF1()); + Assert.assertEquals(33L, a.getF2().intValue()); + } + + public void test_2() throws Exception { + Entity a = JSON.parseObject("{f1:'22', f2:33}", Entity.class); + Assert.assertEquals(22L, a.getF1()); + Assert.assertEquals(33L, a.getF2().intValue()); + } + + public static class Entity { + + private long f1 = 124; + private Long f2 = 123L; + + @JSONCreator + public Entity(@JSONField(name = "f1") long f1, @JSONField(name = "f2") Long f2){ + this.f1 = f1; + this.f2 = f2; + } + + public long getF1() { + return f1; + } + + public Long getF2() { + return f2; + } + + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/deser/TimeDeserializerTest2.java b/src/test/java/com/alibaba/json/bvt/parser/deser/TimeDeserializerTest2.java index 968099339..181add7ae 100755 --- a/src/test/java/com/alibaba/json/bvt/parser/deser/TimeDeserializerTest2.java +++ b/src/test/java/com/alibaba/json/bvt/parser/deser/TimeDeserializerTest2.java @@ -1,23 +1,24 @@ package com.alibaba.json.bvt.parser.deser; -import java.awt.Color; +import java.sql.Time; + +import junit.framework.TestCase; + +import org.junit.Assert; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONException; -import org.junit.Assert; -import junit.framework.TestCase; - - public class TimeDeserializerTest2 extends TestCase { - public void test_0 () throws Exception { + + public void test_0() throws Exception { long millis = System.currentTimeMillis(); JSON.parse("{\"@type\":\"java.sql.Time\",\"value\":" + millis + "}"); } - + public void test_error() throws Exception { long millis = System.currentTimeMillis(); - + Exception error = null; try { JSON.parse("{\"@type\":\"java.sql.Time\",33:" + millis + "}"); @@ -26,7 +27,7 @@ public class TimeDeserializerTest2 extends TestCase { } Assert.assertNotNull(error); } - + public void test_error_1() throws Exception { Exception error = null; try { @@ -36,10 +37,10 @@ public class TimeDeserializerTest2 extends TestCase { } Assert.assertNotNull(error); } - + public void test_error_2() throws Exception { long millis = System.currentTimeMillis(); - + Exception error = null; try { JSON.parse("{\"@type\":\"java.sql.Time\",\"value\":" + millis + ",}"); @@ -48,4 +49,28 @@ public class TimeDeserializerTest2 extends TestCase { } Assert.assertNotNull(error); } + + public void test_error_3() throws Exception { + Exception error = null; + try { + JSON.parseObject("{\"time\":{}}", VO.class); + } catch (JSONException ex) { + error = ex; + } + Assert.assertNotNull(error); + } + + public static class VO { + + private Time time; + + public Time getTime() { + return time; + } + + public void setTime(Time time) { + this.time = time; + } + + } } diff --git a/src/test/java/com/alibaba/json/bvt/parser/stream/JSONReaderScannerTest_negative.java b/src/test/java/com/alibaba/json/bvt/parser/stream/JSONReaderScannerTest_negative.java new file mode 100644 index 000000000..f0443e5dd --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/stream/JSONReaderScannerTest_negative.java @@ -0,0 +1,46 @@ +package com.alibaba.json.bvt.parser.stream; + +import java.math.BigDecimal; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.parser.DefaultJSONParser; +import com.alibaba.fastjson.parser.JSONReaderScanner; + +public class JSONReaderScannerTest_negative extends TestCase { + + public void test_double() throws Exception { + char[] chars = "{\"value\":-3.5D}".toCharArray(); + DefaultJSONParser parser = new DefaultJSONParser(new JSONReaderScanner(chars, chars.length)); + JSONObject json = parser.parseObject(); + Assert.assertTrue(-3.5D == ((Double) json.get("value")).doubleValue()); + parser.close(); + } + + public void test_float() throws Exception { + char[] chars = "{\"value\":-3.5F}".toCharArray(); + DefaultJSONParser parser = new DefaultJSONParser(new JSONReaderScanner(chars, chars.length)); + JSONObject json = parser.parseObject(); + Assert.assertTrue(-3.5F == ((Float) json.get("value")).doubleValue()); + parser.close(); + } + + public void test_decimal() throws Exception { + char[] chars = "{\"value\":-3.5}".toCharArray(); + DefaultJSONParser parser = new DefaultJSONParser(new JSONReaderScanner(chars, chars.length)); + JSONObject json = parser.parseObject(); + Assert.assertEquals(new BigDecimal("-3.5"), json.get("value")); + parser.close(); + } + + public void test_long() throws Exception { + char[] chars = "{\"value\":-3L}".toCharArray(); + DefaultJSONParser parser = new DefaultJSONParser(new JSONReaderScanner(chars, chars.length)); + JSONObject json = parser.parseObject(); + Assert.assertTrue(-3L == ((Long) json.get("value")).longValue()); + parser.close(); + } +} diff --git a/src/test/java/com/alibaba/json/bvt/serializer/SerializeWriterTest_8.java b/src/test/java/com/alibaba/json/bvt/serializer/SerializeWriterTest_8.java new file mode 100644 index 000000000..56a4ef69e --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/serializer/SerializeWriterTest_8.java @@ -0,0 +1,33 @@ +package com.alibaba.json.bvt.serializer; + +import java.io.StringWriter; + +import junit.framework.TestCase; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; + + +public class SerializeWriterTest_8 extends TestCase { + public void test_BrowserCompatible() throws Exception { + StringBuilder buf = new StringBuilder(); + for (int i = 0; i < 1024; ++i) { + buf.append('a'); + } + buf.append("中国"); + buf.append("\0"); + JSON.toJSONString(buf.toString(), SerializerFeature.BrowserCompatible); + } + + public void test_writer() throws Exception { + StringBuilder buf = new StringBuilder(); + for (int i = 0; i < 1024; ++i) { + buf.append('a'); + } + buf.append("中国"); + buf.append("\0"); + + StringWriter out = new StringWriter(); + JSON.writeJSONStringTo(buf.toString(), out, SerializerFeature.BrowserCompatible); + } +}