001    /*
002     *   Copyright (C) Christian Schulte, 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: DefaultModelContextTest.java 4255 2012-02-12 22:54:20Z schulte2005 $
029     *
030     */
031    package org.jomc.modlet.test;
032    
033    import java.io.File;
034    import java.io.FileOutputStream;
035    import java.io.IOException;
036    import java.io.OutputStream;
037    import java.net.URL;
038    import java.util.Properties;
039    import javax.xml.bind.JAXBContext;
040    import javax.xml.bind.Marshaller;
041    import javax.xml.bind.Unmarshaller;
042    import org.jomc.modlet.DefaultModelContext;
043    import org.jomc.modlet.DefaultModletProvider;
044    import org.jomc.modlet.Model;
045    import org.jomc.modlet.ModelException;
046    import org.jomc.modlet.Modlets;
047    import org.jomc.modlet.test.support.IllegalServicesModletProvider;
048    import org.jomc.modlet.test.support.ServicesNotFoundModletProvider;
049    import org.jomc.modlet.test.support.TestModelProcessor;
050    import org.jomc.modlet.test.support.TestModelProvider;
051    import org.jomc.modlet.test.support.TestModelValidator;
052    import org.jomc.modlet.test.support.TestModletProvider;
053    import org.junit.Test;
054    import org.w3c.dom.ls.LSResourceResolver;
055    import org.xml.sax.EntityResolver;
056    import static org.junit.Assert.assertEquals;
057    import static org.junit.Assert.assertFalse;
058    import static org.junit.Assert.assertNotNull;
059    import static org.junit.Assert.assertNull;
060    import static org.junit.Assert.assertTrue;
061    import static org.junit.Assert.fail;
062    
063    /**
064     * Test cases for class {@code org.jomc.modlet.DefaultModelContext}.
065     *
066     * @author <a href="mailto:schulte2005@users.sourceforge.net">Christian Schulte</a> 1.0
067     * @version $JOMC: DefaultModelContextTest.java 4255 2012-02-12 22:54:20Z schulte2005 $
068     */
069    public class DefaultModelContextTest extends ModelContextTest
070    {
071    
072        private static final String MODLET_TEST_NS = "http://jomc.org/modlet/test";
073    
074        /** Creates a new {@code DefaultModelContextTest} instance. */
075        public DefaultModelContextTest()
076        {
077            super();
078        }
079    
080        /** {@inheritDoc} */
081        @Override
082        public DefaultModelContext getModelContext() throws ModelException
083        {
084            return (DefaultModelContext) super.getModelContext();
085        }
086    
087        /** {@inheritDoc} */
088        @Override
089        protected DefaultModelContext newModelContext()
090        {
091            return new DefaultModelContext();
092        }
093    
094        @Test
095        public final void testFindModlets() throws Exception
096        {
097            final File tmpFile = File.createTempFile( this.getClass().getName(), ".properties" );
098            tmpFile.deleteOnExit();
099    
100            final Properties properties = new Properties();
101            properties.setProperty( "org.jomc.modlet.ModletProvider.0", "DOES_NOT_EXIST" );
102            this.writePropertiesFile( properties, tmpFile );
103    
104            try
105            {
106                DefaultModelContext.setDefaultPlatformProviderLocation( tmpFile.getAbsolutePath() );
107                DefaultModelContext.setDefaultProviderLocation( "DOES_NOT_EXIST" );
108                this.getModelContext().setPlatformProviderLocation( null );
109                this.getModelContext().setProviderLocation( null );
110    
111                this.getModelContext().findModlets();
112                fail( "Expected ModelException not thrown." );
113            }
114            catch ( final ModelException e )
115            {
116                assertNotNull( e.getMessage() );
117                System.out.println( e );
118            }
119    
120            properties.setProperty( "org.jomc.modlet.ModletProvider.0", "java.lang.Object" );
121            this.writePropertiesFile( properties, tmpFile );
122    
123            try
124            {
125                DefaultModelContext.setDefaultPlatformProviderLocation( tmpFile.getAbsolutePath() );
126                DefaultModelContext.setDefaultProviderLocation( "DOES_NOT_EXIST" );
127                this.getModelContext().setPlatformProviderLocation( null );
128                this.getModelContext().setProviderLocation( null );
129    
130                this.getModelContext().findModlets();
131                fail( "Expected ModelException not thrown." );
132            }
133            catch ( final ModelException e )
134            {
135                assertNotNull( e.getMessage() );
136                System.out.println( e );
137            }
138    
139            properties.setProperty( "org.jomc.modlet.ModletProvider.0", TestModletProvider.class.getName() );
140            this.writePropertiesFile( properties, tmpFile );
141    
142            DefaultModelContext.setDefaultPlatformProviderLocation( tmpFile.getAbsolutePath() );
143            DefaultModelContext.setDefaultProviderLocation( "DOES_NOT_EXIST" );
144            this.getModelContext().setPlatformProviderLocation( null );
145            this.getModelContext().setProviderLocation( null );
146    
147            assertNotNull( this.getModelContext().findModlets().getModlet( TestModletProvider.class.getName() ) );
148            tmpFile.delete();
149    
150            try
151            {
152                DefaultModelContext.setDefaultPlatformProviderLocation( null );
153                DefaultModelContext.setDefaultProviderLocation( "META-INF/non-existent-services" );
154                this.getModelContext().setPlatformProviderLocation( null );
155                this.getModelContext().setProviderLocation( null );
156    
157                this.getModelContext().findModlets();
158                fail( "Expected ModelException not thrown." );
159            }
160            catch ( final ModelException e )
161            {
162                assertNotNull( e.getMessage() );
163                System.out.println( e );
164            }
165    
166            try
167            {
168                DefaultModelContext.setDefaultPlatformProviderLocation( null );
169                DefaultModelContext.setDefaultProviderLocation( "META-INF/illegal-services" );
170                this.getModelContext().setPlatformProviderLocation( null );
171                this.getModelContext().setProviderLocation( null );
172    
173                this.getModelContext().findModlets();
174                fail( "Expected ModelException not thrown." );
175            }
176            catch ( final ModelException e )
177            {
178                assertNotNull( e.getMessage() );
179                System.out.println( e );
180            }
181    
182            DefaultModelContext.setDefaultPlatformProviderLocation( null );
183            DefaultModelContext.setDefaultProviderLocation( null );
184            this.getModelContext().setPlatformProviderLocation( null );
185            this.getModelContext().setProviderLocation( null );
186            this.getModelContext().setModlets( null );
187    
188            this.getModelContext().setProviderLocation( "META-INF/illegal-services-modlet" );
189            Modlets modlets = this.getModelContext().findModlets();
190            assertNotNull( modlets );
191    
192            try
193            {
194                this.getModelContext().findModel( IllegalServicesModletProvider.class.getName() );
195                fail( "Expected ModelException not thrown." );
196            }
197            catch ( final ModelException e )
198            {
199                assertNotNull( e.getMessage() );
200                System.out.println( e.toString() );
201            }
202    
203            Model model = new Model();
204            model.setIdentifier( IllegalServicesModletProvider.class.getName() );
205    
206            try
207            {
208                this.getModelContext().processModel( model );
209                fail( "Expected ModelException not thrown." );
210            }
211            catch ( final ModelException e )
212            {
213                assertNotNull( e.getMessage() );
214                System.out.println( e.toString() );
215            }
216    
217            try
218            {
219                this.getModelContext().validateModel( model );
220                fail( "Expected ModelException not thrown." );
221            }
222            catch ( final ModelException e )
223            {
224                assertNotNull( e.getMessage() );
225                System.out.println( e.toString() );
226            }
227    
228            try
229            {
230                this.getModelContext().createMarshaller( model.getIdentifier() );
231                fail( "Expected ModelException not thrown." );
232            }
233            catch ( final ModelException e )
234            {
235                assertNotNull( e.getMessage() );
236                System.out.println( e.toString() );
237            }
238    
239            try
240            {
241                this.getModelContext().createUnmarshaller( model.getIdentifier() );
242                fail( "Expected ModelException not thrown." );
243            }
244            catch ( final ModelException e )
245            {
246                assertNotNull( e.getMessage() );
247                System.out.println( e.toString() );
248            }
249    
250            this.getModelContext().setProviderLocation( "META-INF/non-existent-services-modlet" );
251            this.getModelContext().setModlets( null );
252            modlets = this.getModelContext().findModlets();
253            assertNotNull( modlets );
254    
255            try
256            {
257                this.getModelContext().findModel( ServicesNotFoundModletProvider.class.getName() );
258                fail( "Expected ModelException not thrown." );
259            }
260            catch ( final ModelException e )
261            {
262                assertNotNull( e.getMessage() );
263                System.out.println( e.toString() );
264            }
265    
266            model = new Model();
267            model.setIdentifier( ServicesNotFoundModletProvider.class.getName() );
268    
269            try
270            {
271                this.getModelContext().processModel( model );
272                fail( "Expected ModelException not thrown." );
273            }
274            catch ( final ModelException e )
275            {
276                assertNotNull( e.getMessage() );
277                System.out.println( e.toString() );
278            }
279    
280            try
281            {
282                this.getModelContext().validateModel( model );
283                fail( "Expected ModelException not thrown." );
284            }
285            catch ( final ModelException e )
286            {
287                assertNotNull( e.getMessage() );
288                System.out.println( e.toString() );
289            }
290    
291            try
292            {
293                this.getModelContext().createMarshaller( model.getIdentifier() );
294                fail( "Expected ModelException not thrown." );
295            }
296            catch ( final ModelException e )
297            {
298                assertNotNull( e.getMessage() );
299                System.out.println( e.toString() );
300            }
301    
302            try
303            {
304                this.getModelContext().createUnmarshaller( model.getIdentifier() );
305                fail( "Expected ModelException not thrown." );
306            }
307            catch ( final ModelException e )
308            {
309                assertNotNull( e.getMessage() );
310                System.out.println( e.toString() );
311            }
312    
313            this.getModelContext().setProviderLocation( "META-INF/extended-services" );
314            this.getModelContext().setModlets( null );
315            modlets = this.getModelContext().findModlets();
316            assertNotNull( modlets );
317    
318            final TestModletProvider testModletProvider =
319                (TestModletProvider) this.getModelContext().getAttribute( TestModletProvider.class.getName() );
320    
321            assertNotNull( testModletProvider );
322            assertTrue( testModletProvider.isBooleanProperty() );
323            assertEquals( 'T', testModletProvider.getCharacterProperty() );
324            assertEquals( (byte) -1, testModletProvider.getByteProperty() );
325            assertEquals( (short) -1, testModletProvider.getShortProperty() );
326            assertEquals( -1, testModletProvider.getIntProperty() );
327            assertEquals( -1, testModletProvider.getLongProperty() );
328            assertEquals( -1, testModletProvider.getFloatProperty(), 0 );
329            assertEquals( -1, testModletProvider.getDoubleProperty(), 0 );
330            assertEquals( "TEST", testModletProvider.getStringProperty() );
331            assertEquals( new URL( "file:///tmp" ), testModletProvider.getUrlProperty() );
332            assertEquals( Thread.State.RUNNABLE, testModletProvider.getEnumProperty() );
333            assertNull( testModletProvider.getObjectProperty() );
334    
335            try
336            {
337                this.getModelContext().setProviderLocation( "META-INF/illegal-extended-services-1" );
338                this.getModelContext().setModlets( null );
339                this.getModelContext().findModlets();
340                fail( "Expected 'ModelException' not thrown." );
341            }
342            catch ( final ModelException e )
343            {
344                assertNotNull( e.getMessage() );
345                System.out.println( e.toString() );
346            }
347    
348            try
349            {
350                this.getModelContext().setProviderLocation( "META-INF/illegal-extended-services-2" );
351                this.getModelContext().setModlets( null );
352                this.getModelContext().findModlets();
353                fail( "Expected 'ModelException' not thrown." );
354            }
355            catch ( final ModelException e )
356            {
357                assertNotNull( e.getMessage() );
358                System.out.println( e.toString() );
359            }
360    
361            try
362            {
363                this.getModelContext().setProviderLocation( "META-INF/illegal-extended-services-3" );
364                this.getModelContext().setModlets( null );
365                this.getModelContext().findModlets();
366                fail( "Expected 'ModelException' not thrown." );
367            }
368            catch ( final ModelException e )
369            {
370                assertNotNull( e.getMessage() );
371                System.out.println( e.toString() );
372            }
373    
374            DefaultModelContext.setDefaultPlatformProviderLocation( null );
375            DefaultModelContext.setDefaultProviderLocation( null );
376            this.getModelContext().setPlatformProviderLocation( null );
377            this.getModelContext().setProviderLocation( null );
378        }
379    
380        @Test
381        public final void testFindModletsWithAttributes() throws Exception
382        {
383            final File tmpFile = File.createTempFile( this.getClass().getName(), ".properties" );
384            tmpFile.deleteOnExit();
385    
386            final Properties properties = new Properties();
387            properties.setProperty( "org.jomc.modlet.ModletProvider.0", "DOES_NOT_EXIST" );
388            this.writePropertiesFile( properties, tmpFile );
389    
390            try
391            {
392                DefaultModelContext.setDefaultPlatformProviderLocation( null );
393                DefaultModelContext.setDefaultProviderLocation( null );
394                this.getModelContext().setPlatformProviderLocation( null );
395                this.getModelContext().setProviderLocation( null );
396                this.getModelContext().setAttribute( DefaultModelContext.PLATFORM_PROVIDER_LOCATION_ATTRIBUTE_NAME,
397                                                     tmpFile.getAbsolutePath() );
398    
399                this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
400                                                     "DOES_NOT_EXIST" );
401    
402                this.getModelContext().findModlets();
403                fail( "Expected ModelException not thrown." );
404            }
405            catch ( final ModelException e )
406            {
407                assertNotNull( e.getMessage() );
408                System.out.println( e );
409            }
410    
411            properties.setProperty( "org.jomc.modlet.ModletProvider.0", "java.lang.Object" );
412            this.writePropertiesFile( properties, tmpFile );
413    
414            try
415            {
416                DefaultModelContext.setDefaultPlatformProviderLocation( null );
417                DefaultModelContext.setDefaultProviderLocation( null );
418                this.getModelContext().setPlatformProviderLocation( null );
419                this.getModelContext().setProviderLocation( null );
420                this.getModelContext().setAttribute( DefaultModelContext.PLATFORM_PROVIDER_LOCATION_ATTRIBUTE_NAME,
421                                                     tmpFile.getAbsolutePath() );
422    
423                this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
424                                                     "DOES_NOT_EXIST" );
425    
426                this.getModelContext().findModlets();
427                fail( "Expected ModelException not thrown." );
428            }
429            catch ( final ModelException e )
430            {
431                assertNotNull( e.getMessage() );
432                System.out.println( e );
433            }
434    
435            properties.setProperty( "org.jomc.modlet.ModletProvider.0", TestModletProvider.class.getName() );
436            this.writePropertiesFile( properties, tmpFile );
437    
438            DefaultModelContext.setDefaultPlatformProviderLocation( null );
439            DefaultModelContext.setDefaultProviderLocation( null );
440            this.getModelContext().setPlatformProviderLocation( null );
441            this.getModelContext().setProviderLocation( null );
442            this.getModelContext().setAttribute( DefaultModelContext.PLATFORM_PROVIDER_LOCATION_ATTRIBUTE_NAME,
443                                                 tmpFile.getAbsolutePath() );
444    
445            this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
446                                                 "DOES_NOT_EXIST" );
447    
448            assertNotNull( this.getModelContext().findModlets().getModlet( TestModletProvider.class.getName() ) );
449            tmpFile.delete();
450    
451            try
452            {
453                DefaultModelContext.setDefaultPlatformProviderLocation( null );
454                DefaultModelContext.setDefaultProviderLocation( null );
455                this.getModelContext().setPlatformProviderLocation( null );
456                this.getModelContext().setProviderLocation( null );
457                this.getModelContext().clearAttribute( DefaultModelContext.PLATFORM_PROVIDER_LOCATION_ATTRIBUTE_NAME );
458                this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
459                                                     "META-INF/non-existent-services" );
460    
461                this.getModelContext().findModlets();
462                fail( "Expected ModelException not thrown." );
463            }
464            catch ( final ModelException e )
465            {
466                assertNotNull( e.getMessage() );
467                System.out.println( e );
468            }
469    
470            try
471            {
472                DefaultModelContext.setDefaultPlatformProviderLocation( null );
473                DefaultModelContext.setDefaultProviderLocation( null );
474                this.getModelContext().setPlatformProviderLocation( null );
475                this.getModelContext().setProviderLocation( null );
476                this.getModelContext().clearAttribute( DefaultModelContext.PLATFORM_PROVIDER_LOCATION_ATTRIBUTE_NAME );
477                this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
478                                                     "META-INF/illegal-services" );
479    
480                this.getModelContext().findModlets();
481                fail( "Expected ModelException not thrown." );
482            }
483            catch ( final ModelException e )
484            {
485                assertNotNull( e.getMessage() );
486                System.out.println( e );
487            }
488    
489            DefaultModelContext.setDefaultPlatformProviderLocation( null );
490            DefaultModelContext.setDefaultProviderLocation( null );
491            this.getModelContext().setPlatformProviderLocation( null );
492            this.getModelContext().setProviderLocation( null );
493            this.getModelContext().setModlets( null );
494            this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
495                                                 "META-INF/illegal-services-modlet" );
496    
497            Modlets modlets = this.getModelContext().findModlets();
498            assertNotNull( modlets );
499    
500            try
501            {
502                this.getModelContext().findModel( IllegalServicesModletProvider.class.getName() );
503                fail( "Expected ModelException not thrown." );
504            }
505            catch ( final ModelException e )
506            {
507                assertNotNull( e.getMessage() );
508                System.out.println( e.toString() );
509            }
510    
511            Model model = new Model();
512            model.setIdentifier( IllegalServicesModletProvider.class.getName() );
513    
514            try
515            {
516                this.getModelContext().processModel( model );
517                fail( "Expected ModelException not thrown." );
518            }
519            catch ( final ModelException e )
520            {
521                assertNotNull( e.getMessage() );
522                System.out.println( e.toString() );
523            }
524    
525            try
526            {
527                this.getModelContext().validateModel( model );
528                fail( "Expected ModelException not thrown." );
529            }
530            catch ( final ModelException e )
531            {
532                assertNotNull( e.getMessage() );
533                System.out.println( e.toString() );
534            }
535    
536            try
537            {
538                this.getModelContext().createMarshaller( model.getIdentifier() );
539                fail( "Expected ModelException not thrown." );
540            }
541            catch ( final ModelException e )
542            {
543                assertNotNull( e.getMessage() );
544                System.out.println( e.toString() );
545            }
546    
547            try
548            {
549                this.getModelContext().createUnmarshaller( model.getIdentifier() );
550                fail( "Expected ModelException not thrown." );
551            }
552            catch ( final ModelException e )
553            {
554                assertNotNull( e.getMessage() );
555                System.out.println( e.toString() );
556            }
557    
558            this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
559                                                 "META-INF/non-existent-services-modlet" );
560    
561            this.getModelContext().setProviderLocation( null );
562            this.getModelContext().setModlets( null );
563            modlets = this.getModelContext().findModlets();
564            assertNotNull( modlets );
565    
566            try
567            {
568                this.getModelContext().findModel( ServicesNotFoundModletProvider.class.getName() );
569                fail( "Expected ModelException not thrown." );
570            }
571            catch ( final ModelException e )
572            {
573                assertNotNull( e.getMessage() );
574                System.out.println( e.toString() );
575            }
576    
577            model = new Model();
578            model.setIdentifier( ServicesNotFoundModletProvider.class.getName() );
579    
580            try
581            {
582                this.getModelContext().processModel( model );
583                fail( "Expected ModelException not thrown." );
584            }
585            catch ( final ModelException e )
586            {
587                assertNotNull( e.getMessage() );
588                System.out.println( e.toString() );
589            }
590    
591            try
592            {
593                this.getModelContext().validateModel( model );
594                fail( "Expected ModelException not thrown." );
595            }
596            catch ( final ModelException e )
597            {
598                assertNotNull( e.getMessage() );
599                System.out.println( e.toString() );
600            }
601    
602            try
603            {
604                this.getModelContext().createMarshaller( model.getIdentifier() );
605                fail( "Expected ModelException not thrown." );
606            }
607            catch ( final ModelException e )
608            {
609                assertNotNull( e.getMessage() );
610                System.out.println( e.toString() );
611            }
612    
613            try
614            {
615                this.getModelContext().createUnmarshaller( model.getIdentifier() );
616                fail( "Expected ModelException not thrown." );
617            }
618            catch ( final ModelException e )
619            {
620                assertNotNull( e.getMessage() );
621                System.out.println( e.toString() );
622            }
623    
624            this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
625                                                 "META-INF/extended-services" );
626    
627            this.getModelContext().setProviderLocation( null );
628            this.getModelContext().setModlets( null );
629            modlets = this.getModelContext().findModlets();
630            assertNotNull( modlets );
631    
632            final TestModletProvider testModletProvider =
633                (TestModletProvider) this.getModelContext().getAttribute( TestModletProvider.class.getName() );
634    
635            assertNotNull( testModletProvider );
636            assertTrue( testModletProvider.isBooleanProperty() );
637            assertEquals( 'T', testModletProvider.getCharacterProperty() );
638            assertEquals( (byte) -1, testModletProvider.getByteProperty() );
639            assertEquals( (short) -1, testModletProvider.getShortProperty() );
640            assertEquals( -1, testModletProvider.getIntProperty() );
641            assertEquals( -1, testModletProvider.getLongProperty() );
642            assertEquals( -1, testModletProvider.getFloatProperty(), 0 );
643            assertEquals( -1, testModletProvider.getDoubleProperty(), 0 );
644            assertEquals( "TEST", testModletProvider.getStringProperty() );
645            assertEquals( new URL( "file:///tmp" ), testModletProvider.getUrlProperty() );
646            assertEquals( Thread.State.RUNNABLE, testModletProvider.getEnumProperty() );
647            assertNull( testModletProvider.getObjectProperty() );
648    
649            try
650            {
651                this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
652                                                     "META-INF/illegal-extended-services-1" );
653    
654                this.getModelContext().setProviderLocation( null );
655                this.getModelContext().setModlets( null );
656                this.getModelContext().findModlets();
657                fail( "Expected 'ModelException' not thrown." );
658            }
659            catch ( final ModelException e )
660            {
661                assertNotNull( e.getMessage() );
662                System.out.println( e.toString() );
663            }
664    
665            try
666            {
667                this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
668                                                     "META-INF/illegal-extended-services-2" );
669    
670                this.getModelContext().setProviderLocation( null );
671                this.getModelContext().setModlets( null );
672                this.getModelContext().findModlets();
673                fail( "Expected 'ModelException' not thrown." );
674            }
675            catch ( final ModelException e )
676            {
677                assertNotNull( e.getMessage() );
678                System.out.println( e.toString() );
679            }
680    
681            try
682            {
683                this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
684                                                     "META-INF/illegal-extended-services-3" );
685    
686                this.getModelContext().setProviderLocation( null );
687                this.getModelContext().setModlets( null );
688                this.getModelContext().findModlets();
689                fail( "Expected 'ModelException' not thrown." );
690            }
691            catch ( final ModelException e )
692            {
693                assertNotNull( e.getMessage() );
694                System.out.println( e.toString() );
695            }
696    
697            DefaultModelContext.setDefaultPlatformProviderLocation( null );
698            DefaultModelContext.setDefaultProviderLocation( null );
699            this.getModelContext().setPlatformProviderLocation( null );
700            this.getModelContext().setProviderLocation( null );
701        }
702    
703        @Test
704        public final void testGetDefaultProviderLocation() throws Exception
705        {
706            System.clearProperty( "org.jomc.modlet.DefaultModelContext.defaultProviderLocation" );
707            DefaultModelContext.setDefaultProviderLocation( null );
708            assertEquals( "META-INF/services", DefaultModelContext.getDefaultProviderLocation() );
709            DefaultModelContext.setDefaultProviderLocation( null );
710            System.setProperty( "org.jomc.modlet.DefaultModelContext.defaultProviderLocation", "TEST" );
711            assertEquals( "TEST", DefaultModelContext.getDefaultProviderLocation() );
712            System.clearProperty( "org.jomc.modlet.DefaultModelContext.defaultProviderLocation" );
713            DefaultModelContext.setDefaultProviderLocation( null );
714            assertEquals( "META-INF/services", DefaultModelContext.getDefaultProviderLocation() );
715        }
716    
717        @Test
718        public final void testGetDefaultPlatformProviderLocation() throws Exception
719        {
720            System.clearProperty( "org.jomc.modlet.DefaultModelContext.defaultPlatformProviderLocation" );
721            DefaultModelContext.setDefaultPlatformProviderLocation( null );
722            assertNotNull( DefaultModelContext.getDefaultPlatformProviderLocation() );
723            DefaultModelContext.setDefaultPlatformProviderLocation( null );
724            System.setProperty( "org.jomc.modlet.DefaultModelContext.defaultPlatformProviderLocation", "TEST" );
725            assertEquals( "TEST", DefaultModelContext.getDefaultPlatformProviderLocation() );
726            System.clearProperty( "org.jomc.modlet.DefaultModelContext.defaultPlatformProviderLocation" );
727            DefaultModelContext.setDefaultPlatformProviderLocation( null );
728            assertNotNull( DefaultModelContext.getDefaultPlatformProviderLocation() );
729        }
730    
731        @Test
732        public final void testGetProviderLocation() throws Exception
733        {
734            DefaultModelContext.setDefaultProviderLocation( null );
735            this.getModelContext().setProviderLocation( null );
736            assertNotNull( this.getModelContext().getProviderLocation() );
737    
738            DefaultModelContext.setDefaultProviderLocation( "TEST" );
739            this.getModelContext().setProviderLocation( null );
740            assertEquals( "TEST", this.getModelContext().getProviderLocation() );
741    
742            DefaultModelContext.setDefaultProviderLocation( null );
743            this.getModelContext().setProviderLocation( null );
744        }
745    
746        @Test
747        public final void testGetPlatformProviderLocation() throws Exception
748        {
749            DefaultModelContext.setDefaultPlatformProviderLocation( null );
750            this.getModelContext().setPlatformProviderLocation( null );
751            assertNotNull( this.getModelContext().getPlatformProviderLocation() );
752    
753            DefaultModelContext.setDefaultPlatformProviderLocation( "TEST" );
754            this.getModelContext().setPlatformProviderLocation( null );
755            assertEquals( "TEST", this.getModelContext().getPlatformProviderLocation() );
756    
757            DefaultModelContext.setDefaultPlatformProviderLocation( null );
758            this.getModelContext().setPlatformProviderLocation( null );
759        }
760    
761        @Test
762        public final void testFindTestModel() throws Exception
763        {
764            final Model model = this.getModelContext().findModel( MODLET_TEST_NS );
765    
766            assertNotNull( model );
767            assertEquals( MODLET_TEST_NS, model.getIdentifier() );
768            assertNotNull( this.getModelContext().getAttribute( TestModelProvider.class.getName() ) );
769            assertNotNull( model.getAnyObject( TestComplexType.class ) );
770        }
771    
772        @Test
773        public final void testProcessTestModel() throws Exception
774        {
775            Model model = this.getModelContext().findModel( MODLET_TEST_NS );
776    
777            assertNotNull( model );
778            assertEquals( MODLET_TEST_NS, model.getIdentifier() );
779    
780            model = this.getModelContext().processModel( model );
781            assertNotNull( this.getModelContext().getAttribute( TestModelProcessor.class.getName() ) );
782            assertNotNull( model.getAnyObject( TestComplexType.class ) );
783            assertFalse( model.getAnyObject( TestComplexType.class ).getAny().isEmpty() );
784        }
785    
786        @Test
787        public final void testValidateTestModel() throws Exception
788        {
789            final Model model = this.getModelContext().findModel( MODLET_TEST_NS );
790            assertNotNull( model );
791            assertEquals( MODLET_TEST_NS, model.getIdentifier() );
792    
793            this.getModelContext().validateModel( model );
794            assertNotNull( this.getModelContext().getAttribute( TestModelValidator.class.getName() ) );
795        }
796    
797        @Test
798        public final void testTestModel() throws Exception
799        {
800            this.getModelContext().setModlets( null );
801            final Model model = this.getModelContext().findModel( MODLET_TEST_NS );
802            assertNotNull( model );
803            assertEquals( MODLET_TEST_NS, model.getIdentifier() );
804    
805            try
806            {
807                this.getModelContext().createSchema( MODLET_TEST_NS );
808                fail( "Expected ModelException not thrown." );
809            }
810            catch ( final ModelException e )
811            {
812                assertNotNull( e.getMessage() );
813                System.out.println( e.toString() );
814            }
815    
816            this.getModelContext().setModlets( null );
817            final JAXBContext context = this.getModelContext().createContext( MODLET_TEST_NS );
818            assertNotNull( context );
819    
820            this.getModelContext().setModlets( null );
821            final EntityResolver entityResolver = this.getModelContext().createEntityResolver( MODLET_TEST_NS );
822            assertNotNull( entityResolver );
823    
824            this.getModelContext().setModlets( null );
825            final Marshaller marshaller = this.getModelContext().createMarshaller( MODLET_TEST_NS );
826            assertNotNull( marshaller );
827    
828            this.getModelContext().setModlets( null );
829            final LSResourceResolver resourceResolver = this.getModelContext().createResourceResolver( MODLET_TEST_NS );
830            assertNotNull( resourceResolver );
831    
832            this.getModelContext().setModlets( null );
833            final Unmarshaller unmarshaller = this.getModelContext().createUnmarshaller( MODLET_TEST_NS );
834            assertNotNull( unmarshaller );
835    
836            final File tmpFile = File.createTempFile( this.getClass().getSimpleName(), ".xml" );
837            marshaller.marshal( new org.jomc.modlet.ObjectFactory().createModel( model ), tmpFile );
838            assertNotNull( unmarshaller.unmarshal( tmpFile ) );
839            assertTrue( tmpFile.delete() );
840        }
841    
842        @Test
843        public final void testServiceProperties() throws Exception
844        {
845            this.getModelContext().setModlets( null );
846            DefaultModletProvider.setDefaultModletLocation( "META-INF/properties-test/jomc-modlet.xml" );
847    
848            this.getModelContext().setModlets( null );
849            final JAXBContext context = this.getModelContext().createContext( MODLET_TEST_NS );
850            assertNotNull( context );
851    
852            this.getModelContext().setModlets( null );
853            final EntityResolver entityResolver = this.getModelContext().createEntityResolver( MODLET_TEST_NS );
854            assertNotNull( entityResolver );
855    
856            this.getModelContext().setModlets( null );
857            final LSResourceResolver resourceResolver = this.getModelContext().createResourceResolver( MODLET_TEST_NS );
858            assertNotNull( resourceResolver );
859    
860            try
861            {
862                this.getModelContext().setModlets( null );
863                this.getModelContext().createMarshaller( MODLET_TEST_NS );
864                fail( "Expected 'ModelException' not thrown." );
865            }
866            catch ( final ModelException e )
867            {
868                System.out.println( e.toString() );
869                assertNotNull( e.getMessage() );
870            }
871    
872            try
873            {
874                this.getModelContext().setModlets( null );
875                this.getModelContext().createUnmarshaller( MODLET_TEST_NS );
876                fail( "Expected 'ModelException' not thrown." );
877            }
878            catch ( final ModelException e )
879            {
880                System.out.println( e.toString() );
881                assertNotNull( e.getMessage() );
882            }
883    
884            try
885            {
886                this.getModelContext().setModlets( null );
887                this.getModelContext().findModel( MODLET_TEST_NS );
888                fail( "Expected 'ModelException' not thrown." );
889            }
890            catch ( final ModelException e )
891            {
892                System.out.println( e.toString() );
893                assertNotNull( e.getMessage() );
894            }
895    
896            final Model model = new Model();
897            model.setIdentifier( MODLET_TEST_NS );
898    
899            try
900            {
901                this.getModelContext().setModlets( null );
902                this.getModelContext().findModel( model );
903                fail( "Expected 'ModelException' not thrown." );
904            }
905            catch ( final ModelException e )
906            {
907                System.out.println( e.toString() );
908                assertNotNull( e.getMessage() );
909            }
910    
911            try
912            {
913                this.getModelContext().setModlets( null );
914                this.getModelContext().processModel( model );
915                fail( "Expected 'ModelException' not thrown." );
916            }
917            catch ( final ModelException e )
918            {
919                System.out.println( e.toString() );
920                assertNotNull( e.getMessage() );
921            }
922    
923            try
924            {
925                this.getModelContext().setModlets( null );
926                this.getModelContext().validateModel( model );
927                fail( "Expected 'ModelException' not thrown." );
928            }
929            catch ( final ModelException e )
930            {
931                System.out.println( e.toString() );
932                assertNotNull( e.getMessage() );
933            }
934    
935            DefaultModletProvider.setDefaultModletLocation( null );
936        }
937    
938        private void writePropertiesFile( final Properties properties, final File file ) throws IOException
939        {
940            OutputStream out = null;
941            boolean suppressExceptionOnClose = true;
942    
943            try
944            {
945                out = new FileOutputStream( file );
946                properties.store( out, this.getClass().getName() );
947                suppressExceptionOnClose = false;
948            }
949            finally
950            {
951                try
952                {
953                    if ( out != null )
954                    {
955                        out.close();
956                    }
957                }
958                catch ( final IOException e )
959                {
960                    if ( !suppressExceptionOnClose )
961                    {
962                        throw e;
963                    }
964                }
965            }
966        }
967    
968    }