From: Sébastien Lesaint Date: Tue, 25 Aug 2015 09:33:23 +0000 (+0200) Subject: add support for Views Component tree to LanguageDistributionMeasuresStep X-Git-Tag: 5.2-RC1~564 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=16adc162711440a74b954de18d3939b4cc0c34a5;p=sonarqube.git add support for Views Component tree to LanguageDistributionMeasuresStep --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/LanguageDistributionMeasuresStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/LanguageDistributionMeasuresStep.java index b4665b47219..afdb75a1b7a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/LanguageDistributionMeasuresStep.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/LanguageDistributionMeasuresStep.java @@ -25,14 +25,17 @@ import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.common.collect.Multiset; import com.google.common.collect.TreeMultiset; +import java.util.Map; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.sonar.api.measures.CoreMetrics; +import org.sonar.api.utils.KeyValueFormat; +import org.sonar.server.computation.component.Component; import org.sonar.server.computation.component.PathAwareCrawler; import org.sonar.server.computation.component.TreeRootHolder; import org.sonar.server.computation.formula.Counter; -import org.sonar.server.computation.formula.CreateMeasureContext; import org.sonar.server.computation.formula.CounterInitializationContext; +import org.sonar.server.computation.formula.CreateMeasureContext; import org.sonar.server.computation.formula.Formula; import org.sonar.server.computation.formula.FormulaExecutorComponentVisitor; import org.sonar.server.computation.measure.Measure; @@ -42,6 +45,8 @@ import org.sonar.server.computation.metric.MetricRepository; import static com.google.common.collect.Maps.asMap; import static org.sonar.api.measures.CoreMetrics.NCLOC_LANGUAGE_DISTRIBUTION_KEY; import static org.sonar.api.utils.KeyValueFormat.format; +import static org.sonar.api.utils.KeyValueFormat.newIntegerConverter; +import static org.sonar.api.utils.KeyValueFormat.newStringConverter; import static org.sonar.server.computation.measure.Measure.newMeasureBuilder; public class LanguageDistributionMeasuresStep implements ComputationStep { @@ -64,9 +69,8 @@ public class LanguageDistributionMeasuresStep implements ComputationStep { @Override public void execute() { - new PathAwareCrawler<>( - FormulaExecutorComponentVisitor.newBuilder(metricRepository, measureRepository).buildFor(FORMULAS)) - .visit(treeRootHolder.getRoot()); + new PathAwareCrawler<>(FormulaExecutorComponentVisitor.newBuilder(metricRepository, measureRepository).buildFor(FORMULAS)) + .visit(treeRootHolder.getRoot()); } private static class LanguageDistributionFormula implements Formula { @@ -116,12 +120,29 @@ public class LanguageDistributionMeasuresStep implements ComputationStep { @Override public void initialize(CounterInitializationContext context) { + if (context.getLeaf().getType() == Component.Type.FILE) { + initializeForFile(context); + } + initializeForOtherLeaf(context); + } + + private void initializeForFile(CounterInitializationContext context) { String language = context.getLeaf().getFileAttributes().getLanguageKey(); Optional ncloc = context.getMeasure(CoreMetrics.NCLOC_KEY); if (ncloc.isPresent()) { multiset.add(language == null ? UNKNOWN_LANGUAGE_KEY : language, ncloc.get().getIntValue()); } } + + private void initializeForOtherLeaf(CounterInitializationContext context) { + Optional measure = context.getMeasure(NCLOC_LANGUAGE_DISTRIBUTION_KEY); + if (measure.isPresent()) { + Map parse = KeyValueFormat.parse(measure.get().getData(), newStringConverter(), newIntegerConverter()); + for (Map.Entry entry : parse.entrySet()) { + multiset.add(entry.getKey(), entry.getValue()); + } + } + } } @Override diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/LanguageDistributionMeasuresStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/LanguageDistributionMeasuresStepTest.java deleted file mode 100644 index 6f4acdf8f33..00000000000 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/LanguageDistributionMeasuresStepTest.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * SonarQube, open source software quality management tool. - * Copyright (C) 2008-2014 SonarSource - * mailto:contact AT sonarsource DOT com - * - * SonarQube is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * SonarQube is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -package org.sonar.server.computation.step; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.sonar.server.computation.batch.TreeRootHolderRule; -import org.sonar.server.computation.component.FileAttributes; -import org.sonar.server.computation.measure.MeasureRepositoryRule; -import org.sonar.server.computation.metric.MetricRepositoryRule; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.guava.api.Assertions.assertThat; -import static org.sonar.api.measures.CoreMetrics.NCLOC; -import static org.sonar.api.measures.CoreMetrics.NCLOC_KEY; -import static org.sonar.api.measures.CoreMetrics.NCLOC_LANGUAGE_DISTRIBUTION; -import static org.sonar.api.measures.CoreMetrics.NCLOC_LANGUAGE_DISTRIBUTION_KEY; -import static org.sonar.server.computation.component.Component.Type.DIRECTORY; -import static org.sonar.server.computation.component.Component.Type.FILE; -import static org.sonar.server.computation.component.Component.Type.MODULE; -import static org.sonar.server.computation.component.Component.Type.PROJECT; -import static org.sonar.server.computation.component.ReportComponent.builder; -import static org.sonar.server.computation.measure.Measure.newMeasureBuilder; - -public class LanguageDistributionMeasuresStepTest { - - private static final String XOO_LANGUAGE = "xoo"; - private static final String JAVA_LANGUAGE = "java"; - - private static final int ROOT_REF = 1; - private static final int MODULE_REF = 12; - private static final int SUB_MODULE_REF = 123; - private static final int DIRECTORY_REF = 1234; - private static final int FILE_1_REF = 12341; - private static final int FILE_2_REF = 12342; - private static final int FILE_3_REF = 12343; - private static final int FILE_4_REF = 12344; - - @Rule - public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule(); - - @Rule - public MetricRepositoryRule metricRepository = new MetricRepositoryRule() - .add(NCLOC) - .add(NCLOC_LANGUAGE_DISTRIBUTION); - - @Rule - public MeasureRepositoryRule measureRepository = MeasureRepositoryRule.create(treeRootHolder, metricRepository); - - ComputationStep underTest = new LanguageDistributionMeasuresStep(treeRootHolder, metricRepository, measureRepository); - - @Before - public void setUp() throws Exception { - treeRootHolder.setRoot( - builder(PROJECT, ROOT_REF) - .addChildren( - builder(MODULE, MODULE_REF) - .addChildren( - builder(MODULE, SUB_MODULE_REF) - .addChildren( - builder(DIRECTORY, DIRECTORY_REF) - .addChildren( - builder(FILE, FILE_1_REF).setFileAttributes(new FileAttributes(false, XOO_LANGUAGE)).build(), - builder(FILE, FILE_2_REF).setFileAttributes(new FileAttributes(false, XOO_LANGUAGE)).build(), - builder(FILE, FILE_3_REF).setFileAttributes(new FileAttributes(false, JAVA_LANGUAGE)).build(), - builder(FILE, FILE_4_REF).setFileAttributes(new FileAttributes(false, null)).build() - ).build() - ).build() - ).build() - ).build()); - } - - @Test - public void compute_ncloc_language_distribution() { - measureRepository.addRawMeasure(FILE_1_REF, NCLOC_KEY, newMeasureBuilder().create(10)); - measureRepository.addRawMeasure(FILE_2_REF, NCLOC_KEY, newMeasureBuilder().create(8)); - measureRepository.addRawMeasure(FILE_3_REF, NCLOC_KEY, newMeasureBuilder().create(6)); - measureRepository.addRawMeasure(FILE_4_REF, NCLOC_KEY, newMeasureBuilder().create(2)); - - underTest.execute(); - - assertThat(measureRepository.getAddedRawMeasure(FILE_1_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("xoo=10"); - assertThat(measureRepository.getAddedRawMeasure(FILE_2_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("xoo=8"); - assertThat(measureRepository.getAddedRawMeasure(FILE_3_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("java=6"); - assertThat(measureRepository.getAddedRawMeasure(FILE_4_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("=2"); - - assertThat(measureRepository.getAddedRawMeasure(DIRECTORY_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("=2;java=6;xoo=18"); - assertThat(measureRepository.getAddedRawMeasure(SUB_MODULE_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("=2;java=6;xoo=18"); - assertThat(measureRepository.getAddedRawMeasure(MODULE_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("=2;java=6;xoo=18"); - assertThat(measureRepository.getAddedRawMeasure(ROOT_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("=2;java=6;xoo=18"); - } - - @Test - public void do_not_compute_ncloc_language_distribution_when_no_ncloc() { - underTest.execute(); - - assertThat(measureRepository.getAddedRawMeasure(FILE_1_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); - assertThat(measureRepository.getAddedRawMeasure(FILE_2_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); - assertThat(measureRepository.getAddedRawMeasure(FILE_3_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); - assertThat(measureRepository.getAddedRawMeasure(FILE_4_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); - - assertThat(measureRepository.getAddedRawMeasure(DIRECTORY_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); - assertThat(measureRepository.getAddedRawMeasure(SUB_MODULE_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); - assertThat(measureRepository.getAddedRawMeasure(MODULE_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); - assertThat(measureRepository.getAddedRawMeasure(ROOT_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); - } - -} diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/ReportLanguageDistributionMeasuresStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/ReportLanguageDistributionMeasuresStepTest.java new file mode 100644 index 00000000000..e34c123e1a5 --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/ReportLanguageDistributionMeasuresStepTest.java @@ -0,0 +1,127 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.sonar.server.computation.step; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.sonar.server.computation.batch.TreeRootHolderRule; +import org.sonar.server.computation.component.FileAttributes; +import org.sonar.server.computation.measure.MeasureRepositoryRule; +import org.sonar.server.computation.metric.MetricRepositoryRule; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.guava.api.Assertions.assertThat; +import static org.sonar.api.measures.CoreMetrics.NCLOC; +import static org.sonar.api.measures.CoreMetrics.NCLOC_KEY; +import static org.sonar.api.measures.CoreMetrics.NCLOC_LANGUAGE_DISTRIBUTION; +import static org.sonar.api.measures.CoreMetrics.NCLOC_LANGUAGE_DISTRIBUTION_KEY; +import static org.sonar.server.computation.component.Component.Type.DIRECTORY; +import static org.sonar.server.computation.component.Component.Type.FILE; +import static org.sonar.server.computation.component.Component.Type.MODULE; +import static org.sonar.server.computation.component.Component.Type.PROJECT; +import static org.sonar.server.computation.component.ReportComponent.builder; +import static org.sonar.server.computation.measure.Measure.newMeasureBuilder; + +public class ReportLanguageDistributionMeasuresStepTest { + + private static final String XOO_LANGUAGE = "xoo"; + private static final String JAVA_LANGUAGE = "java"; + + private static final int ROOT_REF = 1; + private static final int MODULE_REF = 12; + private static final int SUB_MODULE_REF = 123; + private static final int DIRECTORY_REF = 1234; + private static final int FILE_1_REF = 12341; + private static final int FILE_2_REF = 12342; + private static final int FILE_3_REF = 12343; + private static final int FILE_4_REF = 12344; + + @Rule + public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule(); + + @Rule + public MetricRepositoryRule metricRepository = new MetricRepositoryRule() + .add(NCLOC) + .add(NCLOC_LANGUAGE_DISTRIBUTION); + + @Rule + public MeasureRepositoryRule measureRepository = MeasureRepositoryRule.create(treeRootHolder, metricRepository); + + ComputationStep underTest = new LanguageDistributionMeasuresStep(treeRootHolder, metricRepository, measureRepository); + + @Before + public void setUp() throws Exception { + treeRootHolder.setRoot( + builder(PROJECT, ROOT_REF) + .addChildren( + builder(MODULE, MODULE_REF) + .addChildren( + builder(MODULE, SUB_MODULE_REF) + .addChildren( + builder(DIRECTORY, DIRECTORY_REF) + .addChildren( + builder(FILE, FILE_1_REF).setFileAttributes(new FileAttributes(false, XOO_LANGUAGE)).build(), + builder(FILE, FILE_2_REF).setFileAttributes(new FileAttributes(false, XOO_LANGUAGE)).build(), + builder(FILE, FILE_3_REF).setFileAttributes(new FileAttributes(false, JAVA_LANGUAGE)).build(), + builder(FILE, FILE_4_REF).setFileAttributes(new FileAttributes(false, null)).build()) + .build()) + .build()) + .build()) + .build()); + } + + @Test + public void compute_ncloc_language_distribution() { + measureRepository.addRawMeasure(FILE_1_REF, NCLOC_KEY, newMeasureBuilder().create(10)); + measureRepository.addRawMeasure(FILE_2_REF, NCLOC_KEY, newMeasureBuilder().create(8)); + measureRepository.addRawMeasure(FILE_3_REF, NCLOC_KEY, newMeasureBuilder().create(6)); + measureRepository.addRawMeasure(FILE_4_REF, NCLOC_KEY, newMeasureBuilder().create(2)); + + underTest.execute(); + + assertThat(measureRepository.getAddedRawMeasure(FILE_1_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("xoo=10"); + assertThat(measureRepository.getAddedRawMeasure(FILE_2_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("xoo=8"); + assertThat(measureRepository.getAddedRawMeasure(FILE_3_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("java=6"); + assertThat(measureRepository.getAddedRawMeasure(FILE_4_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("=2"); + + assertThat(measureRepository.getAddedRawMeasure(DIRECTORY_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("=2;java=6;xoo=18"); + assertThat(measureRepository.getAddedRawMeasure(SUB_MODULE_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("=2;java=6;xoo=18"); + assertThat(measureRepository.getAddedRawMeasure(MODULE_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("=2;java=6;xoo=18"); + assertThat(measureRepository.getAddedRawMeasure(ROOT_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY).get().getStringValue()).isEqualTo("=2;java=6;xoo=18"); + } + + @Test + public void do_not_compute_ncloc_language_distribution_when_no_ncloc() { + underTest.execute(); + + assertThat(measureRepository.getAddedRawMeasure(FILE_1_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); + assertThat(measureRepository.getAddedRawMeasure(FILE_2_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); + assertThat(measureRepository.getAddedRawMeasure(FILE_3_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); + assertThat(measureRepository.getAddedRawMeasure(FILE_4_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); + + assertThat(measureRepository.getAddedRawMeasure(DIRECTORY_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); + assertThat(measureRepository.getAddedRawMeasure(SUB_MODULE_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); + assertThat(measureRepository.getAddedRawMeasure(MODULE_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); + assertThat(measureRepository.getAddedRawMeasure(ROOT_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY)).isAbsent(); + } + +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/ViewsLanguageDistributionMeasuresStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/ViewsLanguageDistributionMeasuresStepTest.java new file mode 100644 index 00000000000..190883788ce --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/ViewsLanguageDistributionMeasuresStepTest.java @@ -0,0 +1,118 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.sonar.server.computation.step; + +import org.junit.Rule; +import org.junit.Test; +import org.sonar.server.computation.batch.TreeRootHolderRule; +import org.sonar.server.computation.measure.MeasureRepositoryRule; +import org.sonar.server.computation.metric.MetricRepositoryRule; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.guava.api.Assertions.assertThat; +import static org.sonar.api.measures.CoreMetrics.NCLOC_LANGUAGE_DISTRIBUTION; +import static org.sonar.api.measures.CoreMetrics.NCLOC_LANGUAGE_DISTRIBUTION_KEY; +import static org.sonar.server.computation.component.Component.Type.PROJECT_VIEW; +import static org.sonar.server.computation.component.Component.Type.SUBVIEW; +import static org.sonar.server.computation.component.Component.Type.VIEW; +import static org.sonar.server.computation.component.ViewsComponent.builder; +import static org.sonar.server.computation.measure.Measure.newMeasureBuilder; + +public class ViewsLanguageDistributionMeasuresStepTest { + + private static final int ROOT_REF = 1; + private static final int SUBVIEW_1_REF = 12; + private static final int SUB_SUBVIEW_1_REF = 121; + private static final int PROJECT_VIEW_1_REF = 1211; + private static final int PROJECT_VIEW_2_REF = 1212; + private static final int PROJECT_VIEW_3_REF = 1213; + private static final int SUB_SUBVIEW_2_REF = 122; + private static final int SUBVIEW_2_REF = 13; + private static final int PROJECT_VIEW_4_REF = 131; + private static final int PROJECT_VIEW_5_REF = 14; + + @Rule + public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule() + .setRoot(builder(VIEW, ROOT_REF) + .addChildren( + builder(SUBVIEW, SUBVIEW_1_REF) + .addChildren( + builder(SUBVIEW, SUB_SUBVIEW_1_REF) + .addChildren( + builder(PROJECT_VIEW, PROJECT_VIEW_1_REF).build(), + builder(PROJECT_VIEW, PROJECT_VIEW_2_REF).build(), + builder(PROJECT_VIEW, PROJECT_VIEW_3_REF).build()) + .build(), + builder(SUBVIEW, SUB_SUBVIEW_2_REF).build()) + .build(), + builder(SUBVIEW, SUBVIEW_2_REF) + .addChildren( + builder(PROJECT_VIEW, PROJECT_VIEW_4_REF).build()) + .build(), + builder(PROJECT_VIEW, PROJECT_VIEW_5_REF).build()) + .build()); + @Rule + public MetricRepositoryRule metricRepository = new MetricRepositoryRule() + .add(NCLOC_LANGUAGE_DISTRIBUTION); + @Rule + public MeasureRepositoryRule measureRepository = MeasureRepositoryRule.create(treeRootHolder, metricRepository); + + ComputationStep underTest = new LanguageDistributionMeasuresStep(treeRootHolder, metricRepository, measureRepository); + + @Test + public void compute_ncloc_language_distribution() { + addRawMeasure(PROJECT_VIEW_1_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY, "xoo=10"); + addRawMeasure(PROJECT_VIEW_2_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY, "java=6"); + addRawMeasure(PROJECT_VIEW_3_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY, "java=10;xoo=5"); + // no raw measure on PROJECT_VIEW_4_REF + addRawMeasure(PROJECT_VIEW_5_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY, "=3;foo=10"); + + underTest.execute(); + + assertNoAddedRawMeasureOnProjectViews(); + assertAddedRawMeasure(SUB_SUBVIEW_1_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY, "java=16;xoo=15"); + assertNoAddedRawMeasures(SUB_SUBVIEW_2_REF); + assertNoAddedRawMeasures(SUBVIEW_2_REF); + assertAddedRawMeasure(SUBVIEW_1_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY, "java=16;xoo=15"); + assertAddedRawMeasure(ROOT_REF, NCLOC_LANGUAGE_DISTRIBUTION_KEY, "=3;foo=10;java=16;xoo=15"); + } + + private void assertAddedRawMeasure(int componentRef, String metricKey, String value) { + assertThat(measureRepository.getAddedRawMeasure(componentRef, metricKey).get().getStringValue()).isEqualTo(value); + } + + private void addRawMeasure(int componentRef, String metricKey, String value) { + measureRepository.addRawMeasure(componentRef, metricKey, newMeasureBuilder().create(value)); + } + + private void assertNoAddedRawMeasureOnProjectViews() { + assertNoAddedRawMeasures(PROJECT_VIEW_1_REF); + assertNoAddedRawMeasures(PROJECT_VIEW_2_REF); + assertNoAddedRawMeasures(PROJECT_VIEW_3_REF); + assertNoAddedRawMeasures(PROJECT_VIEW_4_REF); + assertNoAddedRawMeasures(PROJECT_VIEW_5_REF); + } + + private void assertNoAddedRawMeasures(int componentRef) { + assertThat(measureRepository.getAddedRawMeasures(componentRef)).isEmpty(); + } + +}