]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4069 add ProjectScanContainerTest
authorSimon Brandhof <simon.brandhof@gmail.com>
Fri, 15 Mar 2013 09:22:15 +0000 (10:22 +0100)
committerSimon Brandhof <simon.brandhof@gmail.com>
Fri, 15 Mar 2013 09:22:15 +0000 (10:22 +0100)
sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionInstaller.java
sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
sonar-batch/src/test/java/org/sonar/batch/scan/ProjectScanContainerTest.java [new file with mode: 0644]

index cd33e032ce790a43dc5c32f121862abf90c80c6c..5304ea75a199936ece09257da043d51eb139d3e2 100644 (file)
@@ -32,7 +32,6 @@ import javax.annotation.Nullable;
 import java.util.List;
 import java.util.Map;
 
-// TODO rename ExtensionInstaller
 public class ExtensionInstaller {
 
   private final BatchPluginRepository pluginRepository;
index 406fb2d059d0c70b2963a37a7c4558a6ffdee50c..6ed74215880335339d49a7cd8eaf48a4b78da407 100644 (file)
@@ -69,30 +69,30 @@ public class ProjectScanContainer extends ComponentContainer {
 
   private void addBatchComponents() {
     add(
-        DefaultResourceCreationLock.class,
-        DefaultPersistenceManager.class,
-        DependencyPersister.class,
-        EventPersister.class,
-        LinkPersister.class,
-        MeasurePersister.class,
-        MemoryOptimizer.class,
-        DefaultResourcePermissions.class,
-        DefaultResourcePersister.class,
-        SourcePersister.class,
-        DefaultNotificationManager.class,
-        MetricProvider.class,
-        ProjectExclusions.class,
-        ProjectReactorReady.class,
-        ProjectConfigurator.class,
-        DefaultIndex.class,
-        DefaultFileLinesContextFactory.class,
-        ProjectLock.class,
-        LastSnapshots.class,
-        ScanGraph.create(),
-        TestPlanBuilder.class,
-        TestableBuilder.class,
-        ScanPerspectives.class,
-        ScanGraphStore.class);
+      DefaultResourceCreationLock.class,
+      DefaultPersistenceManager.class,
+      DependencyPersister.class,
+      EventPersister.class,
+      LinkPersister.class,
+      MeasurePersister.class,
+      MemoryOptimizer.class,
+      DefaultResourcePermissions.class,
+      DefaultResourcePersister.class,
+      SourcePersister.class,
+      DefaultNotificationManager.class,
+      MetricProvider.class,
+      ProjectExclusions.class,
+      ProjectReactorReady.class,
+      ProjectConfigurator.class,
+      DefaultIndex.class,
+      DefaultFileLinesContextFactory.class,
+      ProjectLock.class,
+      LastSnapshots.class,
+      ScanGraph.create(),
+      TestPlanBuilder.class,
+      TestableBuilder.class,
+      ScanPerspectives.class,
+      ScanGraphStore.class);
   }
 
   private void fixMavenExecutor() {
@@ -102,12 +102,7 @@ public class ProjectScanContainer extends ComponentContainer {
   }
 
   private void addBatchExtensions() {
-    getComponentByType(ExtensionInstaller.class).install(this, new ExtensionInstaller.ComponentFilter() {
-      public boolean accept(Object extension) {
-        return ExtensionUtils.isType(extension, BatchExtension.class)
-          && ExtensionUtils.isInstantiationStrategy(extension, InstantiationStrategy.PER_BATCH);
-      }
-    });
+    getComponentByType(ExtensionInstaller.class).install(this, new BatchExtensionFilter());
   }
 
   @Override
@@ -127,4 +122,10 @@ public class ProjectScanContainer extends ComponentContainer {
     new ModuleScanContainer(this, module).execute();
   }
 
+  static class BatchExtensionFilter implements ExtensionInstaller.ComponentFilter {
+    public boolean accept(Object extension) {
+      return ExtensionUtils.isType(extension, BatchExtension.class)
+        && ExtensionUtils.isInstantiationStrategy(extension, InstantiationStrategy.PER_BATCH);
+    }
+  }
 }
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/ProjectScanContainerTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/ProjectScanContainerTest.java
new file mode 100644 (file)
index 0000000..3ec36cd
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2012 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.scan;
+
+import org.junit.Test;
+import org.sonar.api.BatchExtension;
+import org.sonar.api.ServerExtension;
+import org.sonar.api.batch.InstantiationStrategy;
+import org.sonar.api.platform.ComponentContainer;
+import org.sonar.api.task.TaskExtension;
+import org.sonar.batch.bootstrap.ExtensionInstaller;
+import org.sonar.batch.scan.maven.MavenPluginExecutor;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+public class ProjectScanContainerTest {
+
+  @Test
+  public void should_add_fake_maven_executor_on_non_maven_env() {
+    ProjectScanContainer container = new ProjectScanContainer(new ComponentContainer());
+    container.add(mock(ExtensionInstaller.class));
+    container.doBeforeStart();
+
+    assertThat(container.getComponentByType(MavenPluginExecutor.class)).isNotNull();
+  }
+
+  @Test
+  public void should_use_maven_executor_provided_by_maven() {
+    ProjectScanContainer container = new ProjectScanContainer(new ComponentContainer());
+    container.add(mock(ExtensionInstaller.class));
+    MavenPluginExecutor mavenPluginExecutor = mock(MavenPluginExecutor.class);
+    container.add(mavenPluginExecutor);
+    container.doBeforeStart();
+
+    assertThat(container.getComponentsByType(MavenPluginExecutor.class)).hasSize(1);
+    assertThat(container.getComponentByType(MavenPluginExecutor.class)).isSameAs(mavenPluginExecutor);
+  }
+
+  @Test
+  public void should_add_only_batch_extensions() {
+    ProjectScanContainer.BatchExtensionFilter filter = new ProjectScanContainer.BatchExtensionFilter();
+
+    assertThat(filter.accept(new MyBatchExtension())).isTrue();
+    assertThat(filter.accept(MyBatchExtension.class)).isTrue();
+
+    assertThat(filter.accept(new MyProjectExtension())).isFalse();
+    assertThat(filter.accept(MyProjectExtension.class)).isFalse();
+    assertThat(filter.accept(new MyServerExtension())).isFalse();
+    assertThat(filter.accept(MyServerExtension.class)).isFalse();
+    assertThat(filter.accept(new MyTaskExtension())).isFalse();
+    assertThat(filter.accept(MyTaskExtension.class)).isFalse();
+  }
+
+  @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
+  static class MyBatchExtension implements BatchExtension {
+
+  }
+
+  static class MyProjectExtension implements BatchExtension {
+
+  }
+
+  static class MyServerExtension implements ServerExtension {
+
+  }
+
+  static class MyTaskExtension implements TaskExtension {
+
+  }
+}