View Javadoc

1   // SECTION-START[License Header]
2   // <editor-fold defaultstate="collapsed" desc=" Generated License ">
3   /*
4    *   Java Object Management and Configuration
5    *   Copyright (C) Christian Schulte, 2005-206
6    *   All rights reserved.
7    *
8    *   Redistribution and use in source and binary forms, with or without
9    *   modification, are permitted provided that the following conditions
10   *   are met:
11   *
12   *     o Redistributions of source code must retain the above copyright
13   *       notice, this list of conditions and the following disclaimer.
14   *
15   *     o Redistributions in binary form must reproduce the above copyright
16   *       notice, this list of conditions and the following disclaimer in
17   *       the documentation and/or other materials provided with the
18   *       distribution.
19   *
20   *   THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
21   *   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
22   *   AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
23   *   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,
24   *   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25   *   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26   *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27   *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28   *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29   *   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30   *
31   *   $JOMC: JomcTest.java 4795 2013-04-21 09:09:02Z schulte $
32   *
33   */
34  // </editor-fold>
35  // SECTION-END
36  package org.jomc.cli.test;
37  
38  import java.io.File;
39  import java.io.IOException;
40  import java.io.OutputStream;
41  import java.net.URI;
42  import java.net.URL;
43  import java.util.zip.ZipEntry;
44  import java.util.zip.ZipInputStream;
45  import javax.xml.bind.JAXBElement;
46  import javax.xml.bind.Unmarshaller;
47  import javax.xml.transform.stream.StreamSource;
48  import javax.xml.validation.Schema;
49  import org.apache.commons.io.FileUtils;
50  import org.apache.commons.io.IOUtils;
51  import org.jomc.ObjectManagerFactory;
52  import org.jomc.cli.Command;
53  import org.jomc.cli.Jomc;
54  import org.jomc.model.ModelObject;
55  import org.jomc.model.Module;
56  import org.jomc.modlet.ModelContext;
57  import org.jomc.modlet.ModelContextFactory;
58  import org.jomc.modlet.Modlet;
59  import org.jomc.modlet.ModletObject;
60  import org.junit.Before;
61  import org.junit.Test;
62  import static org.junit.Assert.assertEquals;
63  import static org.junit.Assert.assertFalse;
64  import static org.junit.Assert.assertNotNull;
65  import static org.junit.Assert.assertNull;
66  import static org.junit.Assert.assertTrue;
67  
68  // SECTION-START[Documentation]
69  // <editor-fold defaultstate="collapsed" desc=" Generated Documentation ">
70  /**
71   * Tests the {@code Jomc} CLI class.
72   *
73   * <dl>
74   *   <dt><b>Identifier:</b></dt><dd>org.jomc.cli.test.JomcTest</dd>
75   *   <dt><b>Name:</b></dt><dd>JOMC ⁑ CLI ⁑ Tests ⁑ JomcTest</dd>
76   *   <dt><b>Abstract:</b></dt><dd>No</dd>
77   *   <dt><b>Final:</b></dt><dd>No</dd>
78   *   <dt><b>Stateless:</b></dt><dd>No</dd>
79   * </dl>
80   *
81   * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> 1.0
82   * @version 1.5
83   */
84  // </editor-fold>
85  // SECTION-END
86  // SECTION-START[Annotations]
87  // <editor-fold defaultstate="collapsed" desc=" Generated Annotations ">
88  @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
89  // </editor-fold>
90  // SECTION-END
91  public class JomcTest
92  {
93      // SECTION-START[JomcTest]
94  
95      /** Constant to prefix relative resource names with. */
96      private static final String ABSOLUTE_RESOURCE_NAME_PREFIX = "/org/jomc/cli/test/";
97  
98      /** Constant for the name of the system property holding the output directory for the test. */
99      private static final String OUTPUT_DIRECTORY_PROPERTY_NAME = "jomc.test.outputDirectory";
100 
101     /** Test resources to copy to the resources directory. */
102     private static final String[] TEST_RESOURCE_NAMES =
103     {
104         "model-relocations.xsl",
105         "modlet-relocations.xsl",
106         "jomc.xml",
107         "illegal-module.xml",
108         "illegal-module-document.xml",
109         "module-nonexistent-classes.xml"
110     };
111 
112     /** The output directory of the instance. */
113     private File outputDirectory;
114 
115     /**
116      * Gets the output directory of instance.
117      *
118      * @return The output directory of instance.
119      *
120      * @see #setOutputDirectory(java.io.File)
121      */
122     public final File getOutputDirectory()
123     {
124         if ( this.outputDirectory == null )
125         {
126             final String name = System.getProperty( OUTPUT_DIRECTORY_PROPERTY_NAME );
127             assertNotNull( "Expected '" + OUTPUT_DIRECTORY_PROPERTY_NAME + "' system property not found.", name );
128             this.outputDirectory = new File( new File( name ), "JomcTest" );
129             assertTrue( "Expected '" + OUTPUT_DIRECTORY_PROPERTY_NAME + "' system property to hold an absolute path.",
130                         this.outputDirectory.isAbsolute() );
131 
132             if ( !this.outputDirectory.exists() )
133             {
134                 assertTrue( this.outputDirectory.mkdirs() );
135             }
136         }
137 
138         return this.outputDirectory;
139     }
140 
141     /**
142      * Sets the output directory of instance.
143      *
144      * @param value The new output directory of instance or {@code null}.
145      *
146      * @see #getOutputDirectory()
147      */
148     public final void setOutputDirectory( final File value )
149     {
150         if ( value != null )
151         {
152             assertTrue( "Expected absolute 'outputDirectory'.", value.isAbsolute() );
153         }
154 
155         this.outputDirectory = value;
156     }
157 
158     @Test
159     public final void testNoArguments() throws Exception
160     {
161         assertEquals( Command.STATUS_FAILURE, Jomc.run( new String[ 0 ] ) );
162     }
163 
164     @Test
165     public final void testGenerateResources() throws Exception
166     {
167         final File testResourcesDirectory = this.getTestResourcesDirectory();
168         assertTrue( testResourcesDirectory.isAbsolute() );
169 
170         if ( testResourcesDirectory.exists() )
171         {
172             FileUtils.deleteDirectory( testResourcesDirectory );
173         }
174 
175         final String[] help = new String[]
176         {
177             "generate-resources", "help"
178         };
179 
180         final String[] args = new String[]
181         {
182             "generate-resources", "-rd", '"' + this.getTestResourcesDirectory().getAbsolutePath() + '"', "-df",
183             '"' + this.getTestModelDocument().getAbsolutePath() + '"', "-D"
184         };
185 
186         final String[] unsupportedOption = new String[]
187         {
188             "generate-resources", "--unsupported-option"
189         };
190 
191         final String[] failOnWarnings = new String[]
192         {
193             "generate-resources", "-rd", '"' + this.getTestResourcesDirectory().getAbsolutePath() + '"', "-df",
194             '"' + this.getTestModelDocument().getAbsolutePath() + '"', "-mn", "DOES_NOT_EXIST", "--fail-on-warnings",
195             "-D"
196         };
197 
198         assertEquals( Command.STATUS_SUCCESS, Jomc.run( help ) );
199         assertEquals( Command.STATUS_FAILURE, Jomc.run( args ) );
200         assertEquals( Command.STATUS_FAILURE, Jomc.run( unsupportedOption ) );
201 
202         assertTrue( testResourcesDirectory.mkdirs() );
203         assertEquals( Command.STATUS_SUCCESS, Jomc.run( args ) );
204         assertEquals( Command.STATUS_FAILURE, Jomc.run( failOnWarnings ) );
205     }
206 
207     @Test
208     public final void testManageSources() throws Exception
209     {
210         final File testSourcesDirectory = this.getTestSourcesDirectory();
211         assertTrue( testSourcesDirectory.isAbsolute() );
212 
213         if ( testSourcesDirectory.exists() )
214         {
215             FileUtils.deleteDirectory( testSourcesDirectory );
216         }
217 
218         final String[] help = new String[]
219         {
220             "manage-sources", "help"
221         };
222 
223         final String[] args = new String[]
224         {
225             "manage-sources", "-sd", '"' + this.getTestSourcesDirectory().getAbsolutePath() + '"', "-df",
226             '"' + this.getTestModelDocument().getAbsolutePath() + '"', "-mn", '"' + this.getTestModuleName() + '"',
227             "-D", "-ls", "\r\n", "-idt", "\t", "-tp", "jomc-cli", "-tl",
228             '"' + this.getTemplatesDirectory().getAbsolutePath() + '"'
229         };
230 
231         final String[] unsupportedOption = new String[]
232         {
233             "manage-sources", "--unsupported-option"
234         };
235 
236         final String[] failOnWarnings = new String[]
237         {
238             "manage-sources", "-sd", '"' + this.getTestSourcesDirectory().getAbsolutePath() + '"', "-df",
239             '"' + this.getTestModelDocument().getAbsolutePath() + '"', "-mn", "DOES_NOT_EXIST", "--fail-on-warnings",
240             "-D", "-tp", "jomc-cli", "-tl", '"' + this.getTemplatesDirectory().getAbsolutePath() + '"'
241         };
242 
243         assertEquals( Command.STATUS_SUCCESS, Jomc.run( help ) );
244         assertEquals( Command.STATUS_FAILURE, Jomc.run( args ) );
245         assertEquals( Command.STATUS_FAILURE, Jomc.run( unsupportedOption ) );
246 
247         assertTrue( testSourcesDirectory.mkdirs() );
248         assertEquals( Command.STATUS_SUCCESS, Jomc.run( args ) );
249         assertEquals( Command.STATUS_FAILURE, Jomc.run( failOnWarnings ) );
250     }
251 
252     @Test
253     public final void testCommitValidateClasses() throws Exception
254     {
255         final File testClassesDirectory = this.getTestClassesDirectory();
256         assertTrue( testClassesDirectory.isAbsolute() );
257 
258         if ( testClassesDirectory.exists() )
259         {
260             FileUtils.deleteDirectory( testClassesDirectory );
261         }
262 
263         final String[] commitHelp = new String[]
264         {
265             "commit-classes", "help"
266         };
267 
268         final String[] validateHelp = new String[]
269         {
270             "validate-classes", "help"
271         };
272 
273         final String[] commitArgs = new String[]
274         {
275             "commit-classes", "-df", '"' + this.getTestModelDocument().getAbsolutePath() + '"', "-cd",
276             '"' + this.getClassesDirectory().getAbsolutePath() + '"', "-mn",
277             '"' + this.getTestModuleName() + '"', "-D"
278         };
279 
280         final String[] commitArgsNoDirectory = new String[]
281         {
282             "commit-classes", "-df", '"' + this.getTestModelDocument().getAbsolutePath() + '"', "-cd",
283             '"' + this.getTestClassesDirectory().getAbsolutePath() + '"', "-mn", '"' + this.getTestModuleName() + '"',
284             "-D"
285         };
286 
287         final String[] validateArgs = new String[]
288         {
289             "validate-classes", "-cp", '"' + this.getClassesDirectory().getAbsolutePath() + '"', "-D"
290         };
291 
292         final String[] validateArgsNonExistentClasses = new String[]
293         {
294             "validate-classes", "-df", '"' + this.getTestModelDocumentNonExistentClasses().getAbsolutePath() + '"',
295             "-cp", '"' + this.getClassesDirectory().getAbsolutePath() + '"', "-D"
296         };
297 
298         final String[] commitUnsupportedOption = new String[]
299         {
300             "commit-classes", "--unsupported-option"
301         };
302 
303         final String[] validateUnsupportedOption = new String[]
304         {
305             "validate-classes", "--unsupported-option"
306         };
307 
308         final String[] commitFailOnWarnings = new String[]
309         {
310             "commit-classes", "-df", '"' + this.getTestModelDocument().getAbsolutePath() + '"', "-cd",
311             '"' + this.getClassesDirectory().getAbsolutePath() + '"', "-mn", "DOES_NOT_EXIST", "--fail-on-warnings",
312             "-D"
313         };
314 
315         final String[] validateFailOnWarnings = new String[]
316         {
317             "validate-classes", "-df", '"' + this.getTestModelDocument().getAbsolutePath() + '"', "-cp",
318             '"' + this.getClassesDirectory().getAbsolutePath() + '"', "-mn", "DOES_NOT_EXIST", "--fail-on-warnings",
319             "-D"
320         };
321 
322         final String[] commitWithStylesheet = new String[]
323         {
324             "commit-classes", "-df", '"' + this.getTestModelDocument().getAbsolutePath() + '"', "-cd",
325             '"' + this.getClassesDirectory().getAbsolutePath() + '"', "-mn", '"' + this.getTestModuleName() + '"',
326             "-D", "-stylesheet", '"' + this.getTestModelStylesheet().getAbsolutePath() + '"'
327         };
328 
329         assertEquals( Command.STATUS_SUCCESS, Jomc.run( commitHelp ) );
330         assertEquals( Command.STATUS_SUCCESS, Jomc.run( validateHelp ) );
331         assertEquals( Command.STATUS_FAILURE, Jomc.run( commitArgsNoDirectory ) );
332         assertEquals( Command.STATUS_FAILURE, Jomc.run( commitUnsupportedOption ) );
333         assertEquals( Command.STATUS_FAILURE, Jomc.run( validateUnsupportedOption ) );
334 
335         assertEquals( Command.STATUS_SUCCESS, Jomc.run( commitArgs ) );
336         assertEquals( Command.STATUS_SUCCESS, Jomc.run( validateArgs ) );
337         assertEquals( Command.STATUS_SUCCESS, Jomc.run( commitWithStylesheet ) );
338         assertEquals( Command.STATUS_FAILURE, Jomc.run( commitFailOnWarnings ) );
339         assertEquals( Command.STATUS_FAILURE, Jomc.run( validateFailOnWarnings ) );
340         assertEquals( Command.STATUS_FAILURE, Jomc.run( validateArgsNonExistentClasses ) );
341     }
342 
343     @Test
344     public final void testMergeModules() throws Exception
345     {
346         final ModelContext context = ModelContextFactory.newInstance().newModelContext();
347         final Unmarshaller unmarshaller = context.createUnmarshaller( ModelObject.MODEL_PUBLIC_ID );
348         final Schema schema = context.createSchema( ModelObject.MODEL_PUBLIC_ID );
349         unmarshaller.setSchema( schema );
350 
351         final String[] help = new String[]
352         {
353             "merge-modules", "help"
354         };
355 
356         final String[] args = new String[]
357         {
358             "merge-modules", "-df", '"' + this.getTestModelDocument().getAbsolutePath() + '"', "-xs",
359             '"' + this.getTestModelStylesheet().getAbsolutePath() + '"', "-mn", '"' + this.getTestModuleName() + '"',
360             "-d", '"' + this.getTestModelOutputDocument().getAbsolutePath() + '"', "-D"
361         };
362 
363         final String[] includesArg = new String[]
364         {
365             "merge-modules", "-df", '"' + this.getTestModelDocument().getAbsolutePath() + '"', "-xs",
366             '"' + this.getTestModelStylesheet().getAbsolutePath() + '"', "-mn", '"' + this.getTestModuleName() + '"',
367             "-d", '"' + this.getTestModelOutputDocument().getAbsolutePath() + '"', "-minc=\"JOMC ⁑ CLI\"", "-D"
368         };
369 
370         final String[] excludesArg = new String[]
371         {
372             "merge-modules", "-df", '"' + this.getTestModelDocument().getAbsolutePath() + '"', "-xs",
373             '"' + this.getTestModelStylesheet().getAbsolutePath() + '"', "-mn", '"' + this.getTestModuleName() + '"',
374             "-d", '"' + this.getTestModelOutputDocument().getAbsolutePath() + '"', "-mexc=\"JOMC ⁑ CLI\"", "-D"
375         };
376 
377         final String[] unsupportedOption = new String[]
378         {
379             "merge-modules", "--unsupported-option"
380         };
381 
382         final String[] illegalDoc = new String[]
383         {
384             "merge-modules", "-df", '"' + this.getTestModelDocumentIllegalSchemaConstraints().getAbsolutePath() + '"',
385             "-xs", '"' + this.getTestModelStylesheet().getAbsolutePath() + '"', "-mn",
386             '"' + this.getTestModuleName() + '"', "-d", '"' + this.getTestModelOutputDocument().getAbsolutePath() + '"',
387             "-D"
388         };
389 
390         assertEquals( Command.STATUS_SUCCESS, Jomc.run( help ) );
391         assertEquals( Command.STATUS_SUCCESS, Jomc.run( args ) );
392 
393         unmarshaller.unmarshal( new StreamSource( this.getTestModelOutputDocument() ), Module.class );
394 
395         assertEquals( Command.STATUS_SUCCESS, Jomc.run( includesArg ) );
396 
397         final JAXBElement<Module> includedModule =
398             unmarshaller.unmarshal( new StreamSource( this.getTestModelOutputDocument() ), Module.class );
399 
400         assertNotNull( "Merged module does not contain any included specifications.",
401                        includedModule.getValue().getSpecifications() );
402 
403         assertNotNull( "Merged module does not contain included 'org.jomc.cli.Command' specification.",
404                        includedModule.getValue().getSpecifications().getSpecification( Command.class ) );
405 
406         assertEquals( Command.STATUS_SUCCESS, Jomc.run( excludesArg ) );
407 
408         final JAXBElement<Module> excludedModule =
409             unmarshaller.unmarshal( new StreamSource( this.getTestModelOutputDocument() ), Module.class );
410 
411         assertNull( "Merged module contains excluded specifications.",
412                     excludedModule.getValue().getSpecifications() );
413 
414         assertEquals( Command.STATUS_FAILURE, Jomc.run( unsupportedOption ) );
415         assertEquals( Command.STATUS_FAILURE, Jomc.run( illegalDoc ) );
416     }
417 
418     @Test
419     public final void testValidateModel() throws Exception
420     {
421         final String[] help = new String[]
422         {
423             "validate-model", "help"
424         };
425 
426         final String[] args = new String[]
427         {
428             "validate-model", "-df", '"' + this.getTestModelDocument().getAbsolutePath() + '"', "-D"
429         };
430 
431         final String[] unsupportedOption = new String[]
432         {
433             "validate-model", "--unsupported-option"
434         };
435 
436         final String[] illegalDoc = new String[]
437         {
438             "validate-model", "-df", '"' + this.getTestModelDocumentIllegal().getAbsolutePath() + '"', "-D"
439         };
440 
441         assertEquals( Command.STATUS_SUCCESS, Jomc.run( help ) );
442         assertEquals( Command.STATUS_SUCCESS, Jomc.run( args ) );
443         assertEquals( Command.STATUS_FAILURE, Jomc.run( unsupportedOption ) );
444         assertEquals( Command.STATUS_FAILURE, Jomc.run( illegalDoc ) );
445     }
446 
447     @Test
448     public final void testMergeModlets() throws Exception
449     {
450         final ModelContext context = ModelContextFactory.newInstance().newModelContext();
451         final Unmarshaller unmarshaller = context.createUnmarshaller( ModletObject.MODEL_PUBLIC_ID );
452         final Schema schema = context.createSchema( ModletObject.MODEL_PUBLIC_ID );
453         unmarshaller.setSchema( schema );
454 
455         final String[] help = new String[]
456         {
457             "merge-modlets", "help"
458         };
459 
460         final String[] args = new String[]
461         {
462             "merge-modlets", "-xs", '"' + this.getTestModletStylesheet().getAbsolutePath() + '"', "-mdn",
463             '"' + this.getTestModletName() + '"', "-d",
464             '"' + this.getTestModletOutputDocument().getAbsolutePath() + '"', "-cp", "."
465         };
466 
467         final String[] includeArgs = new String[]
468         {
469             "merge-modlets", "-xs", '"' + this.getTestModletStylesheet().getAbsolutePath() + '"', "-mdn",
470             '"' + this.getTestModletName() + '"', "-d",
471             '"' + this.getTestModletOutputDocument().getAbsolutePath() + '"', "-mdinc=\"JOMC ⁑ Model\"", "-cp", "."
472         };
473 
474         final String[] excludeArgs = new String[]
475         {
476             "merge-modlets", "-xs", '"' + this.getTestModletStylesheet().getAbsolutePath() + '"', "-mdn",
477             '"' + this.getTestModletName() + '"', "-d",
478             '"' + this.getTestModletOutputDocument().getAbsolutePath() + '"',
479             "-mdexc=\"JOMC ⁑ Model" + File.pathSeparatorChar + "JOMC ⁑ Tools" + File.pathSeparatorChar
480             + "JOMC ⁑ Modlet\"", "-cp", "."
481         };
482 
483         final String[] unsupportedOption = new String[]
484         {
485             "merge-modlets", "--unsupported-option"
486         };
487 
488         assertEquals( Command.STATUS_SUCCESS, Jomc.run( help ) );
489         assertEquals( Command.STATUS_FAILURE, Jomc.run( unsupportedOption ) );
490 
491         assertEquals( Command.STATUS_SUCCESS, Jomc.run( args ) );
492         Modlet merged = unmarshaller.unmarshal(
493             new StreamSource( this.getTestModletOutputDocument() ), Modlet.class ).getValue();
494 
495         assertNotNull( merged );
496         assertEquals( this.getTestModletName(), merged.getName() );
497         assertNotNull( merged.getSchemas() );
498         assertNotNull( merged.getServices() );
499         assertEquals( 2, merged.getSchemas().getSchema().size() );
500         assertEquals( 6, merged.getServices().getService().size() );
501         assertFalse( merged.getSchemas().getSchemasByPublicId( new URI( "http://jomc.org/model" ) ).isEmpty() );
502         assertFalse( merged.getSchemas().getSchemasByPublicId( new URI( "http://jomc.org/tools/model" ) ).isEmpty() );
503         assertEquals( 2, merged.getServices().getServices( "org.jomc.modlet.ModelProvider" ).size() );
504         assertEquals( 2, merged.getServices().getServices( "org.jomc.modlet.ModelProcessor" ).size() );
505         assertEquals( 2, merged.getServices().getServices( "org.jomc.modlet.ModelValidator" ).size() );
506 
507         assertEquals( Command.STATUS_SUCCESS, Jomc.run( includeArgs ) );
508         merged = unmarshaller.unmarshal(
509             new StreamSource( this.getTestModletOutputDocument() ), Modlet.class ).getValue();
510 
511         assertNotNull( merged );
512         assertEquals( this.getTestModletName(), merged.getName() );
513         assertNotNull( merged.getSchemas() );
514         assertNotNull( merged.getServices() );
515         assertEquals( 1, merged.getSchemas().getSchema().size() );
516         assertFalse( merged.getSchemas().getSchemasByPublicId( new URI( "http://jomc.org/model" ) ).isEmpty() );
517         assertEquals( 3, merged.getServices().getService().size() );
518         assertEquals( 1, merged.getServices().getServices( "org.jomc.modlet.ModelProvider" ).size() );
519         assertEquals( 1, merged.getServices().getServices( "org.jomc.modlet.ModelProcessor" ).size() );
520         assertEquals( 1, merged.getServices().getServices( "org.jomc.modlet.ModelValidator" ).size() );
521 
522         assertEquals( Command.STATUS_SUCCESS, Jomc.run( excludeArgs ) );
523         merged = unmarshaller.unmarshal(
524             new StreamSource( this.getTestModletOutputDocument() ), Modlet.class ).getValue();
525 
526         assertNotNull( merged );
527         assertEquals( this.getTestModletName(), merged.getName() );
528         assertNull( merged.getSchemas() );
529         assertNull( merged.getServices() );
530     }
531 
532     @Test
533     public final void testShowModel() throws Exception
534     {
535         final File classesDirectory = new File( this.getOutputDirectory(), "jomc-test-classes" );
536 
537         final String[] help = new String[]
538         {
539             "show-model", "help"
540         };
541 
542         final String[] showModel = new String[]
543         {
544             "show-model", "-cp", '"' + classesDirectory.getAbsolutePath() + '"'
545         };
546 
547         final String[] writeModel = new String[]
548         {
549             "show-model", "-cp", '"' + classesDirectory.getAbsolutePath() + '"', "-d",
550             '"' + this.getTestShowModelOutputDocument().getAbsolutePath() + '"'
551         };
552 
553         final String[] showSpecification = new String[]
554         {
555             "show-model", "-cp", '"' + classesDirectory.getAbsolutePath() + '"', "-spec=\"JOMC ⁑ CLI ⁑ Command\""
556         };
557 
558         final String[] writeSpecification = new String[]
559         {
560             "show-model", "-cp", '"' + classesDirectory.getAbsolutePath() + '"', "-spec=\"JOMC ⁑ CLI ⁑ Command\"",
561             "-d", '"' + this.getTestShowSpecificationOutputDocument().getAbsolutePath() + '"'
562         };
563 
564         final String[] showInstance = new String[]
565         {
566             "show-model", "-cp", '"' + classesDirectory.getAbsolutePath() + '"',
567             "-impl=\"JOMC ⁑ CLI ⁑ Default show-model Command\""
568         };
569 
570         final String[] writeInstance = new String[]
571         {
572             "show-model", "-cp", '"' + classesDirectory.getAbsolutePath() + '"',
573             "-impl=\"JOMC ⁑ CLI ⁑ Default show-model Command\"",
574             "-d", '"' + this.getTestShowInstanceOutputDocument().getAbsolutePath() + '"'
575         };
576 
577         final String[] showSpecificationAndInstance = new String[]
578         {
579             "show-model", "-cp", '"' + classesDirectory.getAbsolutePath() + '"', "-spec=\"JOMC ⁑ CLI ⁑ Command\"",
580             "-impl=\"JOMC ⁑ CLI ⁑ Default show-model Command\""
581         };
582 
583         final String[] writeSpecificationAndInstance = new String[]
584         {
585             "show-model", "-cp", '"' + classesDirectory.getAbsolutePath() + '"',
586             "-spec=\"JOMC ⁑ CLI ⁑ Command\"",
587             "-impl=\"JOMC ⁑ CLI ⁑ Default show-model Command\"", "-d",
588             '"' + this.getTestShowSpecificationAndInstanceOutputDocument().getAbsolutePath() + '"'
589         };
590 
591         final String[] unsupportedOption = new String[]
592         {
593             "show-model", "--unsupported-option"
594         };
595 
596         assertEquals( Command.STATUS_SUCCESS, Jomc.run( help ) );
597         assertEquals( Command.STATUS_SUCCESS, Jomc.run( showModel ) );
598         assertEquals( Command.STATUS_SUCCESS, Jomc.run( writeModel ) );
599         assertEquals( Command.STATUS_SUCCESS, Jomc.run( showInstance ) );
600         assertEquals( Command.STATUS_SUCCESS, Jomc.run( writeInstance ) );
601         assertEquals( Command.STATUS_SUCCESS, Jomc.run( showSpecification ) );
602         assertEquals( Command.STATUS_SUCCESS, Jomc.run( writeSpecification ) );
603         assertEquals( Command.STATUS_SUCCESS, Jomc.run( showSpecificationAndInstance ) );
604         assertEquals( Command.STATUS_SUCCESS, Jomc.run( writeSpecificationAndInstance ) );
605         assertEquals( Command.STATUS_FAILURE, Jomc.run( unsupportedOption ) );
606     }
607 
608     @Before
609     public void setUp() throws IOException
610     {
611         // Ensures the singleton is initialized prior to class Jomc switching resource locations.
612         ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() );
613 
614         final File f = this.getOutputDirectory();
615         if ( !f.exists() )
616         {
617             assertTrue( f.mkdirs() );
618         }
619 
620         final File resourcesDirectory = this.getResourcesDirectory();
621         assertTrue( resourcesDirectory.isAbsolute() );
622         FileUtils.deleteDirectory( resourcesDirectory );
623         assertTrue( resourcesDirectory.mkdirs() );
624 
625         for ( String testResourceName : TEST_RESOURCE_NAMES )
626         {
627             final URL rsrc = this.getClass().getResource( ABSOLUTE_RESOURCE_NAME_PREFIX + testResourceName );
628             assertNotNull( rsrc );
629             FileUtils.copyURLToFile( rsrc, new File( resourcesDirectory, testResourceName ) );
630         }
631 
632         final File classesDirectory = this.getClassesDirectory();
633         this.unzipResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "classfiles.zip", classesDirectory );
634 
635         final File templatesDirectory = this.getTemplatesDirectory();
636         this.unzipResource( ABSOLUTE_RESOURCE_NAME_PREFIX + "templates.zip", templatesDirectory );
637     }
638 
639     private void unzipResource( final String resourceName, final File targetDirectory ) throws IOException
640     {
641         assertTrue( resourceName.startsWith( "/" ) );
642         final URL resource = this.getClass().getResource( resourceName );
643         assertNotNull( "Expected '" + resourceName + "' not found.", resource );
644 
645         assertTrue( targetDirectory.isAbsolute() );
646         FileUtils.deleteDirectory( targetDirectory );
647         assertTrue( targetDirectory.mkdirs() );
648 
649         ZipInputStream in = null;
650         boolean suppressExceptionOnClose = true;
651 
652         try
653         {
654             in = new ZipInputStream( resource.openStream() );
655             ZipEntry e;
656 
657             while ( ( e = in.getNextEntry() ) != null )
658             {
659                 if ( e.isDirectory() )
660                 {
661                     continue;
662                 }
663 
664                 final File dest = new File( targetDirectory, e.getName() );
665                 assertTrue( dest.isAbsolute() );
666 
667                 OutputStream out = null;
668 
669                 try
670                 {
671                     out = FileUtils.openOutputStream( dest );
672                     IOUtils.copy( in, out );
673                     suppressExceptionOnClose = false;
674                 }
675                 finally
676                 {
677                     try
678                     {
679                         if ( out != null )
680                         {
681                             out.close();
682                         }
683 
684                         suppressExceptionOnClose = true;
685                     }
686                     catch ( final IOException ex )
687                     {
688                         if ( !suppressExceptionOnClose )
689                         {
690                             throw ex;
691                         }
692                     }
693                 }
694 
695                 in.closeEntry();
696             }
697 
698             suppressExceptionOnClose = false;
699         }
700         finally
701         {
702             try
703             {
704                 if ( in != null )
705                 {
706                     in.close();
707                 }
708             }
709             catch ( final IOException e )
710             {
711                 if ( !suppressExceptionOnClose )
712                 {
713                     throw e;
714                 }
715             }
716         }
717     }
718 
719     // SECTION-END
720     // SECTION-START[Constructors]
721     // <editor-fold defaultstate="collapsed" desc=" Generated Constructors ">
722     /** Creates a new {@code JomcTest} instance. */
723     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
724     public JomcTest()
725     {
726         // SECTION-START[Default Constructor]
727         super();
728         // SECTION-END
729     }
730     // </editor-fold>
731     // SECTION-END
732     // SECTION-START[Dependencies]
733     // SECTION-END
734     // SECTION-START[Properties]
735     // <editor-fold defaultstate="collapsed" desc=" Generated Properties ">
736     /**
737      * Gets the value of the {@code <Classes Directory>} property.
738      * <p><dl>
739      *   <dt><b>Final:</b></dt><dd>No</dd>
740      * </dl></p>
741      * @return Directory holding class files.
742      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
743      */
744     @SuppressWarnings("unused")
745     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
746     private java.io.File getClassesDirectory()
747     {
748         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Classes Directory" );
749         assert _p != null : "'Classes Directory' property not found.";
750         return _p;
751     }
752     /**
753      * Gets the value of the {@code <Resources Directory>} property.
754      * <p><dl>
755      *   <dt><b>Final:</b></dt><dd>No</dd>
756      * </dl></p>
757      * @return Directory holding resources.
758      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
759      */
760     @SuppressWarnings("unused")
761     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
762     private java.io.File getResourcesDirectory()
763     {
764         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Resources Directory" );
765         assert _p != null : "'Resources Directory' property not found.";
766         return _p;
767     }
768     /**
769      * Gets the value of the {@code <Templates Directory>} property.
770      * <p><dl>
771      *   <dt><b>Final:</b></dt><dd>No</dd>
772      * </dl></p>
773      * @return Directory holding templates.
774      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
775      */
776     @SuppressWarnings("unused")
777     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
778     private java.io.File getTemplatesDirectory()
779     {
780         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Templates Directory" );
781         assert _p != null : "'Templates Directory' property not found.";
782         return _p;
783     }
784     /**
785      * Gets the value of the {@code <Test Classes Directory>} property.
786      * <p><dl>
787      *   <dt><b>Final:</b></dt><dd>No</dd>
788      * </dl></p>
789      * @return Directory holding class files to commit to and to validate.
790      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
791      */
792     @SuppressWarnings("unused")
793     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
794     private java.io.File getTestClassesDirectory()
795     {
796         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Classes Directory" );
797         assert _p != null : "'Test Classes Directory' property not found.";
798         return _p;
799     }
800     /**
801      * Gets the value of the {@code <Test Model Document>} property.
802      * <p><dl>
803      *   <dt><b>Final:</b></dt><dd>No</dd>
804      * </dl></p>
805      * @return Valid model document.
806      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
807      */
808     @SuppressWarnings("unused")
809     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
810     private java.io.File getTestModelDocument()
811     {
812         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Model Document" );
813         assert _p != null : "'Test Model Document' property not found.";
814         return _p;
815     }
816     /**
817      * Gets the value of the {@code <Test Model Document Illegal>} property.
818      * <p><dl>
819      *   <dt><b>Final:</b></dt><dd>No</dd>
820      * </dl></p>
821      * @return Model document with invalid model.
822      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
823      */
824     @SuppressWarnings("unused")
825     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
826     private java.io.File getTestModelDocumentIllegal()
827     {
828         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Model Document Illegal" );
829         assert _p != null : "'Test Model Document Illegal' property not found.";
830         return _p;
831     }
832     /**
833      * Gets the value of the {@code <Test Model Document Illegal Schema Constraints>} property.
834      * <p><dl>
835      *   <dt><b>Final:</b></dt><dd>No</dd>
836      * </dl></p>
837      * @return Model document not valid to the JOMC JAXP schema.
838      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
839      */
840     @SuppressWarnings("unused")
841     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
842     private java.io.File getTestModelDocumentIllegalSchemaConstraints()
843     {
844         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Model Document Illegal Schema Constraints" );
845         assert _p != null : "'Test Model Document Illegal Schema Constraints' property not found.";
846         return _p;
847     }
848     /**
849      * Gets the value of the {@code <Test Model Document Non Existent Classes>} property.
850      * <p><dl>
851      *   <dt><b>Final:</b></dt><dd>No</dd>
852      * </dl></p>
853      * @return Model document referencing non-existent classes.
854      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
855      */
856     @SuppressWarnings("unused")
857     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
858     private java.io.File getTestModelDocumentNonExistentClasses()
859     {
860         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Model Document Non Existent Classes" );
861         assert _p != null : "'Test Model Document Non Existent Classes' property not found.";
862         return _p;
863     }
864     /**
865      * Gets the value of the {@code <Test Model Output Document>} property.
866      * <p><dl>
867      *   <dt><b>Final:</b></dt><dd>No</dd>
868      * </dl></p>
869      * @return File to write a transformed model to.
870      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
871      */
872     @SuppressWarnings("unused")
873     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
874     private java.io.File getTestModelOutputDocument()
875     {
876         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Model Output Document" );
877         assert _p != null : "'Test Model Output Document' property not found.";
878         return _p;
879     }
880     /**
881      * Gets the value of the {@code <Test Model Stylesheet>} property.
882      * <p><dl>
883      *   <dt><b>Final:</b></dt><dd>No</dd>
884      * </dl></p>
885      * @return Valid model object stylesheet.
886      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
887      */
888     @SuppressWarnings("unused")
889     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
890     private java.io.File getTestModelStylesheet()
891     {
892         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Model Stylesheet" );
893         assert _p != null : "'Test Model Stylesheet' property not found.";
894         return _p;
895     }
896     /**
897      * Gets the value of the {@code <Test Modlet Name>} property.
898      * <p><dl>
899      *   <dt><b>Final:</b></dt><dd>No</dd>
900      * </dl></p>
901      * @return Test module name.
902      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
903      */
904     @SuppressWarnings("unused")
905     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
906     private java.lang.String getTestModletName()
907     {
908         final java.lang.String _p = (java.lang.String) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Modlet Name" );
909         assert _p != null : "'Test Modlet Name' property not found.";
910         return _p;
911     }
912     /**
913      * Gets the value of the {@code <Test Modlet Output Document>} property.
914      * <p><dl>
915      *   <dt><b>Final:</b></dt><dd>No</dd>
916      * </dl></p>
917      * @return File to write a transformed modlet to.
918      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
919      */
920     @SuppressWarnings("unused")
921     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
922     private java.io.File getTestModletOutputDocument()
923     {
924         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Modlet Output Document" );
925         assert _p != null : "'Test Modlet Output Document' property not found.";
926         return _p;
927     }
928     /**
929      * Gets the value of the {@code <Test Modlet Stylesheet>} property.
930      * <p><dl>
931      *   <dt><b>Final:</b></dt><dd>No</dd>
932      * </dl></p>
933      * @return Valid modlet object stylesheet.
934      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
935      */
936     @SuppressWarnings("unused")
937     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
938     private java.io.File getTestModletStylesheet()
939     {
940         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Modlet Stylesheet" );
941         assert _p != null : "'Test Modlet Stylesheet' property not found.";
942         return _p;
943     }
944     /**
945      * Gets the value of the {@code <Test Module Name>} property.
946      * <p><dl>
947      *   <dt><b>Final:</b></dt><dd>No</dd>
948      * </dl></p>
949      * @return Test module name.
950      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
951      */
952     @SuppressWarnings("unused")
953     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
954     private java.lang.String getTestModuleName()
955     {
956         final java.lang.String _p = (java.lang.String) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Module Name" );
957         assert _p != null : "'Test Module Name' property not found.";
958         return _p;
959     }
960     /**
961      * Gets the value of the {@code <Test Resources Directory>} property.
962      * <p><dl>
963      *   <dt><b>Final:</b></dt><dd>No</dd>
964      * </dl></p>
965      * @return Directory to generate resources to.
966      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
967      */
968     @SuppressWarnings("unused")
969     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
970     private java.io.File getTestResourcesDirectory()
971     {
972         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Resources Directory" );
973         assert _p != null : "'Test Resources Directory' property not found.";
974         return _p;
975     }
976     /**
977      * Gets the value of the {@code <Test Show Instance Output Document>} property.
978      * <p><dl>
979      *   <dt><b>Final:</b></dt><dd>No</dd>
980      * </dl></p>
981      * @return File to write an instance to.
982      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
983      */
984     @SuppressWarnings("unused")
985     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
986     private java.io.File getTestShowInstanceOutputDocument()
987     {
988         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Show Instance Output Document" );
989         assert _p != null : "'Test Show Instance Output Document' property not found.";
990         return _p;
991     }
992     /**
993      * Gets the value of the {@code <Test Show Model Output Document>} property.
994      * <p><dl>
995      *   <dt><b>Final:</b></dt><dd>No</dd>
996      * </dl></p>
997      * @return File to write a model to.
998      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
999      */
1000     @SuppressWarnings("unused")
1001     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
1002     private java.io.File getTestShowModelOutputDocument()
1003     {
1004         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Show Model Output Document" );
1005         assert _p != null : "'Test Show Model Output Document' property not found.";
1006         return _p;
1007     }
1008     /**
1009      * Gets the value of the {@code <Test Show Specification And Instance Output Document>} property.
1010      * <p><dl>
1011      *   <dt><b>Final:</b></dt><dd>No</dd>
1012      * </dl></p>
1013      * @return File to write a model holding a specification and an instance to.
1014      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
1015      */
1016     @SuppressWarnings("unused")
1017     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
1018     private java.io.File getTestShowSpecificationAndInstanceOutputDocument()
1019     {
1020         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Show Specification And Instance Output Document" );
1021         assert _p != null : "'Test Show Specification And Instance Output Document' property not found.";
1022         return _p;
1023     }
1024     /**
1025      * Gets the value of the {@code <Test Show Specification Output Document>} property.
1026      * <p><dl>
1027      *   <dt><b>Final:</b></dt><dd>No</dd>
1028      * </dl></p>
1029      * @return File to write a specification to.
1030      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
1031      */
1032     @SuppressWarnings("unused")
1033     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
1034     private java.io.File getTestShowSpecificationOutputDocument()
1035     {
1036         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Show Specification Output Document" );
1037         assert _p != null : "'Test Show Specification Output Document' property not found.";
1038         return _p;
1039     }
1040     /**
1041      * Gets the value of the {@code <Test Sources Directory>} property.
1042      * <p><dl>
1043      *   <dt><b>Final:</b></dt><dd>No</dd>
1044      * </dl></p>
1045      * @return Directory holding source code files to manage.
1046      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
1047      */
1048     @SuppressWarnings("unused")
1049     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" )
1050     private java.io.File getTestSourcesDirectory()
1051     {
1052         final java.io.File _p = (java.io.File) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Test Sources Directory" );
1053         assert _p != null : "'Test Sources Directory' property not found.";
1054         return _p;
1055     }
1056     // </editor-fold>
1057     // SECTION-END
1058     // SECTION-START[Messages]
1059     // SECTION-END
1060 }