aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2015-07-06 17:30:13 +0200
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>2015-07-09 09:24:48 +0200
commita90d9e44973721882f32cb18bca84024489daf61 (patch)
treeeb7fdaf4458ddc32523d1ad1a7d7cc4efd171a73
parent7377b5ac4a5157c8f6f65a917b27b4ba5bb8782c (diff)
downloadsonarqube-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
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/formula/AverageFormula.java11
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/formula/Counter.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/formula/CreateMeasureContext.java39
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/formula/DistributionFormula.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/formula/FileAggregateContext.java (renamed from server/sonar-server/src/main/java/org/sonar/server/computation/formula/CounterContext.java)16
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/formula/Formula.java8
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/formula/FormulaExecutorComponentVisitor.java31
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/formula/SumFormula.java8
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/formula/AverageFormulaTest.java70
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/formula/DistributionFormulaTest.java28
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/formula/DumbCreateMeasureContext.java45
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/formula/FormulaExecutorComponentVisitorTest.java14
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/formula/SumFormulaTest.java28
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)));
}
}