View Javadoc
1   /*
2    *   Copyright (C) 2005 Christian Schulte <cs@schulte.it>
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: JomcToolTest.java 5299 2016-08-30 01:50:13Z schulte $
29   *
30   */
31  package org.jomc.tools.test;
32  
33  import java.io.File;
34  import java.io.FileNotFoundException;
35  import java.io.FileOutputStream;
36  import java.io.IOException;
37  import java.io.OutputStream;
38  import java.net.URL;
39  import java.text.ParseException;
40  import java.util.Calendar;
41  import java.util.Locale;
42  import java.util.Properties;
43  import java.util.concurrent.ExecutorService;
44  import java.util.concurrent.atomic.AtomicInteger;
45  import java.util.logging.Level;
46  import org.apache.commons.io.FileUtils;
47  import org.jomc.model.Argument;
48  import org.jomc.model.Dependency;
49  import org.jomc.model.Implementation;
50  import org.jomc.model.JavaIdentifier;
51  import org.jomc.model.Message;
52  import org.jomc.model.ModelObject;
53  import org.jomc.model.Module;
54  import org.jomc.model.Modules;
55  import org.jomc.model.Property;
56  import org.jomc.model.Specification;
57  import org.jomc.model.SpecificationReference;
58  import org.jomc.model.Text;
59  import org.jomc.model.Texts;
60  import org.jomc.model.modlet.DefaultModelProvider;
61  import org.jomc.model.modlet.ModelHelper;
62  import org.jomc.modlet.Model;
63  import org.jomc.modlet.ModelContext;
64  import org.jomc.modlet.ModelContextFactory;
65  import org.jomc.modlet.ModelException;
66  import org.jomc.modlet.ModelValidationReport;
67  import org.jomc.tools.JomcTool;
68  import org.junit.After;
69  import org.junit.Test;
70  import static org.junit.Assert.assertEquals;
71  import static org.junit.Assert.assertNotNull;
72  import static org.junit.Assert.assertNull;
73  import static org.junit.Assert.assertTrue;
74  import static org.junit.Assert.fail;
75  
76  /**
77   * Test cases for class {@code org.jomc.tools.JomcTool}.
78   *
79   * @author <a href="mailto:cs@schulte.it">Christian Schulte</a>
80   * @version $JOMC: JomcToolTest.java 5299 2016-08-30 01:50:13Z schulte $
81   */
82  public class JomcToolTest
83  {
84  
85      /**
86       * Constant for the name of the system property holding the name of the encoding of resources backing the test.
87       */
88      private static final String RESOURCE_ENCODING_PROPERTY_NAME = "jomc.test.resourceEncoding";
89  
90      /**
91       * Constant for the name of the system property holding the output directory for the test.
92       */
93      private static final String OUTPUT_DIRECTORY_PROPERTY_NAME = "jomc.test.outputDirectory";
94  
95      /**
96       * The {@code JomcTool} instance tests are performed with.
97       */
98      private volatile JomcTool jomcTool;
99  
100     /**
101      * The {@code ModelContext} of the instance.
102      */
103     private volatile ModelContext modelContext;
104 
105     /**
106      * The {@code ExecutorService} backing the tests.
107      */
108     private volatile ExecutorService executorService;
109 
110     /**
111      * The {@code Model} of the instance.
112      */
113     private volatile Model model;
114 
115     /**
116      * The name of the encoding to use when reading or writing resources.
117      */
118     private volatile String resourceEncoding;
119 
120     /**
121      * The output directory of the instance.
122      */
123     private volatile File outputDirectory;
124 
125     /**
126      * Serial number of next output directories.
127      */
128     private final AtomicInteger outputDirectoryId = new AtomicInteger( 0 );
129 
130     /**
131      * Creates a new {@code JomcToolTest} instance.
132      */
133     public JomcToolTest()
134     {
135         super();
136     }
137 
138     /**
139      * Gets the name of the encoding used when reading resources.
140      *
141      * @return The name of the encoding used when reading resources.
142      *
143      * @see #setResourceEncoding(java.lang.String)
144      */
145     public final String getResourceEncoding()
146     {
147         if ( this.resourceEncoding == null )
148         {
149             this.resourceEncoding = System.getProperty( RESOURCE_ENCODING_PROPERTY_NAME );
150             assertNotNull( "Expected '" + RESOURCE_ENCODING_PROPERTY_NAME + "' system property not found.",
151                            this.resourceEncoding );
152 
153         }
154 
155         return this.resourceEncoding;
156     }
157 
158     /**
159      * Sets the name of the encoding to use when reading resources.
160      *
161      * @param value The new name of the encoding to use when reading resources or {@code null}.
162      *
163      * @see #getResourceEncoding()
164      */
165     public final void setResourceEncoding( final String value )
166     {
167         this.resourceEncoding = value;
168     }
169 
170     /**
171      * Gets the output directory of instance.
172      *
173      * @return The output directory of instance.
174      *
175      * @see #setOutputDirectory(java.io.File)
176      */
177     public final File getOutputDirectory()
178     {
179         if ( this.outputDirectory == null )
180         {
181             final String name = System.getProperty( OUTPUT_DIRECTORY_PROPERTY_NAME );
182             assertNotNull( "Expected '" + OUTPUT_DIRECTORY_PROPERTY_NAME + "' system property not found.", name );
183             this.outputDirectory = new File( new File( name ), this.getClass().getSimpleName() );
184             assertTrue( "Expected '" + OUTPUT_DIRECTORY_PROPERTY_NAME + "' system property to hold an absolute path.",
185                         this.outputDirectory.isAbsolute() );
186 
187             if ( !this.outputDirectory.exists() )
188             {
189                 assertTrue( this.outputDirectory.mkdirs() );
190             }
191         }
192 
193         return this.outputDirectory;
194     }
195 
196     /**
197      * Sets the output directory of instance.
198      *
199      * @param value The new output directory of instance or {@code null}.
200      *
201      * @see #getOutputDirectory()
202      */
203     public final void setOutputDirectory( final File value )
204     {
205         if ( value != null )
206         {
207             assertTrue( "Expected absolute 'outputDirectory'.", value.isAbsolute() );
208         }
209 
210         this.outputDirectory = value;
211     }
212 
213     /**
214      * Gets the next output directory of the instance.
215      *
216      * @return The next output directory of the instance.
217      */
218     public final File getNextOutputDirectory()
219     {
220         try
221         {
222             final File nextOutputDirectory =
223                 new File( this.getOutputDirectory(), Integer.toString( this.outputDirectoryId.incrementAndGet() ) );
224 
225             assertTrue( nextOutputDirectory.isAbsolute() );
226             if ( nextOutputDirectory.exists() )
227             {
228                 FileUtils.deleteDirectory( nextOutputDirectory );
229             }
230 
231             return nextOutputDirectory;
232         }
233         catch ( final IOException e )
234         {
235             throw new AssertionError( e );
236         }
237     }
238 
239     /**
240      * Gets the {@code JomcTool} instance tests are performed with.
241      *
242      * @return The {@code JomcTool} instance tests are performed with.
243      *
244      * @see #newJomcTool()
245      */
246     public JomcTool getJomcTool()
247     {
248         if ( this.jomcTool == null )
249         {
250             this.jomcTool = this.newJomcTool();
251             this.jomcTool.setExecutorService( this.getExecutorService() );
252             this.jomcTool.setModel( this.getModel() );
253             this.jomcTool.getListeners().add( new JomcTool.Listener()
254             {
255 
256                 @Override
257                 public void onLog( final Level level, final String message, final Throwable throwable )
258                 {
259                     super.onLog( level, message, throwable );
260                     System.out.println( "[" + level.getLocalizedName() + "] " + message );
261 
262                     if ( throwable != null )
263                     {
264                         throwable.printStackTrace( System.out );
265                     }
266                 }
267 
268             } );
269 
270         }
271 
272         return this.jomcTool;
273     }
274 
275     /**
276      * Creates a new {@code JomcTool} instance to test.
277      *
278      * @return A new {@code JomcTool} instance to test.
279      *
280      * @see #getJomcTool()
281      */
282     protected JomcTool newJomcTool()
283     {
284         return new JomcTool();
285     }
286 
287     /**
288      * Gets the {@code ModelContext} instance backing the test.
289      *
290      * @return The {@code ModelContext} instance backing the test.
291      *
292      * @see #newModelContext()
293      */
294     public ModelContext getModelContext()
295     {
296         if ( this.modelContext == null )
297         {
298             this.modelContext = this.newModelContext();
299             this.modelContext.setExecutorService( this.getExecutorService() );
300             this.modelContext.getListeners().add( new ModelContext.Listener()
301             {
302 
303                 @Override
304                 public void onLog( final Level level, String message, Throwable t )
305                 {
306                     super.onLog( level, message, t );
307                     System.out.println( "[" + level.getLocalizedName() + "] " + message );
308 
309                     if ( t != null )
310                     {
311                         t.printStackTrace( System.out );
312                     }
313                 }
314 
315             } );
316 
317         }
318 
319         return this.modelContext;
320     }
321 
322     /**
323      * Creates a new {@code ModelContext} instance backing the test.
324      *
325      * @return A new {@code ModelContext} instance backing the test.
326      *
327      * @see #getModelContext()
328      */
329     protected ModelContext newModelContext()
330     {
331         return ModelContextFactory.newInstance().newModelContext();
332     }
333 
334     /**
335      * Gets the {@code ExecutorService} backing the tests.
336      *
337      * @return The {@code ExecutorService} backing the tests.
338      *
339      * @see #newExecutorService()
340      * @since 1.10
341      */
342     public final ExecutorService getExecutorService()
343     {
344         if ( this.executorService == null )
345         {
346             this.executorService = this.newExecutorService();
347         }
348 
349         return this.executorService;
350     }
351 
352     /**
353      * Creates a new {@code ExecutorService} backing the tests.
354      *
355      * @return A new {@code ExecutorService} backing the tests, or {@code null}.
356      *
357      * @see #getExecutorService()
358      * @since 1.10
359      */
360     protected ExecutorService newExecutorService()
361     {
362         return null;
363     }
364 
365     /**
366      * Shuts down the {@code ExecutorService} backing the tests, if not {@code null}.
367      */
368     @After
369     public final void shutdown()
370     {
371         if ( this.executorService != null )
372         {
373             this.executorService.shutdown();
374             this.executorService = null;
375         }
376     }
377 
378     /**
379      * Gets the {@code Model} instance backing the test.
380      *
381      * @return The {@code Model} instance backing the test.
382      *
383      * @see #newModel()
384      */
385     public Model getModel()
386     {
387         if ( this.model == null )
388         {
389             this.model = this.newModel();
390         }
391 
392         return this.model;
393     }
394 
395     /**
396      * Creates a new {@code Model} instance backing the test.
397      *
398      * @return A new {@code Model} instance backing the test.
399      *
400      * @see #getModel()
401      */
402     protected Model newModel()
403     {
404         try
405         {
406             DefaultModelProvider.setDefaultModuleLocation( this.getClass().getPackage().getName().replace( '.', '/' )
407                                                                + "/jomc.xml" );
408 
409             Model m = this.getModelContext().findModel( ModelObject.MODEL_PUBLIC_ID );
410 
411             if ( m != null )
412             {
413                 final Modules modules = ModelHelper.getModules( m );
414 
415                 if ( modules != null )
416                 {
417                     final Module cp = modules.getClasspathModule( Modules.getDefaultClasspathModuleName(),
418                                                                   this.getClass().getClassLoader() );
419 
420                     if ( cp != null )
421                     {
422                         modules.getModule().add( cp );
423                     }
424                 }
425 
426                 m = this.getModelContext().processModel( m );
427 
428                 if ( m != null )
429                 {
430                     final ModelValidationReport validationReport = this.getModelContext().validateModel( m );
431 
432                     for ( int i = 0, s0 = validationReport.getDetails().size(); i < s0; i++ )
433                     {
434                         System.out.println( validationReport.getDetails().get( i ) );
435                     }
436 
437                     assertTrue( "Unexpected invalid '" + m.getIdentifier() + "' model.",
438                                 validationReport.isModelValid() );
439 
440                 }
441             }
442 
443             return m;
444         }
445         catch ( final ModelException e )
446         {
447             throw new AssertionError( e );
448         }
449         finally
450         {
451             DefaultModelProvider.setDefaultModuleLocation( null );
452         }
453     }
454 
455     @Test
456     @SuppressWarnings( "deprecation" )
457     public final void testJomcToolNullPointerException() throws Exception
458     {
459         assertNotNull( this.getJomcTool() );
460 
461         try
462         {
463             this.getJomcTool().getDisplayLanguage( null );
464             fail( "Expected NullPointerException not thrown." );
465         }
466         catch ( final NullPointerException e )
467         {
468             assertNullPointerException( e );
469         }
470 
471         try
472         {
473             this.getJomcTool().getImplementedJavaTypeNames( null, false );
474             fail( "Expected NullPointerException not thrown." );
475         }
476         catch ( final NullPointerException e )
477         {
478             assertNullPointerException( e );
479         }
480 
481         try
482         {
483             this.getJomcTool().getJavaClasspathLocation( (Implementation) null );
484             fail( "Expected NullPointerException not thrown." );
485         }
486         catch ( final NullPointerException e )
487         {
488             assertNullPointerException( e );
489         }
490 
491         try
492         {
493             this.getJomcTool().getJavaClasspathLocation( (Specification) null );
494             fail( "Expected NullPointerException not thrown." );
495         }
496         catch ( final NullPointerException e )
497         {
498             assertNullPointerException( e );
499         }
500 
501         try
502         {
503             this.getJomcTool().getJavaGetterMethodName( (Dependency) null );
504             fail( "Expected NullPointerException not thrown." );
505         }
506         catch ( final NullPointerException e )
507         {
508             assertNullPointerException( e );
509         }
510 
511         try
512         {
513             this.getJomcTool().getJavaGetterMethodName( (Message) null );
514             fail( "Expected NullPointerException not thrown." );
515         }
516         catch ( final NullPointerException e )
517         {
518             assertNullPointerException( e );
519         }
520 
521         try
522         {
523             this.getJomcTool().getJavaGetterMethodName( (Property) null );
524             fail( "Expected NullPointerException not thrown." );
525         }
526         catch ( final NullPointerException e )
527         {
528             assertNullPointerException( e );
529         }
530 
531         try
532         {
533             this.getJomcTool().getJavaMethodParameterName( (Argument) null );
534             fail( "Expected NullPointerException not thrown." );
535         }
536         catch ( final NullPointerException e )
537         {
538             assertNullPointerException( e );
539         }
540 
541         try
542         {
543             this.getJomcTool().getJavaMethodParameterName( (Dependency) null );
544             fail( "Expected NullPointerException not thrown." );
545         }
546         catch ( final NullPointerException e )
547         {
548             assertNullPointerException( e );
549         }
550 
551         try
552         {
553             this.getJomcTool().getJavaMethodParameterName( (Message) null );
554             fail( "Expected NullPointerException not thrown." );
555         }
556         catch ( final NullPointerException e )
557         {
558             assertNullPointerException( e );
559         }
560 
561         try
562         {
563             this.getJomcTool().getJavaMethodParameterName( (Property) null );
564             fail( "Expected NullPointerException not thrown." );
565         }
566         catch ( final NullPointerException e )
567         {
568             assertNullPointerException( e );
569         }
570 
571         try
572         {
573             this.getJomcTool().getJavaInterfaceNames( null, false );
574             fail( "Expected NullPointerException not thrown." );
575         }
576         catch ( final NullPointerException e )
577         {
578             assertNullPointerException( e );
579         }
580 
581         try
582         {
583             this.getJomcTool().getJavaModifierName( null, (Dependency) null );
584             fail( "Expected NullPointerException not thrown." );
585         }
586         catch ( final NullPointerException e )
587         {
588             assertNullPointerException( e );
589         }
590         try
591         {
592             this.getJomcTool().getJavaModifierName( new Implementation(), (Dependency) null );
593             fail( "Expected NullPointerException not thrown." );
594         }
595         catch ( final NullPointerException e )
596         {
597             assertNullPointerException( e );
598         }
599 
600         try
601         {
602             this.getJomcTool().getJavaModifierName( null, (Message) null );
603             fail( "Expected NullPointerException not thrown." );
604         }
605         catch ( final NullPointerException e )
606         {
607             assertNullPointerException( e );
608         }
609         try
610         {
611             this.getJomcTool().getJavaModifierName( new Implementation(), (Message) null );
612             fail( "Expected NullPointerException not thrown." );
613         }
614         catch ( final NullPointerException e )
615         {
616             assertNullPointerException( e );
617         }
618 
619         try
620         {
621             this.getJomcTool().getJavaModifierName( null, (Property) null );
622             fail( "Expected NullPointerException not thrown." );
623         }
624         catch ( final NullPointerException e )
625         {
626             assertNullPointerException( e );
627         }
628         try
629         {
630             this.getJomcTool().getJavaModifierName( new Implementation(), (Property) null );
631             fail( "Expected NullPointerException not thrown." );
632         }
633         catch ( final NullPointerException e )
634         {
635             assertNullPointerException( e );
636         }
637 
638         try
639         {
640             this.getJomcTool().getJavaPackageName( (Implementation) null );
641             fail( "Expected NullPointerException not thrown." );
642         }
643         catch ( final NullPointerException e )
644         {
645             assertNullPointerException( e );
646         }
647 
648         try
649         {
650             this.getJomcTool().getJavaPackageName( (Specification) null );
651             fail( "Expected NullPointerException not thrown." );
652         }
653         catch ( final NullPointerException e )
654         {
655             assertNullPointerException( e );
656         }
657 
658         try
659         {
660             this.getJomcTool().getJavaPackageName( (SpecificationReference) null );
661             fail( "Expected NullPointerException not thrown." );
662         }
663         catch ( final NullPointerException e )
664         {
665             assertNullPointerException( e );
666         }
667 
668         try
669         {
670             this.getJomcTool().getJavaSetterMethodName( (Dependency) null );
671             fail( "Expected NullPointerException not thrown." );
672         }
673         catch ( final NullPointerException e )
674         {
675             assertNullPointerException( e );
676         }
677 
678         try
679         {
680             this.getJomcTool().getJavaSetterMethodName( (Message) null );
681             fail( "Expected NullPointerException not thrown." );
682         }
683         catch ( final NullPointerException e )
684         {
685             assertNullPointerException( e );
686         }
687 
688         try
689         {
690             this.getJomcTool().getJavaSetterMethodName( (Property) null );
691             fail( "Expected NullPointerException not thrown." );
692         }
693         catch ( final NullPointerException e )
694         {
695             assertNullPointerException( e );
696         }
697 
698         try
699         {
700             this.getJomcTool().getJavaTypeName( (Argument) null );
701             fail( "Expected NullPointerException not thrown." );
702         }
703         catch ( final NullPointerException e )
704         {
705             assertNullPointerException( e );
706         }
707 
708         try
709         {
710             this.getJomcTool().getJavaTypeName( (Dependency) null );
711             fail( "Expected NullPointerException not thrown." );
712         }
713         catch ( final NullPointerException e )
714         {
715             assertNullPointerException( e );
716         }
717 
718         try
719         {
720             this.getJomcTool().getJavaTypeName( (Implementation) null, true );
721             fail( "Expected NullPointerException not thrown." );
722         }
723         catch ( final NullPointerException e )
724         {
725             assertNullPointerException( e );
726         }
727 
728         try
729         {
730             this.getJomcTool().getJavaTypeName( (Property) null, true );
731             fail( "Expected NullPointerException not thrown." );
732         }
733         catch ( final NullPointerException e )
734         {
735             assertNullPointerException( e );
736         }
737 
738         try
739         {
740             this.getJomcTool().getJavaTypeName( (Specification) null, true );
741             fail( "Expected NullPointerException not thrown." );
742         }
743         catch ( final NullPointerException e )
744         {
745             assertNullPointerException( e );
746         }
747 
748         try
749         {
750             this.getJomcTool().getJavaTypeName( (SpecificationReference) null, true );
751             fail( "Expected NullPointerException not thrown." );
752         }
753         catch ( final NullPointerException e )
754         {
755             assertNullPointerException( e );
756         }
757 
758         try
759         {
760             this.getJomcTool().getJavadocComment( (Text) null, 0, "\n" );
761             fail( "Expected NullPointerException not thrown." );
762         }
763         catch ( final NullPointerException e )
764         {
765             assertNullPointerException( e );
766         }
767         try
768         {
769             this.getJomcTool().getJavadocComment( new Text(), 0, null );
770             fail( "Expected NullPointerException not thrown." );
771         }
772         catch ( final NullPointerException e )
773         {
774             assertNullPointerException( e );
775         }
776         try
777         {
778             this.getJomcTool().getJavadocComment( new Text(), Integer.MIN_VALUE, "\n" );
779             fail( "Expected IllegalArgumentException not thrown." );
780         }
781         catch ( final IllegalArgumentException e )
782         {
783             assertIllegalArgumentException( e );
784         }
785 
786         try
787         {
788             this.getJomcTool().getJavadocComment( (Texts) null, 0, "\n" );
789             fail( "Expected NullPointerException not thrown." );
790         }
791         catch ( final NullPointerException e )
792         {
793             assertNullPointerException( e );
794         }
795         try
796         {
797             this.getJomcTool().getJavadocComment( new Texts(), 0, null );
798             fail( "Expected NullPointerException not thrown." );
799         }
800         catch ( final NullPointerException e )
801         {
802             assertNullPointerException( e );
803         }
804         try
805         {
806             this.getJomcTool().getJavadocComment( new Texts(), Integer.MIN_VALUE, "\n" );
807             fail( "Expected IllegalArgumentException not thrown." );
808         }
809         catch ( final IllegalArgumentException e )
810         {
811             assertIllegalArgumentException( e );
812         }
813 
814         try
815         {
816             this.getJomcTool().getLongDate( null );
817             fail( "Expected NullPointerException not thrown." );
818         }
819         catch ( final NullPointerException e )
820         {
821             assertNullPointerException( e );
822         }
823 
824         try
825         {
826             this.getJomcTool().getLongDateTime( null );
827             fail( "Expected NullPointerException not thrown." );
828         }
829         catch ( final NullPointerException e )
830         {
831             assertNullPointerException( e );
832         }
833 
834         try
835         {
836             this.getJomcTool().getLongTime( null );
837             fail( "Expected NullPointerException not thrown." );
838         }
839         catch ( final NullPointerException e )
840         {
841             assertNullPointerException( e );
842         }
843 
844         try
845         {
846             this.getJomcTool().getMediumDate( null );
847             fail( "Expected NullPointerException not thrown." );
848         }
849         catch ( final NullPointerException e )
850         {
851             assertNullPointerException( e );
852         }
853 
854         try
855         {
856             this.getJomcTool().getMediumDateTime( null );
857             fail( "Expected NullPointerException not thrown." );
858         }
859         catch ( final NullPointerException e )
860         {
861             assertNullPointerException( e );
862         }
863 
864         try
865         {
866             this.getJomcTool().getMediumTime( null );
867             fail( "Expected NullPointerException not thrown." );
868         }
869         catch ( final NullPointerException e )
870         {
871             assertNullPointerException( e );
872         }
873 
874         try
875         {
876             this.getJomcTool().getShortDate( null );
877             fail( "Expected NullPointerException not thrown." );
878         }
879         catch ( final NullPointerException e )
880         {
881             assertNullPointerException( e );
882         }
883 
884         try
885         {
886             this.getJomcTool().getShortDateTime( null );
887             fail( "Expected NullPointerException not thrown." );
888         }
889         catch ( final NullPointerException e )
890         {
891             assertNullPointerException( e );
892         }
893 
894         try
895         {
896             this.getJomcTool().getShortTime( null );
897             fail( "Expected NullPointerException not thrown." );
898         }
899         catch ( final NullPointerException e )
900         {
901             assertNullPointerException( e );
902         }
903 
904         try
905         {
906             this.getJomcTool().getVelocityTemplate( null );
907             fail( "Expected NullPointerException not thrown." );
908         }
909         catch ( final NullPointerException e )
910         {
911             assertNullPointerException( e );
912         }
913 
914         try
915         {
916             this.getJomcTool().getYears( null, Calendar.getInstance() );
917             fail( "Expected NullPointerException not thrown." );
918         }
919         catch ( final NullPointerException e )
920         {
921             assertNullPointerException( e );
922         }
923 
924         try
925         {
926             this.getJomcTool().getYears( Calendar.getInstance(), null );
927             fail( "Expected NullPointerException not thrown." );
928         }
929         catch ( final NullPointerException e )
930         {
931             assertNullPointerException( e );
932         }
933 
934         try
935         {
936             this.getJomcTool().isJavaDefaultPackage( (Implementation) null );
937             fail( "Expected NullPointerException not thrown." );
938         }
939         catch ( final NullPointerException e )
940         {
941             assertNullPointerException( e );
942         }
943 
944         try
945         {
946             this.getJomcTool().isJavaDefaultPackage( (Specification) null );
947             fail( "Expected NullPointerException not thrown." );
948         }
949         catch ( final NullPointerException e )
950         {
951             assertNullPointerException( e );
952         }
953 
954         try
955         {
956             this.getJomcTool().isJavaPrimitiveType( null );
957             fail( "Expected NullPointerException not thrown." );
958         }
959         catch ( final NullPointerException e )
960         {
961             assertNullPointerException( e );
962         }
963 
964         try
965         {
966             this.getJomcTool().isLoggable( null );
967             fail( "Expected NullPointerException not thrown." );
968         }
969         catch ( final NullPointerException e )
970         {
971             assertNullPointerException( e );
972         }
973 
974         try
975         {
976             this.getJomcTool().getIsoDate( null );
977             fail( "Expected NullPointerException not thrown." );
978         }
979         catch ( final NullPointerException e )
980         {
981             assertNullPointerException( e );
982         }
983 
984         try
985         {
986             this.getJomcTool().getIsoTime( null );
987             fail( "Expected NullPointerException not thrown." );
988         }
989         catch ( final NullPointerException e )
990         {
991             assertNullPointerException( e );
992         }
993 
994         try
995         {
996             this.getJomcTool().getIsoDateTime( null );
997             fail( "Expected NullPointerException not thrown." );
998         }
999         catch ( final NullPointerException e )
1000         {
1001             assertNullPointerException( e );
1002         }
1003 
1004         try
1005         {
1006             this.getJomcTool().getTemplateEncoding( null );
1007             fail( "Expected NullPointerException not thrown." );
1008         }
1009         catch ( final NullPointerException e )
1010         {
1011             assertNullPointerException( e );
1012         }
1013 
1014         try
1015         {
1016             this.getJomcTool().getParentTemplateProfile( null );
1017             fail( "Expected NullPointerException not thrown." );
1018         }
1019         catch ( final NullPointerException e )
1020         {
1021             assertNullPointerException( e );
1022         }
1023     }
1024 
1025     @Test
1026     @SuppressWarnings( "deprecation" )
1027     public final void testJomcToolNotNull() throws Exception
1028     {
1029         final Specification specification = new Specification();
1030         specification.setClazz( "java.lang.Object" );
1031         specification.setIdentifier( "java.lang.Object" );
1032 
1033         final Specification defaultPackageSpecification = new Specification();
1034         defaultPackageSpecification.setClazz( "Object" );
1035         defaultPackageSpecification.setIdentifier( "Object" );
1036 
1037         final Implementation implementation = new Implementation();
1038         implementation.setIdentifier( "java.lang.Object" );
1039         implementation.setName( "java.lang.Object" );
1040         implementation.setClazz( "java.lang.Object" );
1041 
1042         final Implementation defaultPackageImplementation = new Implementation();
1043         defaultPackageImplementation.setIdentifier( "Object" );
1044         defaultPackageImplementation.setName( "Object" );
1045         defaultPackageImplementation.setClazz( "Object" );
1046 
1047         final Dependency d = new Dependency();
1048         d.setIdentifier( "java.util.Locale" );
1049         d.setName( "locale" );
1050         d.setImplementationName( "default" );
1051 
1052         final Property p = new Property();
1053         p.setName( "property" );
1054         p.setValue( "Test" );
1055 
1056         final Message m = new Message();
1057         m.setName( "message" );
1058 
1059         final Calendar now = Calendar.getInstance();
1060         final Calendar nextYear = Calendar.getInstance();
1061         nextYear.set( Calendar.YEAR, nextYear.get( Calendar.YEAR ) + 1 );
1062 
1063         assertNotNull( this.getJomcTool().getListeners() );
1064         assertNotNull( this.getJomcTool().getInputEncoding() );
1065         assertNotNull( this.getJomcTool().getModel() );
1066         assertNotNull( this.getJomcTool().getModules() );
1067         assertNotNull( this.getJomcTool().getOutputEncoding() );
1068         assertNotNull( this.getJomcTool().getTemplateProfile() );
1069         assertNotNull( this.getJomcTool().getTemplateEncoding() );
1070         assertNotNull( this.getJomcTool().getDefaultTemplateEncoding() );
1071         assertNotNull( this.getJomcTool().getTemplateParameters() );
1072         assertNotNull( this.getJomcTool().getIndentation() );
1073         assertNotNull( this.getJomcTool().getLineSeparator() );
1074         assertNotNull( this.getJomcTool().getVelocityContext() );
1075         assertNotNull( this.getJomcTool().getVelocityEngine() );
1076         assertNotNull( JomcTool.getDefaultLogLevel() );
1077         assertNotNull( this.getJomcTool().getLongDate( now ) );
1078         assertNotNull( this.getJomcTool().getLongDateTime( now ) );
1079         assertNotNull( this.getJomcTool().getLongTime( now ) );
1080         assertNotNull( this.getJomcTool().getMediumDate( now ) );
1081         assertNotNull( this.getJomcTool().getMediumDateTime( now ) );
1082         assertNotNull( this.getJomcTool().getMediumTime( now ) );
1083         assertNotNull( this.getJomcTool().getShortDate( now ) );
1084         assertNotNull( this.getJomcTool().getShortDateTime( now ) );
1085         assertNotNull( this.getJomcTool().getShortTime( now ) );
1086         assertNotNull( this.getJomcTool().getIsoDate( now ) );
1087         assertNotNull( this.getJomcTool().getIsoDateTime( now ) );
1088         assertNotNull( this.getJomcTool().getIsoTime( now ) );
1089         assertNotNull( this.getJomcTool().getYears( now, now ) );
1090         assertNotNull( this.getJomcTool().getYears( now, nextYear ) );
1091         assertNotNull( this.getJomcTool().getYears( nextYear, now ) );
1092         assertNotNull( this.getJomcTool().getDisplayLanguage( "en" ) );
1093 
1094         assertEquals( this.getJomcTool().getYears( now, nextYear ), this.getJomcTool().getYears( nextYear, now ) );
1095         assertEquals( Locale.getDefault().getDisplayLanguage(),
1096                       this.getJomcTool().getDisplayLanguage( Locale.getDefault().getLanguage() ) );
1097 
1098         assertEquals( "java/lang/Object", this.getJomcTool().getJavaClasspathLocation( implementation ) );
1099         assertEquals( "Object", this.getJomcTool().getJavaClasspathLocation( defaultPackageImplementation ) );
1100         assertEquals( "java/lang/Object", this.getJomcTool().getJavaClasspathLocation( specification ) );
1101         assertEquals( "Object", this.getJomcTool().getJavaClasspathLocation( defaultPackageSpecification ) );
1102         assertEquals( "getLocale", this.getJomcTool().getJavaGetterMethodName( d ) );
1103         assertEquals( "getMessage", this.getJomcTool().getJavaGetterMethodName( m ) );
1104         assertEquals( "getProperty", this.getJomcTool().getJavaGetterMethodName( p ) );
1105         assertEquals( 0, this.getJomcTool().getJavaInterfaceNames( implementation, true ).size() );
1106         assertEquals( 0, this.getJomcTool().getImplementedJavaTypeNames( implementation, true ).size() );
1107         assertEquals( "private", this.getJomcTool().getJavaModifierName( implementation, d ) );
1108         assertEquals( "private", this.getJomcTool().getJavaModifierName( implementation, m ) );
1109         assertEquals( "private", this.getJomcTool().getJavaModifierName( implementation, p ) );
1110         assertEquals( "java.lang", this.getJomcTool().getJavaPackageName( implementation ) );
1111         assertEquals( "", this.getJomcTool().getJavaPackageName( defaultPackageImplementation ) );
1112         assertEquals( "java.lang", this.getJomcTool().getJavaPackageName( specification ) );
1113         assertEquals( "", this.getJomcTool().getJavaPackageName( defaultPackageSpecification ) );
1114         assertEquals( "java.util", this.getJomcTool().getJavaPackageName( d ) );
1115         assertEquals( "", this.getJomcTool().getJavaString( "" ) );
1116         assertEquals( this.getJomcTool().getIndentation(), this.getJomcTool().getIndentation( 1 ) );
1117         assertEquals( this.getJomcTool().getDefaultTemplateEncoding(),
1118                       this.getJomcTool().getTemplateEncoding( "DOES_NOT_EXIST" ) );
1119 
1120         assertEquals( this.getJomcTool().getDefaultTemplateProfile(),
1121                       this.getJomcTool().getParentTemplateProfile( "DOES_NOT_EXIST" ) );
1122 
1123     }
1124 
1125     @Test
1126     public final void testVelocityTemplates() throws Exception
1127     {
1128         assertNotNull( this.getJomcTool().getVelocityTemplate( "Implementation.java.vm" ) );
1129         this.getJomcTool().setTemplateProfile( "DOES_NOT_EXIST" );
1130         assertNotNull( this.getJomcTool().getVelocityTemplate( "Implementation.java.vm" ) );
1131         this.getJomcTool().setTemplateProfile( null );
1132 
1133         try
1134         {
1135             this.getJomcTool().getVelocityTemplate( "DOES_NOT_EXIST" );
1136             fail( "Expected FileNotFoundException not thrown." );
1137         }
1138         catch ( final FileNotFoundException e )
1139         {
1140             assertNotNull( e.getMessage() );
1141             System.out.println( e.toString() );
1142         }
1143 
1144         try
1145         {
1146             this.getJomcTool().setTemplateProfile( "DOES_NOT_EXIST" );
1147             this.getJomcTool().getVelocityTemplate( "DOES_NOT_EXIST" );
1148             fail( "Expected FileNotFoundException not thrown." );
1149         }
1150         catch ( final FileNotFoundException e )
1151         {
1152             assertNotNull( e.getMessage() );
1153             System.out.println( e.toString() );
1154         }
1155     }
1156 
1157     @Test
1158     public final void testDefaultLogLevel() throws Exception
1159     {
1160         final String testLogLevel = System.getProperty( "org.jomc.tools.JomcTool.defaultLogLevel" );
1161 
1162         assertNotNull( JomcTool.getDefaultLogLevel() );
1163         JomcTool.setDefaultLogLevel( null );
1164         System.setProperty( "org.jomc.tools.JomcTool.defaultLogLevel", "OFF" );
1165         assertEquals( Level.OFF, JomcTool.getDefaultLogLevel() );
1166 
1167         if ( testLogLevel != null )
1168         {
1169             System.setProperty( "org.jomc.tools.JomcTool.defaultLogLevel", testLogLevel );
1170         }
1171         else
1172         {
1173             System.clearProperty( "org.jomc.tools.JomcTool.defaultLogLevel" );
1174         }
1175 
1176         JomcTool.setDefaultLogLevel( null );
1177     }
1178 
1179     @Test
1180     public final void testLogLevel() throws Exception
1181     {
1182         JomcTool.setDefaultLogLevel( null );
1183         this.getJomcTool().setLogLevel( null );
1184         assertNotNull( this.getJomcTool().getLogLevel() );
1185 
1186         JomcTool.setDefaultLogLevel( Level.OFF );
1187         this.getJomcTool().setLogLevel( null );
1188         assertEquals( Level.OFF, this.getJomcTool().getLogLevel() );
1189 
1190         JomcTool.setDefaultLogLevel( null );
1191         this.getJomcTool().setLogLevel( null );
1192     }
1193 
1194     @Test
1195     @SuppressWarnings( "deprecation" )
1196     public final void testDefaultTemplateProfile() throws Exception
1197     {
1198         assertNotNull( JomcTool.getDefaultTemplateProfile() );
1199         System.setProperty( "org.jomc.tools.JomcTool.defaultTemplateProfile", "TEST" );
1200         JomcTool.setDefaultTemplateProfile( null );
1201         assertEquals( "TEST", JomcTool.getDefaultTemplateProfile() );
1202         System.clearProperty( "org.jomc.tools.JomcTool.defaultTemplateProfile" );
1203         JomcTool.setDefaultTemplateProfile( null );
1204     }
1205 
1206     @Test
1207     @SuppressWarnings( "deprecation" )
1208     public final void testTemplateProfile() throws Exception
1209     {
1210         JomcTool.setDefaultTemplateProfile( null );
1211         this.getJomcTool().setTemplateProfile( null );
1212         assertNotNull( this.getJomcTool().getTemplateProfile() );
1213 
1214         JomcTool.setDefaultTemplateProfile( "TEST" );
1215         this.getJomcTool().setTemplateProfile( null );
1216         assertEquals( "TEST", this.getJomcTool().getTemplateProfile() );
1217 
1218         JomcTool.setDefaultTemplateProfile( null );
1219         this.getJomcTool().setTemplateProfile( null );
1220     }
1221 
1222     @Test
1223     public final void testIndentation() throws Exception
1224     {
1225         assertEquals( "", this.getJomcTool().getIndentation( 0 ) );
1226         assertEquals( this.getJomcTool().getIndentation(), this.getJomcTool().getIndentation( 1 ) );
1227 
1228         try
1229         {
1230             this.getJomcTool().getIndentation( Integer.MIN_VALUE );
1231             fail( "Expected IllegalArgumentException not thrown." );
1232         }
1233         catch ( final IllegalArgumentException e )
1234         {
1235             assertIllegalArgumentException( e );
1236         }
1237 
1238         this.getJomcTool().setIndentation( "    TEST    " );
1239         assertEquals( "    TEST    ", this.getJomcTool().getIndentation() );
1240         assertEquals( "    TEST    ", this.getJomcTool().getIndentation( 1 ) );
1241         this.getJomcTool().setIndentation( null );
1242     }
1243 
1244     @Test
1245     public final void testModel() throws Exception
1246     {
1247         final Model m = this.getJomcTool().getModel();
1248         this.getJomcTool().setModel( null );
1249         assertNotNull( this.getJomcTool().getModel() );
1250         this.getJomcTool().setModel( m );
1251     }
1252 
1253     @Test
1254     public final void testVelocityEngine() throws Exception
1255     {
1256         this.getJomcTool().setVelocityEngine( null );
1257         assertNotNull( this.getJomcTool().getVelocityEngine() );
1258         this.getJomcTool().setVelocityEngine( null );
1259     }
1260 
1261     @Test
1262     public final void testVelocityContext() throws Exception
1263     {
1264         assertNotNull( this.getJomcTool().getVelocityContext() );
1265         this.getJomcTool().setTemplateProfile( "test" );
1266         assertNotNull( this.getJomcTool().getVelocityContext() );
1267         assertNotNull( this.getJomcTool().getVelocityContext().get( "test-object" ) );
1268         assertTrue( this.getJomcTool().getVelocityContext().get( "test-object" ) instanceof JomcTool );
1269         assertNotNull( this.getJomcTool().getVelocityContext().get( "test-url" ) );
1270         assertTrue( this.getJomcTool().getVelocityContext().get( "test-url" ) instanceof URL );
1271         assertEquals( new URL( "file:///tmp" ), this.getJomcTool().getVelocityContext().get( "test-url" ) );
1272         assertNotNull( this.getJomcTool().getVelocityContext().get( "test-string" ) );
1273         assertTrue( this.getJomcTool().getVelocityContext().get( "test-string" ) instanceof String );
1274         assertEquals( "Test", this.getJomcTool().getVelocityContext().get( "test-string" ) );
1275         this.getJomcTool().setTemplateProfile( null );
1276     }
1277 
1278     @Test
1279     public final void testDefaultTemplateEncoding() throws Exception
1280     {
1281         this.getJomcTool().setDefaultTemplateEncoding( null );
1282         assertNotNull( this.getJomcTool().getDefaultTemplateEncoding() );
1283         this.getJomcTool().setDefaultTemplateEncoding( null );
1284     }
1285 
1286     @Test
1287     public final void testTemplateEncoding() throws Exception
1288     {
1289         final File templateLocation = this.getNextOutputDirectory();
1290         File templatesDir = new File( templateLocation, "org" );
1291         templatesDir = new File( templatesDir, "jomc" );
1292         templatesDir = new File( templatesDir, "tools" );
1293         templatesDir = new File( templatesDir, "templates" );
1294         templatesDir = new File( templatesDir, "tmp" );
1295 
1296         assertTrue( templatesDir.mkdirs() );
1297 
1298         final Properties p = new Properties();
1299         p.setProperty( "template-encoding", "ISO-8859-1" );
1300 
1301         final OutputStream profileProperties = new FileOutputStream( new File( templatesDir, "profile.properties" ) );
1302         p.store( profileProperties, this.getClass().getName() );
1303         profileProperties.close();
1304 
1305         this.getJomcTool().setDefaultTemplateEncoding( null );
1306         this.getJomcTool().setTemplateLocation( templateLocation.toURI().toURL() );
1307 
1308         assertEquals( "ISO-8859-1", this.getJomcTool().getTemplateEncoding( "tmp" ) );
1309         assertEquals( "US-ASCII", this.getJomcTool().getTemplateEncoding( "test" ) );
1310         assertEquals( this.getJomcTool().getDefaultTemplateEncoding(),
1311                       this.getJomcTool().getTemplateEncoding( "jomc-java-bundles" ) );
1312 
1313         this.getJomcTool().setTemplateLocation( null );
1314         this.getJomcTool().setDefaultTemplateEncoding( null );
1315     }
1316 
1317     @Test
1318     public final void testInputEncoding() throws Exception
1319     {
1320         this.getJomcTool().setInputEncoding( null );
1321         assertNotNull( this.getJomcTool().getInputEncoding() );
1322         this.getJomcTool().setInputEncoding( null );
1323     }
1324 
1325     @Test
1326     public final void testOutputEncoding() throws Exception
1327     {
1328         this.getJomcTool().setOutputEncoding( null );
1329         assertNotNull( this.getJomcTool().getOutputEncoding() );
1330         this.getJomcTool().setOutputEncoding( null );
1331     }
1332 
1333     @Test
1334     public final void testLineSeparator() throws Exception
1335     {
1336         this.getJomcTool().setLineSeparator( null );
1337         assertNotNull( this.getJomcTool().getLineSeparator() );
1338         this.getJomcTool().setLineSeparator( null );
1339     }
1340 
1341     @Test
1342     @SuppressWarnings( "deprecation" )
1343     public final void testJomcToolModelObjectsNotFound() throws Exception
1344     {
1345         final SpecificationReference ref = new SpecificationReference();
1346         ref.setIdentifier( "DOES_NOT_EXIST" );
1347 
1348         final Implementation i = new Implementation();
1349         i.setIdentifier( "DOES_NOT_EXSIST" );
1350 
1351         final Dependency d = new Dependency();
1352         d.setIdentifier( "DOES_NOT_EXIST" );
1353 
1354         final Property p = new Property();
1355         p.setName( "DOES_NOT_EXIST" );
1356 
1357         assertNull( this.getJomcTool().getJavaPackageName( ref ) );
1358         assertNull( this.getJomcTool().getJavaTypeName( ref, false ) );
1359         assertNull( this.getJomcTool().getJavaTypeName( d ) );
1360 
1361         final Model oldModel = this.getJomcTool().getModel();
1362         this.getJomcTool().setModel( null );
1363         assertTrue( this.getJomcTool().getImplementedJavaTypeNames( i, true ).isEmpty() );
1364         assertEquals( "private", this.getJomcTool().getJavaModifierName( i, p ) );
1365         this.getJomcTool().setModel( oldModel );
1366     }
1367 
1368     @Test
1369     @SuppressWarnings( "deprecation" )
1370     public final void testJavaIdentifier() throws Exception
1371     {
1372         assertEquals( "", this.getJomcTool().getJavaIdentifier( "", true ) );
1373         assertEquals( "", this.getJomcTool().getJavaIdentifier( "", false ) );
1374         assertEquals( "", this.getJomcTool().getJavaIdentifier( "  ", true ) );
1375         assertEquals( "", this.getJomcTool().getJavaIdentifier( "  ", false ) );
1376         assertEquals( "testTestTest", this.getJomcTool().getJavaIdentifier( "  test test test  ", false ) );
1377         assertEquals( "testTestTest", this.getJomcTool().getJavaIdentifier( "  test  test  test  ", false ) );
1378         assertEquals( "TestTestTest", this.getJomcTool().getJavaIdentifier( "  test test test  ", true ) );
1379         assertEquals( "TestTestTest", this.getJomcTool().getJavaIdentifier( "  test  test  test  ", true ) );
1380         assertEquals( "testTestTest", this.getJomcTool().getJavaIdentifier( "  Test test test  ", false ) );
1381         assertEquals( "testTestTest", this.getJomcTool().getJavaIdentifier( "  Test  test  test  ", false ) );
1382         assertEquals( "TestTestTest", this.getJomcTool().getJavaIdentifier( "  test test test  ", true ) );
1383         assertEquals( "TestTestTest", this.getJomcTool().getJavaIdentifier( "  test  test  test  ", true ) );
1384     }
1385 
1386     @Test
1387     @SuppressWarnings( "deprecation" )
1388     public final void testJavaConstantName() throws Exception
1389     {
1390         assertEquals( "", this.getJomcTool().getJavaConstantName( "" ) );
1391         assertEquals( "", this.getJomcTool().getJavaConstantName( "  " ) );
1392         assertEquals( "TEST_TEST_TEST", this.getJomcTool().getJavaConstantName( "  test test test  " ) );
1393         assertEquals( "TEST_TEST_TEST", this.getJomcTool().getJavaConstantName( "  test  test  test  " ) );
1394         assertEquals( "TEST_T_EST_TE_ST_TES_T",
1395                       this.getJomcTool().getJavaConstantName( "  Test   tEst   teSt   tesT  " ) );
1396 
1397     }
1398 
1399     @Test
1400     @SuppressWarnings( "deprecation" )
1401     public final void testJavaFieldName() throws Exception
1402     {
1403         assertEquals( "", this.getJomcTool().getJavaFieldName( "" ) );
1404         assertEquals( "", this.getJomcTool().getJavaFieldName( "  " ) );
1405         assertEquals( "testTestTest", this.getJomcTool().getJavaFieldName( "  test test test  " ) );
1406         assertEquals( "testTestTest", this.getJomcTool().getJavaFieldName( "  test  test  test  " ) );
1407         assertEquals( "testTEstTeStTesT", this.getJomcTool().getJavaFieldName( "  Test tEst teSt tesT  " ) );
1408         assertEquals( "testTEstTeStTesT", this.getJomcTool().getJavaFieldName( "  Test  tEst  teSt  tesT  " ) );
1409         assertEquals( "_package", this.getJomcTool().getJavaFieldName( "  Package " ) );
1410         assertEquals( "_new", this.getJomcTool().getJavaFieldName( "  New " ) );
1411     }
1412 
1413     @Test
1414     @SuppressWarnings( "deprecation" )
1415     public final void testJavaMethodParameterName() throws Exception
1416     {
1417         assertEquals( "", this.getJomcTool().getJavaMethodParameterName( "" ) );
1418         assertEquals( "", this.getJomcTool().getJavaMethodParameterName( "  " ) );
1419         assertEquals( "testTestTest", this.getJomcTool().getJavaMethodParameterName( "  test test test  " ) );
1420         assertEquals( "testTEstTeStTesT", this.getJomcTool().getJavaMethodParameterName( "  Test tEst teSt tesT  " ) );
1421         assertEquals( "testTEstTeStTesT",
1422                       this.getJomcTool().getJavaMethodParameterName( "  Test  tEst  teSt  tesT  " ) );
1423 
1424         assertEquals( "_package", this.getJomcTool().getJavaMethodParameterName( "  Package " ) );
1425         assertEquals( "_new", this.getJomcTool().getJavaMethodParameterName( "  New " ) );
1426     }
1427 
1428     @Test
1429     public final void testToJavaConstantName() throws Exception
1430     {
1431         try
1432         {
1433             this.getJomcTool().toJavaConstantName( "" );
1434             fail( "Expected 'ParseException' not thrown." );
1435         }
1436         catch ( final ParseException e )
1437         {
1438             System.out.println( e.toString() );
1439             assertNotNull( e.getMessage() );
1440         }
1441         try
1442         {
1443             this.getJomcTool().toJavaConstantName( "  " );
1444             fail( "Expected 'ParseException' not thrown." );
1445         }
1446         catch ( final ParseException e )
1447         {
1448             System.out.println( e.toString() );
1449             assertNotNull( e.getMessage() );
1450         }
1451 
1452         assertEquals( JavaIdentifier.valueOf( "TEST_TEST_TEST" ),
1453                       this.getJomcTool().toJavaConstantName( "  test test test  " ) );
1454 
1455         assertEquals( JavaIdentifier.valueOf( "TEST_TEST_TEST_TEST" ),
1456                       this.getJomcTool().toJavaConstantName( "  Test tEst teSt tesT  " ) );
1457 
1458         assertEquals( JavaIdentifier.valueOf( "TEST_TEST_TEST_TEST" ),
1459                       this.getJomcTool().toJavaConstantName( "  Test  tEst  teSt  tesT  " ) );
1460 
1461         assertEquals( JavaIdentifier.valueOf( "PACKAGE" ), this.getJomcTool().toJavaConstantName( "  Package " ) );
1462         assertEquals( JavaIdentifier.valueOf( "NEW" ), this.getJomcTool().toJavaConstantName( "  New " ) );
1463     }
1464 
1465     @Test
1466     public final void testToJavaMethodName() throws Exception
1467     {
1468         try
1469         {
1470             this.getJomcTool().toJavaMethodName( "" );
1471             fail( "Expected 'ParseException' not thrown." );
1472         }
1473         catch ( final ParseException e )
1474         {
1475             System.out.println( e.toString() );
1476             assertNotNull( e.getMessage() );
1477         }
1478         try
1479         {
1480             this.getJomcTool().toJavaMethodName( "  " );
1481             fail( "Expected 'ParseException' not thrown." );
1482         }
1483         catch ( final ParseException e )
1484         {
1485             System.out.println( e.toString() );
1486             assertNotNull( e.getMessage() );
1487         }
1488 
1489         assertEquals( JavaIdentifier.valueOf( "testTestTest" ),
1490                       this.getJomcTool().toJavaMethodName( "  test test test  " ) );
1491 
1492         assertEquals( JavaIdentifier.valueOf( "testTestTestTest" ),
1493                       this.getJomcTool().toJavaMethodName( "  Test tEst teSt tesT  " ) );
1494 
1495         assertEquals( JavaIdentifier.valueOf( "testTestTestTest" ),
1496                       this.getJomcTool().toJavaMethodName( "  Test  tEst  teSt  tesT  " ) );
1497 
1498         assertEquals( JavaIdentifier.valueOf( "_package" ), this.getJomcTool().toJavaMethodName( "  Package " ) );
1499         assertEquals( JavaIdentifier.valueOf( "_new" ), this.getJomcTool().toJavaMethodName( "  New " ) );
1500     }
1501 
1502     @Test
1503     public final void testToJavaVariableName() throws Exception
1504     {
1505         try
1506         {
1507             this.getJomcTool().toJavaVariableName( "" );
1508             fail( "Expected 'ParseException' not thrown." );
1509         }
1510         catch ( final ParseException e )
1511         {
1512             System.out.println( e.toString() );
1513             assertNotNull( e.getMessage() );
1514         }
1515         try
1516         {
1517             this.getJomcTool().toJavaVariableName( "  " );
1518             fail( "Expected 'ParseException' not thrown." );
1519         }
1520         catch ( final ParseException e )
1521         {
1522             System.out.println( e.toString() );
1523             assertNotNull( e.getMessage() );
1524         }
1525 
1526         assertEquals( JavaIdentifier.valueOf( "testTestTest" ),
1527                       this.getJomcTool().toJavaVariableName( "  test test test  " ) );
1528 
1529         assertEquals( JavaIdentifier.valueOf( "testTestTestTest" ),
1530                       this.getJomcTool().toJavaVariableName( "  Test tEst teSt tesT  " ) );
1531 
1532         assertEquals( JavaIdentifier.valueOf( "testTestTestTest" ),
1533                       this.getJomcTool().toJavaVariableName( "  Test  tEst  teSt  tesT  " ) );
1534 
1535         assertEquals( JavaIdentifier.valueOf( "_package" ), this.getJomcTool().toJavaVariableName( "  Package " ) );
1536         assertEquals( JavaIdentifier.valueOf( "_new" ), this.getJomcTool().toJavaVariableName( "  New " ) );
1537     }
1538 
1539     @Test
1540     @SuppressWarnings( "deprecation" )
1541     public final void testParentTemplateProfile() throws Exception
1542     {
1543         final File templateLocation = this.getNextOutputDirectory();
1544         File templatesDir = new File( templateLocation, "org" );
1545         templatesDir = new File( templatesDir, "jomc" );
1546         templatesDir = new File( templatesDir, "tools" );
1547         templatesDir = new File( templatesDir, "templates" );
1548         templatesDir = new File( templatesDir, "tmp" );
1549 
1550         assertTrue( templatesDir.mkdirs() );
1551 
1552         final Properties p = new Properties();
1553         p.setProperty( "parent-template-profile", "test" );
1554 
1555         final OutputStream profileProperties = new FileOutputStream( new File( templatesDir, "profile.properties" ) );
1556         p.store( profileProperties, this.getClass().getName() );
1557         profileProperties.close();
1558 
1559         this.getJomcTool().setDefaultTemplateProfile( null );
1560         this.getJomcTool().setTemplateLocation( templateLocation.toURI().toURL() );
1561 
1562         assertEquals( "test", this.getJomcTool().getParentTemplateProfile( "tmp" ) );
1563         assertEquals( "jomc-java-bundles", this.getJomcTool().getParentTemplateProfile( "test" ) );
1564         assertEquals( this.getJomcTool().getDefaultTemplateProfile(),
1565                       this.getJomcTool().getParentTemplateProfile( "jomc-java-bundles" ) );
1566 
1567         assertNull( this.getJomcTool().getParentTemplateProfile( this.getJomcTool().getDefaultTemplateProfile() ) );
1568         this.getJomcTool().setTemplateLocation( null );
1569         this.getJomcTool().setDefaultTemplateEncoding( null );
1570     }
1571 
1572     @Test
1573     public final void testHtmlString() throws Exception
1574     {
1575         assertEquals( "&lt;&gt;&quot;&lowast;&amp;", this.getJomcTool().getHtmlString( "<>\"*&" ) );
1576     }
1577 
1578     public static void assertNullPointerException( final NullPointerException e )
1579     {
1580         assertNotNull( e );
1581         assertNotNull( e.getMessage() );
1582         System.out.println( e.toString() );
1583     }
1584 
1585     public static void assertIllegalArgumentException( final IllegalArgumentException e )
1586     {
1587         assertNotNull( e );
1588         assertNotNull( e.getMessage() );
1589         System.out.println( e.toString() );
1590     }
1591 
1592 }