public <G extends Serializable> Measure<G> measure(String componentKey, Metric<G> metric) { return measure(componentKey, metric.key()); }
@Test public void testMeasures() throws IOException { assertThat(tester.measures("foo:src/Foo.java")).isEmpty(); assertThat(tester.measure("foo:src/Foo.java", "ncloc")).isNull(); tester.<Integer>newMeasure() .on(new TestInputFileBuilder("foo", "src/Foo.java").build()) .forMetric(CoreMetrics.NCLOC) .withValue(2) .save(); assertThat(tester.measures("foo:src/Foo.java")).hasSize(1); assertThat(tester.measure("foo:src/Foo.java", "ncloc")).isNotNull(); tester.<Integer>newMeasure() .on(new TestInputFileBuilder("foo", "src/Foo.java").build()) .forMetric(CoreMetrics.LINES) .withValue(4) .save(); assertThat(tester.measures("foo:src/Foo.java")).hasSize(2); assertThat(tester.measure("foo:src/Foo.java", "ncloc")).isNotNull(); assertThat(tester.measure("foo:src/Foo.java", "lines")).isNotNull(); tester.<Integer>newMeasure() .on(new DefaultInputModule(ProjectDefinition.create().setKey("foo").setBaseDir(temp.newFolder()).setWorkDir(temp.newFolder()))) .forMetric(CoreMetrics.DIRECTORIES) .withValue(4) .save(); assertThat(tester.measures("foo")).hasSize(1); assertThat(tester.measure("foo", "directories")).isNotNull(); }
@Test public void testExecution() throws IOException { File measures = new File(baseDir, "src/foo.xoo.measures"); FileUtils.write(measures, "ncloc:12\nbranch_coverage:5.3\nsqale_index:300\nbool:true\n\n#comment", StandardCharsets.UTF_8); InputFile inputFile = new TestInputFileBuilder("foo", "src/foo.xoo").setLanguage("xoo").setModuleBaseDir(baseDir.toPath()).build(); context.fileSystem().add(inputFile); Metric<Boolean> booleanMetric = new Metric.Builder("bool", "Bool", Metric.ValueType.BOOL) .create(); when(metricFinder.<Integer>findByKey("ncloc")).thenReturn(CoreMetrics.NCLOC); when(metricFinder.<Double>findByKey("branch_coverage")).thenReturn(CoreMetrics.BRANCH_COVERAGE); when(metricFinder.<Long>findByKey("sqale_index")).thenReturn(CoreMetrics.TECHNICAL_DEBT); when(metricFinder.<Boolean>findByKey("bool")).thenReturn(booleanMetric); sensor.execute(context); assertThat(context.measure("foo:src/foo.xoo", CoreMetrics.NCLOC).value()).isEqualTo(12); assertThat(context.measure("foo:src/foo.xoo", CoreMetrics.BRANCH_COVERAGE).value()).isEqualTo(5.3); assertThat(context.measure("foo:src/foo.xoo", CoreMetrics.TECHNICAL_DEBT).value()).isEqualTo(300L); assertThat(context.measure("foo:src/foo.xoo", booleanMetric).value()).isTrue(); }
@Test public void testExecutionForFoldersMeasures_no_measures() throws IOException { File measures = new File(baseDir, "src/folder.measures"); FileUtils.write(measures, "ncloc:12\nbranch_coverage:5.3\nsqale_index:300\nbool:true\n\n#comment", StandardCharsets.UTF_8); InputFile inputFile = new TestInputFileBuilder("foo", "src/foo.xoo").setLanguage("xoo").setModuleBaseDir(baseDir.toPath()).build(); context.fileSystem().add(inputFile); Metric<Boolean> booleanMetric = new Metric.Builder("bool", "Bool", Metric.ValueType.BOOL) .create(); when(metricFinder.<Integer>findByKey("ncloc")).thenReturn(CoreMetrics.NCLOC); when(metricFinder.<Double>findByKey("branch_coverage")).thenReturn(CoreMetrics.BRANCH_COVERAGE); when(metricFinder.<Long>findByKey("sqale_index")).thenReturn(CoreMetrics.TECHNICAL_DEBT); when(metricFinder.<Boolean>findByKey("bool")).thenReturn(booleanMetric); sensor.execute(context); assertThat(context.measure("foo:src", CoreMetrics.NCLOC)).isNull(); }
public <G extends Serializable> Measure<G> measure(String componentKey, Metric<G> metric) { return measure(componentKey, metric.key()); }
public <G extends Serializable> Measure<G> measure(String componetKey, Metric<G> metric) { return measure(componetKey, metric.key()); }
@Test public void should_execute_on_simple_project() { String relativePath = "basic/lib/Sample/Project.pm"; inputFile(relativePath); createSensor().execute(context); String key = "moduleKey:" + relativePath; assertThat(context.measure(key, CoreMetrics.NCLOC).value()).isEqualTo(15); assertThat(context.measure(key, CoreMetrics.COMMENT_LINES).value()).isEqualTo(26); assertThat(context.measure(key, CoreMetrics.CLASSES).value()).isEqualTo(1); assertThat(context.measure(key, CoreMetrics.FUNCTIONS).value()).isEqualTo(3); }
@Test public void should_execute_on_simple_project() { String relativePath = "t/Project.t"; inputFile(relativePath); createSensor().execute(context); assertThat(context.measure("moduleKey:t/Project.t", TEST_EXECUTION_TIME).value()).isEqualTo(26L); assertThat(context.measure("moduleKey:t/Project.t", TESTS).value()).isEqualTo(2); assertThat(context.measure("moduleKey:t/Project.t", TEST_FAILURES).value()).isEqualTo(1); assertThat(context.measure("moduleKey:t/Project.t", SKIPPED_TESTS).value()).isEqualTo(0); }
@Test public void should_execute_on_edge_cases() { String relativePath = "basic/lib/Sample/EdgeCases.pm"; inputFile(relativePath); createSensor().execute(context); String key = "moduleKey:" + relativePath; assertThat(context.measure(key, CoreMetrics.CLASSES).value()).isEqualTo(1); assertThat(context.measure(key, CoreMetrics.FUNCTIONS).value()).isEqualTo(3); }
@Test public void should_execute_illustrating_ignored_subs_and_existing_parse_problem() { String relativePath = "basic/lib/Sample/Ignored.pm"; inputFile(relativePath); createSensor().execute(context); String key = "moduleKey:" + relativePath; assertThat(context.measure(key, CoreMetrics.CLASSES).value()).isEqualTo(0); assertThat(context.measure(key, CoreMetrics.FUNCTIONS).value()).isEqualTo(0); }
@Test void import_report() { GoTestSensor goTestSensor = new GoTestSensor(); goTestSensor.goPathContext = new GoPathContext(File.separatorChar, File.pathSeparator, goPath.toString()); Path baseDir = goPath.resolve("src").resolve(packagePath); SensorContextTester context = SensorContextTester.create(baseDir); DefaultFileSystem fs = context.fileSystem(); DefaultInputFile fooTestFile = getTestInputFile(fs, "something \nfunc TestFoo1( \nfunc TestFoo2( ", "foo_test.go"); DefaultInputFile barTestFile = getTestInputFile(fs, "func TestBar(", "bar_test.go"); MapSettings settings = new MapSettings(); String absoluteReportPath = baseDir.resolve("report1.out").toString(); settings.setProperty(GoTestSensor.REPORT_PATH_KEY, "report.out,invilid/report/path," + absoluteReportPath); context.setSettings(settings); goTestSensor.execute(context); assertThat(context.measure(fooTestFile.key(), CoreMetrics.TESTS).value()).isEqualTo(3); // one test comes from report1.out assertThat(context.measure(fooTestFile.key(), CoreMetrics.SKIPPED_TESTS).value()).isEqualTo(0); assertThat(context.measure(fooTestFile.key(), CoreMetrics.TEST_FAILURES).value()).isEqualTo(1); assertThat(context.measure(fooTestFile.key(), CoreMetrics.TEST_ERRORS)).isNull(); assertThat(context.measure(fooTestFile.key(), CoreMetrics.TEST_EXECUTION_TIME).value()).isEqualTo(4); assertThat(context.measure(barTestFile.key(), CoreMetrics.TESTS).value()).isEqualTo(1); assertThat(context.measure(barTestFile.key(), CoreMetrics.SKIPPED_TESTS).value()).isEqualTo(1); assertThat(context.measure(barTestFile.key(), CoreMetrics.TEST_FAILURES).value()).isEqualTo(0); assertThat(context.measure(barTestFile.key(), CoreMetrics.TEST_ERRORS)).isNull(); assertThat(context.measure(barTestFile.key(), CoreMetrics.TEST_EXECUTION_TIME).value()).isEqualTo(7); }
@Test public void metrics_for_test_file() { InputFile inputFile = createInputFile("lets.go", InputFile.Type.TEST, "// This is not a line of code\n" + "package main\n" + "import \"fmt\"\n" + "func main() {\n" + " fmt.Println(\"Hello\")\n" + "}\n"); sensorContext.fileSystem().add(inputFile); GoSensor goSensor = getSensor(); goSensor.execute(sensorContext); assertThat(sensorContext.allIssues()).hasSize(0); assertThat(sensorContext.measure(inputFile.key(), CoreMetrics.NCLOC)).isNull(); assertThat(sensorContext.measure(inputFile.key(), CoreMetrics.COMMENT_LINES)).isNull(); assertThat(sensorContext.measure(inputFile.key(), CoreMetrics.CLASSES)).isNull(); assertThat(sensorContext.measure(inputFile.key(), CoreMetrics.FUNCTIONS)).isNull(); assertThat(sensorContext.measure(inputFile.key(), CoreMetrics.STATEMENTS)).isNull(); assertThat(sensorContext.measure(inputFile.key(), CoreMetrics.COGNITIVE_COMPLEXITY)).isNull(); assertThat(fileLinesContext.saveCount).isEqualTo(0); assertThat(fileLinesContext.metrics.keySet()).isEmpty(); }
goSensor.execute(sensorContext); assertThat(sensorContext.allIssues()).hasSize(0); assertThat(sensorContext.measure(inputFile.key(), CoreMetrics.NCLOC).value()).isEqualTo(19); assertThat(sensorContext.measure(inputFile.key(), CoreMetrics.COMMENT_LINES).value()).isEqualTo(3); assertThat(sensorContext.measure(inputFile.key(), CoreMetrics.CLASSES).value()).isEqualTo(2); assertThat(sensorContext.measure(inputFile.key(), CoreMetrics.FUNCTIONS).value()).isEqualTo(3); assertThat(sensorContext.measure(inputFile.key(), CoreMetrics.STATEMENTS).value()).isEqualTo(4); assertThat(sensorContext.measure(inputFile.key(), CoreMetrics.COGNITIVE_COMPLEXITY).value()).isEqualTo(1);
@Test public void cognitive_complexity_metric() { InputFile inputFile = createInputFile("lets.go", InputFile.Type.MAIN, "package main\n" + "import \"fmt\"\n" + "func fun1(i int) int {\n" + " if i < 0 { // +1\n" + " i++\n" + " }\n" + " return i\n" + "}\n" + "func fun2(i int) int {\n" + " if i < 0 { // +1\n" + " i--\n" + " }\n" + " f := func(int) int {\n" + " if i < 0 { // +2 (incl 1 for nesting)\n" + " i++\n" + " }\n" + " return i\n" + " }\n" + " return i + f(i)\n" + "}\n" + "\n"); sensorContext.fileSystem().add(inputFile); GoSensor goSensor = getSensor(); goSensor.execute(sensorContext); assertThat(sensorContext.measure(inputFile.key(), CoreMetrics.COGNITIVE_COMPLEXITY).value()).isEqualTo(4); }