/* * Copyright 2013 Gordon Burgett and individual contributors * * 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 org.xflatdb.xflat.convert; import java.util.Date; import static org.junit.Assert.*; import org.junit.Test; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.*; import org.xflatdb.xflat.convert.converters.StringConverters; import test.Bar; import test.Foo; import test.SubFoo; /** * * @author gordon */ public class DefaultConversionServiceTest { @Test public void testCanConvert_NoConverter_ReturnsFalse() throws Exception { System.out.println("testCanConvert_NoConverter_ReturnsFalse"); DefaultConversionService instance = new DefaultConversionService(); boolean result = instance.canConvert(Boolean.class, Date.class); assertFalse("shouldnt be able to convert", result); }//end testCanConvert_NoConverter_ReturnsFalse @Test public void testCanConvert_HasConverter_ReturnsTrue() throws Exception { System.out.println("testCanConvert_HasConverter_ReturnsTrue"); DefaultConversionService instance = new DefaultConversionService(); instance.addConverter(String.class, Integer.class, StringConverters.StringToIntegerConverter); boolean result = instance.canConvert(String.class, Integer.class); assertTrue("Should be able to convert string to int", result); }//end testCanConvert_HasConverter_ReturnsTrue @Test public void testConvert_NoConverter_ThrowsConversionException() throws Exception { System.out.println("testConvert_NoConverter_ThrowsConversionException"); DefaultConversionService instance = new DefaultConversionService(); boolean didThrow = false; try { //ACT instance.convert(Boolean.FALSE, Date.class); } catch (ConversionException expected) { didThrow = true; } assertTrue("Should have thrown ConversionException", didThrow); }//end testConvert_NoConverter_ThrowsConversionException @Test public void testConvert_HasConverter_ConvertsCorrectly() throws Exception { System.out.println("testConvert_HasConverter_ConvertsCorrectly"); DefaultConversionService instance = new DefaultConversionService(); instance.addConverter(String.class, Integer.class, StringConverters.StringToIntegerConverter); Integer converted = instance.convert("7", Integer.class); assertNotNull(converted); assertEquals("Should have converted properly", new Integer(7), converted); }//end testConvert_HasConverter_ConvertsCorrectly @Test public void testAddConverter_canConvertIsTrue() throws Exception { System.out.println("testAddConverter_canConvertIsTrue"); Converter mockConverter = mock(Converter.class); DefaultConversionService instance = new DefaultConversionService(); instance.addConverter(Boolean.class, Date.class, mockConverter); assertTrue("Can convert", instance.canConvert(Boolean.class, Date.class)); }//end testAddConverter_canConvertIsTrue @Test public void testAddConverter_convertInvokesConverter() throws Exception { System.out.println("testAddConverter_convertInvokesConverter"); Converter mockConverter = mock(Converter.class); when(mockConverter.convert(isA(Boolean.class))) .thenReturn(new Date(17)); DefaultConversionService instance = new DefaultConversionService(); instance.addConverter(Boolean.class, Date.class, mockConverter); Date converted = instance.convert(Boolean.TRUE, Date.class); assertNotNull(converted); assertEquals("Should have invoked converter", new Date(17), converted); }//end testAddConverter_convertInvokesConverter @Test public void testConvert_ConverterAcceptsSuperclass_ConvertsCorrectly() throws Exception { System.out.println("testConvert_ConverterAcceptsSuperclass_ConvertsCorrectly"); final Bar toReturn = new Bar(); toReturn.barString = "test"; Converter<Foo, Bar> fooBarConverter = new Converter<Foo, Bar>(){ @Override public Bar convert(Foo source) { return toReturn; } }; DefaultConversionService instance = new DefaultConversionService(); instance.addConverter(SubFoo.class, Bar.class, fooBarConverter); //ACT Bar converted = instance.convert(new SubFoo(), Bar.class); //ASSERT assertSame("Should have gotten back the bar", toReturn, converted); }//end testConvert_ConverterAcceptsSuperclass_ConvertsCorrectly @Test public void testConvert_ConverterReturnsSubclass_ConvertsCorrectly() throws Exception { System.out.println("testConvert_ConverterReturnsSubclass_ConvertsCorrectly"); final SubFoo toReturn = new SubFoo(); Converter<Bar, Foo> converter = new Converter<Bar, Foo>(){ @Override public Foo convert(Bar source) { return toReturn; } }; DefaultConversionService instance = new DefaultConversionService(); instance.addConverter(Bar.class, Foo.class, converter); //ACT Foo converted = instance.convert(new Bar(), Foo.class); //ASSERT assertSame("Should have gotten the subFoo", toReturn, converted); }//end testConvert_ConverterReturnsSubclass_ConvertsCorrectly }