/** * Copyright (c) 2012, Lindsay Bradford and other Contributors. * All rights reserved. * * This program and the accompanying materials are made available * under the terms of the BSD 3-Clause licence which accompanies * this distribution, and is available at * http://opensource.org/licenses/BSD-3-Clause */ package blacksmyth.general.file; import java.util.HashMap; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; import static org.mockito.Mockito.*; public class StrategicFileConverterTest { private static IObjectFileConverter<String> svgConverter; private static IObjectFileConverter<String> pdfConverter; private static IObjectFileConverter<String> pngConverter; private static final String[] FILE_TYPES = new String[] {"svg", "pdf", "png"}; private static final int SVG_INDEX = 0; private static final int PDF_INDEX = 1; private static final int PNG_INDEX = 2; private static final String RESULT = "Result"; private static HashMap<String, IObjectFileConverter<String>> converterMap; private static StrategicFileConverter<String> testConverter; @BeforeClass public static void testSetup() { svgConverter = buildMockConverter(SVG_INDEX); pdfConverter = buildMockConverter(PDF_INDEX); pngConverter = buildMockConverter(PNG_INDEX); converterMap = new HashMap<String, IObjectFileConverter<String>>(); converterMap.put(FILE_TYPES[SVG_INDEX], svgConverter); converterMap.put(FILE_TYPES[PDF_INDEX], pdfConverter); converterMap.put(FILE_TYPES[PNG_INDEX], pngConverter); testConverter = new StrategicFileConverter<String>(); testConverter.setAdapterMap(converterMap); } @SuppressWarnings({ "unchecked", "cast" }) private static IObjectFileConverter<String> buildMockConverter(int index) { IObjectFileConverter<String> mockConverter = (IObjectFileConverter<String>) mock(IObjectFileConverter.class); when( mockConverter.toObjectFromFile( any(String.class) ) ).thenReturn( RESULT + FILE_TYPES[index] ); return mockConverter; } @Test public void ToObjectFromFile_SvgFilenameSupplied_SvgConverterUsed() { String result = testConverter.toObjectFromFile("test.svg"); assertTrue( result.equals(RESULT + FILE_TYPES[SVG_INDEX]) ); } @Test public void ToFileFromObject_SvgFilenameSupplied_SvgConverterUsed() { testConverter.toFileFromObject("test.svg", "fart"); verify(svgConverter).toFileFromObject("test.svg", "fart"); } @Test public void ToObjectFromFile_PdfFilenameSupplied_PdfConverterUsed() { String result = testConverter.toObjectFromFile("test.pdf"); assertTrue( result.equals(RESULT + FILE_TYPES[PDF_INDEX]) ); } @Test public void ToFileFromObject_PdfFilenameSupplied_PdfConverterUsed() { testConverter.toFileFromObject("test.pdf", "tart"); verify(pdfConverter).toFileFromObject("test.pdf", "tart"); } @Test public void ToObjectFromFile_PngFilenameSupplied_PngConverterUsed() { String result = testConverter.toObjectFromFile("test.png"); assertTrue( result.equals(RESULT + FILE_TYPES[PNG_INDEX]) ); } @Test public void ToFileFromObject_PngFilenameSupplied_PngConverterUsed() { testConverter.toFileFromObject("test.png", "cart"); verify(pngConverter).toFileFromObject("test.png", "cart"); } @Test(expected=AssertionError.class) public void ToObjectFromFile_UnsupportedFilenameSupplied_AssertionError() { testConverter.toObjectFromFile("test.crap"); } @Test(expected=AssertionError.class) public void ToFileFromObject_UnsupportedFilenameSupplied_AssertionError() { testConverter.toFileFromObject("test.crap", "cart"); } }