/****************************************************************************** * Copyright (c) 2013, Linagora * * 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: * Linagora - initial API and implementation *******************************************************************************/ package com.ebmwebsourcing.petals.studio.dev.properties; import java.util.Collection; import junit.framework.Assert; import org.junit.Test; /** * @author Vincent Zurczak - Linagora */ public class TestAbstractModel { @Test public void testTypePatterns() { Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: long" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: double" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: float" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: boolean" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: list" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: string" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: String" )); Assert.assertEquals( false, AbstractModel.checkTypePattern( "Type: string, nullable" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: string, required" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: string, required, nullable" )); Assert.assertEquals( false, AbstractModel.checkTypePattern( "Type: string, nullable, required" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: enumeration { item1, item2 }" )); Assert.assertEquals( false, AbstractModel.checkTypePattern( "Type: enumeration { item1 }, nullable" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: enumeration {item1}, required" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: enumeration {item1}, required, nullable" )); Assert.assertEquals( false, AbstractModel.checkTypePattern( "Type: enumeration {}, required" )); Assert.assertEquals( false, AbstractModel.checkTypePattern( "Type: " )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: integer" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: integer[1,2]" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: integer ]1,3]" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: integer ] 1, 5 [" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: integer [ 1 , 5 [" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: integer [ 1 ,[" )); Assert.assertEquals( true, AbstractModel.checkTypePattern( "Type: integer [,5[" )); Assert.assertEquals( false, AbstractModel.checkTypePattern( "Type: integer [,]" )); } @Test public void testIsRequired() { CustomAbstractModel model = new CustomAbstractModel(); model.typeDecl = "Type: string"; Assert.assertFalse( model.isRequired( "any" )); model.typeDecl = "Type: string, required"; Assert.assertTrue( model.isRequired( "any" )); model.typeDecl = "Type: enumeration{ 12 ; 17 }, required"; Assert.assertTrue( model.isRequired( "any" )); model.typeDecl = "Type: enumeration{ 12 ; 17 }"; Assert.assertFalse( model.isRequired( "any" )); model.typeDecl = "Type: integer [ 5, 10 [, required"; Assert.assertTrue( model.isRequired( "any" )); model.typeDecl = "Type: integer [ 5, 10 ["; Assert.assertFalse( model.isRequired( "any" )); } @Test public void testIsNullable() { CustomAbstractModel model = new CustomAbstractModel(); model.typeDecl = "Type: string"; Assert.assertFalse( model.isNullable( "any" )); model.typeDecl = "Type: string, required, nullable"; Assert.assertTrue( model.isNullable( "any" )); model.typeDecl = "Type: enumeration{ 12 ; 17 }, required, nullable"; Assert.assertTrue( model.isNullable( "any" )); model.typeDecl = "Type: enumeration{ 12 ; 17 }, required"; Assert.assertFalse( model.isNullable( "any" )); model.typeDecl = "Type: integer [ 5, 10 [, required, nullable"; Assert.assertTrue( model.isNullable( "any" )); model.typeDecl = "Type: integer [ 5, 10 ["; Assert.assertFalse( model.isNullable( "any" )); } @Test public void testGetType() { CustomAbstractModel model = new CustomAbstractModel(); model.typeDecl = "Type: string"; Assert.assertEquals( SupportedTypes.STRING, model.getType( "any" )); model.typeDecl = "Type: string, required, nullable"; Assert.assertEquals( SupportedTypes.STRING, model.getType( "any" )); model.typeDecl = "Type: enumeration{ 12 ; 17 }, required, nullable"; Assert.assertEquals( SupportedTypes.ENUMERATION, model.getType( "any" )); model.typeDecl = "Type: enumeration{ 12 ; 17 }, required"; Assert.assertEquals( SupportedTypes.ENUMERATION, model.getType( "any" )); model.typeDecl = "Type: integer [ 5, 10 [, required, nullable"; Assert.assertEquals( SupportedTypes.INTEGER, model.getType( "any" )); model.typeDecl = "Type: integer [ 5, 10 ["; Assert.assertEquals( SupportedTypes.INTEGER, model.getType( "any" )); model.typeDecl = "Type: long, required"; Assert.assertEquals( SupportedTypes.LONG, model.getType( "any" )); model.typeDecl = "Type: float, required"; Assert.assertEquals( SupportedTypes.FLOAT, model.getType( "any" )); model.typeDecl = "Type: double, required"; Assert.assertEquals( SupportedTypes.DOUBLE, model.getType( "any" )); model.typeDecl = "Type: boolean, required"; Assert.assertEquals( SupportedTypes.BOOLEAN, model.getType( "any" )); model.typeDecl = "Type: list, required"; Assert.assertEquals( SupportedTypes.LIST, model.getType( "any" )); } @Test public void testGetEnumeration() { CustomAbstractModel model = new CustomAbstractModel(); model.typeDecl = "Type: string, required, nullable"; Assert.assertNull( model.getEnumeration( "any" )); model.typeDecl = "Type: enumeration{ 12 ; 17 }, required, nullable"; Collection<String> list = model.getEnumeration( "any" ); Assert.assertNotNull( list ); Assert.assertEquals( 2, list.size()); Assert.assertTrue( list.contains( "12" )); Assert.assertTrue( list.contains( "17" )); model.typeDecl = "Type: enumeration{ 12 ; 17 }"; list = model.getEnumeration( "any" ); Assert.assertNotNull( list ); Assert.assertEquals( 2, list.size()); Assert.assertTrue( list.contains( "12" )); Assert.assertTrue( list.contains( "17" )); model.typeDecl = "Type: enumeration{}"; list = model.getEnumeration( "any" ); Assert.assertNotNull( list ); Assert.assertEquals( 0, list.size()); model.typeDecl = "Type: enumeration { 12 }"; list = model.getEnumeration( "any" ); Assert.assertNotNull( list ); Assert.assertEquals( 1, list.size()); Assert.assertTrue( list.contains( "12" )); } @Test public void testGetRange() { CustomAbstractModel model = new CustomAbstractModel(); model.typeDecl = "Type: string, required, nullable"; Assert.assertNull( model.getRange( "any" )); model.typeDecl = "Type: integer, required, nullable"; Assert.assertNull( model.getRange( "any" )); model.typeDecl = "Type: integer"; Assert.assertNull( model.getRange( "any" )); model.typeDecl = "Type: integer [ 5,10 ]"; IntegerRange range = model.getRange( "any" ); Assert.assertNotNull( range ); Assert.assertEquals( 5, range.getMin()); Assert.assertEquals( 10, range.getMax()); Assert.assertEquals( true, range.isMinIncluded()); Assert.assertEquals( true, range.isMaxIncluded()); model.typeDecl = "Type: integer [ 5,10 ["; range = model.getRange( "any" ); Assert.assertNotNull( range ); Assert.assertEquals( 5, range.getMin()); Assert.assertEquals( 10, range.getMax()); Assert.assertEquals( true, range.isMinIncluded()); Assert.assertEquals( false, range.isMaxIncluded()); model.typeDecl = "Type: integer ] 5,10 ["; range = model.getRange( "any" ); Assert.assertNotNull( range ); Assert.assertEquals( 5, range.getMin()); Assert.assertEquals( 10, range.getMax()); Assert.assertEquals( false, range.isMinIncluded()); Assert.assertEquals( false, range.isMaxIncluded()); model.typeDecl = "Type: integer ] 5,100 ]"; range = model.getRange( "any" ); Assert.assertNotNull( range ); Assert.assertEquals( 5, range.getMin()); Assert.assertEquals( 100, range.getMax()); Assert.assertEquals( false, range.isMinIncluded()); Assert.assertEquals( true, range.isMaxIncluded()); model.typeDecl = "Type: integer ] 5, ]"; range = model.getRange( "any" ); Assert.assertNotNull( range ); Assert.assertEquals( 5, range.getMin()); Assert.assertEquals( -1, range.getMax()); Assert.assertEquals( false, range.isMinIncluded()); Assert.assertEquals( true, range.isMaxIncluded()); model.typeDecl = "Type: integer [ , 80 ]"; range = model.getRange( "any" ); Assert.assertNotNull( range ); Assert.assertEquals( -1, range.getMin()); Assert.assertEquals( 80, range.getMax()); Assert.assertEquals( true, range.isMinIncluded()); Assert.assertEquals( true, range.isMaxIncluded()); } /** * A class used to perform tests on an abstract model. */ private static class CustomAbstractModel extends AbstractModel { public String typeDecl; @Override public String findTypeDeclaration( String property ) { return this.typeDecl; } } }