View Javadoc
1   /*
2    *   Copyright (C) Christian Schulte <cs@schulte.it>, 2005-206
3    *   All rights reserved.
4    *
5    *   Redistribution and use in source and binary forms, with or without
6    *   modification, are permitted provided that the following conditions
7    *   are met:
8    *
9    *     o Redistributions of source code must retain the above copyright
10   *       notice, this list of conditions and the following disclaimer.
11   *
12   *     o Redistributions in binary form must reproduce the above copyright
13   *       notice, this list of conditions and the following disclaimer in
14   *       the documentation and/or other materials provided with the
15   *       distribution.
16   *
17   *   THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
18   *   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
19   *   AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
20   *   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,
21   *   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22   *   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23   *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24   *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25   *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26   *   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27   *
28   *   $JOMC: SourceFileProcessorTest.java 5043 2015-05-27 07:03:39Z schulte $
29   *
30   */
31  package org.jomc.tools.test;
32  
33  import java.io.File;
34  import java.io.FileInputStream;
35  import java.io.FileOutputStream;
36  import java.io.IOException;
37  import java.io.InputStream;
38  import java.io.OutputStream;
39  import org.apache.commons.io.IOUtils;
40  import org.jomc.model.Implementation;
41  import org.jomc.model.Module;
42  import org.jomc.model.Specification;
43  import org.jomc.modlet.Model;
44  import org.jomc.tools.SourceFileProcessor;
45  import org.jomc.util.SectionEditor;
46  import org.junit.Test;
47  import static org.junit.Assert.assertEquals;
48  import static org.junit.Assert.assertFalse;
49  import static org.junit.Assert.assertNotNull;
50  import static org.junit.Assert.assertNull;
51  import static org.junit.Assert.assertTrue;
52  import static org.junit.Assert.fail;
53  
54  /**
55   * Test cases for class {@code org.jomc.tools.SourceFileProcessor} implementations.
56   *
57   * @author <a href="mailto:cs@schulte.it">Christian Schulte</a>
58   * @version $JOMC: SourceFileProcessorTest.java 5043 2015-05-27 07:03:39Z schulte $
59   */
60  public class SourceFileProcessorTest extends JomcToolTest
61  {
62  
63      /**
64       * Constant to prefix relative resource names with.
65       */
66      private static final String ABSOLUTE_RESOURCE_NAME_PREFIX = "/org/jomc/tools/test/";
67  
68      /**
69       * Creates a new {@code SourceFileProcessorTest} instance.
70       */
71      public SourceFileProcessorTest()
72      {
73          super();
74      }
75  
76      /**
77       * {@inheritDoc}
78       */
79      @Override
80      public SourceFileProcessor getJomcTool()
81      {
82          return (SourceFileProcessor) super.getJomcTool();
83      }
84  
85      /**
86       * {@inheritDoc}
87       */
88      @Override
89      protected SourceFileProcessor newJomcTool()
90      {
91          return new SourceFileProcessor();
92      }
93  
94      @Test
95      @SuppressWarnings( "deprecation" )
96      public final void testSourceFileProcessorNullPointerException() throws Exception
97      {
98          try
99          {
100             this.getJomcTool().getSourceFileType( (Specification) null );
101             fail( "Expected NullPointerException not thrown." );
102         }
103         catch ( final NullPointerException e )
104         {
105             assertNullPointerException( e );
106         }
107 
108         try
109         {
110             this.getJomcTool().getSourceFileType( (Implementation) null );
111             fail( "Expected NullPointerException not thrown." );
112         }
113         catch ( final NullPointerException e )
114         {
115             assertNullPointerException( e );
116         }
117 
118         try
119         {
120             this.getJomcTool().getSourceFilesType( (Specification) null );
121             fail( "Expected NullPointerException not thrown." );
122         }
123         catch ( final NullPointerException e )
124         {
125             assertNullPointerException( e );
126         }
127 
128         try
129         {
130             this.getJomcTool().getSourceFilesType( (Implementation) null );
131             fail( "Expected NullPointerException not thrown." );
132         }
133         catch ( final NullPointerException e )
134         {
135             assertNullPointerException( e );
136         }
137 
138         try
139         {
140             this.getJomcTool().getSourceFileEditor( (Specification) null );
141             fail( "Expected NullPointerException not thrown." );
142         }
143         catch ( final NullPointerException e )
144         {
145             assertNullPointerException( e );
146         }
147 
148         try
149         {
150             this.getJomcTool().getSourceFileEditor( (Implementation) null );
151             fail( "Expected NullPointerException not thrown." );
152         }
153         catch ( final NullPointerException e )
154         {
155             assertNullPointerException( e );
156         }
157 
158         try
159         {
160             this.getJomcTool().manageSourceFiles( null );
161             fail( "Expected NullPointerException not thrown." );
162         }
163         catch ( final NullPointerException e )
164         {
165             assertNullPointerException( e );
166         }
167 
168         try
169         {
170             this.getJomcTool().manageSourceFiles( (Implementation) null, new File( "/" ) );
171             fail( "Expected NullPointerException not thrown." );
172         }
173         catch ( final NullPointerException e )
174         {
175             assertNullPointerException( e );
176         }
177 
178         try
179         {
180             this.getJomcTool().manageSourceFiles( new Implementation(), null );
181             fail( "Expected NullPointerException not thrown." );
182         }
183         catch ( final NullPointerException e )
184         {
185             assertNullPointerException( e );
186         }
187 
188         try
189         {
190             this.getJomcTool().manageSourceFiles( (Module) null, new File( "/" ) );
191             fail( "Expected NullPointerException not thrown." );
192         }
193         catch ( final NullPointerException e )
194         {
195             assertNullPointerException( e );
196         }
197 
198         try
199         {
200             this.getJomcTool().manageSourceFiles( new Module(), null );
201             fail( "Expected NullPointerException not thrown." );
202         }
203         catch ( final NullPointerException e )
204         {
205             assertNullPointerException( e );
206         }
207 
208         try
209         {
210             this.getJomcTool().manageSourceFiles( (Specification) null, new File( "/" ) );
211             fail( "Expected NullPointerException not thrown." );
212         }
213         catch ( final NullPointerException e )
214         {
215             assertNullPointerException( e );
216         }
217 
218         try
219         {
220             this.getJomcTool().manageSourceFiles( new Specification(), null );
221             fail( "Expected NullPointerException not thrown." );
222         }
223         catch ( final NullPointerException e )
224         {
225             assertNullPointerException( e );
226         }
227     }
228 
229     @Test
230     public final void testSourceFileProcessorNotNull() throws Exception
231     {
232         assertNotNull( this.getJomcTool().getSourceFilesType(
233             this.getJomcTool().getModules().getImplementation( "Implementation" ) ) );
234 
235         assertNotNull( this.getJomcTool().getSourceFilesType(
236             this.getJomcTool().getModules().getSpecification( "Specification" ) ) );
237 
238         assertNotNull( this.getJomcTool().getSourceFileEditor() );
239     }
240 
241     @Test
242     public final void testManageSources() throws Exception
243     {
244         this.getJomcTool().setInputEncoding( this.getResourceEncoding() );
245         this.getJomcTool().setOutputEncoding( this.getResourceEncoding() );
246 
247         final File nonExistingDirectory = this.getNextOutputDirectory();
248 
249         try
250         {
251             this.getJomcTool().manageSourceFiles( nonExistingDirectory );
252             fail( "Expected IOException not thrown." );
253         }
254         catch ( final IOException e )
255         {
256             assertNotNull( e.getMessage() );
257             System.out.println( e );
258         }
259 
260         try
261         {
262             this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getModule( "Module" ),
263                                                   nonExistingDirectory );
264 
265             fail( "Expected IOException not thrown." );
266         }
267         catch ( final IOException e )
268         {
269             assertNotNull( e.getMessage() );
270             System.out.println( e );
271         }
272 
273         try
274         {
275             this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
276                                                   nonExistingDirectory );
277 
278             fail( "Expected IOException not thrown." );
279         }
280         catch ( final IOException e )
281         {
282             assertNotNull( e.getMessage() );
283             System.out.println( e );
284         }
285 
286         try
287         {
288             this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getSpecification( "Specification" ),
289                                                   nonExistingDirectory );
290 
291             fail( "Expected IOException not thrown." );
292         }
293         catch ( final IOException e )
294         {
295             assertNotNull( e.getMessage() );
296             System.out.println( e );
297         }
298 
299         File sourcesDirectory = this.getNextOutputDirectory();
300         assertTrue( sourcesDirectory.mkdirs() );
301         this.getJomcTool().manageSourceFiles( sourcesDirectory );
302         this.getJomcTool().manageSourceFiles( sourcesDirectory );
303 
304         sourcesDirectory = this.getNextOutputDirectory();
305         assertTrue( sourcesDirectory.mkdirs() );
306         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getModule( "Module" ),
307                                               sourcesDirectory );
308 
309         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getModule( "Module" ),
310                                               sourcesDirectory );
311 
312         final File implementationDirectory = this.getNextOutputDirectory();
313         final File implementationSourceFile = new File( implementationDirectory, "Implementation.java" );
314         assertTrue( implementationDirectory.mkdirs() );
315         long implementationSourceFileLength;
316 
317         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
318                                               implementationDirectory );
319 
320         implementationSourceFileLength = implementationSourceFile.length();
321         assertTrue( implementationSourceFile.exists() );
322 
323         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
324                                               implementationDirectory );
325 
326         assertTrue( implementationSourceFile.exists() );
327         assertEquals( implementationSourceFileLength, implementationSourceFile.length() );
328 
329         this.getJomcTool().getTemplateParameters().put( "with-assertions", Boolean.FALSE );
330         this.getJomcTool().getTemplateParameters().put( "with-author-copyright", Boolean.FALSE );
331         this.getJomcTool().getTemplateParameters().put( "with-editor-fold", Boolean.FALSE );
332         this.getJomcTool().getTemplateParameters().put( "with-javadoc", Boolean.FALSE );
333         this.getJomcTool().getTemplateParameters().put( "with-javadoc-author", Boolean.FALSE );
334         this.getJomcTool().getTemplateParameters().put( "with-javadoc-version", Boolean.FALSE );
335         this.getJomcTool().getTemplateParameters().put( "with-jsr-250", Boolean.FALSE );
336         this.getJomcTool().getTemplateParameters().put( "with-project-name", null );
337         this.getJomcTool().getTemplateParameters().put( "with-revision-keyword", null );
338         this.getJomcTool().getTemplateParameters().put( "with-suppress-warnings", null );
339         this.getJomcTool().getTemplateParameters().put( "with-vendor-copyright", null );
340 
341         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
342                                               implementationDirectory );
343 
344         assertTrue( implementationSourceFile.exists() );
345         assertTrue( implementationSourceFile.length() < implementationSourceFileLength );
346 
347         this.getJomcTool().getTemplateParameters().clear();
348 
349         this.getJomcTool().setTemplateProfile( "jomc-java-bundles" );
350 
351         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
352                                               implementationDirectory );
353 
354         this.getJomcTool().getTemplateParameters().put( "with-assertions", Boolean.FALSE );
355         this.getJomcTool().getTemplateParameters().put( "with-author-copyright", Boolean.FALSE );
356         this.getJomcTool().getTemplateParameters().put( "with-editor-fold", Boolean.FALSE );
357         this.getJomcTool().getTemplateParameters().put( "with-javadoc", Boolean.FALSE );
358         this.getJomcTool().getTemplateParameters().put( "with-javadoc-author", Boolean.FALSE );
359         this.getJomcTool().getTemplateParameters().put( "with-javadoc-version", Boolean.FALSE );
360         this.getJomcTool().getTemplateParameters().put( "with-jsr-250", Boolean.FALSE );
361         this.getJomcTool().getTemplateParameters().put( "with-project-name", null );
362         this.getJomcTool().getTemplateParameters().put( "with-revision-keyword", null );
363         this.getJomcTool().getTemplateParameters().put( "with-suppress-warnings", null );
364         this.getJomcTool().getTemplateParameters().put( "with-vendor-copyright", null );
365 
366         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
367                                               implementationDirectory );
368 
369         this.getJomcTool().getTemplateParameters().clear();
370 
371         this.getJomcTool().setTemplateProfile( null );
372 
373         this.getJomcTool().manageSourceFiles(
374             this.getJomcTool().getModules().getImplementation( "ImplementationWithSourceFilesModel" ),
375             implementationDirectory );
376 
377         this.getJomcTool().manageSourceFiles(
378             this.getJomcTool().getModules().getImplementation( "ImplementationWithSourceFilesModel" ),
379             implementationDirectory );
380 
381         final File specificationDirectory = this.getNextOutputDirectory();
382         assertTrue( specificationDirectory.mkdirs() );
383         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getSpecification( "Specification" ),
384                                               specificationDirectory );
385 
386         this.getJomcTool().getTemplateParameters().put( "with-assertions", Boolean.FALSE );
387         this.getJomcTool().getTemplateParameters().put( "with-author-copyright", Boolean.FALSE );
388         this.getJomcTool().getTemplateParameters().put( "with-editor-fold", Boolean.FALSE );
389         this.getJomcTool().getTemplateParameters().put( "with-javadoc", Boolean.FALSE );
390         this.getJomcTool().getTemplateParameters().put( "with-javadoc-author", Boolean.FALSE );
391         this.getJomcTool().getTemplateParameters().put( "with-javadoc-version", Boolean.FALSE );
392         this.getJomcTool().getTemplateParameters().put( "with-jsr-250", Boolean.FALSE );
393         this.getJomcTool().getTemplateParameters().put( "with-project-name", null );
394         this.getJomcTool().getTemplateParameters().put( "with-revision-keyword", null );
395         this.getJomcTool().getTemplateParameters().put( "with-suppress-warnings", null );
396         this.getJomcTool().getTemplateParameters().put( "with-vendor-copyright", null );
397 
398         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getSpecification( "Specification" ),
399                                               specificationDirectory );
400 
401         this.getJomcTool().getTemplateParameters().clear();
402 
403         this.getJomcTool().manageSourceFiles(
404             this.getJomcTool().getModules().getSpecification( "SpecificationWithSourceFilesModel" ),
405             specificationDirectory );
406 
407         this.getJomcTool().manageSourceFiles(
408             this.getJomcTool().getModules().getSpecification( "SpecificationWithSourceFilesModel" ),
409             specificationDirectory );
410 
411         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "IllegalImplementationSource.java.txt",
412                            new File( implementationDirectory, "Implementation.java" ) );
413 
414         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "IllegalSpecificationSource.java.txt",
415                            new File( specificationDirectory, "Specification.java" ) );
416 
417         try
418         {
419             this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
420                                                   implementationDirectory );
421 
422             fail( "Expected IOException not thrown." );
423         }
424         catch ( final IOException e )
425         {
426             assertNotNull( e.getMessage() );
427             System.out.println( e.toString() );
428         }
429 
430         try
431         {
432             this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getSpecification( "Specification" ),
433                                                   specificationDirectory );
434 
435             fail( "Expected IOException not thrown." );
436         }
437         catch ( final IOException e )
438         {
439             assertNotNull( e.getMessage() );
440             System.out.println( e.toString() );
441         }
442 
443         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "EmptyImplementationSource.java.txt",
444                            new File( implementationDirectory, "Implementation.java" ) );
445 
446         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "EmptySpecificationSource.java.txt",
447                            new File( specificationDirectory, "Specification.java" ) );
448 
449         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
450                                               implementationDirectory );
451 
452         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getSpecification( "Specification" ),
453                                               specificationDirectory );
454 
455         this.getJomcTool().setTemplateProfile( "DOES_NOT_EXIST" );
456 
457         sourcesDirectory = this.getNextOutputDirectory();
458         assertTrue( sourcesDirectory.mkdirs() );
459         this.getJomcTool().manageSourceFiles( sourcesDirectory );
460 
461         sourcesDirectory = this.getNextOutputDirectory();
462         assertTrue( sourcesDirectory.mkdirs() );
463         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getModule( "Module" ), sourcesDirectory );
464 
465         sourcesDirectory = this.getNextOutputDirectory();
466         assertTrue( sourcesDirectory.mkdirs() );
467         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
468                                               sourcesDirectory );
469 
470         sourcesDirectory = this.getNextOutputDirectory();
471         assertTrue( sourcesDirectory.mkdirs() );
472         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getSpecification( "Specification" ),
473                                               sourcesDirectory );
474 
475         this.getJomcTool().setInputEncoding( null );
476         this.getJomcTool().setOutputEncoding( null );
477     }
478 
479     @Test
480     public final void testMandatorySections() throws Exception
481     {
482         final SectionEditor editor = new SectionEditor();
483         final File specificationDirectory = this.getNextOutputDirectory();
484         final File implementationDirectory = this.getNextOutputDirectory();
485 
486         assertTrue( specificationDirectory.mkdirs() );
487         assertTrue( implementationDirectory.mkdirs() );
488 
489         this.getJomcTool().setInputEncoding( this.getResourceEncoding() );
490         this.getJomcTool().setOutputEncoding( this.getResourceEncoding() );
491 
492         File f = new File( implementationDirectory, "Implementation.java" );
493         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "ImplementationWithoutAnnotationsSection.java.txt", f );
494         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
495                                               implementationDirectory );
496 
497         String edited = this.toString( f );
498         editor.edit( edited );
499         assertTrue( editor.isSectionPresent( "Annotations" ) );
500 
501         f = new File( implementationDirectory, "Implementation.java" );
502         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "ImplementationWithoutDependenciesSection.java.txt", f );
503         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
504                                               implementationDirectory );
505 
506         edited = this.toString( f );
507         editor.edit( edited );
508         assertTrue( editor.isSectionPresent( "Dependencies" ) );
509 
510         f = new File( implementationDirectory, "Implementation.java" );
511         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "ImplementationWithoutMessagesSection.java.txt", f );
512         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
513                                               implementationDirectory );
514 
515         edited = this.toString( f );
516         editor.edit( edited );
517         assertTrue( editor.isSectionPresent( "Messages" ) );
518 
519         f = new File( implementationDirectory, "Implementation.java" );
520         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "ImplementationWithoutPropertiesSection.java.txt", f );
521         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
522                                               implementationDirectory );
523 
524         edited = this.toString( f );
525         editor.edit( edited );
526         assertTrue( editor.isSectionPresent( "Properties" ) );
527 
528         f = new File( implementationDirectory, "ImplementationOfSpecification.java" );
529         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX
530                                + "ImplementationOfSpecificationWithoutConstructorsSection.java.txt", f );
531 
532         this.getJomcTool().manageSourceFiles(
533             this.getJomcTool().getModules().getImplementation( "ImplementationOfSpecification" ),
534             implementationDirectory );
535 
536         edited = this.toString( f );
537         editor.edit( edited );
538         assertTrue( editor.isSectionPresent( "Constructors" ) );
539 
540         f = new File( specificationDirectory, "Specification.java" );
541         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "SpecificationWithoutAnnotationsSection.java.txt", f );
542         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getSpecification( "Specification" ),
543                                               specificationDirectory );
544 
545         edited = this.toString( f );
546         editor.edit( edited );
547         assertTrue( editor.isSectionPresent( "Annotations" ) );
548 
549         this.getJomcTool().setInputEncoding( null );
550         this.getJomcTool().setOutputEncoding( null );
551     }
552 
553     @Test
554     public final void testOptionalSections() throws Exception
555     {
556         final SectionEditor editor = new SectionEditor();
557         final File implementationDirectory = this.getNextOutputDirectory();
558         final File specificationDirectory = this.getNextOutputDirectory();
559 
560         assertTrue( specificationDirectory.mkdirs() );
561         assertTrue( implementationDirectory.mkdirs() );
562 
563         this.getJomcTool().setInputEncoding( this.getResourceEncoding() );
564         this.getJomcTool().setOutputEncoding( this.getResourceEncoding() );
565 
566         File f = new File( implementationDirectory, "Implementation.java" );
567         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "ImplementationWithoutConstructorsSection.java.txt", f );
568         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
569                                               implementationDirectory );
570 
571         String edited = this.toString( f );
572         editor.edit( edited );
573         assertFalse( editor.isSectionPresent( "Constructors" ) );
574         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "ImplementationWithoutDefaultConstructorSection.java.txt",
575                            f );
576 
577         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
578                                               implementationDirectory );
579 
580         edited = this.toString( f );
581         editor.edit( edited );
582         assertTrue( editor.isSectionPresent( "Constructors" ) );
583         assertTrue( editor.isSectionPresent( "Default Constructor" ) );
584         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "ImplementationWithoutDocumentationSection.java.txt", f );
585         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
586                                               implementationDirectory );
587 
588         edited = this.toString( f );
589         editor.edit( edited );
590         assertFalse( editor.isSectionPresent( "Documentation" ) );
591         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "ImplementationWithoutLicenseSection.java.txt", f );
592         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getImplementation( "Implementation" ),
593                                               implementationDirectory );
594 
595         edited = this.toString( f );
596         editor.edit( edited );
597         assertFalse( editor.isSectionPresent( "License Header" ) );
598 
599         f = new File( specificationDirectory, "Specification.java" );
600         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "SpecificationWithoutDocumentationSection.java.txt", f );
601         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getSpecification( "Specification" ),
602                                               specificationDirectory );
603 
604         edited = this.toString( f );
605         editor.edit( edited );
606         assertFalse( editor.isSectionPresent( "Documentation" ) );
607         this.copyResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "SpecificationWithoutLicenseSection.java.txt", f );
608         this.getJomcTool().manageSourceFiles( this.getJomcTool().getModules().getSpecification( "Specification" ),
609                                               specificationDirectory );
610 
611         edited = this.toString( f );
612         editor.edit( edited );
613         assertFalse( editor.isSectionPresent( "License Header" ) );
614 
615         this.getJomcTool().setInputEncoding( null );
616         this.getJomcTool().setOutputEncoding( null );
617     }
618 
619     @Test
620     public final void testSourceFileEditor() throws Exception
621     {
622         assertNotNull( this.getJomcTool().getSourceFileEditor() );
623         this.getJomcTool().setSourceFileEditor( null );
624         assertNotNull( this.getJomcTool().getSourceFileEditor() );
625     }
626 
627     @Test
628     public final void testCopyConstructor() throws Exception
629     {
630         try
631         {
632             new SourceFileProcessor( null );
633             fail( "Expected NullPointerException not thrown." );
634         }
635         catch ( final NullPointerException e )
636         {
637             assertNotNull( e.getMessage() );
638             System.out.println( e.toString() );
639         }
640 
641         new SourceFileProcessor( this.getJomcTool() );
642     }
643 
644     @Test
645     public final void testSourceFileProcessorModelObjectsNotFound() throws Exception
646     {
647         final File tmpDir = new File( System.getProperty( "java.io.tmpdir", "/tmp" ) );
648         final Module m = new Module();
649         m.setName( "DOES_NOT_EXIST" );
650 
651         final Specification s = new Specification();
652         s.setIdentifier( "DOES_NOT_EXIST)" );
653 
654         final Implementation i = new Implementation();
655         i.setIdentifier( "DOES_NOT_EXIST" );
656 
657         final Model oldModel = this.getJomcTool().getModel();
658         this.getJomcTool().setModel( null );
659 
660         assertNull( this.getJomcTool().getSourceFilesType( s ) );
661         assertNull( this.getJomcTool().getSourceFilesType( i ) );
662 
663         this.getJomcTool().manageSourceFiles( tmpDir );
664         this.getJomcTool().manageSourceFiles( m, tmpDir );
665         this.getJomcTool().manageSourceFiles( s, tmpDir );
666         this.getJomcTool().manageSourceFiles( i, tmpDir );
667 
668         this.getJomcTool().setModel( oldModel );
669     }
670 
671     private void copyResource( final String resourceName, final File file ) throws IOException
672     {
673         assertTrue( resourceName.startsWith( "/" ) );
674 
675         InputStream in = null;
676         boolean suppressExceptionOnClose = true;
677 
678         try
679         {
680             in = this.getClass().getResourceAsStream( resourceName );
681             assertNotNull( "Resource '" + resourceName + "' not found.", in );
682             OutputStream out = null;
683 
684             try
685             {
686                 out = new FileOutputStream( file );
687                 IOUtils.copy( in, out );
688                 suppressExceptionOnClose = false;
689             }
690             finally
691             {
692                 try
693                 {
694                     if ( out != null )
695                     {
696                         out.close();
697                     }
698                 }
699                 catch ( final IOException e )
700                 {
701                     if ( !suppressExceptionOnClose )
702                     {
703                         throw e;
704                     }
705                 }
706             }
707         }
708         finally
709         {
710             try
711             {
712                 if ( in != null )
713                 {
714                     in.close();
715                 }
716             }
717             catch ( final IOException e )
718             {
719                 if ( !suppressExceptionOnClose )
720                 {
721                     throw e;
722                 }
723             }
724         }
725     }
726 
727     private String toString( final File f ) throws IOException
728     {
729         InputStream in = null;
730         boolean suppressExceptionOnClose = true;
731 
732         try
733         {
734             in = new FileInputStream( f );
735             final String str = IOUtils.toString( in, this.getResourceEncoding() );
736             suppressExceptionOnClose = false;
737             return str;
738         }
739         finally
740         {
741             try
742             {
743                 if ( in != null )
744                 {
745                     in.close();
746                 }
747             }
748             catch ( final IOException e )
749             {
750                 if ( !suppressExceptionOnClose )
751                 {
752                     throw e;
753                 }
754             }
755         }
756     }
757 
758 }