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 macCS.expectGetEncoding();
122
123 mm.replayAll();
124
125 createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource,
126 new DefaultAssemblyContext() );
127
128 mm.verifyAll();
129 }
130
131 public void testExecute_ShouldAddRelativeFileNoFilterNoLineEndingConversion()
132 throws ArchiveCreationException, AssemblyFormattingException, IOException
133 {
134 final MockManager mm = new MockManager();
135
136 final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
137
138 final File basedir = fileManager.createTempDir();
139
140 final File file = fileManager.createFile( basedir, "file.txt", "This is a test file." );
141
142 macCS.expectGetBasedir( basedir );
143
144 final File tempRoot = fileManager.createTempDir();
145
146 macCS.expectGetTemporaryRootDirectory( tempRoot );
147
148 macCS.expectGetProject( new MavenProject( new Model() ) );
149
150 macCS.expectGetFinalName( "final-name" );
151
152 final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
153
154 final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
155
156 final Assembly assembly = new Assembly();
157 assembly.setId( "test" );
158
159 final FileItem fi = new FileItem();
160 fi.setSource( "file.txt" );
161 fi.setFiltered( false );
162 fi.setLineEnding( "keep" );
163 fi.setFileMode( "777" );
164
165 macArchiver.expectAddFile( file,
166 "file.txt",
167 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
168
169 assembly.addFile( fi );
170
171 macCS.expectGetEncoding();
172
173 mm.replayAll();
174
175 createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource,
176 new DefaultAssemblyContext() );
177
178 mm.verifyAll();
179 }
180
181 public void testExecute_WithOutputDirectory()
182 throws Exception
183 {
184 final MockManager mm = new MockManager();
185
186 final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
187
188 final File basedir = fileManager.createTempDir();
189
190 final File readmeFile = fileManager.createFile( basedir, "README.txt", "This is a test file for README.txt." );
191 final File licenseFile =
192 fileManager.createFile( basedir, "LICENSE.txt", "This is a test file for LICENSE.txt." );
193 final File configFile =
194 fileManager.createFile( basedir, "config/config.txt", "This is a test file for config/config.txt" );
195
196 macCS.expectGetBasedir( basedir );
197
198 final File tempRoot = fileManager.createTempDir();
199
200 macCS.expectGetTemporaryRootDirectory( tempRoot );
201
202 macCS.expectGetProject( new MavenProject( new Model() ) );
203
204 macCS.expectGetFinalName( "final-name" );
205
206 final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
207
208 final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
209
210 final Assembly assembly = new Assembly();
211 assembly.setId( "test" );
212 assembly.setIncludeBaseDirectory( true );
213
214 final FileItem readmeFileItem = new FileItem();
215 readmeFileItem.setSource( "README.txt" );
216 readmeFileItem.setOutputDirectory( "" );
217 readmeFileItem.setFiltered( false );
218 readmeFileItem.setLineEnding( "keep" );
219 readmeFileItem.setFileMode( "777" );
220
221 final FileItem licenseFileItem = new FileItem();
222 licenseFileItem.setSource( "LICENSE.txt" );
223 licenseFileItem.setOutputDirectory( "/" );
224 licenseFileItem.setFiltered( false );
225 licenseFileItem.setLineEnding( "keep" );
226 licenseFileItem.setFileMode( "777" );
227
228 final FileItem configFileItem = new FileItem();
229 configFileItem.setSource( "config/config.txt" );
230 configFileItem.setOutputDirectory( "config" );
231 configFileItem.setFiltered( false );
232 configFileItem.setLineEnding( "keep" );
233 configFileItem.setFileMode( "777" );
234
235 macArchiver.expectAddFile( readmeFile,
236 "README.txt",
237 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
238 macArchiver.expectAddFile( licenseFile,
239 "LICENSE.txt",
240 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
241 macArchiver.expectAddFile( configFile,
242 "config/config.txt",
243 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
244
245 assembly.addFile( readmeFileItem );
246 assembly.addFile( licenseFileItem );
247 assembly.addFile( configFileItem );
248
249 macCS.expectGetEncoding();
250
251 mm.replayAll();
252
253 createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource,
254 new DefaultAssemblyContext() );
255
256 mm.verifyAll();
257 }
258
259 public void testExecute_WithOutputDirectoryAndDestName()
260 throws Exception
261 {
262 final MockManager mm = new MockManager();
263
264 final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
265
266 final File basedir = fileManager.createTempDir();
267
268 final File readmeFile = fileManager.createFile( basedir, "README.txt", "This is a test file for README.txt." );
269 final File licenseFile =
270 fileManager.createFile( basedir, "LICENSE.txt", "This is a test file for LICENSE.txt." );
271 final File configFile =
272 fileManager.createFile( basedir, "config/config.txt", "This is a test file for config/config.txt" );
273
274 macCS.expectGetBasedir( basedir );
275
276 final File tempRoot = fileManager.createTempDir();
277
278 macCS.expectGetTemporaryRootDirectory( tempRoot );
279
280 macCS.expectGetProject( new MavenProject( new Model() ) );
281
282 macCS.expectGetFinalName( "final-name" );
283
284 final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
285
286 final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
287
288 final Assembly assembly = new Assembly();
289 assembly.setId( "test" );
290 assembly.setIncludeBaseDirectory( true );
291
292 final FileItem readmeFileItem = new FileItem();
293 readmeFileItem.setSource( "README.txt" );
294 readmeFileItem.setOutputDirectory( "" );
295 readmeFileItem.setDestName( "README_renamed.txt" );
296 readmeFileItem.setFiltered( false );
297 readmeFileItem.setLineEnding( "keep" );
298 readmeFileItem.setFileMode( "777" );
299
300 final FileItem licenseFileItem = new FileItem();
301 licenseFileItem.setSource( "LICENSE.txt" );
302 licenseFileItem.setOutputDirectory( "/" );
303 licenseFileItem.setDestName( "LICENSE_renamed.txt" );
304 licenseFileItem.setFiltered( false );
305 licenseFileItem.setLineEnding( "keep" );
306 licenseFileItem.setFileMode( "777" );
307
308 final FileItem configFileItem = new FileItem();
309 configFileItem.setSource( "config/config.txt" );
310 configFileItem.setDestName( "config_renamed.txt" );
311 configFileItem.setOutputDirectory( "config" );
312 configFileItem.setFiltered( false );
313 configFileItem.setLineEnding( "keep" );
314 configFileItem.setFileMode( "777" );
315
316 macArchiver.expectAddFile( readmeFile,
317 "README_renamed.txt",
318 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
319 macArchiver.expectAddFile( licenseFile,
320 "LICENSE_renamed.txt",
321 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
322 macArchiver.expectAddFile( configFile,
323 "config/config_renamed.txt",
324 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
325
326 assembly.addFile( readmeFileItem );
327 assembly.addFile( licenseFileItem );
328 assembly.addFile( configFileItem );
329
330 macCS.expectGetEncoding();
331
332 mm.replayAll();
333
334 createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource,
335 new DefaultAssemblyContext() );
336
337 mm.verifyAll();
338 }
339
340 public void testExecute_WithOutputDirectoryAndDestNameAndIncludeBaseDirectoryFalse()
341 throws Exception
342 {
343 final MockManager mm = new MockManager();
344
345 final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
346
347 final File basedir = fileManager.createTempDir();
348
349 final File readmeFile = fileManager.createFile( basedir, "README.txt", "This is a test file for README.txt." );
350 final File licenseFile =
351 fileManager.createFile( basedir, "LICENSE.txt", "This is a test file for LICENSE.txt." );
352 final File configFile =
353 fileManager.createFile( basedir, "config/config.txt", "This is a test file for config/config.txt" );
354
355 macCS.expectGetBasedir( basedir );
356
357 final File tempRoot = fileManager.createTempDir();
358
359 macCS.expectGetTemporaryRootDirectory( tempRoot );
360
361 macCS.expectGetProject( new MavenProject( new Model() ) );
362
363 macCS.expectGetFinalName( "final-name" );
364
365 final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
366
367 final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
368
369 final Assembly assembly = new Assembly();
370 assembly.setId( "test" );
371 assembly.setIncludeBaseDirectory( false );
372
373 final FileItem readmeFileItem = new FileItem();
374 readmeFileItem.setSource( "README.txt" );
375 readmeFileItem.setDestName( "README_renamed.txt" );
376 readmeFileItem.setFiltered( false );
377 readmeFileItem.setLineEnding( "keep" );
378 readmeFileItem.setFileMode( "777" );
379
380 final FileItem licenseFileItem = new FileItem();
381 licenseFileItem.setSource( "LICENSE.txt" );
382 licenseFileItem.setDestName( "LICENSE_renamed.txt" );
383 licenseFileItem.setFiltered( false );
384 licenseFileItem.setLineEnding( "keep" );
385 licenseFileItem.setFileMode( "777" );
386
387 final FileItem configFileItem = new FileItem();
388 configFileItem.setSource( "config/config.txt" );
389 configFileItem.setDestName( "config_renamed.txt" );
390 configFileItem.setOutputDirectory( "config" );
391 configFileItem.setFiltered( false );
392 configFileItem.setLineEnding( "keep" );
393 configFileItem.setFileMode( "777" );
394
395 macArchiver.expectAddFile( readmeFile,
396 "README_renamed.txt",
397 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
398 macArchiver.expectAddFile( licenseFile,
399 "LICENSE_renamed.txt",
400 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
401 macArchiver.expectAddFile( configFile,
402 "config/config_renamed.txt",
403 TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ) );
404
405 assembly.addFile( readmeFileItem );
406 assembly.addFile( licenseFileItem );
407 assembly.addFile( configFileItem );
408
409 macCS.expectGetEncoding();
410
411 mm.replayAll();
412
413 createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource,
414 new DefaultAssemblyContext() );
415
416 mm.verifyAll();
417 }
418
419 private FileItemAssemblyPhase createPhase( final Logger logger )
420 {
421 final FileItemAssemblyPhase phase = new FileItemAssemblyPhase();
422 phase.enableLogging( logger );
423
424 return phase;
425 }
426
427 private final class MockAndControlForArchiver
428 {
429 Archiver archiver;
430
431 MockControl control;
432
433 public MockAndControlForArchiver( final MockManager mockManager )
434 {
435 control = MockControl.createControl( Archiver.class );
436 mockManager.add( control );
437
438 archiver = (Archiver) control.getMock();
439 }
440
441 public void expectAddFile( final File file, final String outputLocation, final int fileMode )
442 {
443 try
444 {
445 archiver.addFile( file, outputLocation, fileMode );
446 }
447 catch ( final ArchiverException e )
448 {
449 Assert.fail( "Should never happen." );
450 }
451 }
452 }
453
454 private final class MockAndControlForConfigSource
455 {
456 AssemblerConfigurationSource configSource;
457
458 MockControl control;
459
460 public MockAndControlForConfigSource( final MockManager mockManager )
461 {
462 control = MockControl.createControl( AssemblerConfigurationSource.class );
463 mockManager.add( control );
464
465 configSource = (AssemblerConfigurationSource) control.getMock();
466
467 configSource.getMavenSession();
468 control.setReturnValue( null, MockControl.ZERO_OR_MORE );
469 }
470
471 public void expectGetProject( final MavenProject project )
472 {
473 configSource.getProject();
474 control.setReturnValue( project, MockControl.ONE_OR_MORE );
475 }
476
477 public void expectGetFinalName( final String finalName )
478 {
479 configSource.getFinalName();
480 control.setReturnValue( finalName, MockControl.ONE_OR_MORE );
481 }
482
483 public void expectGetTemporaryRootDirectory( final File tempRoot )
484 {
485 configSource.getTemporaryRootDirectory();
486 control.setReturnValue( tempRoot, MockControl.ONE_OR_MORE );
487 }
488
489 public void expectGetBasedir( final File basedir )
490 {
491 configSource.getBasedir();
492 control.setReturnValue( basedir, MockControl.ONE_OR_MORE );
493 }
494
495 public void expectGetEncoding( )
496 {
497 configSource.getEncoding();
498 control.setReturnValue( "UTF-8", MockControl.ONE_OR_MORE );
499 }
500 }
501
502 private final class MockAndControlForLogger
503 {
504 Logger logger;
505
506 MockControl control;
507
508 public MockAndControlForLogger( final MockManager mockManager )
509 {
510 control = MockControl.createControl( Logger.class );
511 mockManager.add( control );
512
513 logger = (Logger) control.getMock();
514 }
515 }
516
517 }