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: ToolsModelProcessorTest.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.SourceFileType;
045 import org.jomc.tools.model.SourceFilesType;
046 import org.jomc.tools.model.SourceSectionType;
047 import org.jomc.tools.model.SourceSectionsType;
048 import org.jomc.tools.modlet.ToolsModelProcessor;
049 import org.junit.Test;
050 import static org.junit.Assert.assertEquals;
051 import static org.junit.Assert.assertFalse;
052 import static org.junit.Assert.assertNotNull;
053 import static org.junit.Assert.assertNull;
054 import static org.junit.Assert.assertTrue;
055 import static org.junit.Assert.fail;
056
057 /**
058 * Test cases for class {@code org.jomc.tools.modlet.ToolsModelProcessor}.
059 *
060 * @author <a href="mailto:schulte2005@users.sourceforge.net">Christian Schulte</a> 1.0
061 * @version $JOMC: ToolsModelProcessorTest.java 4200 2012-01-25 09:46:13Z schulte2005 $
062 */
063 public class ToolsModelProcessorTest
064 {
065
066 /** The {@code ToolsModelProcessor} instance tests are performed with. */
067 private ToolsModelProcessor toolsModelProcessor;
068
069 /** Creates a new {@code ToolsModelProcessorTest} instance. */
070 public ToolsModelProcessorTest()
071 {
072 super();
073 }
074
075 /**
076 * Gets the {@code ToolsModelProcessor} instance tests are performed with.
077 *
078 * @return The {@code ToolsModelProcessor} instance tests are performed with.
079 *
080 * @see #newModelProcessor()
081 */
082 public ToolsModelProcessor getModelProcessor()
083 {
084 if ( this.toolsModelProcessor == null )
085 {
086 this.toolsModelProcessor = this.newModelProcessor();
087 }
088
089 return this.toolsModelProcessor;
090 }
091
092 /**
093 * Creates a new {@code ToolsModelProcessor} instance to test.
094 *
095 * @return A new {@code ToolsModelProcessor} instance to test.
096 *
097 * @see #getModelProcessor()
098 */
099 protected ToolsModelProcessor newModelProcessor()
100 {
101 return new ToolsModelProcessor();
102 }
103
104 @Test
105 public final void testProcessModel() throws Exception
106 {
107 final ModelContext context = ModelContextFactory.newInstance().newModelContext();
108 Model model = new Model();
109 model.setIdentifier( ModelObject.MODEL_PUBLIC_ID );
110
111 Modules modules = new Modules();
112 Module module = new Module();
113 module.setName( this.getClass().getName() );
114 module.setSpecifications( new Specifications() );
115 module.setImplementations( new Implementations() );
116
117 Specification specification = new Specification();
118 specification.setClassDeclaration( true );
119 specification.setClazz( this.getClass().getName() );
120 specification.setIdentifier( this.getClass().getName() + " Specification" );
121
122 Implementation implementation = new Implementation();
123 implementation.setClassDeclaration( true );
124 implementation.setClazz( this.getClass().getName() );
125 implementation.setIdentifier( this.getClass().getName() + " Implementation" );
126 implementation.setName( this.getClass().getName() + " Implementation" );
127
128 module.getSpecifications().getSpecification().add( specification );
129 module.getImplementations().getImplementation().add( implementation );
130 modules.getModule().add( module );
131
132 ModelHelper.setModules( model, modules );
133
134 try
135 {
136 this.getModelProcessor().processModel( null, model );
137 fail( "Expected NullPointerException not thrown." );
138 }
139 catch ( final NullPointerException e )
140 {
141 assertNotNull( e.getMessage() );
142 System.out.println( e.toString() );
143 }
144
145 try
146 {
147 this.getModelProcessor().processModel( context, null );
148 fail( "Expected NullPointerException not thrown." );
149 }
150 catch ( final NullPointerException e )
151 {
152 assertNotNull( e.getMessage() );
153 System.out.println( e.toString() );
154 }
155
156 Model processed = this.getModelProcessor().processModel( context, model );
157 assertNotNull( processed );
158
159 modules = ModelHelper.getModules( processed );
160 assertNotNull( modules );
161
162 specification = modules.getSpecification( this.getClass().getName() + " Specification" );
163 assertNotNull( specification );
164
165 implementation = modules.getImplementation( this.getClass().getName() + " Implementation" );
166 assertNotNull( implementation );
167
168 SourceFileType ss = specification.getAnyObject( SourceFileType.class );
169 assertNull( ss );
170
171 SourceFileType is = implementation.getAnyObject( SourceFileType.class );
172 assertNull( is );
173
174 ss = new SourceFileType();
175 ss.setIdentifier( this.getClass().getName() + " Specification" );
176
177 is = new SourceFileType();
178 is.setIdentifier( this.getClass().getName() + " Implementation" );
179
180 specification.getAny().add( ss );
181 implementation.getAny().add( is );
182
183 processed = this.getModelProcessor().processModel( context, processed );
184 assertNotNull( processed );
185
186 modules = ModelHelper.getModules( processed );
187 assertNotNull( modules );
188
189 specification = modules.getSpecification( this.getClass().getName() + " Specification" );
190 assertNotNull( specification );
191
192 implementation = modules.getImplementation( this.getClass().getName() + " Implementation" );
193 assertNotNull( implementation );
194
195 ss = specification.getAnyObject( SourceFileType.class );
196 assertNotNull( ss );
197 assertNotNull( ss.getLocation() );
198 assertNotNull( ss.getHeadComment() );
199
200 is = implementation.getAnyObject( SourceFileType.class );
201 assertNotNull( is );
202 assertNotNull( is.getLocation() );
203 assertNotNull( is.getHeadComment() );
204
205 specification.getAny().clear();
206 implementation.getAny().clear();
207
208 SourceFilesType specificationSourceFiles = new SourceFilesType();
209 ss = new SourceFileType();
210 ss.setIdentifier( this.getClass().getSimpleName() );
211 ss.setSourceSections( new SourceSectionsType() );
212 specificationSourceFiles.getSourceFile().add( ss );
213 specification.getAny().add( specificationSourceFiles );
214
215 SourceFilesType implementationSourceFiles = new SourceFilesType();
216 is = new SourceFileType();
217 is.setIdentifier( this.getClass().getSimpleName() );
218 is.setSourceSections( new SourceSectionsType() );
219 implementationSourceFiles.getSourceFile().add( is );
220 implementation.getAny().add( implementationSourceFiles );
221
222 SourceSectionType sourceSection = new SourceSectionType();
223 sourceSection.setName( "License Header" );
224
225 ss.getSourceSections().getSourceSection().add( sourceSection );
226 is.getSourceSections().getSourceSection().add( sourceSection );
227
228 sourceSection = new SourceSectionType();
229 sourceSection.setName( "Annotations" );
230
231 ss.getSourceSections().getSourceSection().add( sourceSection );
232 is.getSourceSections().getSourceSection().add( sourceSection );
233
234 sourceSection = new SourceSectionType();
235 sourceSection.setName( "Documentation" );
236
237 ss.getSourceSections().getSourceSection().add( sourceSection );
238 is.getSourceSections().getSourceSection().add( sourceSection );
239
240 sourceSection = new SourceSectionType();
241 sourceSection.setName( this.getClass().getSimpleName() );
242
243 ss.getSourceSections().getSourceSection().add( sourceSection );
244 is.getSourceSections().getSourceSection().add( sourceSection );
245
246 sourceSection = new SourceSectionType();
247 sourceSection.setName( "Constructors" );
248
249 is.getSourceSections().getSourceSection().add( sourceSection );
250
251 sourceSection = new SourceSectionType();
252 sourceSection.setName( "Default Constructor" );
253
254 is.getSourceSections().getSourceSection().add( sourceSection );
255
256 sourceSection = new SourceSectionType();
257 sourceSection.setName( "Dependencies" );
258
259 is.getSourceSections().getSourceSection().add( sourceSection );
260
261 sourceSection = new SourceSectionType();
262 sourceSection.setName( "Properties" );
263
264 is.getSourceSections().getSourceSection().add( sourceSection );
265
266 sourceSection = new SourceSectionType();
267 sourceSection.setName( "Messages" );
268
269 is.getSourceSections().getSourceSection().add( sourceSection );
270
271 processed = this.getModelProcessor().processModel( context, processed );
272 assertNotNull( processed );
273
274 modules = ModelHelper.getModules( processed );
275 assertNotNull( modules );
276
277 specification = modules.getSpecification( this.getClass().getName() + " Specification" );
278 assertNotNull( specification );
279
280 implementation = modules.getImplementation( this.getClass().getName() + " Implementation" );
281 assertNotNull( implementation );
282
283 specificationSourceFiles = specification.getAnyObject( SourceFilesType.class );
284 assertNotNull( specificationSourceFiles );
285
286 ss = specificationSourceFiles.getSourceFile( this.getClass().getSimpleName() );
287 assertNotNull( ss );
288 assertNotNull( ss.getHeadComment() );
289 assertNotNull( ss.getLocation() );
290 assertNotNull( ss.getTemplate() );
291
292 implementationSourceFiles = implementation.getAnyObject( SourceFilesType.class );
293 assertNotNull( implementationSourceFiles );
294 is = implementationSourceFiles.getSourceFile( this.getClass().getSimpleName() );
295 assertNotNull( is );
296 assertNotNull( is.getHeadComment() );
297 assertNotNull( is.getLocation() );
298 assertNotNull( is.getTemplate() );
299
300 sourceSection = ss.getSourceSections().getSourceSection( "License Header" );
301 assertNotNull( sourceSection );
302 assertTrue( sourceSection.isOptional() );
303 assertNotNull( sourceSection.getHeadTemplate() );
304
305 sourceSection = is.getSourceSections().getSourceSection( "License Header" );
306 assertNotNull( sourceSection );
307 assertTrue( sourceSection.isOptional() );
308 assertNotNull( sourceSection.getHeadTemplate() );
309
310 sourceSection = ss.getSourceSections().getSourceSection( "Annotations" );
311 assertNotNull( sourceSection );
312 assertNotNull( sourceSection.getHeadTemplate() );
313
314 sourceSection = is.getSourceSections().getSourceSection( "Annotations" );
315 assertNotNull( sourceSection );
316 assertNotNull( sourceSection.getHeadTemplate() );
317
318 sourceSection = ss.getSourceSections().getSourceSection( "Documentation" );
319 assertNotNull( sourceSection );
320 assertTrue( sourceSection.isOptional() );
321 assertNotNull( sourceSection.getHeadTemplate() );
322
323 sourceSection = is.getSourceSections().getSourceSection( "Documentation" );
324 assertNotNull( sourceSection );
325 assertTrue( sourceSection.isOptional() );
326 assertNotNull( sourceSection.getHeadTemplate() );
327
328 sourceSection = ss.getSourceSections().getSourceSection( this.getClass().getSimpleName() );
329 assertNotNull( sourceSection );
330 assertTrue( sourceSection.isEditable() );
331 assertEquals( 1, sourceSection.getIndentationLevel() );
332
333 sourceSection = is.getSourceSections().getSourceSection( this.getClass().getSimpleName() );
334 assertNotNull( sourceSection );
335 assertTrue( sourceSection.isEditable() );
336 assertEquals( 1, sourceSection.getIndentationLevel() );
337
338 sourceSection = is.getSourceSections().getSourceSection( "Constructors" );
339 assertNotNull( sourceSection );
340 assertNotNull( sourceSection.getHeadTemplate() );
341 assertNotNull( sourceSection.getTailTemplate() );
342 assertEquals( 1, sourceSection.getIndentationLevel() );
343 assertTrue( sourceSection.isOptional() );
344
345 sourceSection = is.getSourceSections().getSourceSection( "Default Constructor" );
346 assertNotNull( sourceSection );
347 assertNotNull( sourceSection.getHeadTemplate() );
348 assertEquals( 2, sourceSection.getIndentationLevel() );
349 assertTrue( sourceSection.isEditable() );
350
351 sourceSection = is.getSourceSections().getSourceSection( "Dependencies" );
352 assertNotNull( sourceSection );
353 assertNotNull( sourceSection.getHeadTemplate() );
354 assertEquals( 1, sourceSection.getIndentationLevel() );
355 assertTrue( sourceSection.isOptional() );
356
357 sourceSection = is.getSourceSections().getSourceSection( "Properties" );
358 assertNotNull( sourceSection );
359 assertNotNull( sourceSection.getHeadTemplate() );
360 assertEquals( 1, sourceSection.getIndentationLevel() );
361 assertTrue( sourceSection.isOptional() );
362
363 sourceSection = is.getSourceSections().getSourceSection( "Messages" );
364 assertNotNull( sourceSection );
365 assertNotNull( sourceSection.getHeadTemplate() );
366 assertEquals( 1, sourceSection.getIndentationLevel() );
367 assertTrue( sourceSection.isOptional() );
368
369 sourceSection = is.getSourceSections().getSourceSection( this.getClass().getSimpleName() );
370 assertNotNull( sourceSection );
371 assertEquals( 1, sourceSection.getIndentationLevel() );
372 assertTrue( sourceSection.isEditable() );
373 }
374
375 @Test
376 public final void testDefaultEnabled() throws Exception
377 {
378 System.clearProperty( "org.jomc.tools.modlet.ToolsModelProcessor.defaultEnabled" );
379 ToolsModelProcessor.setDefaultEnabled( null );
380 assertTrue( ToolsModelProcessor.isDefaultEnabled() );
381
382 System.setProperty( "org.jomc.tools.modlet.ToolsModelProcessor.defaultEnabled", Boolean.toString( false ) );
383 ToolsModelProcessor.setDefaultEnabled( null );
384 assertFalse( ToolsModelProcessor.isDefaultEnabled() );
385 System.clearProperty( "org.jomc.tools.modlet.ToolsModelProcessor.defaultEnabled" );
386 ToolsModelProcessor.setDefaultEnabled( null );
387 assertTrue( ToolsModelProcessor.isDefaultEnabled() );
388
389 System.setProperty( "org.jomc.tools.modlet.ToolsModelProcessor.defaultEnabled", Boolean.toString( true ) );
390 ToolsModelProcessor.setDefaultEnabled( null );
391 assertTrue( ToolsModelProcessor.isDefaultEnabled() );
392 System.clearProperty( "org.jomc.tools.modlet.ToolsModelProcessor.defaultEnabled" );
393 ToolsModelProcessor.setDefaultEnabled( null );
394 assertTrue( ToolsModelProcessor.isDefaultEnabled() );
395 }
396
397 @Test
398 public final void testEnabled() throws Exception
399 {
400 final Model model = new Model();
401 model.setIdentifier( ModelObject.MODEL_PUBLIC_ID );
402
403 ToolsModelProcessor.setDefaultEnabled( null );
404 this.getModelProcessor().setEnabled( null );
405 assertTrue( this.getModelProcessor().isEnabled() );
406
407 this.getModelProcessor().processModel( ModelContextFactory.newInstance().newModelContext(), model );
408 ToolsModelProcessor.setDefaultEnabled( false );
409 this.getModelProcessor().setEnabled( null );
410 assertFalse( this.getModelProcessor().isEnabled() );
411
412 this.getModelProcessor().processModel( ModelContextFactory.newInstance().newModelContext(), model );
413 ToolsModelProcessor.setDefaultEnabled( null );
414 this.getModelProcessor().setEnabled( null );
415 }
416
417 }