From 1433fbbdd4dbd343c750896ba392b14dd047180e Mon Sep 17 00:00:00 2001 From: Alban Auzeill Date: Thu, 31 Jan 2019 16:31:26 +0100 Subject: [PATCH] Fix quality flaws in tests --- .../sonar/python/it/plugin/NoSonarTest.java | 9 ++-- .../checks/utils/PythonCheckVerifier.java | 45 ++++++++++--------- .../java/org/sonar/plugins/python/Python.java | 10 ++--- .../python/pylint/PylintImportSensor.java | 2 +- .../org/sonar/plugins/python/PythonTest.java | 15 +++---- .../coverage/PythonCoverageSensorTest.java | 3 +- .../python/xunit/PythonXUnitSensorTest.java | 9 ++-- 7 files changed, 45 insertions(+), 48 deletions(-) diff --git a/its/plugin/src/test/java/com/sonar/python/it/plugin/NoSonarTest.java b/its/plugin/src/test/java/com/sonar/python/it/plugin/NoSonarTest.java index 7e53de3c18..205b653d8f 100644 --- a/its/plugin/src/test/java/com/sonar/python/it/plugin/NoSonarTest.java +++ b/its/plugin/src/test/java/com/sonar/python/it/plugin/NoSonarTest.java @@ -32,21 +32,22 @@ public class NoSonarTest { private static final String PROJECT_KEY = "nosonar"; + private static final String PROFILE_NAME = "nosonar"; @ClassRule - public static Orchestrator orchestrator = Tests.ORCHESTRATOR; + public static final Orchestrator ORCHESTRATOR = Tests.ORCHESTRATOR; @BeforeClass public static void startServer() { - orchestrator.getServer().provisionProject(PROJECT_KEY, PROJECT_KEY); - orchestrator.getServer().associateProjectToQualityProfile(PROJECT_KEY, "py", "nosonar"); + ORCHESTRATOR.getServer().provisionProject(PROJECT_KEY, PROJECT_KEY); + ORCHESTRATOR.getServer().associateProjectToQualityProfile(PROJECT_KEY, "py", PROFILE_NAME); SonarScanner build = SonarScanner.create() .setProjectDir(new File("projects", PROJECT_KEY)) .setProjectKey(PROJECT_KEY) .setProjectName(PROJECT_KEY) .setProjectVersion("1.0-SNAPSHOT") .setSourceDirs("."); - orchestrator.executeBuild(build); + ORCHESTRATOR.executeBuild(build); } @Test diff --git a/python-checks/src/test/java/org/sonar/python/checks/utils/PythonCheckVerifier.java b/python-checks/src/test/java/org/sonar/python/checks/utils/PythonCheckVerifier.java index 63683a7e7f..bef103820a 100644 --- a/python-checks/src/test/java/org/sonar/python/checks/utils/PythonCheckVerifier.java +++ b/python-checks/src/test/java/org/sonar/python/checks/utils/PythonCheckVerifier.java @@ -132,33 +132,34 @@ public void visitToken(Token token) { if (text.startsWith(marker)) { int issueLine = trivia.getToken().getLine(); String paramsAndMessage = text.substring(marker.length()).trim(); + expectedIssues.add(createIssue(issueLine, paramsAndMessage)); + } else if (text.startsWith("^")) { + addPreciseLocation(trivia); + } + } + } - if (paramsAndMessage.startsWith("@")) { - String[] spaceSplit = paramsAndMessage.split("[\\s\\[{]", 2); - issueLine += Integer.valueOf(spaceSplit[0].substring(1)); - paramsAndMessage = spaceSplit.length > 1 ? spaceSplit[1] : ""; - } - - TestIssue issue = TestIssue.create(null, issueLine); - - if (paramsAndMessage.startsWith("[[")) { - int endIndex = paramsAndMessage.indexOf("]]"); - addParams(issue, paramsAndMessage.substring(2, endIndex)); - paramsAndMessage = paramsAndMessage.substring(endIndex + 2).trim(); - } + private static TestIssue createIssue(int issueLine, String paramsAndMessage) { + if (paramsAndMessage.startsWith("@")) { + String[] spaceSplit = paramsAndMessage.split("[\\s\\[{]", 2); + issueLine += Integer.valueOf(spaceSplit[0].substring(1)); + paramsAndMessage = spaceSplit.length > 1 ? spaceSplit[1] : ""; + } - if (paramsAndMessage.startsWith("{{")) { - int endIndex = paramsAndMessage.indexOf("}}"); - String message = paramsAndMessage.substring(2, endIndex); - issue.message(message); - } + TestIssue issue = TestIssue.create(null, issueLine); - expectedIssues.add(issue); + if (paramsAndMessage.startsWith("[[")) { + int endIndex = paramsAndMessage.indexOf("]]"); + addParams(issue, paramsAndMessage.substring(2, endIndex)); + paramsAndMessage = paramsAndMessage.substring(endIndex + 2).trim(); + } - } else if (text.startsWith("^")) { - addPreciseLocation(trivia); - } + if (paramsAndMessage.startsWith("{{")) { + int endIndex = paramsAndMessage.indexOf("}}"); + String message = paramsAndMessage.substring(2, endIndex); + issue.message(message); } + return issue; } private static void addParams(TestIssue issue, String params) { diff --git a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/Python.java b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/Python.java index 7ab2166b60..122216ea8e 100644 --- a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/Python.java +++ b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/Python.java @@ -22,7 +22,7 @@ import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; -import org.sonar.api.config.Settings; +import org.sonar.api.config.Configuration; import org.sonar.api.resources.AbstractLanguage; public class Python extends AbstractLanguage { @@ -31,16 +31,16 @@ public class Python extends AbstractLanguage { private static final String[] DEFAULT_FILE_SUFFIXES = { "py" }; - private Settings settings; + private Configuration configuration; - public Python(Settings settings) { + public Python(Configuration configuration) { super(KEY, "Python"); - this.settings = settings; + this.configuration = configuration; } @Override public String[] getFileSuffixes() { - String[] suffixes = filterEmptyStrings(settings.getStringArray(PythonPlugin.FILE_SUFFIXES_KEY)); + String[] suffixes = filterEmptyStrings(configuration.getStringArray(PythonPlugin.FILE_SUFFIXES_KEY)); return suffixes.length == 0 ? Python.DEFAULT_FILE_SUFFIXES : suffixes; } diff --git a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/pylint/PylintImportSensor.java b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/pylint/PylintImportSensor.java index 22011aaffe..7a1a6e76bf 100644 --- a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/pylint/PylintImportSensor.java +++ b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/pylint/PylintImportSensor.java @@ -56,7 +56,7 @@ public void describe(SensorDescriptor descriptor) { super.describe(descriptor); descriptor .createIssuesForRuleRepository(PylintRuleRepository.REPOSITORY_KEY) - .requireProperty(REPORT_PATH_KEY); + .onlyWhenConfiguration(conf -> conf.hasKey(REPORT_PATH_KEY)); } @Override diff --git a/sonar-python-plugin/src/test/java/org/sonar/plugins/python/PythonTest.java b/sonar-python-plugin/src/test/java/org/sonar/plugins/python/PythonTest.java index 027ce91476..fd7ba2b25f 100644 --- a/sonar-python-plugin/src/test/java/org/sonar/plugins/python/PythonTest.java +++ b/sonar-python-plugin/src/test/java/org/sonar/plugins/python/PythonTest.java @@ -19,10 +19,8 @@ */ package org.sonar.plugins.python; -import com.google.common.collect.Maps; -import java.util.Map; import org.junit.Test; -import org.sonar.api.config.Settings; +import org.sonar.api.config.internal.ConfigurationBridge; import org.sonar.api.config.internal.MapSettings; import static org.assertj.core.api.Assertions.assertThat; @@ -31,7 +29,7 @@ public class PythonTest { @Test public void test() { - Python language = new Python(new MapSettings()); + Python language = new Python(new ConfigurationBridge(new MapSettings())); assertThat(language.getKey()).isEqualTo("py"); assertThat(language.getName()).isEqualTo("Python"); assertThat(language.getFileSuffixes()).hasSize(1).contains("py"); @@ -39,13 +37,10 @@ public void test() { @Test public void custom_file_suffixes() { - Map props = Maps.newHashMap(); - props.put(PythonPlugin.FILE_SUFFIXES_KEY, "py,python"); + MapSettings settings = new MapSettings(); + settings.setProperty(PythonPlugin.FILE_SUFFIXES_KEY, "py,python"); - Settings settings = new MapSettings(); - settings.addProperties(props); - - Python language = new Python(settings); + Python language = new Python(new ConfigurationBridge(settings)); assertThat(language.getFileSuffixes()).hasSize(2).contains("python"); } } diff --git a/sonar-python-plugin/src/test/java/org/sonar/plugins/python/coverage/PythonCoverageSensorTest.java b/sonar-python-plugin/src/test/java/org/sonar/plugins/python/coverage/PythonCoverageSensorTest.java index 3943873140..6956c44a3c 100644 --- a/sonar-python-plugin/src/test/java/org/sonar/plugins/python/coverage/PythonCoverageSensorTest.java +++ b/sonar-python-plugin/src/test/java/org/sonar/plugins/python/coverage/PythonCoverageSensorTest.java @@ -36,7 +36,6 @@ import org.sonar.api.batch.fs.internal.DefaultInputFile; import org.sonar.api.batch.fs.internal.TestInputFileBuilder; import org.sonar.api.batch.sensor.internal.SensorContextTester; -import org.sonar.api.config.Settings; import org.sonar.api.config.internal.MapSettings; import org.sonar.api.utils.log.LogTester; import org.sonar.api.utils.log.LoggerLevel; @@ -53,7 +52,7 @@ public class PythonCoverageSensorTest { private static final String FILE3_KEY = "moduleKey:sources/file3.py"; private static final String FILE4_KEY = "moduleKey:sources/file4.py"; private SensorContextTester context; - private Settings settings; + private MapSettings settings; private PythonCoverageSensor coverageSensor = new PythonCoverageSensor(); private File moduleBaseDir = new File("src/test/resources/org/sonar/plugins/python/coverage-reports").getAbsoluteFile(); diff --git a/sonar-python-plugin/src/test/java/org/sonar/plugins/python/xunit/PythonXUnitSensorTest.java b/sonar-python-plugin/src/test/java/org/sonar/plugins/python/xunit/PythonXUnitSensorTest.java index 6c8dbaa30d..9de130d359 100644 --- a/sonar-python-plugin/src/test/java/org/sonar/plugins/python/xunit/PythonXUnitSensorTest.java +++ b/sonar-python-plugin/src/test/java/org/sonar/plugins/python/xunit/PythonXUnitSensorTest.java @@ -27,7 +27,8 @@ import org.sonar.api.batch.fs.internal.DefaultInputFile; import org.sonar.api.batch.fs.internal.TestInputFileBuilder; import org.sonar.api.batch.sensor.internal.SensorContextTester; -import org.sonar.api.config.Settings; +import org.sonar.api.config.internal.ConfigurationBridge; +import org.sonar.api.config.internal.MapSettings; import org.sonar.api.measures.CoreMetrics; import org.sonar.api.measures.Metric; @@ -39,16 +40,16 @@ public class PythonXUnitSensorTest { private static final String FILE_SAMPLE2 = "tests/dir/test_sample2.py"; private File baseDir = new File("src/test/resources/org/sonar/plugins/python"); - Settings settings; + MapSettings settings = new MapSettings(); PythonXUnitSensor sensor; SensorContextTester context = SensorContextTester.create(baseDir); DefaultFileSystem fs; @Before public void setUp() { - settings = context.settings(); + context.setSettings(settings); fs = new DefaultFileSystem(baseDir); - sensor = new PythonXUnitSensor(context.config(), fs); + sensor = new PythonXUnitSensor(new ConfigurationBridge(settings), fs); } @Test