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: ToolsModelProviderTest.java 4200 2012-01-25 09:46:13Z schulte2005 $
029     *
030     */
031    package org.jomc.tools.modlet.test;
032    
033    import org.jomc.model.Implementation;
034    import org.jomc.model.Implementations;
035    import org.jomc.model.ModelObject;
036    import org.jomc.model.Module;
037    import org.jomc.model.Modules;
038    import org.jomc.model.Specification;
039    import org.jomc.model.Specifications;
040    import org.jomc.model.modlet.ModelHelper;
041    import org.jomc.modlet.Model;
042    import org.jomc.modlet.ModelContext;
043    import org.jomc.modlet.ModelContextFactory;
044    import org.jomc.tools.model.SourceFilesType;
045    import org.jomc.tools.modlet.ToolsModelProvider;
046    import org.junit.Test;
047    import static org.junit.Assert.assertFalse;
048    import static org.junit.Assert.assertNotNull;
049    import static org.junit.Assert.assertNull;
050    import static org.junit.Assert.assertTrue;
051    import static org.junit.Assert.fail;
052    
053    /**
054     * Test cases for class {@code org.jomc.tools.modlet.ToolsModelProvider}.
055     *
056     * @author <a href="mailto:schulte2005@users.sourceforge.net">Christian Schulte</a> 1.0
057     * @version $JOMC: ToolsModelProviderTest.java 4200 2012-01-25 09:46:13Z schulte2005 $
058     */
059    public class ToolsModelProviderTest
060    {
061    
062        /** The {@code ToolsModelProvider} instance tests are performed with. */
063        private ToolsModelProvider toolsModelProvider;
064    
065        /** Creates a new {@code ToolsModelProviderTest} instance. */
066        public ToolsModelProviderTest()
067        {
068            super();
069        }
070    
071        /**
072         * Gets the {@code ToolsModelProvider} instance tests are performed with.
073         *
074         * @return The {@code ToolsModelProvider} instance tests are performed with.
075         *
076         * @see #newModelProvider()
077         */
078        public ToolsModelProvider getModelProvider()
079        {
080            if ( this.toolsModelProvider == null )
081            {
082                this.toolsModelProvider = this.newModelProvider();
083            }
084    
085            return this.toolsModelProvider;
086        }
087    
088        /**
089         * Creates a new {@code ToolsModelProvider} instance to test.
090         *
091         * @return A new {@code ToolsModelProvider} instance to test.
092         *
093         * @see #getModelProvider()
094         */
095        protected ToolsModelProvider newModelProvider()
096        {
097            return new ToolsModelProvider();
098        }
099    
100        @Test
101        public final void testFindModel() throws Exception
102        {
103            final ModelContext context = ModelContextFactory.newInstance().newModelContext();
104            Model model = new Model();
105            model.setIdentifier( ModelObject.MODEL_PUBLIC_ID );
106    
107            Modules modules = new Modules();
108            Module module = new Module();
109            module.setName( this.getClass().getName() );
110            module.setSpecifications( new Specifications() );
111            module.setImplementations( new Implementations() );
112    
113            Specification specification = new Specification();
114            specification.setClassDeclaration( true );
115            specification.setClazz( this.getClass().getName() );
116            specification.setIdentifier( this.getClass().getName() + " Specification" );
117    
118            Implementation implementation = new Implementation();
119            implementation.setClassDeclaration( true );
120            implementation.setClazz( this.getClass().getName() );
121            implementation.setIdentifier( this.getClass().getName() + " Implementation" );
122            implementation.setName( this.getClass().getName() + " Implementation" );
123    
124            module.getSpecifications().getSpecification().add( specification );
125            module.getImplementations().getImplementation().add( implementation );
126            modules.getModule().add( module );
127    
128            ModelHelper.setModules( model, modules );
129    
130            try
131            {
132                this.getModelProvider().findModel( null, model );
133                fail( "Expected NullPointerException not thrown." );
134            }
135            catch ( final NullPointerException e )
136            {
137                assertNotNull( e.getMessage() );
138                System.out.println( e.toString() );
139            }
140    
141            try
142            {
143                this.getModelProvider().findModel( context, null );
144                fail( "Expected NullPointerException not thrown." );
145            }
146            catch ( final NullPointerException e )
147            {
148                assertNotNull( e.getMessage() );
149                System.out.println( e.toString() );
150            }
151    
152            Model found = this.getModelProvider().findModel( context, model );
153            assertNotNull( found );
154    
155            modules = ModelHelper.getModules( found );
156            assertNotNull( modules );
157    
158            specification = modules.getSpecification( this.getClass().getName() + " Specification" );
159            assertNotNull( specification );
160    
161            implementation = modules.getImplementation( this.getClass().getName() + " Implementation" );
162            assertNotNull( implementation );
163    
164            assertNotNull( specification.getAnyObject( SourceFilesType.class ) );
165            assertNotNull( implementation.getAnyObject( SourceFilesType.class ) );
166    
167            this.getModelProvider().setEnabled( false );
168    
169            found = this.getModelProvider().findModel( context, model );
170            assertNull( found );
171    
172            this.getModelProvider().setEnabled( true );
173        }
174    
175        @Test
176        public final void testDefaultEnabled() throws Exception
177        {
178            System.clearProperty( "org.jomc.tools.modlet.ToolsModelProvider.defaultEnabled" );
179            ToolsModelProvider.setDefaultEnabled( null );
180            assertTrue( ToolsModelProvider.isDefaultEnabled() );
181    
182            System.setProperty( "org.jomc.tools.modlet.ToolsModelProvider.defaultEnabled", Boolean.toString( false ) );
183            ToolsModelProvider.setDefaultEnabled( null );
184            assertFalse( ToolsModelProvider.isDefaultEnabled() );
185            System.clearProperty( "org.jomc.tools.modlet.ToolsModelProvider.defaultEnabled" );
186            ToolsModelProvider.setDefaultEnabled( null );
187            assertTrue( ToolsModelProvider.isDefaultEnabled() );
188    
189            System.setProperty( "org.jomc.tools.modlet.ToolsModelProvider.defaultEnabled", Boolean.toString( true ) );
190            ToolsModelProvider.setDefaultEnabled( null );
191            assertTrue( ToolsModelProvider.isDefaultEnabled() );
192            System.clearProperty( "org.jomc.tools.modlet.ToolsModelProvider.defaultEnabled" );
193            ToolsModelProvider.setDefaultEnabled( null );
194            assertTrue( ToolsModelProvider.isDefaultEnabled() );
195        }
196    
197        @Test
198        public final void testEnabled() throws Exception
199        {
200            final Model model = new Model();
201            model.setIdentifier( ModelObject.MODEL_PUBLIC_ID );
202    
203            ToolsModelProvider.setDefaultEnabled( null );
204            this.getModelProvider().setEnabled( null );
205            assertTrue( this.getModelProvider().isEnabled() );
206    
207            this.getModelProvider().findModel( ModelContextFactory.newInstance().newModelContext(), model );
208            ToolsModelProvider.setDefaultEnabled( false );
209            this.getModelProvider().setEnabled( null );
210            assertFalse( this.getModelProvider().isEnabled() );
211    
212            this.getModelProvider().findModel( ModelContextFactory.newInstance().newModelContext(), model );
213            ToolsModelProvider.setDefaultEnabled( null );
214            this.getModelProvider().setEnabled( null );
215        }
216    
217    }