]> source.dussan.org Git - sonarqube.git/commitdiff
LCOM4 of Java files without any class - like package-info.java - must be 1
authorSimon Brandhof <simon.brandhof@gmail.com>
Mon, 21 Nov 2011 18:05:11 +0000 (19:05 +0100)
committerSimon Brandhof <simon.brandhof@gmail.com>
Mon, 21 Nov 2011 18:10:50 +0000 (19:10 +0100)
plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/bridges/ChidamberKemererBridge.java
plugins/sonar-squid-java-plugin/src/test/java/org/sonar/plugins/squid/bridges/ChidamberKemererBridgeTest.java

index e4c99ecd65d058f0a7aafedcbfd1bcf9453b8be1..a262b639b5df66c48b8af728cefcab9701952766 100644 (file)
@@ -35,6 +35,10 @@ public class ChidamberKemererBridge extends Bridge {
     context.saveMeasure(sonarFile, CoreMetrics.DEPTH_IN_TREE, squidFile.getDouble(Metric.DIT));
     context.saveMeasure(sonarFile, CoreMetrics.NUMBER_OF_CHILDREN, squidFile.getDouble(Metric.NOC));
     context.saveMeasure(sonarFile, CoreMetrics.RFC, squidFile.getDouble(Metric.RFC));
-    context.saveMeasure(sonarFile, CoreMetrics.LCOM4, squidFile.getDouble(Metric.LCOM4));
+    context.saveMeasure(sonarFile, CoreMetrics.LCOM4, getLcom4(squidFile));
+  }
+
+  static double getLcom4(SourceFile squidFile) {
+    return Math.max(squidFile.getDouble(Metric.LCOM4), 1.0);
   }
 }
index c032a434b31b6befd876166fd80d53016b853bfb..0d67ba202c585ba29158575960dd3070d546bff2 100644 (file)
@@ -23,13 +23,15 @@ import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Matchers.anyDouble;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.*;
 
 import org.junit.Test;
 import org.sonar.api.measures.CoreMetrics;
 import org.sonar.api.resources.JavaFile;
 import org.sonar.api.resources.JavaPackage;
+import org.sonar.squid.api.SourceFile;
+import org.sonar.squid.measures.Metric;
+import org.sonar.squid.measures.MetricDef;
 
 public class ChidamberKemererBridgeTest extends BridgeTestCase {
 
@@ -58,4 +60,18 @@ public class ChidamberKemererBridgeTest extends BridgeTestCase {
     verify(context, never()).saveMeasure(eq(new JavaPackage("org.apache.struts.config")), eq(CoreMetrics.LCOM4), anyDouble());
     verify(context, never()).saveMeasure(eq(project), eq(CoreMetrics.LCOM4), anyDouble());
   }
+
+  @Test
+  public void lcom4ShouldBeGreaterThanZero() {
+    SourceFile sourceFile = mock(SourceFile.class);
+
+    when(sourceFile.getDouble(Metric.LCOM4)).thenReturn(2.0);
+    assertThat(ChidamberKemererBridge.getLcom4(sourceFile), is(2.0));
+
+    when(sourceFile.getDouble(Metric.LCOM4)).thenReturn(1.0);
+    assertThat(ChidamberKemererBridge.getLcom4(sourceFile), is(1.0));
+
+    when(sourceFile.getDouble(Metric.LCOM4)).thenReturn(0.0);
+    assertThat(ChidamberKemererBridge.getLcom4(sourceFile), is(1.0));
+  }
 }