package com.pablissimo.sonar;
import static org.junit.Assert.*;
import java.io.File;
import java.net.URL;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.batch.sensor.internal.SensorContextTester;
public class PathResolverImplTest {
private PathResolverImpl resolver;
private SensorContextTester sensorContext;
private File existingFile;
@Before
public void setUp() throws Exception {
URL filePath = PathResolverImplTest.class.getClassLoader().getResource("./existing.ts");
existingFile = new File(filePath.toURI());
String parentPath = existingFile.getParent();
this.sensorContext = SensorContextTester.create(new File(parentPath));
this.sensorContext.settings().setProperty("path key", "existing.ts");
DefaultInputFile file =
new DefaultInputFile("", "existing.ts")
.setLanguage(TypeScriptLanguage.LANGUAGE_KEY);
this.sensorContext.fileSystem().add(file);
this.resolver = new PathResolverImpl();
}
@Test
public void returnsAbsolutePathToFile_ifSpecifiedAndExists() {
String result = this.resolver.getPath(this.sensorContext, "path key", "not me");
assertSamePath(this.existingFile, result);
}
@Test
public void returnsAbsolutePathToFallbackFile_ifPrimaryNotConfiguredAndFallbackExists() {
String result = this.resolver.getPath(this.sensorContext, "new path key", "existing.ts");
assertSamePath(this.existingFile, result);
}
@Test
public void returnsAbsolutePathToFallbackFile_ifPrimaryNotConfiguredButEmptyAndFallbackExists() {
this.sensorContext.settings().setProperty("new path key", "");
String result = this.resolver.getPath(this.sensorContext, "new path key", "existing.ts");
assertSamePath(this.existingFile, result);
}
@Test
public void returnsNull_ifPrimaryNotConfiguredAndFallbackNull() {
String result = this.resolver.getPath(this.sensorContext, "new path key", null);
assertNull(result);
}
@Test
public void returnsNull_ifRequestedPathDoesNotExist() {
this.sensorContext.settings().setProperty("new path key", "missing.ts");
String result = this.resolver.getPath(this.sensorContext, "new path key", "existing.ts");
assertNull(result);
}
@Test
public void returnsAbsolutePathToFile_ifAlreadyAbsoluteAndExists() {
this.sensorContext.settings().setProperty("new path key", this.existingFile.getAbsolutePath());
String result = this.resolver.getPath(this.sensorContext, "new path key", "not me");
assertSamePath(this.existingFile, result);
}
/**
* Asserts that the provided path is the same as the argument. Paths are converted in File objects to avoid case-sensitive issues on some filesystems.
* @param existingFile the path to test against
* @param argument the argument
*/
private void assertSamePath(File existingFile, String argument) {
if (argument == null)
assertEquals(existingFile, argument);
else {
assertEquals(existingFile, new File(argument));
}
}
}