1 package org.apache.maven.plugin.assembly.archive.phase;
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.model.Model;
23 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
24 import org.apache.maven.plugin.assembly.DefaultAssemblyContext;
25 import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
26 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
27 import org.apache.maven.plugin.assembly.model.Assembly;
28 import org.apache.maven.plugin.assembly.model.FileItem;
29 import org.apache.maven.plugin.assembly.testutils.MockManager;
30 import org.apache.maven.plugin.assembly.testutils.TestFileManager;
31 import org.apache.maven.plugin.assembly.utils.TypeConversionUtils;
32 import org.apache.maven.project.MavenProject;
33 import org.codehaus.plexus.archiver.Archiver;
34 import org.codehaus.plexus.archiver.ArchiverException;
35 import org.codehaus.plexus.logging.Logger;
36 import org.codehaus.plexus.logging.console.ConsoleLogger;
37 import org.easymock.MockControl;
38
39 import java.io.File;
40 import java.io.IOException;
41
42 import junit.framework.Assert;
43 import junit.framework.TestCase;
44
45 public class FileItemAssemblyPhaseTest
46 extends TestCase
47 {
48
49 private final TestFileManager fileManager = new TestFileManager( "file-item-phase.test.", "" );
50
51 @Override
52 public void tearDown()
53 throws IOException
54 {
55 fileManager.cleanUp();
56 }
57
58 public void testExecute_ShouldAddNothingWhenNoFileItemsArePresent()
59 throws ArchiveCreationException, AssemblyFormattingException
60 {
61 final MockManager mm = new MockManager();
62
63 final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
64
65 final File basedir = fileManager.createTempDir();
66
67 macCS.expectGetBasedir( basedir );
68
69 final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
70
71 final Assembly assembly = new Assembly();
72 assembly.setId( "test" );
73
74 mm.replayAll();
75
76 createPhase( macLogger.logger ).execute( assembly, null, macCS.configSource, new DefaultAssemblyContext() );
77
78 mm.verifyAll();
79 }
80
81 public void testExecute_ShouldAddAbsoluteFileNoFilterNoLineEndingConversion()
82 throws ArchiveCreationException, AssemblyFormattingException, IOException
83 {
84 final MockManager mm = new MockManager();
85
86 final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
87
88 final File basedir = fileManager.createTempDir();
89
90 final File file = fileManager.createFile( basedir, "file.txt", "This is a test file." );
91
92 macCS.expectGetBasedir( basedir );
93
94 final File tempRoot = fileManager.createTempDir();
95
96 macCS.expectGetTemporaryRootDirectory( tempRoot );
97
98 macCS.expectGetProject( new MavenProject( new Model() ) );
99
100 macCS.expectGetFinalName( "final-name" );
101
102 final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
103
104 final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
105
106 final Assembly assembly = new Assembly();
107 assembly.setId( "test" );
108
109 final FileItem fi = new FileItem();
110 fi.setSource( file.getAbsolutePath() );
111 fi.setFiltered( false );
112 fi.setLineEnding( "keep" );
113 fi.setFileMode( "777" );
114
115 macArchiver.expectAddFile( file,
116 "file.txt",
117 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
118
119 assembly.addFile( fi );
120
121 mm.replayAll();
122
123 createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource,
124 new DefaultAssemblyContext() );
125
126 mm.verifyAll();
127 }
128
129 public void testExecute_ShouldAddRelativeFileNoFilterNoLineEndingConversion()
130 throws ArchiveCreationException, AssemblyFormattingException, IOException
131 {
132 final MockManager mm = new MockManager();
133
134 final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
135
136 final File basedir = fileManager.createTempDir();
137
138 final File file = fileManager.createFile( basedir, "file.txt", "This is a test file." );
139
140 macCS.expectGetBasedir( basedir );
141
142 final File tempRoot = fileManager.createTempDir();
143
144 macCS.expectGetTemporaryRootDirectory( tempRoot );
145
146 macCS.expectGetProject( new MavenProject( new Model() ) );
147
148 macCS.expectGetFinalName( "final-name" );
149
150 final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
151
152 final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
153
154 final Assembly assembly = new Assembly();
155 assembly.setId( "test" );
156
157 final FileItem fi = new FileItem();
158 fi.setSource( "file.txt" );
159 fi.setFiltered( false );
160 fi.setLineEnding( "keep" );
161 fi.setFileMode( "777" );
162
163 macArchiver.expectAddFile( file,
164 "file.txt",
165 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
166
167 assembly.addFile( fi );
168
169 mm.replayAll();
170
171 createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource,
172 new DefaultAssemblyContext() );
173
174 mm.verifyAll();
175 }
176
177 public void testExecute_WithOutputDirectory()
178 throws Exception
179 {
180 final MockManager mm = new MockManager();
181
182 final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
183
184 final File basedir = fileManager.createTempDir();
185
186 final File readmeFile = fileManager.createFile( basedir, "README.txt", "This is a test file for README.txt." );
187 final File licenseFile =
188 fileManager.createFile( basedir, "LICENSE.txt", "This is a test file for LICENSE.txt." );
189 final File configFile =
190 fileManager.createFile( basedir, "config/config.txt", "This is a test file for config/config.txt" );
191
192 macCS.expectGetBasedir( basedir );
193
194 final File tempRoot = fileManager.createTempDir();
195
196 macCS.expectGetTemporaryRootDirectory( tempRoot );
197
198 macCS.expectGetProject( new MavenProject( new Model() ) );
199
200 macCS.expectGetFinalName( "final-name" );
201
202 final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
203
204 final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
205
206 final Assembly assembly = new Assembly();
207 assembly.setId( "test" );
208 assembly.setIncludeBaseDirectory( true );
209
210 final FileItem readmeFileItem = new FileItem();
211 readmeFileItem.setSource( "README.txt" );
212 readmeFileItem.setOutputDirectory( "" );
213 readmeFileItem.setFiltered( false );
214 readmeFileItem.setLineEnding( "keep" );
215 readmeFileItem.setFileMode( "777" );
216
217 final FileItem licenseFileItem = new FileItem();
218 licenseFileItem.setSource( "LICENSE.txt" );
219 licenseFileItem.setOutputDirectory( "/" );
220 licenseFileItem.setFiltered( false );
221 licenseFileItem.setLineEnding( "keep" );
222 licenseFileItem.setFileMode( "777" );
223
224 final FileItem configFileItem = new FileItem();
225 configFileItem.setSource( "config/config.txt" );
226 configFileItem.setOutputDirectory( "config" );
227 configFileItem.setFiltered( false );
228 configFileItem.setLineEnding( "keep" );
229 configFileItem.setFileMode( "777" );
230
231 macArchiver.expectAddFile( readmeFile,
232 "README.txt",
233 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
234 macArchiver.expectAddFile( licenseFile,
235 "LICENSE.txt",
236 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
237 macArchiver.expectAddFile( configFile,
238 "config/config.txt",
239 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
240
241 assembly.addFile( readmeFileItem );
242 assembly.addFile( licenseFileItem );
243 assembly.addFile( configFileItem );
244
245 mm.replayAll();
246
247 createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource,
248 new DefaultAssemblyContext() );
249
250 mm.verifyAll();
251 }
252
253 public void testExecute_WithOutputDirectoryAndDestName()
254 throws Exception
255 {
256 final MockManager mm = new MockManager();
257
258 final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
259
260 final File basedir = fileManager.createTempDir();
261
262 final File readmeFile = fileManager.createFile( basedir, "README.txt", "This is a test file for README.txt." );
263 final File licenseFile =
264 fileManager.createFile( basedir, "LICENSE.txt", "This is a test file for LICENSE.txt." );
265 final File configFile =
266 fileManager.createFile( basedir, "config/config.txt", "This is a test file for config/config.txt" );
267
268 macCS.expectGetBasedir( basedir );
269
270 final File tempRoot = fileManager.createTempDir();
271
272 macCS.expectGetTemporaryRootDirectory( tempRoot );
273
274 macCS.expectGetProject( new MavenProject( new Model() ) );
275
276 macCS.expectGetFinalName( "final-name" );
277
278 final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
279
280 final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
281
282 final Assembly assembly = new Assembly();
283 assembly.setId( "test" );
284 assembly.setIncludeBaseDirectory( true );
285
286 final FileItem readmeFileItem = new FileItem();
287 readmeFileItem.setSource( "README.txt" );
288 readmeFileItem.setOutputDirectory( "" );
289 readmeFileItem.setDestName( "README_renamed.txt" );
290 readmeFileItem.setFiltered( false );
291 readmeFileItem.setLineEnding( "keep" );
292 readmeFileItem.setFileMode( "777" );
293
294 final FileItem licenseFileItem = new FileItem();
295 licenseFileItem.setSource( "LICENSE.txt" );
296 licenseFileItem.setOutputDirectory( "/" );
297 licenseFileItem.setDestName( "LICENSE_renamed.txt" );
298 licenseFileItem.setFiltered( false );
299 licenseFileItem.setLineEnding( "keep" );
300 licenseFileItem.setFileMode( "777" );
301
302 final FileItem configFileItem = new FileItem();
303 configFileItem.setSource( "config/config.txt" );
304 configFileItem.setDestName( "config_renamed.txt" );
305 configFileItem.setOutputDirectory( "config" );
306 configFileItem.setFiltered( false );
307 configFileItem.setLineEnding( "keep" );
308 configFileItem.setFileMode( "777" );
309
310 macArchiver.expectAddFile( readmeFile,
311 "README_renamed.txt",
312 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
313 macArchiver.expectAddFile( licenseFile,
314 "LICENSE_renamed.txt",
315 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
316 macArchiver.expectAddFile( configFile,
317 "config/config_renamed.txt",
318 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
319
320 assembly.addFile( readmeFileItem );
321 assembly.addFile( licenseFileItem );
322 assembly.addFile( configFileItem );
323
324 mm.replayAll();
325
326 createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource,
327 new DefaultAssemblyContext() );
328
329 mm.verifyAll();
330 }
331
332 public void testExecute_WithOutputDirectoryAndDestNameAndIncludeBaseDirectoryFalse()
333 throws Exception
334 {
335 final MockManager mm = new MockManager();
336
337 final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
338
339 final File basedir = fileManager.createTempDir();
340
341 final File readmeFile = fileManager.createFile( basedir, "README.txt", "This is a test file for README.txt." );
342 final File licenseFile =
343 fileManager.createFile( basedir, "LICENSE.txt", "This is a test file for LICENSE.txt." );
344 final File configFile =
345 fileManager.createFile( basedir, "config/config.txt", "This is a test file for config/config.txt" );
346
347 macCS.expectGetBasedir( basedir );
348
349 final File tempRoot = fileManager.createTempDir();
350
351 macCS.expectGetTemporaryRootDirectory( tempRoot );
352
353 macCS.expectGetProject( new MavenProject( new Model() ) );
354
355 macCS.expectGetFinalName( "final-name" );
356
357 final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
358
359 final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
360
361 final Assembly assembly = new Assembly();
362 assembly.setId( "test" );
363 assembly.setIncludeBaseDirectory( false );
364
365 final FileItem readmeFileItem = new FileItem();
366 readmeFileItem.setSource( "README.txt" );
367 readmeFileItem.setDestName( "README_renamed.txt" );
368 readmeFileItem.setFiltered( false );
369 readmeFileItem.setLineEnding( "keep" );
370 readmeFileItem.setFileMode( "777" );
371
372 final FileItem licenseFileItem = new FileItem();
373 licenseFileItem.setSource( "LICENSE.txt" );
374 licenseFileItem.setDestName( "LICENSE_renamed.txt" );
375 licenseFileItem.setFiltered( false );
376 licenseFileItem.setLineEnding( "keep" );
377 licenseFileItem.setFileMode( "777" );
378
379 final FileItem configFileItem = new FileItem();
380 configFileItem.setSource( "config/config.txt" );
381 configFileItem.setDestName( "config_renamed.txt" );
382 configFileItem.setOutputDirectory( "config" );
383 configFileItem.setFiltered( false );
384 configFileItem.setLineEnding( "keep" );
385 configFileItem.setFileMode( "777" );
386
387 macArchiver.expectAddFile( readmeFile,
388 "README_renamed.txt",
389 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
390 macArchiver.expectAddFile( licenseFile,
391 "LICENSE_renamed.txt",
392 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
393 macArchiver.expectAddFile( configFile,
394 "config/config_renamed.txt",
395 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
396
397 assembly.addFile( readmeFileItem );
398 assembly.addFile( licenseFileItem );
399 assembly.addFile( configFileItem );
400
401 mm.replayAll();
402
403 createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource,
404 new DefaultAssemblyContext() );
405
406 mm.verifyAll();
407 }
408
409 private FileItemAssemblyPhase createPhase( final Logger logger )
410 {
411 final FileItemAssemblyPhase phase = new FileItemAssemblyPhase();
412 phase.enableLogging( logger );
413
414 return phase;
415 }
416
417 private final class MockAndControlForArchiver
418 {
419 Archiver archiver;
420
421 MockControl control;
422
423 public MockAndControlForArchiver( final MockManager mockManager )
424 {
425 control = MockControl.createControl( Archiver.class );
426 mockManager.add( control );
427
428 archiver = (Archiver) control.getMock();
429 }
430
431 public void expectAddFile( final File file, final String outputLocation, final int fileMode )
432 {
433 try
434 {
435 archiver.addFile( file, outputLocation, fileMode );
436 }
437 catch ( final ArchiverException e )
438 {
439 Assert.fail( "Should never happen." );
440 }
441 }
442 }
443
444 private final class MockAndControlForConfigSource
445 {
446 AssemblerConfigurationSource configSource;
447
448 MockControl control;
449
450 public MockAndControlForConfigSource( final MockManager mockManager )
451 {
452 control = MockControl.createControl( AssemblerConfigurationSource.class );
453 mockManager.add( control );
454
455 configSource = (AssemblerConfigurationSource) control.getMock();
456
457 configSource.getMavenSession();
458 control.setReturnValue( null, MockControl.ZERO_OR_MORE );
459 }
460
461 public void expectGetProject( final MavenProject project )
462 {
463 configSource.getProject();
464 control.setReturnValue( project, MockControl.ONE_OR_MORE );
465 }
466
467 public void expectGetFinalName( final String finalName )
468 {
469 configSource.getFinalName();
470 control.setReturnValue( finalName, MockControl.ONE_OR_MORE );
471 }
472
473 public void expectGetTemporaryRootDirectory( final File tempRoot )
474 {
475 configSource.getTemporaryRootDirectory();
476 control.setReturnValue( tempRoot, MockControl.ONE_OR_MORE );
477 }
478
479 public void expectGetBasedir( final File basedir )
480 {
481 configSource.getBasedir();
482 control.setReturnValue( basedir, MockControl.ONE_OR_MORE );
483 }
484 }
485
486 private final class MockAndControlForLogger
487 {
488 Logger logger;
489
490 MockControl control;
491
492 public MockAndControlForLogger( final MockManager mockManager )
493 {
494 control = MockControl.createControl( Logger.class );
495 mockManager.add( control );
496
497 logger = (Logger) control.getMock();
498 }
499 }
500
501 }