From 8166c54fdd09054c0e67afa3a45a2d2c18ea0eb1 Mon Sep 17 00:00:00 2001 From: John Huffaker Date: Mon, 14 May 2018 12:20:01 -0700 Subject: [PATCH] Roll back to old date time validator Allow people to still use the new formatter via the mechanism described in example 8. fixes #261 --- .../common/RFC3339DateTimeAttribute.java | 9 + .../CommonFormatAttributesDictionary.java | 4 +- .../format/rfc3339/DateTimeTest.java | 45 +++++ .../resources/format/common/date-time.json | 94 ++--------- .../resources/format/rfc3339/date-time.json | 154 ++++++++++++++++++ 5 files changed, 221 insertions(+), 85 deletions(-) create mode 100644 src/test/java/com/github/fge/jsonschema/format/rfc3339/DateTimeTest.java create mode 100644 src/test/resources/format/rfc3339/date-time.json diff --git a/src/main/java/com/github/fge/jsonschema/format/common/RFC3339DateTimeAttribute.java b/src/main/java/com/github/fge/jsonschema/format/common/RFC3339DateTimeAttribute.java index 18e73f035..b8a0fbe4c 100644 --- a/src/main/java/com/github/fge/jsonschema/format/common/RFC3339DateTimeAttribute.java +++ b/src/main/java/com/github/fge/jsonschema/format/common/RFC3339DateTimeAttribute.java @@ -2,6 +2,8 @@ import java.util.List; +import com.github.fge.jsonschema.cfg.ValidationConfiguration; +import com.github.fge.jsonschema.library.DraftV4Library; import org.joda.time.format.DateTimeFormatter; import org.joda.time.format.DateTimeFormatterBuilder; import org.joda.time.format.DateTimeParser; @@ -18,6 +20,13 @@ /** * A {@link DateTimeFormatter} for date and time format defined in RFC3339. * @see RFC 3339 - Section 5.6 + * + * This is backwards incompat with the original DateTimeAttribute. It will become the default in the future + * to use it currently you need to: + * Library library = DraftV4Library.get().thaw() + * .addFormatAttribute("date-time", RFC3339DateTimeAttribute.getInstance()) + * .freeze(); + * Then follow the rest of the steps in example 8 to hook it into your flow. */ public class RFC3339DateTimeAttribute extends AbstractFormatAttribute { diff --git a/src/main/java/com/github/fge/jsonschema/library/format/CommonFormatAttributesDictionary.java b/src/main/java/com/github/fge/jsonschema/library/format/CommonFormatAttributesDictionary.java index 97e9d884b..919758bf9 100644 --- a/src/main/java/com/github/fge/jsonschema/library/format/CommonFormatAttributesDictionary.java +++ b/src/main/java/com/github/fge/jsonschema/library/format/CommonFormatAttributesDictionary.java @@ -22,9 +22,9 @@ import com.github.fge.jsonschema.core.util.Dictionary; import com.github.fge.jsonschema.core.util.DictionaryBuilder; import com.github.fge.jsonschema.format.FormatAttribute; +import com.github.fge.jsonschema.format.common.DateTimeAttribute; import com.github.fge.jsonschema.format.common.EmailAttribute; import com.github.fge.jsonschema.format.common.IPv6Attribute; -import com.github.fge.jsonschema.format.common.RFC3339DateTimeAttribute; import com.github.fge.jsonschema.format.common.RegexAttribute; import com.github.fge.jsonschema.format.common.URIAttribute; @@ -49,7 +49,7 @@ private CommonFormatAttributesDictionary() FormatAttribute attribute; name = "date-time"; - attribute = RFC3339DateTimeAttribute.getInstance(); + attribute = DateTimeAttribute.getInstance(); builder.addEntry(name, attribute); name = "email"; diff --git a/src/test/java/com/github/fge/jsonschema/format/rfc3339/DateTimeTest.java b/src/test/java/com/github/fge/jsonschema/format/rfc3339/DateTimeTest.java new file mode 100644 index 000000000..d871bc6b4 --- /dev/null +++ b/src/test/java/com/github/fge/jsonschema/format/rfc3339/DateTimeTest.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2014, Francis Galiegue (fgaliegue@gmail.com) + * + * This software is dual-licensed under: + * + * - the Lesser General Public License (LGPL) version 3.0 or, at your option, any + * later version; + * - the Apache Software License (ASL) version 2.0. + * + * The text of this file and of both licenses is available at the root of this + * project or, if you have the jar distribution, in directory META-INF/, under + * the names LGPL-3.0.txt and ASL-2.0.txt respectively. + * + * Direct link to the sources: + * + * - LGPL 3.0: https://www.gnu.org/licenses/lgpl-3.0.txt + * - ASL 2.0: http://www.apache.org/licenses/LICENSE-2.0.txt + */ + +package com.github.fge.jsonschema.format.rfc3339; + +import com.github.fge.jsonschema.core.util.Dictionary; +import com.github.fge.jsonschema.core.util.DictionaryBuilder; +import com.github.fge.jsonschema.format.AbstractFormatAttributeTest; +import com.github.fge.jsonschema.format.FormatAttribute; +import com.github.fge.jsonschema.format.common.RFC3339DateTimeAttribute; + +import java.io.IOException; +import java.text.Format; + +public final class DateTimeTest + extends AbstractFormatAttributeTest +{ + private static final Dictionary dict = + Dictionary + .newBuilder() + .addEntry("date-time", RFC3339DateTimeAttribute.getInstance()) + .freeze(); + + public DateTimeTest() + throws IOException + { + super(dict, "rfc3339", "date-time"); + } +} diff --git a/src/test/resources/format/common/date-time.json b/src/test/resources/format/common/date-time.json index 1ee20602d..f79dcc701 100644 --- a/src/test/resources/format/common/date-time.json +++ b/src/test/resources/format/common/date-time.json @@ -1,6 +1,6 @@ [ { - "data": "2012-12-02T13:05:00+01:00", + "data": "2012-12-02T13:05:00+0100", "valid": true }, { @@ -20,90 +20,22 @@ "valid": true }, { - "data": "2012-08-07T20:42:32+10:00", - "valid": true - }, - { - "data": "2012-08-07T20:42:32-05:30", - "valid": true - }, - { - "data": "201202030", - "valid": false, - "message": "err.format.invalidDate", - "msgData": { - "value": "201202030", - "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] - }, - "msgParams": [ "value", "expected" ] - }, - { - "data": "2012-12-02T13:05:00+0100", - "valid": false, - "message": "err.format.invalidDate", - "msgData": { - "value": "2012-12-02T13:05:00+0100", - "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] - }, - "msgParams": [ "value", "expected" ] - }, - { - "data": "2012-12-02T13:05:00+01:30:30", - "valid": false, - "message": "err.format.invalidDate", - "msgData": { - "value": "2012-12-02T13:05:00+01:30:30", - "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] - }, - "msgParams": [ "value", "expected" ] - }, - { - "data": "2012-12-02T13:05:00Z[Europe/Paris]", - "valid": false, - "message": "err.format.invalidDate", - "msgData": { - "value": "2012-12-02T13:05:00Z[Europe/Paris]", - "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] - }, - "msgParams": [ "value", "expected" ] - }, - { - "data": "2012-12-02T13:05:00+10:00Z", - "valid": false, - "message": "err.format.invalidDate", - "msgData": { - "value": "2012-12-02T13:05:00+10:00Z", - "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] - }, - "msgParams": [ "value", "expected" ] - }, - { - "data": "2012-12-02T13:05:00America/New_York", + "data": "2012-02-30T00:00:00+0000", "valid": false, "message": "err.format.invalidDate", "msgData": { - "value": "2012-12-02T13:05:00America/New_York", - "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] + "value": "2012-02-30T00:00:00+0000", + "expected": [ "yyyy-MM-dd'T'HH:mm:ssZ", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z" ] }, "msgParams": [ "value", "expected" ] }, { - "data": "2012-12-02T13:05:00[America/New_York]", - "valid": false, - "message": "err.format.invalidDate", - "msgData": { - "value": "2012-12-02T13:05:00[America/New_York]", - "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] - }, - "msgParams": [ "value", "expected" ] - }, - { - "data": "2012-12-02T13:05:00.123456", + "data": "201202030", "valid": false, "message": "err.format.invalidDate", "msgData": { - "value": "2012-12-02T13:05:00.123456", - "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] + "value": "201202030", + "expected": [ "yyyy-MM-dd'T'HH:mm:ssZ", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z" ] }, "msgParams": [ "value", "expected" ] }, @@ -111,10 +43,6 @@ "data": "2012-08-07T20:42:32.1234Z", "valid": true }, - { - "data": "2012-08-07T20:42:32.1234+05:00", - "valid": true - }, { "data": "2012-08-07T20:42:32.12345Z", "valid": true @@ -131,6 +59,10 @@ "data": "2012-08-07T20:42:32.12345678Z", "valid": true }, + { + "data": "2012-08-07T20:42:32.12345678Z", + "valid": true + }, { "data": "2012-08-07T20:42:32.123456789Z", "valid": true @@ -146,9 +78,5 @@ { "data": "2012-08-07T20:42:32.123456789012Z", "valid": true - }, - { - "data": "2012-08-07T20:42:32.123456789012+05:00", - "valid": true } ] diff --git a/src/test/resources/format/rfc3339/date-time.json b/src/test/resources/format/rfc3339/date-time.json new file mode 100644 index 000000000..1ee20602d --- /dev/null +++ b/src/test/resources/format/rfc3339/date-time.json @@ -0,0 +1,154 @@ +[ + { + "data": "2012-12-02T13:05:00+01:00", + "valid": true + }, + { + "data": "2001-02-12T00:00:00Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.123Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.13Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32+10:00", + "valid": true + }, + { + "data": "2012-08-07T20:42:32-05:30", + "valid": true + }, + { + "data": "201202030", + "valid": false, + "message": "err.format.invalidDate", + "msgData": { + "value": "201202030", + "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] + }, + "msgParams": [ "value", "expected" ] + }, + { + "data": "2012-12-02T13:05:00+0100", + "valid": false, + "message": "err.format.invalidDate", + "msgData": { + "value": "2012-12-02T13:05:00+0100", + "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] + }, + "msgParams": [ "value", "expected" ] + }, + { + "data": "2012-12-02T13:05:00+01:30:30", + "valid": false, + "message": "err.format.invalidDate", + "msgData": { + "value": "2012-12-02T13:05:00+01:30:30", + "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] + }, + "msgParams": [ "value", "expected" ] + }, + { + "data": "2012-12-02T13:05:00Z[Europe/Paris]", + "valid": false, + "message": "err.format.invalidDate", + "msgData": { + "value": "2012-12-02T13:05:00Z[Europe/Paris]", + "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] + }, + "msgParams": [ "value", "expected" ] + }, + { + "data": "2012-12-02T13:05:00+10:00Z", + "valid": false, + "message": "err.format.invalidDate", + "msgData": { + "value": "2012-12-02T13:05:00+10:00Z", + "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] + }, + "msgParams": [ "value", "expected" ] + }, + { + "data": "2012-12-02T13:05:00America/New_York", + "valid": false, + "message": "err.format.invalidDate", + "msgData": { + "value": "2012-12-02T13:05:00America/New_York", + "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] + }, + "msgParams": [ "value", "expected" ] + }, + { + "data": "2012-12-02T13:05:00[America/New_York]", + "valid": false, + "message": "err.format.invalidDate", + "msgData": { + "value": "2012-12-02T13:05:00[America/New_York]", + "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] + }, + "msgParams": [ "value", "expected" ] + }, + { + "data": "2012-12-02T13:05:00.123456", + "valid": false, + "message": "err.format.invalidDate", + "msgData": { + "value": "2012-12-02T13:05:00.123456", + "expected": [ "yyyy-MM-dd'T'HH:mm:ss((+|-)HH:mm|Z)", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}((+|-)HH:mm|Z)" ] + }, + "msgParams": [ "value", "expected" ] + }, + { + "data": "2012-08-07T20:42:32.1234Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.1234+05:00", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.12345Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.123456Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.1234567Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.12345678Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.123456789Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.1234567890Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.12345678901Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.123456789012Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.123456789012+05:00", + "valid": true + } +]