]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2469 add unit tests
authorsimonbrandhof <simon.brandhof@gmail.com>
Fri, 27 May 2011 12:58:26 +0000 (14:58 +0200)
committersimonbrandhof <simon.brandhof@gmail.com>
Fri, 27 May 2011 12:58:26 +0000 (14:58 +0200)
sonar-batch/src/main/java/org/sonar/batch/bootstrap/ProjectExtensionInstaller.java
sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchPluginRepositoryTest.java
sonar-batch/src/test/java/org/sonar/batch/bootstrap/ProjectExtensionInstallerTest.java [new file with mode: 0644]

index 49debff0d19f5f508abbaae75d93b6f617932221..194d2f022edd5b95867830ef235a054b3d285369 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.batch.bootstrap;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
 import org.sonar.api.BatchComponent;
+import org.sonar.api.CoreProperties;
 import org.sonar.api.ExtensionProvider;
 import org.sonar.api.Plugin;
 import org.sonar.api.batch.AbstractCoverageExtension;
@@ -73,21 +74,25 @@ public final class ProjectExtensionInstaller implements BatchComponent {
         ExtensionUtils.isInstantiationStrategy(extension, InstantiationStrategy.PER_PROJECT) &&
         !isDeactivatedCoverageExtension(extension, project, pluginKey) &&
         !isMavenExtensionOnEmulatedMavenProject(extension, project)) {
-
       module.addComponent(extension);
       return extension;
     }
     return null;
   }
 
