aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java227
1 files changed, 227 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java
new file mode 100644
index 00000000..38e9fcad
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java
@@ -0,0 +1,227 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle.internal.stub;
+
+import org.apache.maven.execution.AbstractExecutionListener;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.DefaultMavenExecutionResult;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.lifecycle.LifecycleNotFoundException;
+import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
+import org.apache.maven.lifecycle.internal.GoalTask;
+import org.apache.maven.lifecycle.internal.ProjectBuildList;
+import org.apache.maven.lifecycle.internal.ProjectSegment;
+import org.apache.maven.lifecycle.internal.TaskSegment;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.project.MavenProject;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * A stub dependency graph that is custom made for testing concurrent build graph evaluations.
+ * <p/>
+ * Implements a graph as follows:
+ * A has no dependencies
+ * B depends on A
+ * C depends on A
+ * X depends on B & C
+ * Y depends on B
+ * Z depends on C
+ *
+ * @author Kristian Rosenvold
+ */
+public class ProjectDependencyGraphStub
+ implements ProjectDependencyGraph
+{
+ public static final MavenProject A = new MavenProject();
+
+ public static final MavenProject B = new MavenProject();
+
+ public static final MavenProject C = new MavenProject();
+
+ public static final MavenProject X = new MavenProject();
+
+ public static final MavenProject Y = new MavenProject();
+
+ public static final MavenProject Z = new MavenProject();
+
+ public static final MavenProject UNKNOWN = new MavenProject();
+
+ static
+ {
+ A.setArtifactId( "A" );
+ B.setArtifactId( "B" );
+ C.setArtifactId( "C" );
+ X.setArtifactId( "X" );
+ Y.setArtifactId( "Y" );
+ Z.setArtifactId( "Z" );
+ }
+
+ // This should probably be moved to a separate stub
+
+ public static ProjectBuildList getProjectBuildList( MavenSession session )
+ throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException,
+ NoPluginFoundForPrefixException, MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException
+ {
+ final List<ProjectSegment> list = getProjectBuilds( session );
+ return new ProjectBuildList( list );
+
+ }
+
+ public static List<ProjectSegment> getProjectBuilds( MavenSession session )
+ throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException,
+ NoPluginFoundForPrefixException, PluginNotFoundException, MojoNotFoundException, PluginResolutionException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException
+ {
+ List<ProjectSegment> projectBuilds = new ArrayList<ProjectSegment>();
+
+ TaskSegment segment = createTaskSegment();
+ projectBuilds.add( createProjectBuild( A, session, segment ) );
+ projectBuilds.add( createProjectBuild( B, session, segment ) );
+ projectBuilds.add( createProjectBuild( C, session, segment ) );
+ projectBuilds.add( createProjectBuild( X, session, segment ) );
+ projectBuilds.add( createProjectBuild( Y, session, segment ) );
+ projectBuilds.add( createProjectBuild( Z, session, segment ) );
+ return projectBuilds;
+ }
+
+ private static ProjectSegment createProjectBuild( MavenProject project, MavenSession session,
+ TaskSegment taskSegment )
+ throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException,
+ NoPluginFoundForPrefixException, MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException
+ {
+ final MavenSession session1 = session.clone();
+ return new ProjectSegment( project, taskSegment, session1 );
+ }
+
+
+ private static TaskSegment createTaskSegment()
+ {
+ TaskSegment result = new TaskSegment( false );
+ result.getTasks().add( new GoalTask( "t1" ) );
+ result.getTasks().add( new GoalTask( "t2" ) );
+ return result;
+ }
+
+ class Dependency
+ {
+ MavenProject dependant;
+
+ MavenProject dependency;
+
+ Dependency( MavenProject dependant, MavenProject dependency )
+ {
+ this.dependant = dependant;
+ this.dependency = dependency;
+ }
+
+ void addIfDownstream( MavenProject mavenProject, List<MavenProject> result )
+ {
+ if ( dependency == mavenProject )
+ {
+ result.add( dependant );
+ }
+ }
+
+ void addIfUpstreamOf( MavenProject mavenProject, List<MavenProject> result )
+ {
+ if ( dependant == mavenProject )
+ {
+ result.add( dependency ); // All projects are the statics from this class
+ }
+ }
+ }
+
+ private List<Dependency> getDependencies()
+ {
+ List<Dependency> dependencies = new ArrayList<Dependency>();
+ dependencies.add( new Dependency( B, A ) );
+ dependencies.add( new Dependency( C, A ) );
+ dependencies.add( new Dependency( X, B ) );
+ dependencies.add( new Dependency( X, C ) );
+ dependencies.add( new Dependency( Y, B ) );
+ dependencies.add( new Dependency( Z, C ) );
+ return dependencies;
+ }
+
+ public List<MavenProject> getSortedProjects()
+ {
+ return Arrays.asList( A, B, C, X, Y, Z ); // I'm not entirely sure about the order but this shold do...
+ }
+
+ public List<MavenProject> getDownstreamProjects( MavenProject project, boolean transitive )
+ {
+ if ( transitive )
+ {
+ throw new RuntimeException( "Not implemented yet" );
+ }
+ List<MavenProject> result = new ArrayList<MavenProject>();
+ for ( Dependency dependency : getDependencies() )
+ {
+ dependency.addIfDownstream( project, result );
+ }
+ return result;
+ }
+
+ public List<MavenProject> getUpstreamProjects( MavenProject project, boolean transitive )
+ {
+ /* if ( transitive )
+ {
+ throw new RuntimeException( "Not implemented yet" );
+ }*/
+ List<MavenProject> result = new ArrayList<MavenProject>();
+ final List<Dependency> dependencies = getDependencies();
+ for ( Dependency dependency : dependencies )
+ {
+ dependency.addIfUpstreamOf( project, result );
+ }
+ return result;
+ }
+
+ public static MavenSession getMavenSession( MavenProject mavenProject )
+ {
+ final MavenSession session = getMavenSession();
+ session.setCurrentProject( mavenProject );
+ return session;
+ }
+
+ public static MavenSession getMavenSession()
+ {
+ final DefaultMavenExecutionResult defaultMavenExecutionResult = new DefaultMavenExecutionResult();
+ MavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest();
+ mavenExecutionRequest.setExecutionListener( new AbstractExecutionListener() );
+ mavenExecutionRequest.setGoals( Arrays.asList( "clean", "aggr", "install" ) );
+ mavenExecutionRequest.setDegreeOfConcurrency( 1 );
+ final MavenSession session = new MavenSession( null, null, mavenExecutionRequest, defaultMavenExecutionResult );
+ final ProjectDependencyGraphStub dependencyGraphStub = new ProjectDependencyGraphStub();
+ session.setProjectDependencyGraph( dependencyGraphStub );
+ session.setProjects( dependencyGraphStub.getSortedProjects() );
+ return session;
+ }
+
+}