/*
* Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nuxeo - initial API and implementation
*
* $Id: JOOoConvertPluginImpl.java 18651 2007-05-13 20:28:53Z sfermigier $
*/
package org.eclipse.ecr.core.schema.types;
import java.util.Calendar;
import java.util.Date;
import org.eclipse.ecr.core.schema.Namespace;
import org.eclipse.ecr.core.schema.SchemaNames;
import org.eclipse.ecr.core.schema.types.primitives.BooleanType;
import org.eclipse.ecr.core.schema.types.primitives.DateType;
import org.eclipse.ecr.core.schema.types.primitives.DoubleType;
import org.eclipse.ecr.core.schema.types.primitives.IntegerType;
import org.eclipse.ecr.core.schema.types.primitives.LongType;
import org.eclipse.ecr.core.schema.types.primitives.StringType;
import org.eclipse.ecr.testlib.NXRuntimeTestCase;
public class TestTypes extends NXRuntimeTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
deployBundle("org.eclipse.ecr.core.schema");
}
// ANY type
public void testAnyType() throws TypeException {
Type type = AnyType.INSTANCE;
assertEquals(AnyType.ID, type.getName());
assertTrue(type.isAnyType());
assertFalse(type.isSimpleType());
//assertFalse(type.isPrimitive());
assertFalse(type.isComplexType());
assertNull(type.getSuperType());
assertEquals(0, type.getTypeHierarchy().length);
// ANY validates anything
assertTrue(type.validate(0));
assertTrue(type.validate(""));
assertTrue(type.validate(true));
}
// Primitive types
public void testStringType() throws TypeException {
SimpleType type = StringType.INSTANCE;
assertEquals("string", type.getName());
assertTrue(type.isSimpleType());
assertTrue(type.isPrimitive());
assertFalse(type.isComplexType());
assertFalse(type.isAnyType());
assertNull(type.getSuperType());
assertEquals(0, type.getTypeHierarchy().length);
assertTrue(type.validate(0));
assertTrue(type.validate(""));
assertTrue(type.validate(true));
//TODO: test convert method
}
@SuppressWarnings({"SimplifiableJUnitAssertion", "AssertEqualsBetweenInconvertibleTypes"})
public void testBooleanType() throws TypeException {
SimpleType type = BooleanType.INSTANCE;
assertEquals("boolean", type.getName());
assertTrue(type.isSimpleType());
assertTrue(type.isPrimitive());
assertFalse(type.isComplexType());
assertFalse(type.isAnyType());
assertNull(type.getSuperType());
assertEquals(0, type.getTypeHierarchy().length);
// Validation tests
assertFalse(type.validate(0));
assertFalse(type.validate(""));
assertTrue(type.validate(true));
assertTrue(type.validate(false));
// Conversion tests
assertEquals(true, type.convert(true));
assertEquals(false, type.convert(false));
assertEquals(true, type.convert("true"));
assertEquals(false, type.convert("false"));
assertEquals(true, type.convert(1));
assertEquals(false, type.convert(0));
assertEquals(true, type.decode("true"));
}
public void testIntegerType() throws TypeException {
SimpleType type = IntegerType.INSTANCE;
assertEquals("integer", type.getName());
assertTrue(type.isSimpleType());
assertTrue(type.isPrimitive());
assertFalse(type.isComplexType());
assertFalse(type.isAnyType());
assertNull(type.getSuperType());
assertEquals(0, type.getTypeHierarchy().length);
// Validation tests
assertTrue(type.validate(0));
assertFalse(type.validate(""));
assertFalse(type.validate(true));
// Conversion tests
assertEquals(0, type.convert(0));
assertEquals(0, type.convert("0"));
assertEquals(0, type.convert(0.5));
assertNull(type.convert("abc"));
assertEquals(0, type.decode("0"));
}
public void testDoubleType() throws TypeException {
SimpleType type = DoubleType.INSTANCE;
assertEquals("double", type.getName());
assertTrue(type.isSimpleType());
assertTrue(type.isPrimitive());
assertFalse(type.isComplexType());
assertFalse(type.isAnyType());
assertNull(type.getSuperType());
assertEquals(0, type.getTypeHierarchy().length);
// Validation tests
assertTrue(type.validate(0));
assertTrue(type.validate(0.0));
assertFalse(type.validate(true));
assertFalse(type.validate(""));
// Conversion tests
assertEquals(0.0, type.convert(0));
assertEquals(0.5, type.convert(0.5));
assertEquals(3.14, type.convert("3.14"));
assertNull(type.convert("abc"));
assertEquals(0.0, type.decode("0.0"));
assertEquals(3.14, type.decode("3.14"));
}
public void testLongType() throws TypeException {
SimpleType type = LongType.INSTANCE;
assertEquals("long", type.getName());
assertTrue(type.isSimpleType());
assertTrue(type.isPrimitive());
assertFalse(type.isComplexType());
assertFalse(type.isAnyType());
assertNull(type.getSuperType());
assertEquals(0, type.getTypeHierarchy().length);
// Validation tests
assertTrue(type.validate(0));
assertFalse(type.validate(""));
assertFalse(type.validate(true));
// Conversion tests
assertEquals(0L, type.convert(0));
assertEquals(0L, type.convert("0"));
assertEquals(0L, type.convert(0.5));
assertNull(type.convert("abc"));
assertEquals(0L, type.decode("0"));
}
public void testDateType() throws TypeException {
SimpleType type = DateType.INSTANCE;
assertEquals("date", type.getName());
assertTrue(type.isSimpleType());
assertTrue(type.isPrimitive());
assertFalse(type.isComplexType());
assertFalse(type.isAnyType());
assertNull(type.getSuperType());
assertEquals(0, type.getTypeHierarchy().length);
// Validation tests
assertTrue(type.validate(new Date()));
assertTrue(type.validate(Calendar.getInstance()));
// Conversion tests
//TODO (after the DateType class is fully implemented)
}
// Custom types
public void testListType() throws TypeException {
ListType type = new ListTypeImpl(SchemaNames.BUILTIN, "list type", AnyType.INSTANCE);
assertTrue(type.isListType());
assertEquals("list type", type.getName());
assertFalse(type.isCompositeType());
assertFalse(type.isSimpleType());
assertFalse(type.isComplexType());
assertFalse(type.isAnyType());
assertNull(type.getSuperType());
assertEquals(Type.ANY, type.getFieldType());
// Validation tests
assertTrue(type.validate(new Integer[3]));
assertFalse(type.isNotNull());
assertTrue(type.validate(null));
assertFalse(type.validate(0));
assertFalse(type.validate(""));
assertFalse(type.validate(true));
//TODO: add tests for collections once this is implemented
}
public void testCompositeType() {
CompositeTypeImpl type = new CompositeTypeImpl(
(CompositeType) null, SchemaNames.BUILTIN, "composite type", null);
assertTrue(type.isCompositeType());
assertEquals("composite type", type.getName());
assertFalse(type.isSimpleType());
// XXX: Not is CompositeType API. Why?
// assertFalse(type.isPrimitive());
assertFalse(type.isComplexType());
assertFalse(type.isAnyType());
assertNull(type.getSuperType());
// Author schemas API
assertFalse(type.hasSchemas());
assertFalse(type.hasSchema("inexisting schema"));
assertTrue(type.getSchemas().isEmpty());
// Author fields API
assertTrue(type.getFields().isEmpty());
}
public void testSchema() {
String name = "name";
String uri = "uri";
String prefix = "prefix";
Schema schema = new SchemaImpl(name, new Namespace(uri, prefix));
assertEquals(schema.getName(), name);
assertEquals(schema.getNamespace().uri, uri);
assertEquals(schema.getNamespace().prefix, prefix);
}
}