-  boolean isMavenExtensionOnEmulatedMavenProject(Object extension, Project project) {
+  /**
+   * Special use-case: the extension point ProjectBuilder is used in a Maven environment to define some
+   * new sub-projects without pom.
+   * Example : C# plugin adds sub-projects at runtime, even if they are not defined in root pom.
+   */
+  static boolean isMavenExtensionOnEmulatedMavenProject(Object extension, Project project) {
     return ExtensionUtils.isMavenExtensionOnly(extension) && project.getPom() == null;
   }
 
   /**
    * TODO this code is specific to Java projects and should be moved somewhere else
    */
-  boolean isDeactivatedCoverageExtension(Object extension, Project project, String pluginKey) {
+  static boolean isDeactivatedCoverageExtension(Object extension, Project project, String pluginKey) {
     if (!ExtensionUtils.isType(extension, CoverageExtension.class)) {
       return false;
     }
@@ -98,7 +103,7 @@ public final class ProjectExtensionInstaller implements BatchComponent {
     }
 
     if (StringUtils.equals(project.getLanguageKey(), Java.KEY)) {
-      String[] selectedPluginKeys = project.getConfiguration().getStringArray(AbstractCoverageExtension.PARAM_PLUGIN);
+      String[] selectedPluginKeys = project.getConfiguration().getStringArray(CoreProperties.CORE_COVERAGE_PLUGIN_PROPERTY);
       if (ArrayUtils.isEmpty(selectedPluginKeys)) {
         selectedPluginKeys = new String[]{AbstractCoverageExtension.DEFAULT_PLUGIN};
       }
index 00c914319cc474958d1408e825cab6f1c890cf3b..6e848f4278d90f42c02e5fce94ff27a71efdc515 100644 (file)
@@ -88,7 +88,7 @@ public class BatchPluginRepositoryTest {
   private void prepareDownloader(ExtensionDownloader extensionDownloader, final String pluginKey, final String filename) {
     when(extensionDownloader.downloadExtension(argThat(new BaseMatcher<JpaPluginFile>() {
       public boolean matches(Object o) {
-        return o!=null && ((JpaPluginFile) o).getPluginKey().equals(pluginKey);
+        return o != null && ((JpaPluginFile) o).getPluginKey().equals(pluginKey);
       }
 
       public void describeTo(Description description) {
@@ -96,66 +96,4 @@ public class BatchPluginRepositoryTest {
       }
     }))).thenReturn(FileUtils.toFile(getClass().getResource(filename)));
   }
-
-//  @Test
-//  public void shouldRegisterBatchExtension() {
-//    MutablePicoContainer pico = IocContainer.buildPicoContainer();
-//    pico.addComponent(new PropertiesConfiguration());
-//    BatchPluginRepository repository = new BatchPluginRepository();
-//
-//    // check classes
-//    assertThat(repository.shouldRegisterExtension(pico, "foo", FakeBatchExtension.class), is(true));
-//    assertThat(repository.shouldRegisterExtension(pico, "foo", FakeServerExtension.class), is(false));
-//    assertThat(repository.shouldRegisterExtension(pico, "foo", String.class), is(false));
-//
-//    // check objects
-//    assertThat(repository.shouldRegisterExtension(pico, "foo", new FakeBatchExtension()), is(true));
-//    assertThat(repository.shouldRegisterExtension(pico, "foo", new FakeServerExtension()), is(false));
-//    assertThat(repository.shouldRegisterExtension(pico, "foo", "bar"), is(false));
-//  }
-//
-//  @Test
-//  public void shouldRegisterOnlyCoberturaExtensionByDefault() {
-//    BatchPluginRepository repository = new BatchPluginRepository();
-//    PropertiesConfiguration conf = new PropertiesConfiguration();
-//    assertThat(repository.shouldRegisterCoverageExtension("cobertura", newJavaProject(), conf), is(true));
-//    assertThat(repository.shouldRegisterCoverageExtension("clover", newJavaProject(), conf), is(false));
-//  }
-//
-//  @Test
-//  public void shouldRegisterCustomCoverageExtension() {
-//    Configuration conf = new PropertiesConfiguration();
-//    conf.setProperty(AbstractCoverageExtension.PARAM_PLUGIN, "clover,phpunit");
-//    BatchPluginRepository repository = new BatchPluginRepository();
-//    assertThat(repository.shouldRegisterCoverageExtension("cobertura", newJavaProject(), conf), is(false));
-//    assertThat(repository.shouldRegisterCoverageExtension("clover", newJavaProject(), conf), is(true));
-//    assertThat(repository.shouldRegisterCoverageExtension("phpunit", newJavaProject(), conf), is(true));
-//    assertThat(repository.shouldRegisterCoverageExtension("other", newJavaProject(), conf), is(false));
-//  }
-//
-//  @Test
-//  public void shouldNotCheckCoverageExtensionsOnNonJavaProjects() {
-//    Configuration conf = new PropertiesConfiguration();
-//    conf.setProperty(AbstractCoverageExtension.PARAM_PLUGIN, "cobertura");
-//    BatchPluginRepository repository = new BatchPluginRepository();
-//
-//    assertThat(repository.shouldRegisterCoverageExtension("groovy", newGroovyProject(), conf), is(true));
-//    assertThat(repository.shouldRegisterCoverageExtension("groovy", newJavaProject(), conf), is(false));
-//  }
-//
-//  private static Project newJavaProject() {
-//    return new Project("foo").setLanguageKey(Java.KEY).setAnalysisType(AnalysisType.DYNAMIC);
-//  }
-//
-//  private static Project newGroovyProject() {
-//    return new Project("foo").setLanguageKey("grvy").setAnalysisType(AnalysisType.DYNAMIC);
-//  }
-//
-//  public static class FakeBatchExtension implements BatchExtension {
-//
-//  }
-//
-//  public static class FakeServerExtension implements ServerExtension {
-//
-//  }
 }
diff --git a/sonar-batch/src/test/java/org/sonar/batch/bootstrap/ProjectExtensionInstallerTest.java b/sonar-batch/src/test/java/org/sonar/batch/bootstrap/ProjectExtensionInstallerTest.java
new file mode 100644 (file)
index 0000000..12915c4
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar 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.
+ *
+ * Sonar 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 Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.batch.bootstrap;
+
+import com.google.common.collect.Maps;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.maven.project.MavenProject;
+import org.junit.Test;
+import org.sonar.api.*;
+import org.sonar.api.batch.AbstractCoverageExtension;
+import org.sonar.api.batch.CoverageExtension;
+import org.sonar.api.batch.InstantiationStrategy;
+import org.sonar.api.batch.SupportedEnvironment;
+import org.sonar.api.resources.Java;
+import org.sonar.api.resources.Project;
+import org.sonar.batch.bootstrapper.EnvironmentInformation;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class ProjectExtensionInstallerTest {
+
+  @Test
+  public void shouldBeMavenExtensionOnEmulatedMavenProject() {
+    Project mavenProject = new Project("foo").setPom(new MavenProject());
+    Project otherProject = new Project("bar");
+    assertThat(ProjectExtensionInstaller.isMavenExtensionOnEmulatedMavenProject(MavenService.class, mavenProject), is(false));
+    assertThat(ProjectExtensionInstaller.isMavenExtensionOnEmulatedMavenProject(MavenService.class, otherProject), is(true));
+
+    // this service is not for Maven only
+    assertThat(ProjectExtensionInstaller.isMavenExtensionOnEmulatedMavenProject(BuildToolService.class, mavenProject), is(false));
+    assertThat(ProjectExtensionInstaller.isMavenExtensionOnEmulatedMavenProject(BuildToolService.class, otherProject), is(false));
+  }
+
+  @Test
+  public void shouldInstallExtensionsWithProjectInstantiationStrategy() {
+    BatchPluginRepository pluginRepository = mock(BatchPluginRepository.class);
+    Map<String, Plugin> pluginsMap = Maps.newHashMap();
+    pluginsMap.put("fooPlugin", new SonarPlugin() {
+      public List getExtensions() {
+        return Arrays.asList(BatchService.class, ProjectService.class, ServerService.class);
+      }
+    });
+    when(pluginRepository.getPluginsByKey()).thenReturn(pluginsMap);
+    Module module = new FakeModule().init();
+    ProjectExtensionInstaller installer = new ProjectExtensionInstaller(pluginRepository, new EnvironmentInformation("ant", "1.7"));
+
+    installer.install(module, new Project("foo"));
+
+    assertThat(module.getComponent(BatchService.class), nullValue());
+    assertThat(module.getComponent(ProjectService.class), not(nullValue()));
+    assertThat(module.getComponent(ServerService.class), nullValue());
+  }
+
+  @Test
+  public void shouldNotInstallPluginsOnNonSupportedEnvironment() {
+    BatchPluginRepository pluginRepository = mock(BatchPluginRepository.class);
+    Map<String, Plugin> pluginsMap = Maps.newHashMap();
+    pluginsMap.put("fooPlugin", new SonarPlugin() {
+      public List getExtensions() {
+        return Arrays.asList(MavenService.class, BuildToolService.class);
+      }
+    });
+    when(pluginRepository.getPluginsByKey()).thenReturn(pluginsMap);
+    Module module = new FakeModule().init();
+    ProjectExtensionInstaller installer = new ProjectExtensionInstaller(pluginRepository, new EnvironmentInformation("ant", "1.7"));
+
+    installer.install(module, new Project("foo"));
+
+    assertThat(module.getComponent(MavenService.class), nullValue());
+    assertThat(module.getComponent(BuildToolService.class), not(nullValue()));
+  }
+
+
+  @Test
+  public void shouldRegisterOnlyCoberturaExtensionByDefault() {
+    assertThat(ProjectExtensionInstaller.isDeactivatedCoverageExtension(FakeCoverageExtension.class, newJavaProject(null), "cobertura"), is(false));
+    assertThat(ProjectExtensionInstaller.isDeactivatedCoverageExtension(FakeCoverageExtension.class, newJavaProject(null), "clover"), is(true));
+  }
+
+  private static Project newJavaProject(Configuration conf) {
+    Project project = new Project("foo").setLanguageKey(Java.KEY).setAnalysisType(Project.AnalysisType.DYNAMIC);
+    project.setConfiguration(conf!=null ? conf : new PropertiesConfiguration());
+    return project;
+  }
+
+  private static Project newGroovyProject() {
+    return new Project("foo").setLanguageKey("grvy").setAnalysisType(Project.AnalysisType.DYNAMIC);
+  }
+
+  @Test
+  public void shouldRegisterCustomCoverageExtension() {
+    Configuration conf = new PropertiesConfiguration();
+    conf.setProperty(CoreProperties.CORE_COVERAGE_PLUGIN_PROPERTY, "clover,phpunit");
+
+    assertThat(ProjectExtensionInstaller.isDeactivatedCoverageExtension(FakeCoverageExtension.class, newJavaProject(conf), "cobertura"), is(true));
+    assertThat(ProjectExtensionInstaller.isDeactivatedCoverageExtension(FakeCoverageExtension.class, newJavaProject(conf), "clover"), is(false));
+    assertThat(ProjectExtensionInstaller.isDeactivatedCoverageExtension(FakeCoverageExtension.class, newJavaProject(conf), "phpunit"), is(false));
+    assertThat(ProjectExtensionInstaller.isDeactivatedCoverageExtension(FakeCoverageExtension.class, newJavaProject(conf), "other"), is(true));
+  }
+
+  @Test
+  public void shouldNotCheckCoverageExtensionsOnNonJavaProjects() {
+    Configuration conf = new PropertiesConfiguration();
+    conf.setProperty(CoreProperties.CORE_COVERAGE_PLUGIN_PROPERTY, "cobertura");
+
+    assertThat(ProjectExtensionInstaller.isDeactivatedCoverageExtension(FakeCoverageExtension.class, newGroovyProject(), "groovy"), is(false));
+    assertThat(ProjectExtensionInstaller.isDeactivatedCoverageExtension(FakeCoverageExtension.class, newJavaProject(null), "groovy"), is(true));
+
+  }
+
+
+  @SupportedEnvironment("maven")
+  public static class MavenService implements BatchExtension {
+
+  }
+
+  @SupportedEnvironment({"maven", "ant", "gradle"})
+  public static class BuildToolService implements BatchExtension {
+
+  }
+
+  @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
+  public static class BatchService implements BatchExtension {
+
+  }
+
+  public static class ProjectService implements BatchExtension {
+
+  }
+
+  public static class ServerService implements ServerExtension {
+
+  }
+
+  public static class FakeCoverageExtension implements CoverageExtension {
+
+  }
+
+  public static class FakeModule extends Module {
+    @Override
+    protected void configure() {
+    }
+  }
+}