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