1   /*
2    * Copyright (C) The MetaClass Group. All rights reserved.
3    *
4    * This software is published under the terms of the Spice
5    * Software License version 1.1, a copy of which has been included
6    * with this distribution in the LICENSE.txt file.
7    */
8   package org.codehaus.metaclass.tools.qdox;
9   
10  import com.thoughtworks.qdox.model.DefaultDocletTag;
11  import com.thoughtworks.qdox.model.JavaClass;
12  import com.thoughtworks.qdox.model.JavaField;
13  import com.thoughtworks.qdox.model.JavaMethod;
14  import com.thoughtworks.qdox.model.JavaParameter;
15  import com.thoughtworks.qdox.model.Type;
16  import java.util.ArrayList;
17  import java.util.Properties;
18  import junit.framework.TestCase;
19  import org.codehaus.metaclass.model.Attribute;
20  import org.codehaus.metaclass.model.ClassDescriptor;
21  import org.codehaus.metaclass.model.FieldDescriptor;
22  import org.codehaus.metaclass.model.MethodDescriptor;
23  import org.codehaus.metaclass.model.ParameterDescriptor;
24  
25  /***
26   * @author Peter Donald
27   * @version $Revision: 1.5 $ $Date: 2003/11/28 11:14:55 $
28   */
29  public class QDoxDescriptorParserTestCase
30      extends TestCase
31  {
32      public void testParseValueIntoParametersWithSimpleString()
33          throws Exception
34      {
35          final String value = "key1";
36          final QDoxDescriptorParser parser = new QDoxDescriptorParser();
37          final Properties parameters = parser.parseValueIntoParameters( value );
38          assertNull( "parameters", parameters );
39      }
40  
41      public void testParseValueIntoParametersWithKeyStartingWithNonIdentifier()
42          throws Exception
43      {
44          final String value = "*key1=\"a\"";
45          final QDoxDescriptorParser parser = new QDoxDescriptorParser();
46          final Properties parameters = parser.parseValueIntoParameters( value );
47          assertNull( "parameters", parameters );
48      }
49  
50      public void testParseValueIntoParametersWithValueNotStartingWithTalkies()
51          throws Exception
52      {
53          final String value = "key1=a";
54          final QDoxDescriptorParser parser = new QDoxDescriptorParser();
55          final Properties parameters = parser.parseValueIntoParameters( value );
56          assertNull( "parameters", parameters );
57      }
58  
59      public void testParseValueIntoParametersWithSimpleStringAndEquals()
60          throws Exception
61      {
62          final String value = "key1=";
63          final QDoxDescriptorParser parser = new QDoxDescriptorParser();
64          final Properties parameters = parser.parseValueIntoParameters( value );
65          assertNull( "parameters", parameters );
66      }
67  
68      public void testParseValueIntoParametersWithSimpleStringAndValueStart()
69          throws Exception
70      {
71          final String value = "key1=\"";
72          final QDoxDescriptorParser parser = new QDoxDescriptorParser();
73          final Properties parameters = parser.parseValueIntoParameters( value );
74          assertNull( "parameters", parameters );
75      }
76  
77      public void testParseValueIntoParametersWithSimpleStringAndValueUnEnded()
78          throws Exception
79      {
80          final String value = "key1=\"value1";
81          final QDoxDescriptorParser parser = new QDoxDescriptorParser();
82          final Properties parameters = parser.parseValueIntoParameters( value );
83          assertNull( "parameters", parameters );
84      }
85  
86      public void testParseValueIntoParametersWithSimpleStringAndValidStart()
87          throws Exception
88      {
89          final String value = "key1=\"value1\" key2";
90          final QDoxDescriptorParser parser = new QDoxDescriptorParser();
91          final Properties parameters = parser.parseValueIntoParameters( value );
92          assertNull( "parameters", parameters );
93      }
94  
95      public void testParseValueIntoParametersWithSimpleStringAndEqualsAndValidStart()
96          throws Exception
97      {
98          final String value = "key1=\"value1\" key2=";
99          final QDoxDescriptorParser parser = new QDoxDescriptorParser();
100         final Properties parameters = parser.parseValueIntoParameters( value );
101         assertNull( "parameters", parameters );
102     }
103 
104     public void testParseValueIntoParametersWithSimpleStringAndValueStartAndValidStart()
105         throws Exception
106     {
107         final String value = "key1=\"value1\" key2=\"";
108         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
109         final Properties parameters = parser.parseValueIntoParameters( value );
110         assertNull( "parameters", parameters );
111     }
112 
113     public void testParseValueIntoParametersWithSimpleStringAndValueUnEndedAndValidStart()
114         throws Exception
115     {
116         final String value = "key1=\"value1\" key2=\"value1";
117         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
118         final Properties parameters = parser.parseValueIntoParameters( value );
119         assertNull( "parameters", parameters );
120     }
121 
122     public void testParseValueIntoParametersWithSingleKey()
123         throws Exception
124     {
125         final String value = "key1=\"value1\"";
126         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
127         final Properties parameters = parser.parseValueIntoParameters( value );
128         assertNotNull( "parameters", parameters );
129         assertEquals( "parameters.lenght", 1, parameters.size() );
130         assertEquals( "parameters.get('key')",
131                       "value1",
132                       parameters.getProperty( "key1" ) );
133     }
134 
135     public void testParseValueIntoParametersWithSingleKeySurroundedByWhitespace()
136         throws Exception
137     {
138         final String value = " \t \n key1=\"value1\"   \n\t";
139         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
140         final Properties parameters = parser.parseValueIntoParameters( value );
141         assertNotNull( "parameters", parameters );
142         assertEquals( "parameters.lenght", 1, parameters.size() );
143         assertEquals( "parameters.get('key')",
144                       "value1",
145                       parameters.getProperty( "key1" ) );
146     }
147 
148     public void testParseValueIntoParametersWithMultipleKey()
149         throws Exception
150     {
151         final String value = "key1=\"value1\" key2=\"value2\"";
152         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
153         final Properties parameters = parser.parseValueIntoParameters( value );
154         assertNotNull( "parameters", parameters );
155         assertEquals( "parameters.lenght", 2, parameters.size() );
156         assertEquals( "parameters.get('key1')",
157                       "value1",
158                       parameters.getProperty( "key1" ) );
159         assertEquals( "parameters.get('key2')",
160                       "value2",
161                       parameters.getProperty( "key2" ) );
162     }
163 
164     public void testParseValueIntoParametersWithMultipleKeySurroundedByWhitespace()
165         throws Exception
166     {
167         final String value = " \t \n key1=\"value1\"   \n key2=\"value2\"\t";
168         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
169         final Properties parameters = parser.parseValueIntoParameters( value );
170         assertNotNull( "parameters", parameters );
171         assertEquals( "parameters.lenght", 2, parameters.size() );
172         assertEquals( "parameters.get('key1')",
173                       "value1",
174                       parameters.getProperty( "key1" ) );
175         assertEquals( "parameters.get('key2')",
176                       "value2",
177                       parameters.getProperty( "key2" ) );
178     }
179 
180     public void testParseValueIntoParametersWithMultipleKeySurroundedByZeroWhitespace()
181         throws Exception
182     {
183         final String value = "key1=\"value1\"key2=\"value2\"";
184         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
185         final Properties parameters = parser.parseValueIntoParameters( value );
186         assertNull( "parameters", parameters );
187     }
188 
189     public void testBuildAttributeWithNullQDoxValue()
190         throws Exception
191     {
192         final String name = "myTag";
193         final String value = null;
194         final DefaultDocletTag tag = new DefaultDocletTag( name, null );
195         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
196         final Attribute attribute = parser.buildAttribute( tag );
197         assertNotNull( "attribute", attribute );
198         assertEquals( "attribute.name", name, attribute.getName() );
199         assertEquals( "attribute.value", value, attribute.getValue() );
200         assertEquals( "attribute.parameterCount",
201                       0, attribute.getParameterCount() );
202     }
203 
204     public void testBuildAttributeWithEmptyQDoxValue()
205         throws Exception
206     {
207         final String name = "myTag";
208         final String value = null;
209         final DefaultDocletTag tag = new DefaultDocletTag( name, "" );
210         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
211         final Attribute attribute = parser.buildAttribute( tag );
212         assertNotNull( "attribute", attribute );
213         assertEquals( "attribute.name", name, attribute.getName() );
214         assertEquals( "attribute.value", value, attribute.getValue() );
215         assertEquals( "attribute.parameterCount",
216                       0, attribute.getParameterCount() );
217     }
218 
219     public void testBuildAttributeWithValue()
220         throws Exception
221     {
222         final String name = "myTag";
223         final String value = "Here is some text";
224         final DefaultDocletTag tag = new DefaultDocletTag( name, value );
225         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
226         final Attribute attribute = parser.buildAttribute( tag );
227         assertNotNull( "attribute", attribute );
228         assertEquals( "attribute.name", name, attribute.getName() );
229         assertEquals( "attribute.value", value, attribute.getValue() );
230         assertEquals( "attribute.parameterCount",
231                       0, attribute.getParameterCount() );
232     }
233 
234     public void testBuildAttributeWithParameters()
235         throws Exception
236     {
237         final String name = "myTag";
238         final String value = null;
239         final DefaultDocletTag tag = new DefaultDocletTag( name,
240                                                            "key=\"value\"" );
241         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
242         final Attribute attribute = parser.buildAttribute( tag );
243         assertNotNull( "attribute", attribute );
244         assertEquals( "attribute.name", name, attribute.getName() );
245         assertEquals( "attribute.value", value, attribute.getValue() );
246         assertEquals( "attribute.parameterCount",
247                       1, attribute.getParameterCount() );
248         assertEquals( "attribute.parameter('key')",
249                       "value", attribute.getParameter( "key" ) );
250     }
251 
252     public void testBuildField()
253         throws Exception
254     {
255         final String name = "myField";
256         final String type = "int";
257         final JavaField javaField = new JavaField();
258         javaField.setType( new Type( type ) );
259         javaField.setTags( new ArrayList() );
260         javaField.setModifiers( new String[]{"public"} );
261         javaField.setName( name );
262         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
263         final FieldDescriptor field = parser.buildField( javaField,
264                                                          new DefaultQDoxAttributeInterceptor() );
265         assertNotNull( "field", field );
266         assertEquals( "field.name", name, field.getName() );
267         assertEquals( "field.type", type, field.getType() );
268         assertEquals( "field.attributes.length",
269                       0,
270                       field.getAttributes().length );
271     }
272 
273     public void testBuildFields()
274         throws Exception
275     {
276         final String name = "myField";
277         final String type = "int";
278         final JavaField javaField = new JavaField();
279         javaField.setType( new Type( type ) );
280         javaField.setTags( new ArrayList() );
281         javaField.setModifiers( new String[]{"public"} );
282         javaField.setName( name );
283         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
284         final FieldDescriptor[] fields =
285             parser.buildFields( new JavaField[]{javaField},
286                                 new DefaultQDoxAttributeInterceptor() );
287         assertEquals( "fields.length", 1, fields.length );
288         final FieldDescriptor field = fields[ 0 ];
289         assertNotNull( "field", field );
290         assertEquals( "field.name", name, field.getName() );
291         assertEquals( "field.type", type, field.getType() );
292         assertEquals( "field.attributes.length",
293                       0,
294                       field.getAttributes().length );
295     }
296 
297     public void testBuildFieldWitAttributeDeletion()
298         throws Exception
299     {
300         final String name = "myField";
301         final String type = "int";
302         final JavaField javaField = new JavaField();
303         javaField.setType( new Type( type ) );
304         final ArrayList tags = new ArrayList();
305         tags.add( new DefaultDocletTag( "deleteme", "" ) );
306         tags.add( new DefaultDocletTag( "dna.persist", "" ) );
307         javaField.setTags( tags );
308         javaField.setModifiers( new String[]{"public"} );
309         javaField.setName( name );
310         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
311         final FieldDescriptor field = parser.buildField( javaField,
312                                                          new DeletingAttributeInterceptor() );
313         assertNotNull( "field", field );
314         assertEquals( "field.name", name, field.getName() );
315         assertEquals( "field.type", type, field.getType() );
316         assertEquals( "field.attributes.length",
317                       1,
318                       field.getAttributes().length );
319         assertEquals( "field.attributes[0].name",
320                       "dna.persist",
321                       field.getAttributes()[ 0 ].getName() );
322     }
323 
324     public void testBuildFieldWitAttributeRewritten()
325         throws Exception
326     {
327         final String name = "myField";
328         final String type = "int";
329         final JavaField javaField = new JavaField();
330         javaField.setType( new Type( type ) );
331         final ArrayList tags = new ArrayList();
332         tags.add( new DefaultDocletTag( "rewriteme", "" ) );
333         tags.add( new DefaultDocletTag( "dna.persist", "" ) );
334         javaField.setTags( tags );
335         javaField.setModifiers( new String[]{"public"} );
336         javaField.setName( name );
337         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
338         final FieldDescriptor field = parser.buildField( javaField,
339                                                          new RewritingAttributeInterceptor() );
340         assertNotNull( "field", field );
341         assertEquals( "field.name", name, field.getName() );
342         assertEquals( "field.type", type, field.getType() );
343         assertEquals( "field.attributes.length",
344                       2,
345                       field.getAttributes().length );
346         assertEquals( "field.attributes[0].name",
347                       "rewritten",
348                       field.getAttributes()[ 0 ].getName() );
349         assertEquals( "field.attributes[1].name",
350                       "dna.persist",
351                       field.getAttributes()[ 1 ].getName() );
352     }
353 
354     public void testBuildFieldWitAttributesReplaced()
355         throws Exception
356     {
357         final String name = "myField";
358         final String type = "int";
359         final JavaField javaField = new JavaField();
360         javaField.setType( new Type( type ) );
361         final ArrayList tags = new ArrayList();
362         tags.add( new DefaultDocletTag( "rewriteme", "" ) );
363         tags.add( new DefaultDocletTag( "dna.persist", "" ) );
364         javaField.setTags( tags );
365         javaField.setModifiers( new String[]{"public"} );
366         javaField.setName( name );
367         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
368         final FieldDescriptor field = parser.buildField( javaField,
369                                                          new ReplacingAttributeInterceptor() );
370         assertNotNull( "field", field );
371         assertEquals( "field.name", name, field.getName() );
372         assertEquals( "field.type", type, field.getType() );
373         assertEquals( "field.attributes.length",
374                       0,
375                       field.getAttributes().length );
376     }
377 
378     public void testBuildParameter()
379         throws Exception
380     {
381         final String name = "myField";
382         final String type = "int";
383         final JavaParameter javaParameter = new JavaParameter(
384             new Type( type ), name );
385         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
386         final ParameterDescriptor parameter = parser.buildParameter(
387             javaParameter );
388         assertNotNull( "parameter", parameter );
389         assertEquals( "parameter.name", name, parameter.getName() );
390         assertEquals( "parameter.type", type, parameter.getType() );
391     }
392 
393     public void testBuildParameters()
394         throws Exception
395     {
396         final String name = "myField";
397         final String type = "int";
398         final JavaParameter javaParameter = new JavaParameter(
399             new Type( type ), name );
400         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
401         final ParameterDescriptor[] parameters =
402             parser.buildParameters( new JavaParameter[]{javaParameter} );
403         assertEquals( "parameters.length", 1, parameters.length );
404         final ParameterDescriptor parameter = parameters[ 0 ];
405         assertNotNull( "parameter", parameter );
406         assertEquals( "parameter.name", name, parameter.getName() );
407         assertEquals( "parameter.type", type, parameter.getType() );
408     }
409 
410     public void testBuildMethod()
411         throws Exception
412     {
413         final String name = "myField";
414         final String type = "int";
415         final JavaMethod javaMethod = new JavaMethod();
416         javaMethod.setName( name );
417         javaMethod.setReturns( new Type( type ) );
418         javaMethod.setConstructor( false );
419         javaMethod.setExceptions( new Type[ 0 ] );
420         javaMethod.setParameters( new JavaParameter[ 0 ] );
421         javaMethod.setModifiers( new String[]{"public"} );
422         javaMethod.setTags( new ArrayList() );
423         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
424         final MethodDescriptor method = parser.buildMethod( javaMethod,
425                                                             new DefaultQDoxAttributeInterceptor() );
426         assertNotNull( "method", method );
427         assertEquals( "method.name", name, method.getName() );
428         assertEquals( "method.type", type, method.getReturnType() );
429         assertEquals( "method.parameters.length",
430                       0,
431                       method.getParameters().length );
432         assertEquals( "field.attributes.length",
433                       0,
434                       method.getAttributes().length );
435     }
436 
437     public void testBuildMethodWithNullReturn()
438         throws Exception
439     {
440         final String name = "myField";
441         final JavaMethod javaMethod = new JavaMethod();
442         javaMethod.setName( name );
443         javaMethod.setReturns( null );
444         javaMethod.setConstructor( false );
445         javaMethod.setExceptions( new Type[ 0 ] );
446         javaMethod.setParameters( new JavaParameter[ 0 ] );
447         javaMethod.setModifiers( new String[]{"public"} );
448         javaMethod.setTags( new ArrayList() );
449         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
450         final MethodDescriptor method = parser.buildMethod( javaMethod,
451                                                             new DefaultQDoxAttributeInterceptor() );
452         assertNotNull( "method", method );
453         assertEquals( "method.name", name, method.getName() );
454         assertEquals( "method.type", "", method.getReturnType() );
455         assertEquals( "method.parameters.length",
456                       0,
457                       method.getParameters().length );
458         assertEquals( "field.attributes.length",
459                       0,
460                       method.getAttributes().length );
461     }
462 
463     public void testBuildMethods()
464         throws Exception
465     {
466         final String name = "myField";
467         final String type = "int";
468         final JavaMethod javaMethod = new JavaMethod();
469         javaMethod.setName( name );
470         javaMethod.setReturns( new Type( type ) );
471         javaMethod.setConstructor( false );
472         javaMethod.setExceptions( new Type[ 0 ] );
473         javaMethod.setParameters( new JavaParameter[ 0 ] );
474         javaMethod.setModifiers( new String[]{"public"} );
475         javaMethod.setTags( new ArrayList() );
476         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
477         final MethodDescriptor[] methods =
478             parser.buildMethods( new JavaMethod[]{javaMethod},
479                                  new DefaultQDoxAttributeInterceptor() );
480         assertEquals( "methods.length", 1, methods.length );
481         final MethodDescriptor method = methods[ 0 ];
482         assertNotNull( "method", method );
483         assertEquals( "method.name", name, method.getName() );
484         assertEquals( "method.type", type, method.getReturnType() );
485         assertEquals( "method.parameters.length",
486                       0,
487                       method.getParameters().length );
488         assertEquals( "field.attributes.length",
489                       0,
490                       method.getAttributes().length );
491     }
492 
493     public void testBuildMethodWithAttributeDeletion()
494         throws Exception
495     {
496         final String name = "myField";
497         final String type = "int";
498         final JavaMethod javaMethod = new JavaMethod();
499         javaMethod.setName( name );
500         javaMethod.setReturns( new Type( type ) );
501         javaMethod.setConstructor( false );
502         javaMethod.setExceptions( new Type[ 0 ] );
503         javaMethod.setParameters( new JavaParameter[ 0 ] );
504         javaMethod.setModifiers( new String[]{"public"} );
505         final ArrayList tags = new ArrayList();
506         tags.add( new DefaultDocletTag( "deleteme", "" ) );
507         tags.add( new DefaultDocletTag( "dna.entry", "" ) );
508         javaMethod.setTags( tags );
509         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
510         final MethodDescriptor method = parser.buildMethod( javaMethod,
511                                                             new DeletingAttributeInterceptor() );
512         assertNotNull( "method", method );
513         assertEquals( "method.name", name, method.getName() );
514         assertEquals( "method.type", type, method.getReturnType() );
515         assertEquals( "method.parameters.length",
516                       0,
517                       method.getParameters().length );
518         assertEquals( "field.attributes.length",
519                       1,
520                       method.getAttributes().length );
521         assertEquals( "field.attributes[0].name",
522                       "dna.entry",
523                       method.getAttributes()[ 0 ].getName() );
524     }
525 
526     public void testBuildMethodWithAttributeRewritten()
527         throws Exception
528     {
529         final String name = "myField";
530         final String type = "int";
531         final JavaMethod javaMethod = new JavaMethod();
532         javaMethod.setName( name );
533         javaMethod.setReturns( new Type( type ) );
534         javaMethod.setConstructor( false );
535         javaMethod.setExceptions( new Type[ 0 ] );
536         javaMethod.setParameters( new JavaParameter[ 0 ] );
537         javaMethod.setModifiers( new String[]{"public"} );
538         final ArrayList tags = new ArrayList();
539         tags.add( new DefaultDocletTag( "rewriteme", "" ) );
540         tags.add( new DefaultDocletTag( "dna.entry", "" ) );
541         javaMethod.setTags( tags );
542         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
543         final MethodDescriptor method = parser.buildMethod( javaMethod,
544                                                             new RewritingAttributeInterceptor() );
545         assertNotNull( "method", method );
546         assertEquals( "method.name", name, method.getName() );
547         assertEquals( "method.type", type, method.getReturnType() );
548         assertEquals( "method.parameters.length",
549                       0,
550                       method.getParameters().length );
551         assertEquals( "field.attributes.length",
552                       2,
553                       method.getAttributes().length );
554         assertEquals( "field.attributes[0].name",
555                       "rewritten",
556                       method.getAttributes()[ 0 ].getName() );
557         assertEquals( "field.attributes[1].name",
558                       "dna.entry",
559                       method.getAttributes()[ 1 ].getName() );
560     }
561 
562     public void testBuildMethodWithAttributesReplaced()
563         throws Exception
564     {
565         final String name = "myField";
566         final String type = "int";
567         final JavaMethod javaMethod = new JavaMethod();
568         javaMethod.setName( name );
569         javaMethod.setReturns( new Type( type ) );
570         javaMethod.setConstructor( false );
571         javaMethod.setExceptions( new Type[ 0 ] );
572         javaMethod.setParameters( new JavaParameter[ 0 ] );
573         javaMethod.setModifiers( new String[]{"public"} );
574         final ArrayList tags = new ArrayList();
575         tags.add( new DefaultDocletTag( "rewriteme", "" ) );
576         tags.add( new DefaultDocletTag( "dna.entry", "" ) );
577         javaMethod.setTags( tags );
578         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
579         final MethodDescriptor method = parser.buildMethod( javaMethod,
580                                                             new ReplacingAttributeInterceptor() );
581         assertNotNull( "method", method );
582         assertEquals( "method.name", name, method.getName() );
583         assertEquals( "method.type", type, method.getReturnType() );
584         assertEquals( "method.parameters.length",
585                       0,
586                       method.getParameters().length );
587         assertEquals( "field.attributes.length",
588                       0,
589                       method.getAttributes().length );
590     }
591 
592     public void testBuildClass()
593         throws Exception
594     {
595         final String name = "MyClass";
596         final JavaClass javaClass = new JavaClass( new MockPackage() );
597         javaClass.setName( name );
598         javaClass.setImplementz( new Type[ 0 ] );
599         javaClass.setInterface( false );
600         javaClass.setModifiers( new String[]{"public"} );
601         javaClass.setTags( new ArrayList() );
602         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
603         final ClassDescriptor clazz = parser.buildClassDescriptor( javaClass );
604         assertNotNull( "clazz", clazz );
605         assertEquals( "clazz.name", "com.biz." + name, clazz.getName() );
606         assertEquals( "clazz.attributes.length",
607                       0,
608                       clazz.getAttributes().length );
609         assertEquals( "clazz.fields.length", 0, clazz.getFields().length );
610         assertEquals( "clazz.methods.length", 0, clazz.getMethods().length );
611     }
612 
613     public void testBuildClassUsingOwnInterceptors()
614         throws Exception
615     {
616         final String name = "MyClass";
617         final JavaClass javaClass = new JavaClass( new MockPackage() );
618         javaClass.setName( name );
619         javaClass.setImplementz( new Type[ 0 ] );
620         javaClass.setInterface( false );
621         javaClass.setModifiers( new String[]{"public"} );
622         javaClass.setTags( new ArrayList() );
623         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
624         final ClassDescriptor clazz = parser.buildClassDescriptor( javaClass,
625                                                                    new DefaultQDoxAttributeInterceptor() );
626         assertNotNull( "clazz", clazz );
627         assertEquals( "clazz.name", "com.biz." + name, clazz.getName() );
628         assertEquals( "clazz.attributes.length",
629                       0,
630                       clazz.getAttributes().length );
631         assertEquals( "clazz.fields.length", 0, clazz.getFields().length );
632         assertEquals( "clazz.methods.length", 0, clazz.getMethods().length );
633     }
634 
635     public void testBuildClassWithAttributeDeletion()
636         throws Exception
637     {
638         final String name = "MyClass";
639         final JavaClass javaClass = new JavaClass( new MockPackage() );
640         javaClass.setName( name );
641         javaClass.setImplementz( new Type[ 0 ] );
642         javaClass.setInterface( false );
643         javaClass.setModifiers( new String[]{"public"} );
644         final ArrayList tags = new ArrayList();
645         tags.add( new DefaultDocletTag( "deleteme", "" ) );
646         tags.add( new DefaultDocletTag( "dna.service", "" ) );
647         javaClass.setTags( tags );
648         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
649         final ClassDescriptor clazz = parser.buildClassDescriptor( javaClass,
650                                                                    new DeletingAttributeInterceptor() );
651         assertNotNull( "clazz", clazz );
652         assertEquals( "clazz.name", "com.biz." + name, clazz.getName() );
653         assertEquals( "clazz.attributes.length",
654                       1,
655                       clazz.getAttributes().length );
656         assertEquals( "clazz.attributes[0].getName()",
657                       "dna.service",
658                       clazz.getAttributes()[ 0 ].getName() );
659         assertEquals( "clazz.fields.length", 0, clazz.getFields().length );
660         assertEquals( "clazz.methods.length", 0, clazz.getMethods().length );
661     }
662 
663     public void testBuildClassWithAttributeRewritten()
664         throws Exception
665     {
666         final String name = "MyClass";
667         final JavaClass javaClass = new JavaClass( new MockPackage() );
668         javaClass.setName( name );
669         javaClass.setImplementz( new Type[ 0 ] );
670         javaClass.setInterface( false );
671         javaClass.setModifiers( new String[]{"public"} );
672         final ArrayList tags = new ArrayList();
673         tags.add( new DefaultDocletTag( "rewriteme", "" ) );
674         tags.add( new DefaultDocletTag( "dna.service", "" ) );
675         javaClass.setTags( tags );
676         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
677         final ClassDescriptor clazz = parser.buildClassDescriptor( javaClass,
678                                                                    new RewritingAttributeInterceptor() );
679         assertNotNull( "clazz", clazz );
680         assertEquals( "clazz.name", "com.biz." + name, clazz.getName() );
681         assertEquals( "clazz.attributes.length",
682                       2,
683                       clazz.getAttributes().length );
684         assertEquals( "clazz.attributes[0].getName()",
685                       "rewritten",
686                       clazz.getAttributes()[ 0 ].getName() );
687         assertEquals( "clazz.attributes[1].getName()",
688                       "dna.service",
689                       clazz.getAttributes()[ 1 ].getName() );
690         assertEquals( "clazz.fields.length", 0, clazz.getFields().length );
691         assertEquals( "clazz.methods.length", 0, clazz.getMethods().length );
692     }
693 
694     public void testBuildClassWithAttributesReplaces()
695         throws Exception
696     {
697         final String name = "MyClass";
698         final JavaClass javaClass = new JavaClass( new MockPackage() );
699         javaClass.setName( name );
700         javaClass.setImplementz( new Type[ 0 ] );
701         javaClass.setInterface( false );
702         javaClass.setModifiers( new String[]{"public"} );
703         final ArrayList tags = new ArrayList();
704         tags.add( new DefaultDocletTag( "rewriteme", "" ) );
705         tags.add( new DefaultDocletTag( "dna.service", "" ) );
706         javaClass.setTags( tags );
707         final QDoxDescriptorParser parser = new QDoxDescriptorParser();
708         final ClassDescriptor clazz = parser.buildClassDescriptor( javaClass,
709                                                                    new ReplacingAttributeInterceptor() );
710         assertNotNull( "clazz", clazz );
711         assertEquals( "clazz.name", "com.biz." + name, clazz.getName() );
712         assertEquals( "clazz.attributes.length",
713                       0,
714                       clazz.getAttributes().length );
715         assertEquals( "clazz.fields.length", 0, clazz.getFields().length );
716         assertEquals( "clazz.methods.length", 0, clazz.getMethods().length );
717     }
718 }