1 package org.apache.maven.plugin.assembly.utils;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.FileReader;
24 import java.io.IOException;
25 import java.io.StringReader;
26 import java.io.StringWriter;
27
28 import junit.framework.TestCase;
29
30 import org.apache.maven.plugin.assembly.archive.ArchiveExpansionException;
31 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
32 import org.apache.maven.plugin.assembly.testutils.MockManager;
33 import org.apache.maven.plugin.assembly.testutils.TestFileManager;
34 import org.codehaus.plexus.archiver.ArchiverException;
35 import org.codehaus.plexus.archiver.UnArchiver;
36 import org.codehaus.plexus.archiver.manager.ArchiverManager;
37 import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
38 import org.codehaus.plexus.util.IOUtil;
39 import org.easymock.MockControl;
40
41 public class AssemblyFileUtilsTest
42 extends TestCase
43 {
44
45 private TestFileManager fileManager = new TestFileManager( "file-utils.test.", "" );
46
47 public void tearDown()
48 throws IOException
49 {
50 fileManager.cleanUp();
51 }
52
53 public void testUnpack_ShouldSetSourceAndDestinationAndCallExtract()
54 throws IOException, ArchiveExpansionException, NoSuchArchiverException
55 {
56 MockManager mockManager = new MockManager();
57
58 File source = fileManager.createTempFile();
59 File destDir = fileManager.createTempDir();
60
61 MockControl unarchiverCtl = MockControl.createControl( UnArchiver.class );
62 mockManager.add( unarchiverCtl );
63
64 UnArchiver unarchiver = (UnArchiver) unarchiverCtl.getMock();
65
66 MockControl archiverManagerCtl = MockControl.createControl( ArchiverManager.class );
67 mockManager.add( archiverManagerCtl );
68
69 ArchiverManager archiverManager = (ArchiverManager) archiverManagerCtl.getMock();
70
71 try
72 {
73 archiverManager.getUnArchiver( source );
74 archiverManagerCtl.setReturnValue( unarchiver );
75 }
76 catch ( NoSuchArchiverException e )
77 {
78 fail( "Should never happen." );
79 }
80
81 unarchiver.setSourceFile( source );
82 unarchiver.setDestDirectory( destDir );
83
84 try
85 {
86 unarchiver.extract();
87 }
88 catch ( ArchiverException e )
89 {
90 fail( "Should never happen." );
91 }
92
93 mockManager.replayAll();
94
95 AssemblyFileUtils.unpack( source, destDir, archiverManager );
96
97 mockManager.verifyAll();
98 }
99
100 public void testGetLineEndingChars_ShouldReturnDosLineEnding()
101 throws AssemblyFormattingException
102 {
103 assertEquals( "\r\n", AssemblyFileUtils.getLineEndingCharacters( "dos" ) );
104 assertEquals( "\r\n", AssemblyFileUtils.getLineEndingCharacters( "crlf" ) );
105 }
106
107 public void testGetLineEndingChars_ShouldReturnUnixLineEnding()
108 throws AssemblyFormattingException
109 {
110 assertEquals( "\n", AssemblyFileUtils.getLineEndingCharacters( "unix" ) );
111 assertEquals( "\n", AssemblyFileUtils.getLineEndingCharacters( "lf" ) );
112 }
113
114 public void testGetLineEndingChars_ShouldReturnNullLineEnding()
115 throws AssemblyFormattingException
116 {
117 assertNull( AssemblyFileUtils.getLineEndingCharacters( "keep" ) );
118 }
119
120 public void testGetLineEndingChars_ShouldThrowFormattingExceptionWithInvalidHint()
121 {
122 try
123 {
124 AssemblyFileUtils.getLineEndingCharacters( "invalid" );
125
126 fail( "Invalid line-ending hint should throw a formatting exception." );
127 }
128 catch ( AssemblyFormattingException e )
129 {
130 }
131 }
132
133 public void testConvertLineEndings_ShouldReplaceLFWithCRLF()
134 throws IOException
135 {
136 String test = "This is a \ntest.";
137 String check = "This is a \r\ntest.";
138
139 testConversion( test, check, "\r\n" );
140 }
141
142 public void testConvertLineEndings_ShouldReplaceCRLFWithLF()
143 throws IOException
144 {
145 String test = "This is a \r\ntest.";
146 String check = "This is a \ntest.";
147
148 testConversion( test, check, "\n" );
149 }
150
151 public void testConvertLineEndings_ShouldReplaceLFWithLF()
152 throws IOException
153 {
154 String test = "This is a \ntest.";
155 String check = "This is a \ntest.";
156
157 testConversion( test, check, "\n" );
158 }
159
160 public void testConvertLineEndings_ShouldReplaceCRLFWithCRLF()
161 throws IOException
162 {
163 String test = "This is a \r\ntest.";
164 String check = "This is a \r\ntest.";
165
166 testConversion( test, check, "\r\n" );
167 }
168
169 private void testConversion( String test, String check, String lineEndingChars )
170 throws IOException
171 {
172 File dest = File.createTempFile( "line-conversion-test.", "" );
173 dest.deleteOnExit();
174
175
176 AssemblyFileUtils.convertLineEndings( new StringReader( test ), dest, lineEndingChars, null );
177
178 FileReader reader = null;
179 StringWriter writer = new StringWriter();
180
181 try
182 {
183 reader = new FileReader( dest );
184
185 IOUtil.copy( reader, writer );
186 }
187 finally
188 {
189 IOUtil.close( reader );
190 }
191
192 assertEquals( check, writer.toString() );
193 }
194
195 }