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 */
031package org.jomc.modlet.test;
032
033import java.io.File;
034import java.io.FileOutputStream;
035import java.io.IOException;
036import java.io.OutputStream;
037import java.net.URL;
038import java.util.Properties;
039import javax.xml.bind.JAXBContext;
040import javax.xml.bind.Marshaller;
041import javax.xml.bind.Unmarshaller;
042import org.jomc.modlet.DefaultModelContext;
043import org.jomc.modlet.DefaultModletProvider;
044import org.jomc.modlet.Model;
045import org.jomc.modlet.ModelException;
046import org.jomc.modlet.Modlets;
047import org.jomc.modlet.test.support.IllegalServicesModletProvider;
048import org.jomc.modlet.test.support.ServicesNotFoundModletProvider;
049import org.jomc.modlet.test.support.TestModelProcessor;
050import org.jomc.modlet.test.support.TestModelProvider;
051import org.jomc.modlet.test.support.TestModelValidator;
052import org.jomc.modlet.test.support.TestModletProvider;
053import org.junit.Test;
054import org.w3c.dom.ls.LSResourceResolver;
055import org.xml.sax.EntityResolver;
056import static org.junit.Assert.assertEquals;
057import static org.junit.Assert.assertFalse;
058import static org.junit.Assert.assertNotNull;
059import static org.junit.Assert.assertNull;
060import static org.junit.Assert.assertTrue;
061import 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 */
069public 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}