package de.is24.deadcode4j.analyzer;
import de.is24.deadcode4j.junit.LoggingRule;
import org.apache.maven.plugin.logging.Log;
import org.junit.After;
import org.junit.Test;
import org.mockito.Matchers;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.*;
public final class A_CustomXmlAnalyzer extends AnAnalyzer<CustomXmlAnalyzer> {
private Log logMock;
@Override
public LoggingRule enableLogging() {
logMock = LoggingRule.createMock();
return new LoggingRule(logMock);
}
@After
public void resetMock() {
reset(logMock);
}
@Override
protected CustomXmlAnalyzer createAnalyzer() {
return new CustomXmlAnalyzer("junit", ".xml", null);
}
@Test(expected = IllegalArgumentException.class)
public void failsIfInvalidXPathIsSpecified() {
objectUnderTest.registerXPath("elementWithClass");
}
@Test
public void selectsTheTextOfTheSpecifiedNode() {
objectUnderTest.registerXPath("elementWithClass/text()");
analyzeFile("de/is24/deadcode4j/analyzer/some.xml");
assertThatDependenciesAreReported("de.is24.deadcode4j.ClassInElement");
}
@Test
public void selectsTheTextOfTheRestrictedNode() {
objectUnderTest.registerXPath("restrictedElement[@locked='false']/text()");
analyzeFile("de/is24/deadcode4j/analyzer/some.xml");
assertThatDependenciesAreReported("de.is24.deadcode4j.UnlockedClassInElement");
}
@Test
public void selectsTheAttributeOfTheSpecifiedNode() {
objectUnderTest.registerXPath("element/@attributeWithClass");
analyzeFile("de/is24/deadcode4j/analyzer/some.xml");
assertThatDependenciesAreReported("de.is24.deadcode4j.ClassInAttribute");
}
@Test
public void selectsTheAttributeOfTheRestrictedNode() {
objectUnderTest.registerXPath("restrictedElement[@locked='false']/@attributeWithClass");
analyzeFile("de/is24/deadcode4j/analyzer/some.xml");
assertThatDependenciesAreReported("de.is24.deadcode4j.UnlockedClassInAttribute");
}
@Test
public void issuesWarningIfNothingIsFound() {
analyzeFile("de/is24/deadcode4j/analyzer/some.xml");
doFinishAnalysis();
verify(logMock).warn(Matchers.contains(CustomXmlAnalyzer.class.getSimpleName()));
}
@Test
public void issuesNoWarningIfSomethingIsFound() {
objectUnderTest.registerXPath("elementWithClass/text()");
analyzeFile("de/is24/deadcode4j/analyzer/some.xml");
doFinishAnalysis();
verify(logMock, never()).warn(anyString());
}
}