package org.unitils.dbmaintainer.locator;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections.ListUtils;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.unitils.UnitilsJUnit4TestClassRunner;
import org.unitils.dbmaintainer.locator.resourcepickingstrategie.ResourcePickingStrategie;
import org.unitils.easymock.EasyMockUnitils;
import org.unitils.easymock.annotation.Mock;
import org.unitils.inject.annotation.TestedObject;
/**
* Will test finding data on the classpath
*
* @author tdr
*
* @since 1.0.2
*
*/
@RunWith(UnitilsJUnit4TestClassRunner.class)
@SuppressWarnings("unchecked")
public class ClassPathDataLocatorTest {
@TestedObject
ClassPathDataLocator classPathDataLocator;
@Mock
private ResourcePickingStrategie resourcePickingStrategie;
private List<URL> urlList;
private List<URL> urlResultList;
String resourceName;
/*** */
@Before
public void setUp(){
resourceName = "/org/unitils/testdata/exampleResourceData.xml";
urlList = new ArrayList<URL>();
URL url = getClass().getResource(resourceName);
Assert.assertNotNull("Resource '"+resourceName+"' not found error in testSetup", url);
urlList.add(url);
urlResultList = new ArrayList<URL>();
urlResultList.add(url);
}
/*** */
@Test
public void getDataResourceTestAbsolutePath(){
EasyMock.expect(resourcePickingStrategie.filter(ListUtils.EMPTY_LIST,resourceName)).andReturn(urlResultList);
EasyMockUnitils.replay();
InputStream is = classPathDataLocator.getDataResource(resourceName, resourcePickingStrategie );
Assert.assertNotNull(is);
}
/*** */
@Test
public void getDataResourceTestRelativePath(){
EasyMock.expect(resourcePickingStrategie.filter((List<URL>) EasyMock.anyObject() ,(String)EasyMock.anyObject())).andReturn(urlResultList);
EasyMockUnitils.replay();
InputStream is = classPathDataLocator.getDataResource(resourceName.substring(1), resourcePickingStrategie );
Assert.assertNotNull(is);
}
/*** */
@Test
public void getDataResourceTestNonExisting(){
EasyMock.expect(resourcePickingStrategie.filter((List<URL>) EasyMock.anyObject() ,(String)EasyMock.anyObject())).andReturn(ListUtils.EMPTY_LIST);
EasyMockUnitils.replay();
InputStream is = classPathDataLocator.getDataResource(resourceName.substring(0, resourceName.length()-2).concat("bla"), resourcePickingStrategie );
Assert.assertNull(is);
}
@Test
public void testGetDataSourceIOException() throws IOException {
List<URL> resourcesF = new ArrayList<URL>();
URL url = new URL("https://graph.facebook.com/me");
resourcesF.add(url );
EasyMock.expect(resourcePickingStrategie.filter((List<URL>) EasyMock.anyObject() ,(String)EasyMock.anyObject())).andReturn(resourcesF);
//EasyMock.expect(url.openStream()).andThrow(new IOException());
EasyMockUnitils.replay();
InputStream is = classPathDataLocator.getDataResource(resourceName.substring(0, resourceName.length()-2).concat("bla"), resourcePickingStrategie );
Assert.assertNull(is);
}
}