1   package org.apache.maven.plugin.war.overlay;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.plugin.testing.stubs.ArtifactStub;
23  import org.apache.maven.plugin.war.Overlay;
24  import org.apache.maven.plugin.war.stub.MavenProjectArtifactsStub;
25  import org.apache.maven.plugin.war.stub.WarArtifactStub;
26  import org.codehaus.plexus.PlexusTestCase;
27  
28  import java.util.ArrayList;
29  import java.util.List;
30  
31  /**
32   * @author Stephane Nicoll
33   * @version $Id: OverlayManagerTest.java 948982 2010-05-27 20:50:53Z krosenvold $
34   */
35  public class OverlayManagerTest
36      extends PlexusTestCase
37  {
38  
39      public static final String DEFAULT_INCLUDES = "**/**";
40  
41      public static final String DEFAULT_EXCLUDES = "META-INF/MANIFEST.MF";
42  
43  
44      public void testEmptyProject()
45          throws Exception
46      {
47          final MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
48          final List overlays = new ArrayList();
49          try
50          {
51              final Overlay currentProjectOVerlay = Overlay.createInstance();
52              OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES,
53                                                           currentProjectOVerlay );
54              assertNotNull( manager.getOverlays() );
55              assertEquals( 1, manager.getOverlays().size() );
56              assertEquals( currentProjectOVerlay, manager.getOverlays().get( 0 ) );
57          }
58          catch ( InvalidOverlayConfigurationException e )
59          {
60              e.printStackTrace();
61              fail( "Should not have failed to validate a valid overly config " + e.getMessage() );
62          }
63      }
64  
65      public void testAutodetectSimpleOverlay( Overlay currentProjectOverlay )
66          throws Exception
67      {
68  
69          final MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
70          final ArtifactStub first = newWarArtifact( "test", "test-webapp" );
71          project.addArtifact( first );
72  
73          final List overlays = new ArrayList();
74  
75          try
76          {
77              final Overlay overlay = currentProjectOverlay;
78              OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES,
79                                                           overlay );
80              assertNotNull( manager.getOverlays() );
81              assertEquals( 2, manager.getOverlays().size() );
82              assertEquals( overlay, manager.getOverlays().get( 0 ) );
83              assertEquals( new DefaultOverlay( first ), manager.getOverlays().get( 1 ) );
84          }
85          catch ( InvalidOverlayConfigurationException e )
86          {
87              e.printStackTrace();
88              fail( "Should not have failed to validate a valid overlay config " + e.getMessage() );
89          }
90      }
91  
92      public void testSimpleOverlay()
93          throws Exception
94      {
95  
96          final MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
97          final ArtifactStub first = newWarArtifact( "test", "test-webapp" );
98          project.addArtifact( first );
99  
100         final List overlays = new ArrayList();
101         overlays.add( new DefaultOverlay( first ) );
102 
103         try
104         {
105             final Overlay currentProjectOverlay = Overlay.createInstance();
106             OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES,
107                                                          currentProjectOverlay );
108             assertNotNull( manager.getOverlays() );
109             assertEquals( 2, manager.getOverlays().size() );
110             assertEquals( Overlay.createInstance(), manager.getOverlays().get( 0 ) );
111             assertEquals( overlays.get( 0 ), manager.getOverlays().get( 1 ) );
112         }
113         catch ( InvalidOverlayConfigurationException e )
114         {
115             e.printStackTrace();
116             fail( "Should not have failed to validate a valid overlay config " + e.getMessage() );
117         }
118     }
119 
120     public void testUnknonwnOverlay()
121         throws Exception
122     {
123 
124         final MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
125         final ArtifactStub first = newWarArtifact( "test", "test-webapp" );
126         project.addArtifact( first );
127 
128         final List overlays = new ArrayList();
129         overlays.add( new Overlay( "test", "test-webapp-2" ) );
130 
131         try
132         {
133             final Overlay currentProjectOVerlay = Overlay.createInstance();
134             new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES, currentProjectOVerlay );
135             fail( "Should have failed to validate an unknown overlay" );
136         }
137         catch ( InvalidOverlayConfigurationException e )
138         {
139             // OK
140         }
141     }
142 
143     public void testCustomCurrentProject()
144         throws Exception
145     {
146 
147         final MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
148         final ArtifactStub first = newWarArtifact( "test", "test-webapp" );
149         final ArtifactStub second = newWarArtifact( "test", "test-webapp-2" );
150         project.addArtifact( first );
151         project.addArtifact( second );
152 
153         final List overlays = new ArrayList();
154         overlays.add( new DefaultOverlay( first ) );
155         final Overlay currentProjectOverlay = Overlay.createInstance();
156         overlays.add( currentProjectOverlay );
157 
158         try
159         {
160             OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES,
161                                                          currentProjectOverlay );
162             assertNotNull( manager.getOverlays() );
163             assertEquals( 3, manager.getOverlays().size() );
164             assertEquals( overlays.get( 0 ), manager.getOverlays().get( 0 ) );
165             assertEquals( currentProjectOverlay, manager.getOverlays().get( 1 ) );
166             assertEquals( new DefaultOverlay( second ), manager.getOverlays().get( 2 ) );
167 
168         }
169         catch ( InvalidOverlayConfigurationException e )
170         {
171             e.printStackTrace();
172             fail( "Should not have failed to validate a valid overlay config " + e.getMessage() );
173         }
174     }
175 
176     public void testOverlaysWithSameArtifactAndGroupId()
177         throws Exception
178     {
179 
180         final MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
181         final ArtifactStub first = newWarArtifact( "test", "test-webapp" );
182         final ArtifactStub second = newWarArtifact( "test", "test-webapp", "my-classifier" );
183 
184         project.addArtifact( first );
185         project.addArtifact( second );
186 
187         final List overlays = new ArrayList();
188         overlays.add( new DefaultOverlay( first ) );
189         overlays.add( new DefaultOverlay( second ) );
190 
191         try
192         {
193             final Overlay currentProjectOverlay = Overlay.createInstance();
194             OverlayManager manager = new OverlayManager( overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES,
195                                                          currentProjectOverlay );
196             assertNotNull( manager.getOverlays() );
197             assertEquals( 3, manager.getOverlays().size() );
198             assertEquals( currentProjectOverlay, manager.getOverlays().get( 0 ) );
199             assertEquals( overlays.get( 0 ), manager.getOverlays().get( 1 ) );
200             assertEquals( overlays.get( 1 ), manager.getOverlays().get( 2 ) );
201 
202         }
203         catch ( InvalidOverlayConfigurationException e )
204         {
205             e.printStackTrace();
206             fail( "Should not have failed to validate a valid overlay config " + e.getMessage() );
207         }
208     }
209 
210 
211     protected ArtifactStub newWarArtifact( String groupId, String artifactId, String classifier )
212     {
213         final WarArtifactStub a = new WarArtifactStub( getBasedir() );
214         a.setGroupId( groupId );
215         a.setArtifactId( artifactId );
216         if ( classifier != null )
217         {
218             a.setClassifier( classifier );
219         }
220         return a;
221     }
222 
223     protected ArtifactStub newWarArtifact( String groupId, String artifactId )
224     {
225         return newWarArtifact( groupId, artifactId, null );
226 
227     }
228 }