package eu.dnetlib.enabling.resultset; // NOPMD import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyObject; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.when; import java.util.List; import javax.xml.ws.wsaddressing.W3CEndpointReference; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.invocation.InvocationOnMock; import org.mockito.runners.MockitoJUnit44Runner; import org.mockito.stubbing.Answer; import com.google.common.collect.Lists; import eu.dnetlib.enabling.resultset.rmi.ResultSetException; import eu.dnetlib.enabling.resultset.rmi.ResultSetService; import eu.dnetlib.enabling.tools.ServiceResolver; import eu.dnetlib.miscutils.factory.Factory; import eu.dnetlib.miscutils.functional.ThreadSafeUnaryFunction; import eu.dnetlib.miscutils.functional.UnaryFunction; /** * test xslt resultset. * * @author marko * */ @RunWith(MockitoJUnit44Runner.class) public class MappedResultSetTest { /** * instance under test. */ private transient MappedResultSet mappedResultSet; /** * service resolver. */ @Mock private transient ServiceResolver serviceResolver; /** * resultset service mock. */ @Mock private transient ResultSetService resultSetService; /** * resultset mock. */ @Mock private transient ResultSet resultSet; private Answer resultSetAnswer = new Answer() { private List list = Lists.newArrayList("1","2","3","4","5","6","7","8","9","10"); @Override public Object answer(InvocationOnMock invocation) throws Throwable { String method = invocation.getMethod().getName(); if (method.equals("getResult") || method.equals("getResults")) { int from = (Integer) invocation.getArguments()[1]; int to = (Integer) invocation.getArguments()[2]; return list.subList(from-1, to); } if (method.equals("getNumberOfElements") || method.equals("getNumberOfResults")) { return list.size(); } if (method.equals("getRSStatus")) { return "closed"; } if (method.equals("isOpen")) { return false; } System.out.println(invocation.toString()); return null; } }; /** * Common setup. * @throws ResultSetException * */ @Before public void setUp() throws ResultSetException { when(serviceResolver.getService(eq(ResultSetService.class), (W3CEndpointReference) anyObject())).thenReturn(resultSetService); when(serviceResolver.getResourceIdentifier((W3CEndpointReference) anyObject())).thenReturn("123"); when(resultSetService.getNumberOfElements(anyString())).thenAnswer(resultSetAnswer); when(resultSetService.getResult(anyString(), anyInt(), anyInt(), anyString())).thenAnswer(resultSetAnswer ); when(resultSetService.getRSStatus(anyString())).thenAnswer(resultSetAnswer); when(resultSet.getNumberOfResults()).thenAnswer(resultSetAnswer); when(resultSet.getResults(anyInt(), anyInt())).thenAnswer(resultSetAnswer ); when(resultSet.isOpen()).thenAnswer(resultSetAnswer); } @Test public void testThreadSafeMappedResultSet_1() { final Factory> functionFactory = new Factory>() { @Override public UnaryFunction newInstance() { return new UnaryFunction() { @Override public String evaluate(String arg) { return "mapped-" + arg; } }; } }; mappedResultSet = new MappedResultSet(null, new ThreadSafeUnaryFunction(functionFactory), serviceResolver); mappedResultSet.setResultSet(resultSet); for (String s : mappedResultSet.getResult(1, 10)) { assertNotNull("null result", s); assertFalse("empty result", s.isEmpty()); assertNotNull("null element", s); assertTrue("transformed correctly", s.startsWith("mapped-")); } } }