/*
* Copyright (c) 2014. Escalon System-Entwicklung, Dietrich Schulten
*
* Licensed 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 de.escalon.hypermedia.affordance;
import de.escalon.hypermedia.spring.sample.test.EventStatusType;
import org.junit.Assert;
import org.junit.Test;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
import static org.junit.Assert.*;
public class DataTypeTest {
@Test
public void testIsSingleValueTypeInt() throws Exception {
Assert.assertTrue(DataType.isSingleValueType(int.class));
}
@Test
public void testIsSingleValueType() throws Exception {
Assert.assertTrue(DataType.isSingleValueType(int.class));
Assert.assertTrue(DataType.isSingleValueType(Integer.class));
Assert.assertTrue(DataType.isSingleValueType(BigInteger.class));
Assert.assertTrue(DataType.isSingleValueType(BigDecimal.class));
Assert.assertTrue(DataType.isSingleValueType(boolean.class));
Assert.assertTrue(DataType.isSingleValueType(Boolean.class));
Assert.assertTrue(DataType.isSingleValueType(EventStatusType.class));
Assert.assertTrue(DataType.isSingleValueType(Date.class));
Assert.assertTrue(DataType.isSingleValueType(Calendar.class));
Assert.assertTrue(DataType.isSingleValueType(Currency.class));
Assert.assertFalse(DataType.isSingleValueType(Object.class));
}
@Test
public void testIsNumber() throws Exception {
Assert.assertTrue(DataType.isNumber(int.class));
Assert.assertTrue(DataType.isNumber(Integer.class));
}
@Test
public void testIsBoolean() throws Exception {
Assert.assertTrue(DataType.isBoolean(boolean.class));
Assert.assertTrue(DataType.isBoolean(Boolean.class));
}
@Test
public void testIsNumberBigDecimal() throws Exception {
Assert.assertTrue(DataType.isNumber(BigDecimal.class));
}
@Test
public void testIsCurrency() throws Exception {
Assert.assertTrue(DataType.isCurrency(Currency.class));
}
@Test
public void testAsTypeNumbers() {
assertEquals(12, DataType.asType(int.class, "12"));
assertEquals(12, DataType.asType(Integer.class, "12"));
assertEquals(12L, DataType.asType(long.class, "12"));
assertEquals(12L, DataType.asType(Long.class, "12"));
assertEquals(12F, DataType.asType(float.class, "12"));
assertEquals(12F, DataType.asType(Float.class, "12"));
assertEquals(12D, DataType.asType(double.class, "12"));
assertEquals(12D, DataType.asType(Double.class, "12"));
assertEquals((byte) 12, DataType.asType(byte.class, "12"));
assertEquals((byte) 12, DataType.asType(Byte.class, "12"));
assertEquals((short) 12, DataType.asType(short.class, "12"));
assertEquals((short) 12, DataType.asType(Short.class, "12"));
assertEquals(BigInteger.valueOf(12), DataType.asType(BigInteger.class, "12"));
assertEquals(BigDecimal.valueOf(12), DataType.asType(BigDecimal.class, "12"));
}
@Test
public void testAsTypeEnum() {
Object type = DataType.asType(EventStatusType.class, "EVENT_CANCELLED");
assertEquals(EventStatusType.EVENT_CANCELLED, type);
}
@Test
public void testAsTypeCurrency() {
assertEquals(Currency.getInstance("EUR"), DataType.asType(Currency.class, "EUR"));
}
@Test
public void testAsTypeString() {
assertEquals("foo", DataType.asType(String.class, "foo"));
}
@Test
public void isArrayOrCollection() {
assertTrue(DataType.isArrayOrCollection(String[].class));
assertTrue(DataType.isArrayOrCollection(List.class));
assertTrue(DataType.isArrayOrCollection(Set.class));
assertTrue(DataType.isArrayOrCollection(Collection.class));
assertFalse(DataType.isArrayOrCollection(Map.class));
assertFalse(DataType.isArrayOrCollection(Object.class));
}
@Test
public void testAsTypeDateLong() {
Date type = (Date) DataType.asType(Date.class, "1431762464134");
assertEquals(1431762464134L, type.getTime());
}
@Test
public void testAsTypeDateBoolean() {
assertTrue((Boolean) DataType.asType(Boolean.class, "true"));
assertTrue((Boolean) DataType.asType(Boolean.class, "TRUE"));
assertTrue((Boolean) DataType.asType(Boolean.class, "True"));
assertFalse((Boolean) DataType.asType(Boolean.class, "false"));
assertFalse((Boolean) DataType.asType(Boolean.class, "FALSE"));
assertFalse((Boolean) DataType.asType(Boolean.class, "False"));
assertFalse((Boolean) DataType.asType(Boolean.class, "yes"));
assertFalse((Boolean) DataType.asType(Boolean.class, "foo"));
assertFalse((Boolean) DataType.asType(Boolean.class, null));
}
@Test
public void testAsTypeDateISO8601() {
Date type = (Date) DataType.asType(Date.class, "2015-05-16T07:47:44Z");
assertEquals(1431762464000L, type.getTime());
}
@Test
public void testAsTypeCalendarDateOnly() {
Calendar type = (Calendar) DataType.asType(Calendar.class, "2015-05-16");
assertEquals(2015, type.get(Calendar.YEAR));
assertEquals(4, type.get(Calendar.MONTH));
assertEquals(16, type.get(Calendar.DAY_OF_MONTH));
assertEquals(0, type.get(Calendar.HOUR_OF_DAY));
assertEquals(0, type.get(Calendar.MINUTE));
assertEquals(TimeZone.getDefault(), type.getTimeZone());
}
@Test
public void testAsTypeCalendarDateTime() {
Calendar type = (Calendar) DataType.asType(Calendar.class, "2015-05-16T08:45:05");
assertEquals(2015, type.get(Calendar.YEAR));
assertEquals(4, type.get(Calendar.MONTH));
assertEquals(16, type.get(Calendar.DAY_OF_MONTH));
assertEquals(8, type.get(Calendar.HOUR_OF_DAY));
assertEquals(45, type.get(Calendar.MINUTE));
assertEquals(5, type.get(Calendar.SECOND));
assertEquals(TimeZone.getDefault(), type.getTimeZone());
}
@Test
public void testIsIsoLatin1Number() throws Exception {
assertTrue(DataType.isIsoLatin1Number("1"));
assertTrue(DataType.isIsoLatin1Number("-1"));
assertTrue(DataType.isIsoLatin1Number("+1"));
assertTrue(DataType.isIsoLatin1Number("123456789"));
assertTrue(DataType.isIsoLatin1Number("-123456789"));
assertTrue(DataType.isIsoLatin1Number("+123456789"));
// not an iso latin 1 number
assertFalse(DataType.isIsoLatin1Number("1+"));
assertFalse(DataType.isIsoLatin1Number("1-"));
assertFalse(DataType.isIsoLatin1Number("2.99792458e8"));
assertFalse(DataType.isIsoLatin1Number("foo"));
assertFalse(DataType.isIsoLatin1Number(""));
assertFalse(DataType.isIsoLatin1Number(null));
}
}