/* 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.loader.core; import java.io.File; import java.util.ArrayList; import java.util.List; import org.amanzi.neo.loader.core.internal.IConfiguration; import org.amanzi.neo.loader.core.internal.Loader; import org.amanzi.neo.loader.core.parser.IParser; import org.amanzi.neo.loader.core.saver.ISaver; import org.amanzi.neo.loader.core.validator.IValidationResult; import org.amanzi.neo.loader.core.validator.IValidationResult.Result; import org.amanzi.neo.loader.core.validator.IValidator; import org.amanzi.testing.AbstractMockitoTest; import org.apache.commons.lang3.StringUtils; import org.eclipse.core.runtime.IProgressMonitor; import org.junit.Before; import org.junit.Test; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; /** * TODO Purpose of * <p> * </p> * * @author Nikolay Lagutko (nikolay.lagutko@amanzitel.com) * @since 1.0.0 */ @SuppressWarnings("unchecked") public class LoaderTest extends AbstractMockitoTest { private static final String LOADER_NAME = "Loader Name"; /** * TODO Purpose of * <p> * </p> * * @author Nikolay Lagutko (nikolay.lagutko@amanzitel.com) * @since 1.0.0 */ private final class ParserAnswer implements Answer<Boolean> { @Override public Boolean answer(final InvocationOnMock invocation) { if (++hasNextCall > ELEMENT_NUMBER) { return Boolean.FALSE; } return Boolean.TRUE; } } private static final int SAVER_NUMBER = 3; private static final int ELEMENT_NUMBER = 3; private Loader<IConfiguration, IData> loader; private IParser<IConfiguration, IData> parser; private List<ISaver<IConfiguration, IData>> savers; private IConfiguration configuration; private IData data; private IValidator<IConfiguration> validator; private int hasNextCall; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { loader = new Loader<IConfiguration, IData>(); loader.setName(LOADER_NAME); parser = mock(IParser.class); loader.setParser(parser); savers = new ArrayList<ISaver<IConfiguration, IData>>(); for (int i = 0; i < SAVER_NUMBER; i++) { ISaver<IConfiguration, IData> saver = mock(ISaver.class); savers.add(saver); loader.addSaver(saver); } validator = mock(IValidator.class); loader.setValidator(validator); configuration = mock(IConfiguration.class); data = mock(IData.class); hasNextCall = 0; when(parser.next()).thenReturn(data); when(parser.hasNext()).thenAnswer(new ParserAnswer()); } @Test public void testCheckLoaderActivityOnInitialization() throws Exception { loader.init(configuration); verify(parser).init(configuration); for (ISaver<IConfiguration, IData> saver : savers) { verify(saver).init(configuration); } } @Test public void testCheckActivityOnRun() throws Exception { IProgressMonitor monitor = mock(IProgressMonitor.class); loader.run(monitor); verify(parser).setProgressMonitor(LOADER_NAME, monitor); verify(parser, times(ELEMENT_NUMBER + 1)).hasNext(); verify(parser, times(ELEMENT_NUMBER)).next(); for (ISaver<IConfiguration, IData> saver : savers) { verify(saver, times(ELEMENT_NUMBER)).save(data); } } @Test public void testCheckActivityOnValidationWithSuccessConfiguration() throws Exception { when(configuration.isValid()).thenReturn(IValidationResult.SUCCESS); loader.validate(configuration); verify(configuration).isValid(); verify(validator).validate(configuration); } @Test public void testCheckActivityOnValidationWithFailedConfiguration() throws Exception { when(configuration.isValid()).thenReturn(IValidationResult.FAIL); loader.validate(configuration); verify(configuration).isValid(); verify(validator, never()).validate(configuration); } @Test public void testCheckResultOnValidation() throws Exception { IValidationResult validationResult = IValidationResult.SUCCESS; when(configuration.isValid()).thenReturn(validationResult); when(validator.validate(configuration)).thenReturn(validationResult); IValidationResult result = loader.validate(configuration); assertEquals("Unexpected validation result", validationResult, result); } @Test public void testCheckActivityOnIsAppropriate() throws Exception { when(validator.appropriate(configuration)).thenReturn(IValidationResult.SUCCESS); loader.isAppropriate(configuration); verify(validator).appropriate(configuration); } @Test public void testCheckSuccessResultOnIsAppropriate() throws Exception { when(validator.appropriate(configuration)).thenReturn(IValidationResult.SUCCESS); IValidationResult result = loader.isAppropriate(configuration); assertEquals("validation result should be success", Result.SUCCESS, result.getResult()); } @Test public void testCheckFailResultOnIsAppropriate() throws Exception { when(validator.appropriate(configuration)).thenReturn(IValidationResult.FAIL); IValidationResult result = loader.isAppropriate(configuration); assertEquals("validation result should be fail", Result.FAIL, result.getResult()); } @Test public void testCheckUnkonwnResultOnIsAppropriate() throws Exception { when(validator.appropriate(configuration)).thenReturn(IValidationResult.UNKNOWN); IValidationResult result = loader.isAppropriate(configuration); assertEquals("validation result should be unknown", Result.UNKNOWN, result.getResult()); } @Test public void testCheckFinishUpAction() throws Exception { IProgressMonitor monitor = mock(IProgressMonitor.class); loader.run(monitor); verify(parser).finishUp(); for (ISaver<IConfiguration, IData> saver : savers) { verify(saver).finishUp(); } } @Test public void testCheckFinishUpWhenException() throws Exception { File mockedFile = mock(File.class); when(mockedFile.getName()).thenReturn(StringUtils.EMPTY); when(parser.next()).thenThrow(new IllegalArgumentException()); when(parser.getLastParsedFile()).thenReturn(mockedFile); when(parser.getLastParsedLineNumber()).thenReturn(0); doNothing().when(parser).finishUp(); for (ISaver<IConfiguration, IData> saver : savers) { doNothing().when(saver).finishUp(); } loader.run(null); verify(parser).finishUp(); for (ISaver<IConfiguration, IData> saver : savers) { verify(saver).finishUp(); } } }