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: DefaultModelProcessorTest.java 4200 2012-01-25 09:46:13Z schulte2005 $
029     *
030     */
031    package org.jomc.model.modlet.test;
032    
033    import org.jomc.model.ModelObject;
034    import org.jomc.model.Modules;
035    import org.jomc.model.modlet.DefaultModelProcessor;
036    import org.jomc.model.modlet.ModelHelper;
037    import org.jomc.modlet.Model;
038    import org.jomc.modlet.ModelContext;
039    import org.jomc.modlet.ModelContextFactory;
040    import org.junit.Test;
041    import static org.junit.Assert.assertEquals;
042    import static org.junit.Assert.assertFalse;
043    import static org.junit.Assert.assertNotNull;
044    import static org.junit.Assert.assertNull;
045    import static org.junit.Assert.assertTrue;
046    import static org.junit.Assert.fail;
047    
048    /**
049     * Test cases for class {@code org.jomc.model.modlet.DefaultModelProcessor}.
050     *
051     * @author <a href="mailto:schulte2005@users.sourceforge.net">Christian Schulte</a> 1.0
052     * @version $JOMC: DefaultModelProcessorTest.java 4200 2012-01-25 09:46:13Z schulte2005 $
053     */
054    public class DefaultModelProcessorTest
055    {
056    
057        /** The {@code DefaultModelProcessor} instance tests are performed with. */
058        private DefaultModelProcessor defaultModelProcessor;
059    
060        /** Creates a new {@code DefaultModelProcessorTest} instance. */
061        public DefaultModelProcessorTest()
062        {
063            super();
064        }
065    
066        /**
067         * Gets the {@code DefaultModelProcessor} instance tests are performed with.
068         *
069         * @return The {@code DefaultModelProcessor} instance tests are performed with.
070         *
071         * @see #newModelProcessor()
072         */
073        public DefaultModelProcessor getModelProcessor()
074        {
075            if ( this.defaultModelProcessor == null )
076            {
077                this.defaultModelProcessor = this.newModelProcessor();
078            }
079    
080            return this.defaultModelProcessor;
081        }
082    
083        /**
084         * Creates a new {@code DefaultModelProcessor} instance to test.
085         *
086         * @return A new {@code DefaultModelProcessor} instance to test.
087         *
088         * @see #getModelProcessor()
089         */
090        protected DefaultModelProcessor newModelProcessor()
091        {
092            return new DefaultModelProcessor();
093        }
094    
095        @Test
096        public final void testFindTransformers() throws Exception
097        {
098            final ModelContext context = ModelContextFactory.newInstance().newModelContext();
099    
100            try
101            {
102                this.getModelProcessor().findTransformers( context, null );
103                fail( "Expected NullPointerException not thrown." );
104            }
105            catch ( final NullPointerException e )
106            {
107                assertNotNull( e.getMessage() );
108                System.out.println( e );
109            }
110    
111            try
112            {
113                this.getModelProcessor().findTransformers( null, "" );
114                fail( "Expected NullPointerException not thrown." );
115            }
116            catch ( final NullPointerException e )
117            {
118                assertNotNull( e.getMessage() );
119                System.out.println( e );
120            }
121    
122            DefaultModelProcessor.setDefaultTransformerLocation( null );
123            this.getModelProcessor().setTransformerLocation( null );
124            assertEquals( 1, this.getModelProcessor().findTransformers(
125                context, DefaultModelProcessor.getDefaultTransformerLocation() ).size() );
126    
127            DefaultModelProcessor.setDefaultTransformerLocation( "DOES_NOT_EXIST" );
128            this.getModelProcessor().setTransformerLocation( "DOES_NOT_EXIST" );
129    
130            assertNull( this.getModelProcessor().findTransformers(
131                context, DefaultModelProcessor.getDefaultTransformerLocation() ) );
132    
133            assertNull( this.getModelProcessor().findTransformers(
134                context, this.getModelProcessor().getTransformerLocation() ) );
135    
136            DefaultModelProcessor.setDefaultTransformerLocation( null );
137            this.getModelProcessor().setTransformerLocation( null );
138        }
139    
140        @Test
141        public final void testProcessModel() throws Exception
142        {
143            final ModelContext context = ModelContextFactory.newInstance().newModelContext();
144            final Model model = new Model();
145            model.setIdentifier( ModelObject.MODEL_PUBLIC_ID );
146    
147            try
148            {
149                this.getModelProcessor().processModel( null, model );
150                fail( "Expected NullPointerException not thrown." );
151            }
152            catch ( final NullPointerException e )
153            {
154                assertNotNull( e.getMessage() );
155                System.out.println( e.toString() );
156            }
157    
158            try
159            {
160                this.getModelProcessor().processModel( context, null );
161                fail( "Expected NullPointerException not thrown." );
162            }
163            catch ( final NullPointerException e )
164            {
165                assertNotNull( e.getMessage() );
166                System.out.println( e.toString() );
167            }
168    
169            assertNotNull( this.getModelProcessor().processModel( context, model ) );
170    
171            this.getModelProcessor().setTransformerLocation(
172                this.getClass().getPackage().getName().replace( '.', '/' ) + "/system-property-test.xsl" );
173    
174            final Model processedSystemProperty = this.getModelProcessor().processModel( context, model );
175            assertNotNull( processedSystemProperty );
176    
177            final Modules processedSystemPropertyModules = ModelHelper.getModules( processedSystemProperty );
178            assertNotNull( processedSystemPropertyModules );
179            assertNotNull( processedSystemPropertyModules.getModule( System.getProperty( "user.home" ) ) );
180    
181            this.getModelProcessor().setTransformerLocation(
182                this.getClass().getPackage().getName().replace( '.', '/' ) + "/relative-uri-test.xsl" );
183    
184            final Model processedRelativeUri = this.getModelProcessor().processModel( context, model );
185            assertNotNull( processedRelativeUri );
186    
187            final Modules processedRelativeUriModules = ModelHelper.getModules( processedRelativeUri );
188            assertNotNull( processedRelativeUriModules );
189            assertNotNull( processedRelativeUriModules.getModule( System.getProperty( "os.name" ) ) );
190    
191            this.getModelProcessor().setTransformerLocation( null );
192        }
193    
194        @Test
195        public final void testDefaultEnabled() throws Exception
196        {
197            System.clearProperty( "org.jomc.model.DefaultModelProcessor.defaultEnabled" );
198            System.clearProperty( "org.jomc.model.modlet.DefaultModelProcessor.defaultEnabled" );
199            DefaultModelProcessor.setDefaultEnabled( null );
200            assertTrue( DefaultModelProcessor.isDefaultEnabled() );
201    
202            System.setProperty( "org.jomc.model.DefaultModelProcessor.defaultEnabled", Boolean.toString( false ) );
203            DefaultModelProcessor.setDefaultEnabled( null );
204            assertFalse( DefaultModelProcessor.isDefaultEnabled() );
205            System.clearProperty( "org.jomc.model.DefaultModelProcessor.defaultEnabled" );
206            DefaultModelProcessor.setDefaultEnabled( null );
207            assertTrue( DefaultModelProcessor.isDefaultEnabled() );
208    
209            System.setProperty( "org.jomc.model.modlet.DefaultModelProcessor.defaultEnabled", Boolean.toString( false ) );
210            DefaultModelProcessor.setDefaultEnabled( null );
211            assertFalse( DefaultModelProcessor.isDefaultEnabled() );
212            System.clearProperty( "org.jomc.model.modlet.DefaultModelProcessor.defaultEnabled" );
213            DefaultModelProcessor.setDefaultEnabled( null );
214            assertTrue( DefaultModelProcessor.isDefaultEnabled() );
215    
216            System.setProperty( "org.jomc.model.DefaultModelProcessor.defaultEnabled", Boolean.toString( true ) );
217            System.setProperty( "org.jomc.model.modlet.DefaultModelProcessor.defaultEnabled", Boolean.toString( false ) );
218            DefaultModelProcessor.setDefaultEnabled( null );
219            assertFalse( DefaultModelProcessor.isDefaultEnabled() );
220            System.clearProperty( "org.jomc.model.modlet.DefaultModelProcessor.defaultEnabled" );
221            DefaultModelProcessor.setDefaultEnabled( null );
222            assertTrue( DefaultModelProcessor.isDefaultEnabled() );
223            System.clearProperty( "org.jomc.model.DefaultModelProcessor.defaultEnabled" );
224            DefaultModelProcessor.setDefaultEnabled( null );
225            assertTrue( DefaultModelProcessor.isDefaultEnabled() );
226        }
227    
228        @Test
229        public final void testEnabled() throws Exception
230        {
231            final Model model = new Model();
232            model.setIdentifier( ModelObject.MODEL_PUBLIC_ID );
233    
234            DefaultModelProcessor.setDefaultEnabled( null );
235            this.getModelProcessor().setEnabled( null );
236            assertTrue( this.getModelProcessor().isEnabled() );
237    
238            this.getModelProcessor().processModel( ModelContextFactory.newInstance().newModelContext(), model );
239            DefaultModelProcessor.setDefaultEnabled( false );
240            this.getModelProcessor().setEnabled( null );
241            assertFalse( this.getModelProcessor().isEnabled() );
242    
243            this.getModelProcessor().processModel( ModelContextFactory.newInstance().newModelContext(), model );
244            DefaultModelProcessor.setDefaultEnabled( null );
245            this.getModelProcessor().setEnabled( null );
246        }
247    
248        @Test
249        public final void testDefaultTransformerLocation() throws Exception
250        {
251            System.clearProperty( "org.jomc.model.DefaultModelProcessor.defaultTransformerLocation" );
252            System.clearProperty( "org.jomc.model.modlet.DefaultModelProcessor.defaultTransformerLocation" );
253            DefaultModelProcessor.setDefaultTransformerLocation( null );
254            assertEquals( "META-INF/jomc.xsl", DefaultModelProcessor.getDefaultTransformerLocation() );
255    
256            System.setProperty( "org.jomc.model.DefaultModelProcessor.defaultTransformerLocation", "TEST" );
257            DefaultModelProcessor.setDefaultTransformerLocation( null );
258            assertEquals( "TEST", DefaultModelProcessor.getDefaultTransformerLocation() );
259            System.clearProperty( "org.jomc.model.DefaultModelProcessor.defaultTransformerLocation" );
260            DefaultModelProcessor.setDefaultTransformerLocation( null );
261            assertEquals( "META-INF/jomc.xsl", DefaultModelProcessor.getDefaultTransformerLocation() );
262    
263            System.setProperty( "org.jomc.model.modlet.DefaultModelProcessor.defaultTransformerLocation", "TEST" );
264            DefaultModelProcessor.setDefaultTransformerLocation( null );
265            assertEquals( "TEST", DefaultModelProcessor.getDefaultTransformerLocation() );
266            System.clearProperty( "org.jomc.model.modlet.DefaultModelProcessor.defaultTransformerLocation" );
267            DefaultModelProcessor.setDefaultTransformerLocation( null );
268            assertEquals( "META-INF/jomc.xsl", DefaultModelProcessor.getDefaultTransformerLocation() );
269    
270            System.setProperty( "org.jomc.model.DefaultModelProcessor.defaultTransformerLocation", "DEPRECATED" );
271            System.setProperty( "org.jomc.model.modlet.DefaultModelProcessor.defaultTransformerLocation", "TEST" );
272            DefaultModelProcessor.setDefaultTransformerLocation( null );
273            assertEquals( "TEST", DefaultModelProcessor.getDefaultTransformerLocation() );
274            System.clearProperty( "org.jomc.model.modlet.DefaultModelProcessor.defaultTransformerLocation" );
275            DefaultModelProcessor.setDefaultTransformerLocation( null );
276            assertEquals( "DEPRECATED", DefaultModelProcessor.getDefaultTransformerLocation() );
277            System.clearProperty( "org.jomc.model.DefaultModelProcessor.defaultTransformerLocation" );
278            DefaultModelProcessor.setDefaultTransformerLocation( null );
279            assertEquals( "META-INF/jomc.xsl", DefaultModelProcessor.getDefaultTransformerLocation() );
280        }
281    
282        @Test
283        public final void testTransformerLocation() throws Exception
284        {
285            DefaultModelProcessor.setDefaultTransformerLocation( null );
286            this.getModelProcessor().setTransformerLocation( null );
287            assertNotNull( this.getModelProcessor().getTransformerLocation() );
288    
289            DefaultModelProcessor.setDefaultTransformerLocation( "TEST" );
290            this.getModelProcessor().setTransformerLocation( null );
291            assertEquals( "TEST", this.getModelProcessor().getTransformerLocation() );
292    
293            DefaultModelProcessor.setDefaultTransformerLocation( null );
294            this.getModelProcessor().setTransformerLocation( null );
295        }
296    
297    }