package com.stepstone.sonar.plugin.coldfusion; import static org.assertj.core.api.Assertions.assertThat; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.sonar.api.SonarQubeSide; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.fs.internal.DefaultFileSystem; import org.sonar.api.batch.fs.internal.DefaultInputFile; import org.sonar.api.batch.fs.internal.TestInputFileBuilder; import org.sonar.api.batch.rule.ActiveRules; import org.sonar.api.batch.rule.internal.ActiveRulesBuilder; import org.sonar.api.batch.sensor.internal.SensorContextTester; import org.sonar.api.batch.sensor.measure.Measure; import org.sonar.api.internal.SonarRuntimeImpl; import org.sonar.api.internal.apachecommons.codec.Charsets; import org.sonar.api.measures.CoreMetrics; import org.sonar.api.utils.Version; import org.sonar.api.utils.command.CommandExecutor; import java.io.File; public class ColdfusionSensorTest { private ActiveRules rulesProfile = new ActiveRulesBuilder().build(); private File baseDir = new File("src/test/resources").getAbsoluteFile(); private SensorContextTester context = SensorContextTester.create(baseDir); @Rule public TemporaryFolder tmpFolder = new TemporaryFolder(); @Test public void testBasicCFMAnalysis() { DefaultFileSystem fileSystem = new DefaultFileSystem(tmpFolder.getRoot()); fileSystem.setEncoding(Charsets.UTF_8); fileSystem.setWorkDir(tmpFolder.getRoot().toPath()); context.setFileSystem(fileSystem); context.setRuntime(SonarRuntimeImpl.forSonarQube(Version.create(7, 6), SonarQubeSide.SCANNER)); context.settings().appendProperty("sonar.projectBaseDir", baseDir.getPath()); addFilesToFs(); CommandExecutor commandExecutor = CommandExecutor.create(); String javaHome = System.getProperty("java.home"); Assert.assertTrue(javaHome!=null && !javaHome.equals("")); if(OSValidator.isWindows()) { context.settings().appendProperty(ColdFusionPlugin.CFLINT_JAVA, javaHome + "/bin/java.exe"); } else { context.settings().appendProperty(ColdFusionPlugin.CFLINT_JAVA, javaHome + "/bin/java"); } ColdFusionSensor sensor = new ColdFusionSensor(context.fileSystem(), rulesProfile); sensor.execute(context); Integer nloc = 0; Integer comments = 0; Integer complexity = 0; for (InputFile o : context.fileSystem().inputFiles()) { Measure<Integer> measureNloc = context.measure(o.key(),CoreMetrics.NCLOC.key()); Measure<Integer> measureComment = context.measure(o.key(),CoreMetrics.COMMENT_LINES.key()); Measure<Integer> measureComplexity = context.measure(o.key(),CoreMetrics.COMPLEXITY.key()); nloc+=measureNloc.value(); comments+=measureComment.value(); complexity+=measureComplexity.value(); } assertThat(nloc).isEqualTo(56); assertThat(comments).isEqualTo(9); assertThat(complexity).isEqualTo(10); } private void addFilesToFs() { DefaultInputFile inputFileMetrics1 = new TestInputFileBuilder(context.module().key(), baseDir.getAbsoluteFile(), new File("src/test/resources/testmetrics1.cfm").getAbsoluteFile()).setLanguage(ColdFusionPlugin.LANGUAGE_KEY).build(); context.fileSystem().add(inputFileMetrics1); DefaultInputFile inputFileMetrics2 = new TestInputFileBuilder(context.module().key(), baseDir.getAbsoluteFile(), new File("src/test/resources/testmetrics2.cfm").getAbsoluteFile()).setLanguage(ColdFusionPlugin.LANGUAGE_KEY).build(); context.fileSystem().add(inputFileMetrics2); DefaultInputFile inputFileMetrics3 = new TestInputFileBuilder(context.module().key(), baseDir.getAbsoluteFile(), new File("src/test/resources/EpisodeClaim.cfc").getAbsoluteFile()).setLanguage(ColdFusionPlugin.LANGUAGE_KEY).build(); context.fileSystem().add(inputFileMetrics3); } }