/* AWE - Amanzi Wireless Explorer * http://awe.amanzi.org * (C) 2008-2009, AmanziTel AB * * This library is provided under the terms of the Eclipse Public License * as described at http://www.eclipse.org/legal/epl-v10.html. Any use, * reproduction or distribution of the library constitutes recipient's * acceptance of this agreement. * * This library is distributed WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ package org.amanzi.neo.services.impl.statistics.internal; import org.amanzi.neo.services.exceptions.ServiceException; import org.amanzi.neo.services.exceptions.StatisticsConversionException; import org.amanzi.neo.services.impl.statistics.internal.PropertyVault.ClassType; import org.amanzi.testing.AbstractMockitoTest; import org.junit.Before; import org.junit.Test; /** * TODO Purpose of * <p> * </p> * * @author Nikolay Lagutko (nikolay.lagutko@amanzitel.com) * @since 1.0.0 */ public class PropertyVaultTest extends AbstractMockitoTest { /** int LIMIT field */ private static final int LIMIT = 100; /** int TEST_NUMBER_OF_VALUES field */ private static final int TEST_NUMBER_OF_VALUES = 3; /** String UNEXPECTED_SIZE_OF_VALUES_MESSAGE field */ private static final String UNEXPECTED_SIZE_OF_VALUES_MESSAGE = "unexpected size of values"; /** String UNEXPECTED_CLASS_MESSAGE field */ private static final String UNEXPECTED_CLASS_MESSAGE = "Unexpected class"; private static final String TEST_VALUE = "value"; private static final String TEST_PROPERTY = "property"; private static final int[] COUNTS = {1, 1, 2, 2}; private static final String[] STRING_VALUES = new String[] {"string1", "string2", "string3", "string3"}; private static final Integer[] INTEGER_VALUES = new Integer[] {1, 2, 3, 3}; private static final Long[] LONG_VALUES = new Long[] {1l, 2l, 3l, 3l}; private static final Double[] DOUBLE_VALUES = new Double[] {1d, 2d, 3d, 3d}; private static final Object[] INT_TO_STRING_VALUES = new Object[] {9, 10, "A"}; private static final Object[] LONG_TO_STRING_VALUES = new Object[] {9l, 10l, "A"}; private static final Object[] DOUBLEE_TO_STRING_VALUES = new Object[] {9d, 10d, "A"}; private static final Object[] INT_TO_LONG_VALUES = new Object[] {1, 2, 3l}; private static final Object[] INT_TO_DOUBLE_VALUES = new Object[] {1, 2, 3.5}; private PropertyVault vault; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { vault = new PropertyVault(TEST_PROPERTY); } @Test public void testCheckIsChanged() throws ServiceException { vault.setChanged(false); vault.index(TEST_VALUE); assertTrue("vault should be changed", vault.isChanged()); } @Test public void testCheckClassInitialization() throws ServiceException { spyVault(); vault.index(TEST_VALUE); verify(vault).defineClass(TEST_VALUE); } @Test public void testCheckStringStatistics() throws ServiceException { for (Object o : STRING_VALUES) { vault.index(o); } assertEquals(UNEXPECTED_CLASS_MESSAGE, String.class.getName(), vault.getClassName()); assertValues(STRING_VALUES); } @Test public void testCheckIntegerStatistics() throws ServiceException { for (Object o : INTEGER_VALUES) { vault.index(o); } assertEquals(UNEXPECTED_CLASS_MESSAGE, Integer.class.getName(), vault.getClassName()); assertValues(INTEGER_VALUES); } @Test public void testCheckLongStatistics() throws ServiceException { for (Object o : LONG_VALUES) { vault.index(o); } assertEquals(UNEXPECTED_CLASS_MESSAGE, Long.class.getName(), vault.getClassName()); assertValues(LONG_VALUES); } @Test public void testCheckFloatStatistics() throws ServiceException { for (Object o : DOUBLE_VALUES) { vault.index(o); } assertEquals(UNEXPECTED_CLASS_MESSAGE, Double.class.getName(), vault.getClassName()); assertValues(DOUBLE_VALUES); } @Test public void testCheckLimit() throws ServiceException { for (int i = 0; i < (LIMIT - 1); i++) { vault.index(TEST_VALUE + i); } assertEquals("unexpected size of values set", LIMIT - 1, vault.getValues().size()); vault.index(TEST_VALUE + LIMIT); vault.index(TEST_VALUE + (LIMIT + 1)); assertEquals("unexpected size of values set", 0, vault.getValues().size()); } @Test public void testCheckActionsOnClassChangingIntToString() throws ServiceException { spyVault(); for (Object o : INT_TO_STRING_VALUES) { vault.index(o); } verify(vault).updateToNewClass(ClassType.STRING); } @Test public void testCheckActionsOnClassChangingLongToString() throws ServiceException { spyVault(); for (Object o : LONG_TO_STRING_VALUES) { vault.index(o); } verify(vault).updateToNewClass(ClassType.STRING); } @Test public void testCheckActionsOnClassChangingFloatToString() throws ServiceException { spyVault(); for (Object o : DOUBLEE_TO_STRING_VALUES) { vault.index(o); } verify(vault).updateToNewClass(ClassType.STRING); } @Test public void testCheckActionsOnClassChangingIntToLong() throws ServiceException { spyVault(); for (Object o : INT_TO_LONG_VALUES) { vault.index(o); } verify(vault).updateToNewClass(ClassType.LONG); } @Test public void testCheckActionsOnClassChangingIntToFloat() throws ServiceException { spyVault(); for (Object o : INT_TO_DOUBLE_VALUES) { vault.index(o); } verify(vault).updateToNewClass(ClassType.DOUBLE); } @Test(expected = StatisticsConversionException.class) public void testCheckConversionException() throws ServiceException { for (Object o : STRING_VALUES) { vault.index(o); } for (Object o : INTEGER_VALUES) { vault.index(o); } } private void spyVault() { vault = spy(vault); } private void assertValues(final Object[] values) { assertEquals(UNEXPECTED_SIZE_OF_VALUES_MESSAGE, TEST_NUMBER_OF_VALUES, vault.getValues().size()); for (int i = 0; i < values.length; i++) { Object o = values[i]; assertEquals("unexpected size of object <" + o + ">", COUNTS[i], vault.getValueCount(o)); } } }