diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2015-07-06 17:30:13 +0200 |
---|---|---|
committer | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2015-07-09 09:24:48 +0200 |
commit | a90d9e44973721882f32cb18bca84024489daf61 (patch) | |
tree | eb7fdaf4458ddc32523d1ad1a7d7cc4efd171a73 | |
parent | 7377b5ac4a5157c8f6f65a917b27b4ba5bb8782c (diff) | |
download | sonarqube-a90d9e44973721882f32cb18bca84024489daf61.tar.gz sonarqube-a90d9e44973721882f32cb18bca84024489daf61.zip |
add Component to contexts in Formula API
also rename context to be more specific
add Component to the API make it more versatile
13 files changed, 222 insertions, 85 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/AverageFormula.java b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/AverageFormula.java index 8d9c3cb996c..3d3e35f77b6 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/AverageFormula.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/AverageFormula.java @@ -24,7 +24,6 @@ import com.google.common.base.Optional; import java.util.Objects; import javax.annotation.CheckForNull; import javax.annotation.Nullable; -import org.sonar.server.computation.component.Component; import org.sonar.server.computation.measure.Measure; public class AverageFormula implements Formula<AverageFormula.AverageCounter> { @@ -49,7 +48,7 @@ public class AverageFormula implements Formula<AverageFormula.AverageCounter> { } @Override - public Optional<Measure> createMeasure(AverageCounter counter, Component.Type componentType) { + public Optional<Measure> createMeasure(AverageCounter counter, CreateMeasureContext context) { Optional<Double> mainValueOptional = counter.getMainValue(); Optional<Double> byValueOptional = counter.getByValue(); if (mainValueOptional.isPresent() && byValueOptional.isPresent()) { @@ -123,12 +122,12 @@ public class AverageFormula implements Formula<AverageFormula.AverageCounter> { } @Override - public void aggregate(CounterContext counterContext) { - Optional<Double> mainValueOptional = getDoubleValue(counterContext.getMeasure(mainMetric)); + public void aggregate(FileAggregateContext context) { + Optional<Double> mainValueOptional = getDoubleValue(context.getMeasure(mainMetric)); if (!mainValueOptional.isPresent() && fallbackMetric != null) { - mainValueOptional = getDoubleValue(counterContext.getMeasure(fallbackMetric)); + mainValueOptional = getDoubleValue(context.getMeasure(fallbackMetric)); } - Optional<Double> byValueOptional = getDoubleValue(counterContext.getMeasure(byMetric)); + Optional<Double> byValueOptional = getDoubleValue(context.getMeasure(byMetric)); addValuesIfPresent(mainValueOptional, byValueOptional); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/Counter.java b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/Counter.java index 0e9f7d62bf1..1989be3b3b3 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/Counter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/Counter.java @@ -35,6 +35,6 @@ public interface Counter<T extends Counter<T>> { /** * This method is called on {@link Type#FILE} levels, in order to populate the counter with one or more {@link Type#FILE} measures. */ - void aggregate(CounterContext counterContext); + void aggregate(FileAggregateContext context); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/CreateMeasureContext.java b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/CreateMeasureContext.java new file mode 100644 index 00000000000..9a74993bbf0 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/CreateMeasureContext.java @@ -0,0 +1,39 @@ +/* + * 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.formula; + +import java.util.List; +import org.sonar.server.computation.component.Component; +import org.sonar.server.computation.period.Period; + +/** + * Context passing information to implementation of {@link Formula#createMeasure(Counter, CreateMeasureContext)} method. + */ +public interface CreateMeasureContext { + /** + * The component for which the measure is to be created. + */ + Component getComponent(); + + /** + * The periods for which variations of the measure can be created. + */ + List<Period> getPeriods(); +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/DistributionFormula.java b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/DistributionFormula.java index 39ee98e2531..a0273fbd640 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/DistributionFormula.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/DistributionFormula.java @@ -39,7 +39,8 @@ public class DistributionFormula implements Formula<DistributionFormula.Distribu } @Override - public Optional<Measure> createMeasure(DistributionCounter counter, Component.Type componentType) { + public Optional<Measure> createMeasure(DistributionCounter counter, CreateMeasureContext context) { + Component.Type componentType = context.getComponent().getType(); Optional<String> value = counter.getValue(); if (value.isPresent() && componentType.isHigherThan(Component.Type.FILE)) { return Optional.of(Measure.newMeasureBuilder().create(value.get())); @@ -67,8 +68,8 @@ public class DistributionFormula implements Formula<DistributionFormula.Distribu } @Override - public void aggregate(CounterContext counterContext) { - Optional<Measure> measureOptional = counterContext.getMeasure(metricKey); + public void aggregate(FileAggregateContext context) { + Optional<Measure> measureOptional = context.getMeasure(metricKey); String data = measureOptional.isPresent() ? measureOptional.get().getData() : null; if (data != null) { initialized = true; diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/CounterContext.java b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/FileAggregateContext.java index 0da22ee9d24..3a0e70a1cfb 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/CounterContext.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/FileAggregateContext.java @@ -22,15 +22,27 @@ package org.sonar.server.computation.formula; import com.google.common.base.Optional; import java.util.List; +import org.sonar.server.computation.component.Component; import org.sonar.server.computation.measure.Measure; import org.sonar.server.computation.period.Period; -public interface CounterContext { +/** + * The context passing information to {@link Counter#aggregate(FileAggregateContext)}. + */ +public interface FileAggregateContext { + + /** + * The Component representing the currently processed File. + */ + Component getFile(); + /** + * Retrieve the measure for the current File with the metric key if it exists. + */ Optional<Measure> getMeasure(String metricKey); /** - * Lists of Periods defined for the current project. They can be used to aggregate values of MeasureVariations. + * Lists of Periods defined for the current project. They can be used to retrieve variations Measure. */ List<Period> getPeriods(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/Formula.java b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/Formula.java index e32c12637f0..161b8fd31b4 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/Formula.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/Formula.java @@ -21,7 +21,6 @@ package org.sonar.server.computation.formula; import com.google.common.base.Optional; -import org.sonar.server.computation.component.Component.Type; import org.sonar.server.computation.measure.Measure; /** @@ -29,15 +28,18 @@ import org.sonar.server.computation.measure.Measure; */ public interface Formula<COUNTER extends Counter> { + /** + * Method responsible for creating an new instance of a the counter used by this formula. + */ COUNTER createNewCounter(); /** * This method is used to create a measure on each node, using the value of the counter * If {@link Optional#absent()} is returned, no measure will be created * - * @param componentType can be used for instance to not create a measure on {@link Type#FILE} + * @param context the context for which the measure must be created */ - Optional<Measure> createMeasure(COUNTER counter, Type componentType); + Optional<Measure> createMeasure(COUNTER counter, CreateMeasureContext context); /** * The metric associated to the measure diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/FormulaExecutorComponentVisitor.java b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/FormulaExecutorComponentVisitor.java index 94a26817791..53f5ce6f940 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/FormulaExecutorComponentVisitor.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/FormulaExecutorComponentVisitor.java @@ -128,7 +128,7 @@ public class FormulaExecutorComponentVisitor extends PathAwareVisitor<FormulaExe } private void processFile(Component file, Path<FormulaExecutorComponentVisitor.Counters> path) { - CounterContext counterContext = new CounterContextImpl(file); + FileAggregateContext counterContext = new FileAggregateContextImpl(file); for (Formula formula : formulas) { Counter counter = formula.createNewCounter(); counter.aggregate(counterContext); @@ -139,7 +139,7 @@ public class FormulaExecutorComponentVisitor extends PathAwareVisitor<FormulaExe private void addNewMeasure(Component component, Formula formula, Counter counter) { Metric metric = metricRepository.getByKey(formula.getOutputMetricKey()); - Optional<Measure> measure = formula.createMeasure(counter, component.getType()); + Optional<Measure> measure = formula.createMeasure(counter, new CreateMeasureContextImpl(component)); if (measure.isPresent()) { measureRepository.add(component, metric, measure.get()); } @@ -151,14 +151,19 @@ public class FormulaExecutorComponentVisitor extends PathAwareVisitor<FormulaExe } } - private class CounterContextImpl implements CounterContext { + private class FileAggregateContextImpl implements FileAggregateContext { private final Component file; - public CounterContextImpl(Component file) { + public FileAggregateContextImpl(Component file) { this.file = file; } @Override + public Component getFile() { + return file; + } + + @Override public Optional<Measure> getMeasure(String metricKey) { return measureRepository.getRawMeasure(file, metricRepository.getByKey(metricKey)); } @@ -189,4 +194,22 @@ public class FormulaExecutorComponentVisitor extends PathAwareVisitor<FormulaExe return countersByFormula.get(metricKey); } } + + private class CreateMeasureContextImpl implements CreateMeasureContext { + private final Component component; + + public CreateMeasureContextImpl(Component component) { + this.component = component; + } + + @Override + public Component getComponent() { + return component; + } + + @Override + public List<Period> getPeriods() { + return periodsHolder.getPeriods(); + } + } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/SumFormula.java b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/SumFormula.java index 0f06c0172e2..8785d4a95f2 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/SumFormula.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/SumFormula.java @@ -39,9 +39,9 @@ public class SumFormula implements Formula<SumFormula.SumCounter> { } @Override - public Optional<Measure> createMeasure(SumCounter counter, Component.Type componentType) { + public Optional<Measure> createMeasure(SumCounter counter, CreateMeasureContext context) { Optional<Integer> valueOptional = counter.getValue(); - if (valueOptional.isPresent() && componentType.isHigherThan(Component.Type.FILE)) { + if (valueOptional.isPresent() && context.getComponent().getType().isHigherThan(Component.Type.FILE)) { return Optional.of(Measure.newMeasureBuilder().create(valueOptional.get())); } return Optional.absent(); @@ -66,8 +66,8 @@ public class SumFormula implements Formula<SumFormula.SumCounter> { } @Override - public void aggregate(CounterContext counterContext) { - Optional<Measure> measureOptional = counterContext.getMeasure(metricKey); + public void aggregate(FileAggregateContext context) { + Optional<Measure> measureOptional = context.getMeasure(metricKey); if (measureOptional.isPresent()) { addValue(measureOptional.get().getIntValue()); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/formula/AverageFormulaTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/formula/AverageFormulaTest.java index 09aeaaecce6..64d9fb99c52 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/formula/AverageFormulaTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/formula/AverageFormulaTest.java @@ -27,7 +27,9 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.sonar.api.measures.CoreMetrics; import org.sonar.server.computation.component.Component; +import org.sonar.server.computation.component.DumbComponent; import org.sonar.server.computation.measure.Measure; +import org.sonar.server.computation.period.PeriodsHolder; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Matchers.anyString; @@ -47,7 +49,9 @@ public class AverageFormulaTest { .setByMetricKey(FUNCTIONS_KEY) .build(); - CounterContext counterContext = mock(CounterContext.class); + FileAggregateContext fileAggregateContext = mock(FileAggregateContext.class); + CreateMeasureContext createMeasureContext = new DumbCreateMeasureContext( + DumbComponent.builder(Component.Type.PROJECT, 1).build(), mock(PeriodsHolder.class)); @Rule public ExpectedException thrown = ExpectedException.none(); @@ -103,9 +107,9 @@ public class AverageFormulaTest { AverageFormula.AverageCounter counter = BASIC_AVERAGE_FORMULA.createNewCounter(); addMeasure(COMPLEXITY_IN_FUNCTIONS_KEY, 10d); addMeasure(FUNCTIONS_KEY, 2d); - counter.aggregate(counterContext); + counter.aggregate(fileAggregateContext); - assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, Component.Type.PROJECT).get().getDoubleValue()).isEqualTo(5d); + assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, createMeasureContext).get().getDoubleValue()).isEqualTo(5d); } @Test @@ -113,12 +117,12 @@ public class AverageFormulaTest { AverageFormula.AverageCounter anotherCounter = BASIC_AVERAGE_FORMULA.createNewCounter(); addMeasure(COMPLEXITY_IN_FUNCTIONS_KEY, 10d); addMeasure(FUNCTIONS_KEY, 2d); - anotherCounter.aggregate(counterContext); + anotherCounter.aggregate(fileAggregateContext); AverageFormula.AverageCounter counter = BASIC_AVERAGE_FORMULA.createNewCounter(); counter.aggregate(anotherCounter); - assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, Component.Type.PROJECT).get().getDoubleValue()).isEqualTo(5d); + assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, createMeasureContext).get().getDoubleValue()).isEqualTo(5d); } @Test @@ -126,9 +130,9 @@ public class AverageFormulaTest { AverageFormula.AverageCounter counter = BASIC_AVERAGE_FORMULA.createNewCounter(); addMeasure(COMPLEXITY_IN_FUNCTIONS_KEY, 10d); addMeasure(FUNCTIONS_KEY, 2d); - counter.aggregate(counterContext); + counter.aggregate(fileAggregateContext); - assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, Component.Type.PROJECT).get().getDoubleValue()).isEqualTo(5d); + assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, createMeasureContext).get().getDoubleValue()).isEqualTo(5d); } @Test @@ -136,9 +140,9 @@ public class AverageFormulaTest { AverageFormula.AverageCounter counter = BASIC_AVERAGE_FORMULA.createNewCounter(); addMeasure(COMPLEXITY_IN_FUNCTIONS_KEY, 10); addMeasure(FUNCTIONS_KEY, 2); - counter.aggregate(counterContext); + counter.aggregate(fileAggregateContext); - assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, Component.Type.PROJECT).get().getDoubleValue()).isEqualTo(5); + assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, createMeasureContext).get().getDoubleValue()).isEqualTo(5); } @Test @@ -146,19 +150,19 @@ public class AverageFormulaTest { AverageFormula.AverageCounter counter = BASIC_AVERAGE_FORMULA.createNewCounter(); addMeasure(COMPLEXITY_IN_FUNCTIONS_KEY, 10L); addMeasure(FUNCTIONS_KEY, 2L); - counter.aggregate(counterContext); + counter.aggregate(fileAggregateContext); - assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, Component.Type.PROJECT).get().getDoubleValue()).isEqualTo(5L); + assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, createMeasureContext).get().getDoubleValue()).isEqualTo(5L); } @Test public void not_create_measure_when_aggregated_measure_has_no_value() { AverageFormula.AverageCounter counter = BASIC_AVERAGE_FORMULA.createNewCounter(); addMeasure(COMPLEXITY_IN_FUNCTIONS_KEY, 10L); - when(counterContext.getMeasure(FUNCTIONS_KEY)).thenReturn(Optional.of(Measure.newMeasureBuilder().createNoValue())); - counter.aggregate(counterContext); + when(fileAggregateContext.getMeasure(FUNCTIONS_KEY)).thenReturn(Optional.of(Measure.newMeasureBuilder().createNoValue())); + counter.aggregate(fileAggregateContext); - Assertions.assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, Component.Type.PROJECT)).isAbsent(); + Assertions.assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, createMeasureContext)).isAbsent(); } @Test @@ -168,29 +172,29 @@ public class AverageFormulaTest { AverageFormula.AverageCounter counter = BASIC_AVERAGE_FORMULA.createNewCounter(); addMeasure(COMPLEXITY_IN_FUNCTIONS_KEY, 10L); - when(counterContext.getMeasure(FUNCTIONS_KEY)).thenReturn(Optional.of(Measure.newMeasureBuilder().create("data"))); - counter.aggregate(counterContext); + when(fileAggregateContext.getMeasure(FUNCTIONS_KEY)).thenReturn(Optional.of(Measure.newMeasureBuilder().create("data"))); + counter.aggregate(fileAggregateContext); - BASIC_AVERAGE_FORMULA.createMeasure(counter, Component.Type.PROJECT); + BASIC_AVERAGE_FORMULA.createMeasure(counter, createMeasureContext); } @Test public void no_measure_created_when_counter_has_no_value() { AverageFormula.AverageCounter counter = BASIC_AVERAGE_FORMULA.createNewCounter(); - when(counterContext.getMeasure(anyString())).thenReturn(Optional.<Measure>absent()); - counter.aggregate(counterContext); + when(fileAggregateContext.getMeasure(anyString())).thenReturn(Optional.<Measure>absent()); + counter.aggregate(fileAggregateContext); - Assertions.assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, Component.Type.PROJECT)).isAbsent(); + Assertions.assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, createMeasureContext)).isAbsent(); } @Test public void not_create_measure_when_only_one_measure() { AverageFormula.AverageCounter counter = BASIC_AVERAGE_FORMULA.createNewCounter(); addMeasure(COMPLEXITY_IN_FUNCTIONS_KEY, 10L); - when(counterContext.getMeasure(FUNCTIONS_KEY)).thenReturn(Optional.<Measure>absent()); - counter.aggregate(counterContext); + when(fileAggregateContext.getMeasure(FUNCTIONS_KEY)).thenReturn(Optional.<Measure>absent()); + counter.aggregate(fileAggregateContext); - Assertions.assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, Component.Type.PROJECT)).isAbsent(); + Assertions.assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, createMeasureContext)).isAbsent(); } @Test @@ -198,9 +202,9 @@ public class AverageFormulaTest { AverageFormula.AverageCounter counter = BASIC_AVERAGE_FORMULA.createNewCounter(); addMeasure(COMPLEXITY_IN_FUNCTIONS_KEY, 10d); addMeasure(FUNCTIONS_KEY, 0d); - counter.aggregate(counterContext); + counter.aggregate(fileAggregateContext); - Assertions.assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, Component.Type.PROJECT)).isAbsent(); + Assertions.assertThat(BASIC_AVERAGE_FORMULA.createMeasure(counter, createMeasureContext)).isAbsent(); } @Test @@ -213,12 +217,12 @@ public class AverageFormulaTest { .build(); AverageFormula.AverageCounter counter = sut.createNewCounter(); - when(counterContext.getMeasure(COMPLEXITY_IN_FUNCTIONS_KEY)).thenReturn(Optional.<Measure>absent()); + when(fileAggregateContext.getMeasure(COMPLEXITY_IN_FUNCTIONS_KEY)).thenReturn(Optional.<Measure>absent()); addMeasure(COMPLEXITY_KEY, 10d); addMeasure(FUNCTIONS_KEY, 2d); - counter.aggregate(counterContext); + counter.aggregate(fileAggregateContext); - assertThat(sut.createMeasure(counter, Component.Type.PROJECT).get().getDoubleValue()).isEqualTo(5d); + assertThat(sut.createMeasure(counter, createMeasureContext).get().getDoubleValue()).isEqualTo(5d); } @Test @@ -234,21 +238,21 @@ public class AverageFormulaTest { addMeasure(COMPLEXITY_IN_FUNCTIONS_KEY, 10d); addMeasure(COMPLEXITY_KEY, 12d); addMeasure(FUNCTIONS_KEY, 2d); - counter.aggregate(counterContext); + counter.aggregate(fileAggregateContext); - assertThat(sut.createMeasure(counter, Component.Type.PROJECT).get().getDoubleValue()).isEqualTo(5d); + assertThat(sut.createMeasure(counter, createMeasureContext).get().getDoubleValue()).isEqualTo(5d); } private void addMeasure(String metricKey, double value) { - when(counterContext.getMeasure(metricKey)).thenReturn(Optional.of(Measure.newMeasureBuilder().create(value))); + when(fileAggregateContext.getMeasure(metricKey)).thenReturn(Optional.of(Measure.newMeasureBuilder().create(value))); } private void addMeasure(String metricKey, int value) { - when(counterContext.getMeasure(metricKey)).thenReturn(Optional.of(Measure.newMeasureBuilder().create(value))); + when(fileAggregateContext.getMeasure(metricKey)).thenReturn(Optional.of(Measure.newMeasureBuilder().create(value))); } private void addMeasure(String metricKey, long value) { - when(counterContext.getMeasure(metricKey)).thenReturn(Optional.of(Measure.newMeasureBuilder().create(value))); + when(fileAggregateContext.getMeasure(metricKey)).thenReturn(Optional.of(Measure.newMeasureBuilder().create(value))); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/formula/DistributionFormulaTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/formula/DistributionFormulaTest.java index 09b9ec7a179..641202aab1f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/formula/DistributionFormulaTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/formula/DistributionFormulaTest.java @@ -26,7 +26,9 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.sonar.server.computation.component.Component; +import org.sonar.server.computation.component.DumbComponent; import org.sonar.server.computation.measure.Measure; +import org.sonar.server.computation.period.PeriodsHolder; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -40,7 +42,11 @@ public class DistributionFormulaTest { @Rule public ExpectedException thrown = ExpectedException.none(); - CounterContext counterContext = mock(CounterContext.class); + FileAggregateContext fileAggregateContext = mock(FileAggregateContext.class); + CreateMeasureContext projectCreateMeasureContext = new DumbCreateMeasureContext( + DumbComponent.builder(Component.Type.PROJECT, 1).build(), mock(PeriodsHolder.class)); + CreateMeasureContext fileCreateMeasureContext = new DumbCreateMeasureContext( + DumbComponent.builder(Component.Type.FILE, 1).build(), mock(PeriodsHolder.class)); @Test public void check_new_counter_class() { @@ -64,43 +70,43 @@ public class DistributionFormulaTest { public void create_measure() { DistributionFormula.DistributionCounter counter = BASIC_DISTRIBUTION_FORMULA.createNewCounter(); addMeasure(FUNCTION_COMPLEXITY_DISTRIBUTION_KEY, "0=3;3=7;6=10"); - counter.aggregate(counterContext); + counter.aggregate(fileAggregateContext); - assertThat(BASIC_DISTRIBUTION_FORMULA.createMeasure(counter, Component.Type.PROJECT).get().getData()).isEqualTo("0=3;3=7;6=10"); + assertThat(BASIC_DISTRIBUTION_FORMULA.createMeasure(counter, projectCreateMeasureContext).get().getData()).isEqualTo("0=3;3=7;6=10"); } @Test public void create_measure_when_counter_is_aggregating_from_another_counter() { DistributionFormula.DistributionCounter anotherCounter = BASIC_DISTRIBUTION_FORMULA.createNewCounter(); addMeasure(FUNCTION_COMPLEXITY_DISTRIBUTION_KEY, "0=3;3=7;6=10"); - anotherCounter.aggregate(counterContext); + anotherCounter.aggregate(fileAggregateContext); DistributionFormula.DistributionCounter counter = BASIC_DISTRIBUTION_FORMULA.createNewCounter(); counter.aggregate(anotherCounter); - assertThat(BASIC_DISTRIBUTION_FORMULA.createMeasure(counter, Component.Type.PROJECT).get().getData()).isEqualTo("0=3;3=7;6=10"); + assertThat(BASIC_DISTRIBUTION_FORMULA.createMeasure(counter, projectCreateMeasureContext).get().getData()).isEqualTo("0=3;3=7;6=10"); } @Test public void create_no_measure_when_no_value() { DistributionFormula.DistributionCounter counter = BASIC_DISTRIBUTION_FORMULA.createNewCounter(); - when(counterContext.getMeasure(FUNCTION_COMPLEXITY_DISTRIBUTION_KEY)).thenReturn(Optional.<Measure>absent()); - counter.aggregate(counterContext); + when(fileAggregateContext.getMeasure(FUNCTION_COMPLEXITY_DISTRIBUTION_KEY)).thenReturn(Optional.<Measure>absent()); + counter.aggregate(fileAggregateContext); - Assertions.assertThat(BASIC_DISTRIBUTION_FORMULA.createMeasure(counter, Component.Type.PROJECT)).isAbsent(); + Assertions.assertThat(BASIC_DISTRIBUTION_FORMULA.createMeasure(counter, projectCreateMeasureContext)).isAbsent(); } @Test public void not_create_measure_when_on_file() { DistributionFormula.DistributionCounter counter = BASIC_DISTRIBUTION_FORMULA.createNewCounter(); addMeasure(FUNCTION_COMPLEXITY_DISTRIBUTION_KEY, "0=3;3=7;6=10"); - counter.aggregate(counterContext); + counter.aggregate(fileAggregateContext); - Assertions.assertThat(BASIC_DISTRIBUTION_FORMULA.createMeasure(counter, Component.Type.FILE)).isAbsent(); + Assertions.assertThat(BASIC_DISTRIBUTION_FORMULA.createMeasure(counter, fileCreateMeasureContext)).isAbsent(); } private void addMeasure(String metricKey, String value) { - when(counterContext.getMeasure(metricKey)).thenReturn(Optional.of(Measure.newMeasureBuilder().create(value))); + when(fileAggregateContext.getMeasure(metricKey)).thenReturn(Optional.of(Measure.newMeasureBuilder().create(value))); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/formula/DumbCreateMeasureContext.java b/server/sonar-server/src/test/java/org/sonar/server/computation/formula/DumbCreateMeasureContext.java new file mode 100644 index 00000000000..f53566a3ccc --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/formula/DumbCreateMeasureContext.java @@ -0,0 +1,45 @@ +/* + * 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.formula; + +import java.util.List; +import org.sonar.server.computation.component.Component; +import org.sonar.server.computation.period.Period; +import org.sonar.server.computation.period.PeriodsHolder; + +public class DumbCreateMeasureContext implements CreateMeasureContext { + private final Component component; + private final PeriodsHolder periodsHolder; + + public DumbCreateMeasureContext(Component component, PeriodsHolder periodsHolder) { + this.component = component; + this.periodsHolder = periodsHolder; + } + + @Override + public Component getComponent() { + return component; + } + + @Override + public List<Period> getPeriods() { + return periodsHolder.getPeriods(); + } +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/formula/FormulaExecutorComponentVisitorTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/formula/FormulaExecutorComponentVisitorTest.java index 2e3ce270121..d022efcb42e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/formula/FormulaExecutorComponentVisitorTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/formula/FormulaExecutorComponentVisitorTest.java @@ -179,7 +179,7 @@ public class FormulaExecutorComponentVisitorTest { } @Override - public Optional<Measure> createMeasure(FakeCounter counter, Component.Type componentType) { + public Optional<Measure> createMeasure(FakeCounter counter, CreateMeasureContext context) { if (counter.value <= 0) { return Optional.absent(); } @@ -201,8 +201,8 @@ public class FormulaExecutorComponentVisitorTest { } @Override - public void aggregate(CounterContext counterContext) { - Optional<Measure> measureOptional = counterContext.getMeasure(LINES_KEY); + public void aggregate(FileAggregateContext context) { + Optional<Measure> measureOptional = context.getMeasure(LINES_KEY); if (measureOptional.isPresent()) { value += measureOptional.get().getIntValue(); } @@ -217,7 +217,7 @@ public class FormulaExecutorComponentVisitorTest { } @Override - public Optional<Measure> createMeasure(FakeVariationCounter counter, Component.Type componentType) { + public Optional<Measure> createMeasure(FakeVariationCounter counter, CreateMeasureContext context) { Optional<MeasureVariations> measureVariations = counter.values.toMeasureVariations(); if (measureVariations.isPresent()) { return Optional.of( @@ -244,12 +244,12 @@ public class FormulaExecutorComponentVisitorTest { } @Override - public void aggregate(CounterContext counterContext) { - Optional<Measure> measureOptional = counterContext.getMeasure(NEW_LINES_TO_COVER_KEY); + public void aggregate(FileAggregateContext context) { + Optional<Measure> measureOptional = context.getMeasure(NEW_LINES_TO_COVER_KEY); if (!measureOptional.isPresent()) { return; } - for (Period period : counterContext.getPeriods()) { + for (Period period : context.getPeriods()) { this.values.increment( period, (int) measureOptional.get().getVariations().getVariation(period.getIndex())); diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/formula/SumFormulaTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/formula/SumFormulaTest.java index d12c4939b05..eca3c9cce9e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/formula/SumFormulaTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/formula/SumFormulaTest.java @@ -26,7 +26,9 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.sonar.server.computation.component.Component; +import org.sonar.server.computation.component.DumbComponent; import org.sonar.server.computation.measure.Measure; +import org.sonar.server.computation.period.PeriodsHolder; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -40,7 +42,11 @@ public class SumFormulaTest { @Rule public ExpectedException thrown = ExpectedException.none(); - CounterContext counterContext = mock(CounterContext.class); + FileAggregateContext fileAggregateContext = mock(FileAggregateContext.class); + CreateMeasureContext projectCreateMeasureContext = new DumbCreateMeasureContext( + DumbComponent.builder(Component.Type.PROJECT, 1).build(), mock(PeriodsHolder.class)); + CreateMeasureContext fileCreateMeasureContext = new DumbCreateMeasureContext( + DumbComponent.builder(Component.Type.FILE, 2).build(), mock(PeriodsHolder.class)); @Test public void check_create_new_counter_class() { @@ -64,43 +70,43 @@ public class SumFormulaTest { public void create_measure() { SumFormula.SumCounter counter = BASIC_SUM_FORMULA.createNewCounter(); addMeasure(LINES_KEY, 10); - counter.aggregate(counterContext); + counter.aggregate(fileAggregateContext); - assertThat(BASIC_SUM_FORMULA.createMeasure(counter, Component.Type.PROJECT).get().getIntValue()).isEqualTo(10); + assertThat(BASIC_SUM_FORMULA.createMeasure(counter, projectCreateMeasureContext).get().getIntValue()).isEqualTo(10); } @Test public void create_measure_when_counter_is_aggregating_from_another_counter() { SumFormula.SumCounter anotherCounter = BASIC_SUM_FORMULA.createNewCounter(); addMeasure(LINES_KEY, 10); - anotherCounter.aggregate(counterContext); + anotherCounter.aggregate(fileAggregateContext); SumFormula.SumCounter counter = BASIC_SUM_FORMULA.createNewCounter(); counter.aggregate(anotherCounter); - assertThat(BASIC_SUM_FORMULA.createMeasure(counter, Component.Type.PROJECT).get().getIntValue()).isEqualTo(10); + assertThat(BASIC_SUM_FORMULA.createMeasure(counter, projectCreateMeasureContext).get().getIntValue()).isEqualTo(10); } @Test public void not_create_measure_on_file() { SumFormula.SumCounter counter = BASIC_SUM_FORMULA.createNewCounter(); addMeasure(LINES_KEY, 10); - counter.aggregate(counterContext); + counter.aggregate(fileAggregateContext); - Assertions.assertThat(BASIC_SUM_FORMULA.createMeasure(counter, Component.Type.FILE)).isAbsent(); + Assertions.assertThat(BASIC_SUM_FORMULA.createMeasure(counter, fileCreateMeasureContext)).isAbsent(); } @Test public void not_create_measure_when_value_is_zero() { SumFormula.SumCounter counter = BASIC_SUM_FORMULA.createNewCounter(); - when(counterContext.getMeasure(LINES_KEY)).thenReturn(Optional.<Measure>absent()); - counter.aggregate(counterContext); + when(fileAggregateContext.getMeasure(LINES_KEY)).thenReturn(Optional.<Measure>absent()); + counter.aggregate(fileAggregateContext); - Assertions.assertThat(BASIC_SUM_FORMULA.createMeasure(counter, Component.Type.PROJECT)).isAbsent(); + Assertions.assertThat(BASIC_SUM_FORMULA.createMeasure(counter, projectCreateMeasureContext)).isAbsent(); } private void addMeasure(String metricKey, int value) { - when(counterContext.getMeasure(metricKey)).thenReturn(Optional.of(Measure.newMeasureBuilder().create(value))); + when(fileAggregateContext.getMeasure(metricKey)).thenReturn(Optional.of(Measure.newMeasureBuilder().create(value))); } } |