diff options
author | simonbrandhof <simon.brandhof@gmail.com> | 2010-12-04 11:26:20 +0000 |
---|---|---|
committer | simonbrandhof <simon.brandhof@gmail.com> | 2010-12-04 11:26:20 +0000 |
commit | 0db9c91b9a999a88a1557db6f70330d129b2f9a4 (patch) | |
tree | ba25e0f6b098db948a7b4522845f54e724510426 /plugins/sonar-core-plugin | |
parent | 81adc198d8db644965385e3675d46b89008ed8f5 (diff) | |
download | sonarqube-0db9c91b9a999a88a1557db6f70330d129b2f9a4.tar.gz sonarqube-0db9c91b9a999a88a1557db6f70330d129b2f9a4.zip |
SONAR-249 add some unit tests
Diffstat (limited to 'plugins/sonar-core-plugin')
3 files changed, 82 insertions, 16 deletions
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastMeasuresLoader.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastMeasuresLoader.java index be7fcfe30b1..7fc073956fc 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastMeasuresLoader.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastMeasuresLoader.java @@ -56,6 +56,10 @@ public class PastMeasuresLoader implements BatchExtension { return metricByIds.values(); } + public List<MeasureModel> getPastMeasures(Resource resource, PastSnapshot projectPastSnapshot) { + return getPastMeasures(resource, projectPastSnapshot.getProjectSnapshot()); + } + public List<MeasureModel> getPastMeasures(Resource resource, Snapshot projectSnapshot) { // assume that the resource has already been saved return getPastMeasures(resource.getId(), projectSnapshot); diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/VariationDecorator.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/VariationDecorator.java index 03b594c36bf..12635f88ff5 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/VariationDecorator.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/VariationDecorator.java @@ -39,16 +39,16 @@ import java.util.Map; @DependedUpon(DecoratorBarriers.END_OF_TIME_MACHINE) public class VariationDecorator implements Decorator { - private List<PastSnapshot> targets; + private List<PastSnapshot> projectPastSnapshots; private PastMeasuresLoader pastMeasuresLoader; public VariationDecorator(PastMeasuresLoader pastMeasuresLoader, TimeMachineConfiguration configuration) { this(pastMeasuresLoader, configuration.getVariationSnapshots()); } - VariationDecorator(PastMeasuresLoader pastMeasuresLoader, List<PastSnapshot> targets) { + VariationDecorator(PastMeasuresLoader pastMeasuresLoader, List<PastSnapshot> projectPastSnapshots) { this.pastMeasuresLoader = pastMeasuresLoader; - this.targets = targets; + this.projectPastSnapshots = projectPastSnapshots; } public boolean shouldExecuteOnProject(Project project) { @@ -60,22 +60,22 @@ public class VariationDecorator implements Decorator { return pastMeasuresLoader.getMetrics(); } - static boolean shouldCalculateVariations(Resource resource) { - // measures on files are currently purged, so past measures are not available on files - return !ResourceUtils.isEntity(resource); - } - public void decorate(Resource resource, DecoratorContext context) { if (shouldCalculateVariations(resource)) { - for (PastSnapshot target : targets) { - calculateVariation(resource, context, target); + for (PastSnapshot projectPastSnapshot : projectPastSnapshots) { + calculateVariation(resource, context, projectPastSnapshot); } } } - private void calculateVariation(Resource resource, DecoratorContext context, PastSnapshot target) { - List<MeasureModel> pastMeasures = pastMeasuresLoader.getPastMeasures(resource, target.getProjectSnapshot()); - compareWithPastMeasures(context, target.getIndex(), pastMeasures); + static boolean shouldCalculateVariations(Resource resource) { + // measures on files are currently purged, so past measures are not available on files + return !ResourceUtils.isEntity(resource); + } + + private void calculateVariation(Resource resource, DecoratorContext context, PastSnapshot pastSnapshot) { + List<MeasureModel> pastMeasures = pastMeasuresLoader.getPastMeasures(resource, pastSnapshot); + compareWithPastMeasures(context, pastSnapshot.getIndex(), pastMeasures); } void compareWithPastMeasures(DecoratorContext context, int index, List<MeasureModel> pastMeasures) { @@ -88,16 +88,19 @@ public class VariationDecorator implements Decorator { for (Measure measure : context.getMeasures(MeasuresFilters.all())) { // compare with past measure MeasureModel pastMeasure = pastMeasuresByKey.get(new MeasureKey(measure)); - updateVariation(measure, pastMeasure, index); - context.saveMeasure(measure); + if (updateVariation(measure, pastMeasure, index)) { + context.saveMeasure(measure); + } } } - void updateVariation(Measure measure, MeasureModel pastMeasure, int index) { + boolean updateVariation(Measure measure, MeasureModel pastMeasure, int index) { if (pastMeasure != null && pastMeasure.getValue() != null && measure.getValue() != null) { double variation = (measure.getValue().doubleValue() - pastMeasure.getValue().doubleValue()); measure.setVariation(index, variation); + return true; } + return false; } @Override diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/VariationDecoratorTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/VariationDecoratorTest.java index b4f93aa97db..a2d21bcb804 100644 --- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/VariationDecoratorTest.java +++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/VariationDecoratorTest.java @@ -20,14 +20,28 @@ package org.sonar.plugins.core.timemachine; import org.junit.Test; +import org.mockito.Matchers; +import org.sonar.api.batch.DecoratorContext; +import org.sonar.api.database.model.MeasureModel; +import org.sonar.api.database.model.Snapshot; +import org.sonar.api.measures.Measure; +import org.sonar.api.measures.MeasuresFilter; +import org.sonar.api.measures.Metric; import org.sonar.api.resources.*; import org.sonar.jpa.test.AbstractDbUnitTestCase; +import java.util.Arrays; + import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.IsNull.nullValue; +import static org.mockito.Mockito.*; public class VariationDecoratorTest extends AbstractDbUnitTestCase { + public static final Metric NCLOC = new Metric("ncloc").setId(12); + public static final Metric COVERAGE = new Metric("coverage").setId(16); + @Test public void shouldNotCalculateVariationsOnFiles() { assertThat(VariationDecorator.shouldCalculateVariations(new Project("foo")), is(true)); @@ -39,4 +53,49 @@ public class VariationDecoratorTest extends AbstractDbUnitTestCase { assertThat(VariationDecorator.shouldCalculateVariations(new File("org/foo/Bar.php")), is(false)); } + @Test + public void shouldCompareAndSaveVariation() { + Resource javaPackage = new JavaPackage("org.foo"); + + PastMeasuresLoader pastMeasuresLoader = mock(PastMeasuresLoader.class); + PastSnapshot pastSnapshot1 = new PastSnapshot(1, "days", new Snapshot()); + PastSnapshot pastSnapshot3 = new PastSnapshot(3, "days", new Snapshot()); + + // first past analysis + when(pastMeasuresLoader.getPastMeasures(javaPackage, pastSnapshot1)).thenReturn(Arrays.asList( + newMeasureModel(NCLOC, 180.0), + newMeasureModel(COVERAGE, 75.0))); + + // second past analysis + when(pastMeasuresLoader.getPastMeasures(javaPackage, pastSnapshot3)).thenReturn(Arrays.asList( + newMeasureModel(NCLOC, 240.0))); + + // current analysis + DecoratorContext context = mock(DecoratorContext.class); + Measure currentNcloc = newMeasure(NCLOC, 200.0); + Measure currentCoverage = newMeasure(COVERAGE, 80.0); + when(context.getMeasures(Matchers.<MeasuresFilter>anyObject())).thenReturn(Arrays.asList(currentNcloc, currentCoverage)); + + VariationDecorator decorator = new VariationDecorator(pastMeasuresLoader, Arrays.asList(pastSnapshot1, pastSnapshot3)); + decorator.decorate(javaPackage, context); + + // context updated for each variation : 2 times for ncloc and 1 time for coverage + verify(context, times(3)).saveMeasure(Matchers.<Measure>anyObject()); + + assertThat(currentNcloc.getVariation1(), is(20.0)); + assertThat(currentNcloc.getVariation2(), nullValue()); + assertThat(currentNcloc.getVariation3(), is(-40.0)); + + assertThat(currentCoverage.getVariation1(), is(5.0)); + assertThat(currentCoverage.getVariation2(), nullValue()); + assertThat(currentCoverage.getVariation3(), nullValue()); + } + + private Measure newMeasure(Metric metric, double value) { + return new Measure(metric, value); + } + + private MeasureModel newMeasureModel(Metric metric, double value) { + return new MeasureModel(metric.getId(), value); + } } |