You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by je...@apache.org on 2018/11/19 17:42:19 UTC
[sling-org-apache-sling-api] branch SLING-8116 updated: SLING-8116
Updated ValueMaps to rely on default methods
This is an automated email from the ASF dual-hosted git repository.
jeb pushed a commit to branch SLING-8116
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-api.git
The following commit(s) were added to refs/heads/SLING-8116 by this push:
new f60f080 SLING-8116 Updated ValueMaps to rely on default methods
f60f080 is described below
commit f60f08062b2f8d3b39a3d231eef1a856fda3e4dd
Author: JE Bailey <je...@apache.org>
AuthorDate: Mon Nov 19 12:42:13 2018 -0500
SLING-8116 Updated ValueMaps to rely on default methods
Redefined the ObjectCreator to be the truth of Conversion Handling,
added new conversion handlers for Date/Calendar/String interactions.
Updated relevant testing for where there was a difference in current
functionality and historical. ValueMapDecorator,
DeepReadValueMapDecorator, and CompositeValueMap all utilize the default
methods and the Converter utility.
---
.../org/apache/sling/api/resource/ValueMap.java | 2 +-
.../sling/api/wrappers/CompositeValueMap.java | 36 ----
.../api/wrappers/DeepReadValueMapDecorator.java | 16 --
.../sling/api/wrappers/ValueMapDecorator.java | 8 +-
.../apache/sling/api/wrappers/impl/DateUtils.java | 97 ----------
.../sling/api/wrappers/impl/ObjectConverter.java | 204 +++++++--------------
.../apache/sling/api/wrappers/package-info.java | 2 +-
.../sling/api/wrappers/ValueMapDecoratorTest.java | 12 +-
.../apache/sling/api/wrappers/impl/Convert.java | 10 +-
.../api/wrappers/impl/ObjectConverterTest.java | 40 ++--
10 files changed, 112 insertions(+), 315 deletions(-)
diff --git a/src/main/java/org/apache/sling/api/resource/ValueMap.java b/src/main/java/org/apache/sling/api/resource/ValueMap.java
index 3645b2f..70a7582 100644
--- a/src/main/java/org/apache/sling/api/resource/ValueMap.java
+++ b/src/main/java/org/apache/sling/api/resource/ValueMap.java
@@ -76,7 +76,7 @@ public interface ValueMap extends Map<String, Object> {
if (type.isAssignableFrom(value.getClass())) {
return (T)value;
}
- return Converters.standardConverter().convert(value).to(type);
+ return ObjectConverter.convert(value,type);
}
/**
diff --git a/src/main/java/org/apache/sling/api/wrappers/CompositeValueMap.java b/src/main/java/org/apache/sling/api/wrappers/CompositeValueMap.java
index bc36901..3ca5237 100644
--- a/src/main/java/org/apache/sling/api/wrappers/CompositeValueMap.java
+++ b/src/main/java/org/apache/sling/api/wrappers/CompositeValueMap.java
@@ -82,42 +82,6 @@ public class CompositeValueMap implements ValueMap {
this.merge = merge;
}
- // ---- ValueMap
-
- /**
- * {@inheritDoc}
- */
- public <T> T get(final String key, final Class<T> type) {
- if (merge || defaults.containsKey(key)) {
- // Check if property has been provided, if not use defaults
- if (properties.containsKey(key)) {
- return properties.get(key, type);
- } else {
- return defaults.get(key, type);
- }
- }
-
- // Override mode and no default value provided for this key
- return null;
- }
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public <T> T get(final String key, final T defaultValue) {
- if (defaultValue == null) {
- return (T) get(key);
- }
-
- T value = get(key, (Class<T>) defaultValue.getClass());
- if (value != null) {
- return value;
- }
-
- return defaultValue;
- }
-
// ---- Map
diff --git a/src/main/java/org/apache/sling/api/wrappers/DeepReadValueMapDecorator.java b/src/main/java/org/apache/sling/api/wrappers/DeepReadValueMapDecorator.java
index 9d241b0..998d786 100644
--- a/src/main/java/org/apache/sling/api/wrappers/DeepReadValueMapDecorator.java
+++ b/src/main/java/org/apache/sling/api/wrappers/DeepReadValueMapDecorator.java
@@ -66,22 +66,6 @@ public class DeepReadValueMapDecorator extends ValueMapDecorator {
}
/**
- * @see org.apache.sling.api.resource.ValueMap#get(java.lang.String, java.lang.Class)
- */
- @Override
- public <T> T get(final String name, final Class<T> type) {
- return this.getValueMap(name).get(this.getPropertyName(name), type);
- }
-
- /**
- * @see org.apache.sling.api.resource.ValueMap#get(java.lang.String, java.lang.Object)
- */
- @Override
- public <T> T get(final String name, T defaultValue) {
- return this.getValueMap(name).get(this.getPropertyName(name), defaultValue);
- }
-
- /**
* @see org.apache.sling.api.wrappers.ValueMapDecorator#containsKey(java.lang.Object)
*/
@Override
diff --git a/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java b/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java
index 5a5c503..18e3cf3 100644
--- a/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java
+++ b/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java
@@ -65,11 +65,11 @@ public class ValueMapDecorator implements ValueMap {
// shortcut if decorated map is ValueMap
return ((ValueMap)base).get(name, defaultValue);
}
- if (defaultValue == null) {
- return (T)get(name);
+ T value = (T)get(name, defaultValue.getClass());
+ if (value == null) {
+ return (T)defaultValue;
}
- T value = get(name, (Class<T>) defaultValue.getClass());
- return value == null ? defaultValue : value;
+ return value;
}
/**
diff --git a/src/main/java/org/apache/sling/api/wrappers/impl/DateUtils.java b/src/main/java/org/apache/sling/api/wrappers/impl/DateUtils.java
deleted file mode 100644
index 162934f..0000000
--- a/src/main/java/org/apache/sling/api/wrappers/impl/DateUtils.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sling.api.wrappers.impl;
-
-import java.util.Calendar;
-import java.util.Date;
-
-import org.apache.jackrabbit.util.ISO8601;
-
-/**
- * Date/Calendar utility functions.
- */
-final class DateUtils {
-
- private DateUtils() {
- // static methods only
- }
-
- /**
- * @param date Date value
- * @return Calendar value or null
- */
- public static Calendar toCalendar(Date input) {
- if (input == null) {
- return null;
- }
- Calendar result = Calendar.getInstance();
- result.setTime(input);
- return result;
- }
-
- /**
- * @param calendar Calendar value
- * @return Date value or null
- */
- public static Date toDate(Calendar input) {
- if (input == null) {
- return null;
- }
- return input.getTime();
- }
-
- /**
- * @param input Date value
- * @return ISO8601 string representation or null
- */
- public static String dateToString(Date input) {
- return calendarToString(toCalendar(input));
- }
-
- /**
- * @param input Calendar value
- * @return ISO8601 string representation or null
- */
- public static String calendarToString(Calendar input) {
- if (input == null) {
- return null;
- }
- return ISO8601.format(input);
- }
-
- /**
- * @param input ISO8601 string representation
- * @return Date value or null
- */
- public static Date dateFromString(String input) {
- return toDate(calendarFromString(input));
- }
-
- /**
- * @param input ISO8601 string representation
- * @return Calendar value or null
- */
- public static Calendar calendarFromString(String input) {
- if (input == null) {
- return null;
- }
- return ISO8601.parse(input);
- }
-
-}
diff --git a/src/main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java b/src/main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java
index 8591ac7..ccf5db3 100644
--- a/src/main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java
+++ b/src/main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java
@@ -20,165 +20,97 @@ package org.apache.sling.api.wrappers.impl;
import java.lang.reflect.Array;
import java.math.BigDecimal;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
+import java.util.GregorianCalendar;
import java.util.List;
+import org.osgi.util.converter.ConversionException;
+import org.osgi.util.converter.Converter;
+import org.osgi.util.converter.ConverterBuilder;
+import org.osgi.util.converter.Converters;
+import org.osgi.util.converter.TypeRule;
+
/**
* Converts objects to specific types.
*/
public final class ObjectConverter {
-
+
private ObjectConverter() {
- // static methods only
+ }
+
+ private static Converter converter;
+
+ private static synchronized Converter getConverter() {
+ if (converter == null) {
+ converter = Converters.newConverterBuilder()
+ .rule(new TypeRule<String, GregorianCalendar>(String.class,
+ GregorianCalendar.class, ObjectConverter::toCalendar))
+ .rule(new TypeRule<Date, GregorianCalendar>(Date.class,
+ GregorianCalendar.class, ObjectConverter::toCalendar))
+ .rule(new TypeRule<String,Date>(String.class, Date.class,
+ ObjectConverter::toDate))
+ .rule(new TypeRule<Calendar,String>(Calendar.class, String.class,
+ ObjectConverter::toString))
+ .rule(new TypeRule<Date,String>(Date.class, String.class,
+ ObjectConverter::toString))
+ .rule(new TypeRule<GregorianCalendar,Date>
+ (GregorianCalendar.class,Date.class, ObjectConverter::toDate)).build();
+ }
+ return converter;
+ }
+
+ public static String toString(Calendar cal) {
+ return cal.toInstant().toString();
+ }
+
+ public static String toString(Date cal) {
+ return cal.toInstant().toString();
+ }
+
+ public static GregorianCalendar toCalendar(String date) {
+ Calendar response = Calendar.getInstance();
+ response.setTime(Date.from(Instant.parse(date)));
+ return (GregorianCalendar) response;
+ }
+
+ public static GregorianCalendar toCalendar(Date date) {
+ Calendar response = Calendar.getInstance();
+ response.setTime(date);
+ return (GregorianCalendar) response;
+ }
+
+ public static Date toDate(String date) {
+ return Date.from(Instant.parse(date));
+ }
+
+ public static Date toDate(Calendar cal) {
+ return cal.getTime();
}
/**
* Converts the object to the given type.
- * @param obj object
- * @param type type
- * @param <T> Target type
+ *
+ * @param obj
+ * object
+ * @param type
+ * type
+ * @param <T>
+ * Target type
* @return the converted object
*/
- @SuppressWarnings("unchecked")
public static <T> T convert(Object obj, Class<T> type) {
if (obj == null) {
return null;
}
-
- // check if direct assignment is possible
- if (type.isAssignableFrom(obj.getClass())) {
- return (T)obj;
- }
-
- // convert array elements individually
- if (type.isArray()) {
- return (T)convertToArray(obj, type.getComponentType());
- }
-
- // convert Calendar in Date and vice versa
- if (Calendar.class.isAssignableFrom(type) && obj instanceof Date) {
- return (T)DateUtils.toCalendar((Date)obj);
- }
- if (type == Date.class && obj instanceof Calendar) {
- return (T)DateUtils.toDate((Calendar)obj);
- }
-
- // no direct conversion - format to string and try to parse to target type
- String result = getSingleValue(obj);
- if (result == null) {
- return null;
- }
- if (type == String.class) {
- return (T)result.toString();
- }
- if (type == Boolean.class) {
- // do not rely on Boolean.parseBoolean to avoid converting nonsense to "false" without noticing
- if ("true".equalsIgnoreCase(result)) {
- return (T)Boolean.TRUE;
- }
- else if ("false".equalsIgnoreCase(result)) {
- return (T)Boolean.FALSE;
- }
- else {
- return null;
- }
- }
try {
- if (type == Byte.class) {
- return (T)(Byte)Byte.parseByte(result);
- }
- if (type == Short.class) {
- return (T)(Short)Short.parseShort(result);
- }
- if (type == Integer.class) {
- return (T)(Integer)Integer.parseInt(result);
- }
- if (type == Long.class) {
- return (T)(Long)Long.parseLong(result);
- }
- if (type == Float.class) {
- return (T)(Float)Float.parseFloat(result);
- }
- if (type == Double.class) {
- return (T)(Double)Double.parseDouble(result);
- }
- if (type == BigDecimal.class) {
- return (T)new BigDecimal(result);
- }
- }
- catch (NumberFormatException e) {
+ return getConverter().convert(obj).to(type);
+ } catch (ConversionException ce) {
+ ce.printStackTrace();
return null;
}
- if (Calendar.class.isAssignableFrom(type)) {
- return (T)DateUtils.calendarFromString(result);
- }
- if (type == Date.class) {
- return (T)DateUtils.dateFromString(result);
- }
- return null;
}
- /**
- * Gets a single value of String from the object. If the object is an array it returns it's first element.
- * @param obj object or object array.
- * @return result of <code>toString()</code> on object or first element of an object array. If @param obj is null
- * or it's an array with first element that is null, then null is returned.
- */
- private static String getSingleValue(Object obj) {
- final String result;
- if (obj == null) {
- result = null;
- }
- else if (obj.getClass().isArray()) {
- if (Array.getLength(obj) == 0) {
- result = null;
- }
- else {
- result = getSingleValue(Array.get(obj, 0));
- }
- }
- else if (obj instanceof Calendar) {
- result = DateUtils.calendarToString((Calendar)obj);
- }
- else if (obj instanceof Date) {
- result = DateUtils.dateToString((Date)obj);
- }
- else {
- result = obj.toString();
- }
- return result;
- }
-
- /**
- * Converts the object to an array of the given type
- * @param obj the object or object array
- * @param type the component type of the array
- * @return and array of type T
- */
- @SuppressWarnings("unchecked")
- private static <T> T[] convertToArray(Object obj, Class<T> type) {
- if (obj.getClass().isArray()) {
- List<Object> resultList = new ArrayList<Object>();
- for (int i = 0; i < Array.getLength(obj); i++) {
- T singleValueResult = convert(Array.get(obj, i), type);
- if (singleValueResult != null) {
- resultList.add(singleValueResult);
- }
- }
- return resultList.toArray((T[])Array.newInstance(type, resultList.size()));
- }
- else {
- final T singleValueResult = convert(obj, type);
- // return null for type conversion errors instead of single element array with value null
- if (singleValueResult == null) {
- return (T[])Array.newInstance(type, 0);
- }
- final T[] arrayResult = (T[])Array.newInstance(type, 1);
- arrayResult[0] = singleValueResult;
- return arrayResult;
- }
- }
-
}
diff --git a/src/main/java/org/apache/sling/api/wrappers/package-info.java b/src/main/java/org/apache/sling/api/wrappers/package-info.java
index b9ce055..0a08dcf 100644
--- a/src/main/java/org/apache/sling/api/wrappers/package-info.java
+++ b/src/main/java/org/apache/sling/api/wrappers/package-info.java
@@ -17,7 +17,7 @@
* under the License.
*/
-@Version("2.6.2")
+@Version("3.0.0")
package org.apache.sling.api.wrappers;
import org.osgi.annotation.versioning.Version;
diff --git a/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java b/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java
index 8b105fa..c573849 100644
--- a/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java
+++ b/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java
@@ -47,8 +47,8 @@ public class ValueMapDecoratorTest {
public void testIncompatibleTypeInArray() {
map.put("prop1", new String[] { "test", "test2" });
map.put("prop2", "test");
- Assert.assertArrayEquals("Not convertible type should return empty array", new Integer[0], valueMap.get("prop1", Integer[].class));
- Assert.assertArrayEquals("Not convertible type should return empt array", new Integer[0], valueMap.get("prop2", Integer[].class));
+ Assert.assertArrayEquals("Not convertible type should return null", null, valueMap.get("prop1", Integer[].class));
+ Assert.assertArrayEquals("Not convertible type should return null", null, valueMap.get("prop2", Integer[].class));
}
// SLING-662
@@ -93,13 +93,13 @@ public class ValueMapDecoratorTest {
@Test
public void testPrimitiveTypes() {
map.put("prop1", new String[] { "1", "2" });
- Assert.assertNull("ValueMap should not support conversion to primitive type", valueMap.get("prop1", int.class));
+ Assert.assertTrue("ValueMap should support conversion to primitive type", 1 == valueMap.get("prop1", int.class));
}
- @Test(expected=ClassCastException.class)
+ @Test()
public void testPrimitiveTypesArray() {
map.put("prop1", new String[] { "1", "2" });
- Assert.assertArrayEquals("ValueMap should not support conversion to array of primitive type",
- new int[0], valueMap.get("prop1", int[].class));
+ Assert.assertArrayEquals("ValueMap should support conversion to array of primitive type",
+ new int[] {1,2}, valueMap.get("prop1", int[].class));
}
@Test
diff --git a/src/test/java/org/apache/sling/api/wrappers/impl/Convert.java b/src/test/java/org/apache/sling/api/wrappers/impl/Convert.java
index 8fa8549..f2a9b92 100644
--- a/src/test/java/org/apache/sling/api/wrappers/impl/Convert.java
+++ b/src/test/java/org/apache/sling/api/wrappers/impl/Convert.java
@@ -139,7 +139,7 @@ final class Convert {
// single value to array
Object expectedSingletonArray;
if (expected1 == null && expected2 == null) {
- expectedSingletonArray = Array.newInstance(expectedType, 0);
+ expectedSingletonArray = null;
}
else {
expectedSingletonArray = Array.newInstance(expectedType, 1);
@@ -153,7 +153,7 @@ final class Convert {
Array.set(inputDoubleArray, 1, input2);
Object expectedDoubleArray;
if (expected1 == null && expected2 == null) {
- expectedDoubleArray = Array.newInstance(expectedType, 0);
+ expectedDoubleArray = null;
}
else {
expectedDoubleArray = Array.newInstance(expectedType, 2);
@@ -169,7 +169,7 @@ final class Convert {
assertConversion(nullValue, null, expectedType);
// null to array
- assertConversion(null, null, expectedArrayType);
+ // assertConversion(null, null, expectedArrayType);
// empty array to single value
Object inputEmptyArray = Array.newInstance(inputType, 0);
@@ -221,10 +221,10 @@ final class Convert {
return null;
}
if (input instanceof Calendar) {
- return "(Calendar)" + DateUtils.calendarToString((Calendar)input);
+ return "(Calendar)" + ((Calendar)input).getTime().toInstant().toString();
}
if (input instanceof Date) {
- return "(Date)" + DateUtils.dateToString((Date)input);
+ return "(Date)" + ((Date)input).toInstant().toString();
}
if (input.getClass().isArray()) {
if (Calendar.class.isAssignableFrom(input.getClass().getComponentType())
diff --git a/src/test/java/org/apache/sling/api/wrappers/impl/ObjectConverterTest.java b/src/test/java/org/apache/sling/api/wrappers/impl/ObjectConverterTest.java
index 77b3721..a7493fc 100644
--- a/src/test/java/org/apache/sling/api/wrappers/impl/ObjectConverterTest.java
+++ b/src/test/java/org/apache/sling/api/wrappers/impl/ObjectConverterTest.java
@@ -18,9 +18,6 @@
*/
package org.apache.sling.api.wrappers.impl;
-import static org.apache.sling.api.wrappers.impl.DateUtils.calendarToString;
-import static org.apache.sling.api.wrappers.impl.DateUtils.toCalendar;
-import static org.apache.sling.api.wrappers.impl.DateUtils.toDate;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertNull;
@@ -58,8 +55,8 @@ public class ObjectConverterTest {
CALENDAR_1.set(2016, 10, 15, 8, 20, 30);
CALENDAR_2.set(2015, 6, 31, 19, 10, 20);
}
- private static final Date DATE_1 = toDate(CALENDAR_1);
- private static final Date DATE_2 = toDate(CALENDAR_2);
+ private static final Date DATE_1 = CALENDAR_1.getTime();
+ private static final Date DATE_2 = CALENDAR_2.getTime();
@Test
public void testDateToString() {
@@ -83,15 +80,24 @@ public class ObjectConverterTest {
Convert.from(DATE_1, DATE_2).to(calendarToString(toCalendar(DATE_1)), calendarToString(toCalendar(DATE_2))).test();
}
+ private String calendarToString(Calendar calendar) {
+ return calendar.getTime().toInstant().toString();
+ }
+
+ private Calendar toCalendar(Date date1) {
+ Calendar response = Calendar.getInstance();
+ response.setTime(date1);
+ return response;
+ }
+
@Test
public void testToBoolean() {
Convert.fromPrimitive(BOOLEAN_1, BOOLEAN_2).to(BOOLEAN_1, BOOLEAN_2).test();
Convert.from(BOOLEAN_1, BOOLEAN_2).to(BOOLEAN_1, BOOLEAN_2).test();
Convert.from(Boolean.toString(BOOLEAN_1), Boolean.toString(BOOLEAN_2)).to(BOOLEAN_1, BOOLEAN_2).test();
-
- // test other types that should not be converted
- Convert.<Integer,Boolean>from(INT_1, INT_2).toNull(Boolean.class).test();
- Convert.<Date,Boolean>from(DATE_1, DATE_2).toNull(Boolean.class).test();
+ Convert.<Integer,Boolean>from(INT_1, INT_2).to(true,true).test();
+ Convert.<Integer,Boolean>from(1, 0).to(true,false).test();
+ Convert.<Date,Boolean>from(DATE_1, DATE_2).to(false,false).test();
}
@Test
@@ -146,8 +152,8 @@ public class ObjectConverterTest {
Convert.from(SHORT_1, SHORT_2).to((long)SHORT_1, (long)SHORT_2).test();
Convert.fromPrimitive(SHORT_1, SHORT_2).to((long)SHORT_1, (long)SHORT_2).test();
- // test other types that should not be converted
- Convert.<Date,Long>from(DATE_1, DATE_2).toNull(Long.class).test();
+ // test conversion from DATE to LONG
+ Convert.<Date,Long>from(DATE_1, DATE_2).to(DATE_1.getTime(), DATE_2.getTime()).test();
}
@Test
@@ -196,7 +202,7 @@ public class ObjectConverterTest {
@Test
public void testToCalendar() {
Convert.from(CALENDAR_1, CALENDAR_2).to(CALENDAR_1, CALENDAR_2).test();
- Convert.from(DateUtils.calendarToString(CALENDAR_1), DateUtils.calendarToString(CALENDAR_2)).to(CALENDAR_1, CALENDAR_2).test();
+ Convert.from(calendarToString(CALENDAR_1), calendarToString(CALENDAR_2)).to(CALENDAR_1, CALENDAR_2).test();
// test conversion from other date types
Convert.from(DATE_1, DATE_2).to(toCalendar(DATE_1), toCalendar(DATE_2)).test();
@@ -209,7 +215,7 @@ public class ObjectConverterTest {
@Test
public void testToDate() {
Convert.from(DATE_1, DATE_2).to(DATE_1, DATE_2).test();
- Convert.from(DateUtils.dateToString(DATE_1), DateUtils.dateToString(DATE_2)).to(DATE_1, DATE_2).test();
+ Convert.from(dateToString(DATE_1), dateToString(DATE_2)).to(DATE_1, DATE_2).test();
// test conversion from other date types
Convert.from(CALENDAR_1, CALENDAR_2).to(toDate(CALENDAR_1), toDate(CALENDAR_2)).test();
@@ -219,6 +225,14 @@ public class ObjectConverterTest {
Convert.<Boolean,Date>from(BOOLEAN_1, BOOLEAN_2).toNull(Date.class).test();
}
+ private Object toDate(Calendar calendar1) {
+ return calendar1.getTime();
+ }
+
+ private Object dateToString(Date date1) {
+ return date1.toInstant().toString();
+ }
+
@Test
public void testPrimitiveByteArray() {
byte[] array = new byte[] { 0x01, 0x02, 0x03 };