001    /*
002     *   Copyright (C) Christian Schulte, 2012-22
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: ModelContextFactoryTest.java 4209 2012-01-27 19:51:47Z schulte2005 $
029     *
030     */
031    package org.jomc.modlet.test;
032    
033    import org.jomc.modlet.ModelContextFactory;
034    import org.jomc.modlet.ModelContextFactoryError;
035    import org.jomc.modlet.test.support.ClassCastExceptionModelContextFactory;
036    import org.jomc.modlet.test.support.IllegalAccessExceptionModelContextFactory;
037    import org.jomc.modlet.test.support.InstantiationExceptionModelContextFactory;
038    import org.junit.Test;
039    import static org.junit.Assert.assertEquals;
040    import static org.junit.Assert.assertNotNull;
041    import static org.junit.Assert.fail;
042    
043    /**
044     * Test cases for class {@code org.jomc.modlet.ModelContextFactory}.
045     *
046     * @author <a href="mailto:schulte2005@users.sourceforge.net">Christian Schulte</a> 1.0
047     * @version $JOMC: ModelContextFactoryTest.java 4209 2012-01-27 19:51:47Z schulte2005 $
048     */
049    public class ModelContextFactoryTest
050    {
051    
052        /** Constant for the name of the default {@code ModelContextFactory} implementation. */
053        private static final String DEFAULT_MODEL_CONTEXT_FACTORY_CLASS_NAME = "org.jomc.modlet.DefaultModelContextFactory";
054    
055        /** Constant for the name of the system property controlling {@code ModelContextFactory} implementations. */
056        private static final String MODEL_CONTEXT_FACTORY_CLASS_NAME_PROPERTY =
057            "org.jomc.modlet.ModelContextFactory";
058    
059        /** Creates a new {@code ModelContextFactoryTest} instance. */
060        public ModelContextFactoryTest()
061        {
062            super();
063        }
064    
065        @Test
066        public final void testModelContextFactoryDefaultInstance() throws Exception
067        {
068            assertNotNull( ModelContextFactory.newInstance() );
069            assertEquals( DEFAULT_MODEL_CONTEXT_FACTORY_CLASS_NAME,
070                          ModelContextFactory.newInstance().getClass().getName() );
071    
072            assertNotNull( ModelContextFactory.newInstance( DEFAULT_MODEL_CONTEXT_FACTORY_CLASS_NAME ) );
073    
074            assertEquals(
075                DEFAULT_MODEL_CONTEXT_FACTORY_CLASS_NAME,
076                ModelContextFactory.newInstance( DEFAULT_MODEL_CONTEXT_FACTORY_CLASS_NAME ).getClass().getName() );
077    
078        }
079    
080        @Test
081        public final void testModelContextFactoryClassNotFound() throws Exception
082        {
083            try
084            {
085                System.setProperty( MODEL_CONTEXT_FACTORY_CLASS_NAME_PROPERTY, "DOES_NOT_EXIST" );
086                ModelContextFactory.newInstance();
087                fail( "Expected 'ModelContextFactoryError' not thrown." );
088            }
089            catch ( final ModelContextFactoryError e )
090            {
091                assertNotNull( e.getMessage() );
092                System.out.println( e.toString() );
093            }
094            finally
095            {
096                System.clearProperty( MODEL_CONTEXT_FACTORY_CLASS_NAME_PROPERTY );
097            }
098    
099            try
100            {
101                ModelContextFactory.newInstance( "DOES_NOT_EXIST" );
102                fail( "Expected 'ModelContextFactoryError' not thrown." );
103            }
104            catch ( final ModelContextFactoryError e )
105            {
106                assertNotNull( e.getMessage() );
107                System.out.println( e.toString() );
108            }
109        }
110    
111        @Test
112        public final void testModelContextFactoryIllegalClass() throws Exception
113        {
114            try
115            {
116                System.setProperty( MODEL_CONTEXT_FACTORY_CLASS_NAME_PROPERTY,
117                                    ClassCastExceptionModelContextFactory.class.getName() );
118    
119                ModelContextFactory.newInstance();
120                fail( "Expected 'ModelContextFactoryError' not thrown." );
121            }
122            catch ( final ModelContextFactoryError e )
123            {
124                assertNotNull( e.getMessage() );
125                System.out.println( e.toString() );
126            }
127            finally
128            {
129                System.clearProperty( MODEL_CONTEXT_FACTORY_CLASS_NAME_PROPERTY );
130            }
131    
132            try
133            {
134                ModelContextFactory.newInstance( ClassCastExceptionModelContextFactory.class.getName() );
135                fail( "Expected 'ModelContextFactoryError' not thrown." );
136            }
137            catch ( final ModelContextFactoryError e )
138            {
139                assertNotNull( e.getMessage() );
140                System.out.println( e.toString() );
141            }
142        }
143    
144        @Test
145        public final void testModelContextFactoryInstantiationException() throws Exception
146        {
147            try
148            {
149                System.setProperty( MODEL_CONTEXT_FACTORY_CLASS_NAME_PROPERTY,
150                                    InstantiationExceptionModelContextFactory.class.getName() );
151    
152                ModelContextFactory.newInstance();
153                fail( "Expected 'ModelContextFactoryError' not thrown." );
154            }
155            catch ( final ModelContextFactoryError e )
156            {
157                assertNotNull( e.getMessage() );
158                System.out.println( e.toString() );
159            }
160            finally
161            {
162                System.clearProperty( MODEL_CONTEXT_FACTORY_CLASS_NAME_PROPERTY );
163            }
164    
165            try
166            {
167                ModelContextFactory.newInstance( InstantiationExceptionModelContextFactory.class.getName() );
168                fail( "Expected 'ModelContextFactoryError' not thrown." );
169            }
170            catch ( final ModelContextFactoryError e )
171            {
172                assertNotNull( e.getMessage() );
173                System.out.println( e.toString() );
174            }
175        }
176    
177        @Test
178        public final void testModelContextFactoryIllegalAccessException() throws Exception
179        {
180            try
181            {
182                System.setProperty( MODEL_CONTEXT_FACTORY_CLASS_NAME_PROPERTY,
183                                    IllegalAccessExceptionModelContextFactory.class.getName() );
184    
185                ModelContextFactory.newInstance();
186                fail( "Expected 'ModelContextFactoryError' not thrown." );
187            }
188            catch ( final ModelContextFactoryError e )
189            {
190                assertNotNull( e.getMessage() );
191                System.out.println( e.toString() );
192            }
193            finally
194            {
195                System.clearProperty( MODEL_CONTEXT_FACTORY_CLASS_NAME_PROPERTY );
196            }
197    
198            try
199            {
200                ModelContextFactory.newInstance( IllegalAccessExceptionModelContextFactory.class.getName() );
201                fail( "Expected 'ModelContextFactoryError' not thrown." );
202            }
203            catch ( final ModelContextFactoryError e )
204            {
205                assertNotNull( e.getMessage() );
206                System.out.println( e.toString() );
207            }
208        }
209    
210        @Test
211        public final void testModelContextNotNull() throws Exception
212        {
213            assertNotNull( ModelContextFactory.newInstance().newModelContext() );
214            assertNotNull( ModelContextFactory.newInstance().newModelContext( null ) );
215            assertNotNull( ModelContextFactory.newInstance().newModelContext( this.getClass().getClassLoader() ) );
216        }
217    
218    }