1   package org.apache.maven.project;
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  import org.apache.maven.artifact.repository.ArtifactRepository;
23  import org.apache.maven.artifact.repository.DefaultArtifactRepository;
24  import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
25  import org.apache.maven.profiles.DefaultProfileManager;
26  import org.apache.maven.project.validation.ModelValidationResult;
27  import org.codehaus.plexus.PlexusTestCase;
28  
29  import java.io.File;
30  import java.io.FileNotFoundException;
31  import java.net.URISyntaxException;
32  import java.net.URI;
33  import java.net.URL;
34  
35  
36  
37  
38  
39  public abstract class AbstractMavenProjectTestCase
40      extends PlexusTestCase
41  {
42      protected MavenProjectBuilder projectBuilder;
43  
44      protected void setUp()
45          throws Exception
46      {
47          super.setUp();
48  
49          if ( getContainer().hasComponent( MavenProjectBuilder.ROLE, "test" ) )
50          {
51              projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.ROLE, "test" );
52          }
53          else
54          {
55              
56              projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.ROLE );
57          }
58      }
59  
60      
61      
62      
63  
64      protected File getLocalRepositoryPath()
65          throws FileNotFoundException, URISyntaxException
66      {
67          File markerFile = getFileForClasspathResource( "local-repo/marker.txt" );
68  
69          return markerFile.getAbsoluteFile().getParentFile();
70      }
71  
72      protected File getFileForClasspathResource( String resource )
73          throws FileNotFoundException, URISyntaxException
74      {
75          ClassLoader cloader = Thread.currentThread().getContextClassLoader();
76  
77          URL resourceUrl = cloader.getResource( resource );
78  
79          if ( resourceUrl == null )
80          {
81              throw new FileNotFoundException( "Unable to find: " + resource );
82          }
83  
84          return new File( new URI( resourceUrl.toString() ) );
85      }
86  
87      protected ArtifactRepository getLocalRepository()
88          throws Exception
89      {
90          ArtifactRepositoryLayout repoLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE,
91                                                                                   "legacy" );
92  
93          ArtifactRepository r = new DefaultArtifactRepository( "local",
94                                                                "file://" + getLocalRepositoryPath().getAbsolutePath(),
95                                                                repoLayout );
96  
97          return r;
98      }
99  
100     
101     
102     
103 
104     protected MavenProject getProjectWithDependencies( File pom )
105         throws Exception
106     {
107         try
108         {
109             return projectBuilder.buildWithDependencies( pom, getLocalRepository(), null );
110         }
111         catch ( Exception e )
112         {
113             if ( e instanceof InvalidProjectModelException )
114             {
115                 ModelValidationResult validationResult = ((InvalidProjectModelException)e).getValidationResult();
116                 String message = "In: " + pom + "(" + ((ProjectBuildingException) e).getProjectId() + ")\n\n" + validationResult.render( "  " );
117                 System.out.println( message );
118                 fail( message );
119             }
120 
121             throw e;
122         }
123     }
124 
125     protected MavenProject getProject( File pom )
126         throws Exception
127     {
128         return projectBuilder.build( pom, getLocalRepository(), new DefaultProfileManager( getContainer() ) );
129     }
130 
131 }