package rocks.inspectit.shared.cs.ci.business.expression.impl;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import rocks.inspectit.shared.all.cmr.service.ICachedDataService;
import rocks.inspectit.shared.all.communication.data.InvocationSequenceData;
import rocks.inspectit.shared.all.testbase.TestBase;
import rocks.inspectit.shared.cs.ci.business.valuesource.StringValueSource;
/**
* @author Alexander Wert
*
*/
@SuppressWarnings("PMD")
public class NameExtractionExpressionTest extends TestBase {
@InjectMocks
NameExtractionExpression expression;
@Mock
StringValueSource stringValueSource;
/**
* Tests
* {@link NameExtractionExpression#extractName(InvocationSequenceData, ICachedDataService)}
* method.
*
*
*/
public static class ExtractName extends NameExtractionExpressionTest {
@BeforeMethod
public void initialize() {
when(stringValueSource.getStringValues(any(InvocationSequenceData.class), any(ICachedDataService.class))).thenReturn(new String[] { "/a/sample/string", "/my/second/string/for/test" });
}
@Test
public void matchFirstString() {
expression.setRegularExpression("/a/([^/]*)/string");
expression.setTargetNamePattern("Name:(1)");
String name = expression.extractName(null, null);
assertThat(name, equalTo("Name:sample"));
}
@Test
public void matchSecondString() {
expression.setRegularExpression("/my/([^/]*)/string.*");
expression.setTargetNamePattern("Name:(1)");
String name = expression.extractName(null, null);
assertThat(name, equalTo("Name:second"));
}
@Test
public void matchMultipleGroups() {
expression.setRegularExpression("/my/([^/]*)/string/for/(.*)");
expression.setTargetNamePattern("Name:(1)-(2)");
String name = expression.extractName(null, null);
assertThat(name, equalTo("Name:second-test"));
}
@Test
public void noMatch() {
expression.setRegularExpression("/my/([^/]*)/xy/for/(.*)");
expression.setTargetNamePattern("Name:(1)-(2)");
String name = expression.extractName(null, null);
assertThat(name, is(nullValue()));
}
@Test
public void invalidPattern() {
expression.setRegularExpression("(my");
expression.setTargetNamePattern("Name:(1)-(2)");
String name = expression.extractName(null, null);
assertThat(name, is(nullValue()));
verifyNoMoreInteractions(stringValueSource);
}
}
}