package org.infernus.idea.checkstyle.service;
import com.intellij.ide.highlighter.JavaFileType;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.puppycrawl.tools.checkstyle.api.Configuration;
import org.infernus.idea.checkstyle.csapi.TabWidthAndBaseDirProvider;
import org.infernus.idea.checkstyle.model.ConfigurationLocation;
import org.jetbrains.annotations.NotNull;
import org.junit.Test;
import java.io.IOException;
import java.util.Optional;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ConfigurationsTest {
private static final int CODE_STYLE_TAB_SIZE = 3;
private TabWidthAndBaseDirProvider createClassUnderTest(final Configuration pConfig) throws IOException {
final Module module = mock(Module.class);
final Project project = mock(Project.class);
final ConfigurationLocation configurationLocation = mock(ConfigurationLocation.class);
final CodeStyleSettings codeStyleSettings = mock(CodeStyleSettings.class);
when(configurationLocation.resolveAssociatedFile("aFileToResolve", project, module)).thenReturn("aResolvedFile");
when(configurationLocation.resolveAssociatedFile("triggersAnIoException", project, module)).thenThrow(new
IOException("aTriggeredIoException"));
when(codeStyleSettings.getTabSize(JavaFileType.INSTANCE)).thenReturn(CODE_STYLE_TAB_SIZE);
return new Configurations(module, pConfig) {
@NotNull
@Override
CodeStyleSettings currentCodeStyleSettings() {
return codeStyleSettings;
}
};
}
@Test
public void aDefaultTabWidthIsEightIsUsedWhenNoTabWidthPropertyIsPresent() throws IOException {
final Configuration config = ConfigurationBuilder.checker().build();
assertEquals(CODE_STYLE_TAB_SIZE, createClassUnderTest(config).tabWidth());
}
@Test
public void testNoTreeWalker_useDefault() throws IOException {
final Configuration config = ConfigurationBuilder.checker().withChild( //
ConfigurationBuilder.config("FileTabCharacter")).build();
assertEquals(CODE_STYLE_TAB_SIZE, createClassUnderTest(config).tabWidth());
}
@Test
public void tabWidthPropertyValueIsReturnedWhenPresent() throws IOException {
final Configuration config = ConfigurationBuilder.checker().withChild( //
ConfigurationBuilder.config("TreeWalker").withAttribute("tabWidth", "7")).build();
assertEquals(7, createClassUnderTest(config).tabWidth());
}
@Test
public void aTabWidthPropertyWithANonIntegerValueReturnsTheDefault() throws IOException {
final Configuration config = ConfigurationBuilder.checker().withChild( //
ConfigurationBuilder.config("TreeWalker").withAttribute("tabWidth", "dd")).build();
assertEquals(CODE_STYLE_TAB_SIZE, createClassUnderTest(config).tabWidth());
}
@Test
public void aTabWidthPropertyWithNoValueReturnsTheDefault() throws IOException {
final Configuration config = ConfigurationBuilder.checker().withChild( //
ConfigurationBuilder.config("TreeWalker").withAttribute("tabWidth", "")).build();
assertEquals(CODE_STYLE_TAB_SIZE, createClassUnderTest(config).tabWidth());
}
@Test
public void tabWidthNullAttribute() throws IOException {
final Configuration config = ConfigurationBuilder.checker().withChild( //
ConfigurationBuilder.config("TreeWalker").withAttribute("tabWidth", null)).build();
assertEquals(CODE_STYLE_TAB_SIZE, createClassUnderTest(config).tabWidth());
}
@Test
public void testBaseDir() throws IOException {
final Configuration config = ConfigurationBuilder.checker().withChild( //
ConfigurationBuilder.config("TreeWalker").withAttribute("tabWidth", "7")).build();
assertEquals(Optional.empty(), createClassUnderTest(config).baseDir());
}
@Test
public void testBaseDirFromAttribute() throws IOException {
final Configuration config = ConfigurationBuilder.checker().withAttribute("foo", "bar") //
.withAttribute("basedir", "/some/dir").build();
assertEquals(Optional.of("/some/dir"), createClassUnderTest(config).baseDir());
}
}