package com.puppycrawl.tools.checkstyle.checks;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import com.puppycrawl.tools.checkstyle.api.AuditEvent;
import com.puppycrawl.tools.checkstyle.api.AuditListener;
import com.puppycrawl.tools.checkstyle.api.SeverityLevel;
public class XPathCheckTest extends AbstractXmlCheckTest {
@Test
public void testSeverity() throws Exception {
// prepare
AuditListener listener = mock(AuditListener.class);
ArgumentCaptor<AuditEvent> argument = ArgumentCaptor
.forClass(AuditEvent.class);
// execute
processChecker("issues/severity", listener);
// verify
verify(listener).addError(argument.capture());
assertEquals(XPathCheck.class.getName(), argument.getValue()
.getSourceName());
assertEquals(SeverityLevel.WARNING, argument.getValue()
.getSeverityLevel());
}
@Test
public void testNamespace() throws Exception {
// prepare
AuditListener listener = mock(AuditListener.class);
ArgumentCaptor<AuditEvent> argument = ArgumentCaptor
.forClass(AuditEvent.class);
// execute
processChecker("issues/xpath-namespace", listener);
// verify
verify(listener).addError(argument.capture());
assertEquals(XPathCheck.class.getName(), argument.getValue()
.getSourceName());
}
@Test
public void testRequired() throws Exception {
// prepare
AuditListener listener = mock(AuditListener.class);
ArgumentCaptor<AuditEvent> argument = ArgumentCaptor
.forClass(AuditEvent.class);
// execute
processChecker("issues/xpath-required", listener);
// verify
verify(listener).addError(argument.capture());
assertEquals(XPathCheck.class.getName(), argument.getValue()
.getSourceName());
assertEquals(
"Expected at least 1 match(es) for expression '/bookstore/book[title = 'XML for Dummies']', but found 0.",
argument.getValue().getMessage());
}
@Test
public void testItem() throws Exception {
// prepare
AuditListener listener = mock(AuditListener.class);
ArgumentCaptor<AuditEvent> argument = ArgumentCaptor
.forClass(AuditEvent.class);
// execute
processChecker("issues/xpath-item", listener);
// verify
verify(listener, times(2)).addError(argument.capture());
assertEquals(2, argument.getAllValues().size());
AuditEvent event0 = argument.getAllValues().get(0);
assertEquals(XPathCheck.class.getName(), event0.getSourceName());
assertEquals(19, event0.getLine());
AuditEvent event1 = argument.getAllValues().get(1);
assertEquals(XPathCheck.class.getName(), event1.getSourceName());
assertEquals(30, event1.getLine());
}
}