1
package com.thoughtworks.qdox.model;
3
import com.thoughtworks.qdox.parser.structs.ClassDef;
4
import com.thoughtworks.qdox.parser.structs.FieldDef;
5
import com.thoughtworks.qdox.parser.structs.MethodDef;
6
import com.thoughtworks.qdox.parser.structs.TagDef;
7
import java.util.Arrays;
8
import junit.framework.TestCase;
10
public class ModelBuilderTest extends TestCase {
12
private ModelBuilder builder;
14
public ModelBuilderTest(String s) {
18
protected void setUp() throws Exception {
20
builder = new ModelBuilder();
23
public void testNumberOfClassesGrows() throws Exception {
24
assertEquals(0, builder.getSource().getClasses().length);
25
builder.beginClass(new ClassDef());
27
assertEquals(1, builder.getSource().getClasses().length);
28
builder.beginClass(new ClassDef());
30
assertEquals(2, builder.getSource().getClasses().length);
33
public void testSimpleClass() throws Exception {
34
ClassDef cls = new ClassDef();
36
builder.beginClass(cls);
39
ClassDef cls2 = new ClassDef();
40
cls2.name = "ThingyThing";
41
builder.beginClass(cls2);
44
JavaSource source = builder.getSource();
46
assertEquals("Thingy", source.getClasses()[0].getName());
47
assertEquals("ThingyThing", source.getClasses()[1].getName());
48
assertEquals(source, source.getClasses()[0].getParentSource());
51
public void testInterface() throws Exception {
52
ClassDef cls = new ClassDef();
53
builder.beginClass(cls);
56
ClassDef cls2 = new ClassDef();
57
cls2.type = ClassDef.INTERFACE;
58
builder.beginClass(cls2);
61
JavaSource source = builder.getSource();
63
assertEquals(false, source.getClasses()[0].isInterface());
64
assertEquals(true, source.getClasses()[1].isInterface());
67
public void testEnum() throws Exception {
68
ClassDef cls = new ClassDef();
69
builder.beginClass(cls);
72
ClassDef cls2 = new ClassDef();
73
cls2.type = ClassDef.ENUM;
74
builder.beginClass(cls2);
77
JavaSource source = builder.getSource();
79
assertEquals(false, source.getClasses()[0].isEnum());
80
assertEquals(true, source.getClasses()[1].isEnum());
83
public void testAnnotationType() throws Exception {
84
ClassDef cls = new ClassDef();
85
cls.type = ClassDef.ANNOTATION_TYPE;
86
builder.beginClass(cls);
89
JavaSource source = builder.getSource();
91
assertEquals(0, source.getClasses().length);
94
public void testClassExtends() throws Exception {
95
ClassDef cls = new ClassDef();
96
builder.beginClass(cls);
99
ClassDef cls2 = new ClassDef();
100
cls2.extendz.add("Another");
101
builder.beginClass(cls2);
103
builder.addImport("com.thoughtworks.*");
105
JavaSource source = builder.getSource();
107
assertEquals("java.lang.Object", source.getClasses()[0].getSuperClass().getValue());
108
assertEquals("Another", source.getClasses()[1].getSuperClass().getValue());
110
assertEquals(0, source.getClasses()[0].getImplements().length);
111
assertEquals(0, source.getClasses()[1].getImplements().length);
113
//Add another class and see if Another gets resolved
114
builder.addPackage("com.thoughtworks");
115
ClassDef anotherCls = new ClassDef();
116
anotherCls.name = "Another";
117
builder.beginClass(anotherCls);
120
assertEquals("com.thoughtworks.Another", source.getClasses()[1].getSuperClass().getValue());
123
public void testInterfaceExtends() throws Exception {
124
ClassDef cls = new ClassDef();
125
cls.type = ClassDef.INTERFACE;
126
builder.beginClass(cls);
129
ClassDef cls2 = new ClassDef();
130
cls2.type = ClassDef.INTERFACE;
131
cls2.extendz.add("Another");
132
builder.beginClass(cls2);
135
JavaSource source = builder.getSource();
137
assertEquals(0, source.getClasses()[0].getImplements().length);
138
assertEquals(1, source.getClasses()[1].getImplements().length);
139
assertEquals("Another", source.getClasses()[1].getImplements()[0].getValue());
141
assertNull(source.getClasses()[0].getSuperClass());
142
assertNull(source.getClasses()[1].getSuperClass());
145
public void testInterfaceExtendsMultiple() throws Exception {
146
ClassDef cls = new ClassDef();
147
cls.type = ClassDef.INTERFACE;
148
cls.extendz.add("Another");
149
cls.extendz.add("java.io.Serializable");
150
cls.extendz.add("BottleOpener");
151
builder.beginClass(cls);
154
JavaSource source = builder.getSource();
157
Arrays.sort(source.getClasses()[0].getImplements());
158
assertEquals(3, source.getClasses()[0].getImplements().length);
159
assertEquals("Another", source.getClasses()[0].getImplements()[0].getValue());
160
assertEquals("BottleOpener", source.getClasses()[0].getImplements()[1].getValue());
161
assertEquals("java.io.Serializable", source.getClasses()[0].getImplements()[2].getValue());
163
assertNull(source.getClasses()[0].getSuperClass());
166
public void testClassImplements() throws Exception {
167
ClassDef cls = new ClassDef();
168
builder.beginClass(cls);
171
ClassDef cls2 = new ClassDef();
172
cls2.implementz.add("SomeInterface");
173
builder.beginClass(cls2);
176
JavaSource source = builder.getSource();
178
assertEquals(0, source.getClasses()[0].getImplements().length);
179
assertEquals(1, source.getClasses()[1].getImplements().length);
181
assertEquals("SomeInterface", source.getClasses()[1].getImplements()[0].getValue());
183
assertEquals("java.lang.Object", source.getClasses()[0].getSuperClass().getValue());
184
assertEquals("java.lang.Object", source.getClasses()[1].getSuperClass().getValue());
187
public void testClassImplementsMultiple() throws Exception {
188
ClassDef cls = new ClassDef();
189
cls.implementz.add("SomeInterface");
190
cls.implementz.add("XX");
191
builder.beginClass(cls);
194
JavaSource source = builder.getSource();
196
assertEquals(2, source.getClasses()[0].getImplements().length);
198
Arrays.sort(source.getClasses()[0].getImplements());
199
assertEquals("SomeInterface", source.getClasses()[0].getImplements()[0].getValue());
200
assertEquals("XX", source.getClasses()[0].getImplements()[1].getValue());
203
public void testClassExtendsAndImplements() throws Exception {
204
ClassDef cls = new ClassDef();
205
cls.extendz.add("SubClass");
206
cls.implementz.add("SomeInterface");
207
cls.implementz.add("XX");
208
builder.beginClass(cls);
211
JavaSource source = builder.getSource();
213
assertEquals(2, source.getClasses()[0].getImplements().length);
215
Arrays.sort(source.getClasses()[0].getImplements());
216
assertEquals("SomeInterface", source.getClasses()[0].getImplements()[0].getValue());
217
assertEquals("XX", source.getClasses()[0].getImplements()[1].getValue());
219
assertEquals("SubClass", source.getClasses()[0].getSuperClass().getValue());
222
public void testClassModifiers() throws Exception {
223
builder.beginClass(new ClassDef());
226
ClassDef cls2 = new ClassDef();
227
cls2.modifiers.add("public");
228
cls2.modifiers.add("final");
229
builder.beginClass(cls2);
232
JavaSource source = builder.getSource();
234
assertEquals(0, source.getClasses()[0].getModifiers().length);
235
assertEquals(2, source.getClasses()[1].getModifiers().length);
238
String[] modifiers = source.getClasses()[1].getModifiers();
239
Arrays.sort(modifiers);
240
assertEquals("final", modifiers[0]);
241
assertEquals("public", modifiers[1]);
244
public void testAddMethodsToCorrectClass() throws Exception {
245
builder.beginClass(new ClassDef());
246
builder.addMethod(new MethodDef());
249
builder.beginClass(new ClassDef());
250
builder.addMethod(new MethodDef());
251
builder.addMethod(new MethodDef());
252
builder.addMethod(new MethodDef());
255
builder.beginClass(new ClassDef());
256
builder.addMethod(new MethodDef());
257
builder.addMethod(new MethodDef());
260
JavaSource source = builder.getSource();
261
assertEquals(1, source.getClasses()[0].getMethods().length);
262
assertEquals(3, source.getClasses()[1].getMethods().length);
263
assertEquals(2, source.getClasses()[2].getMethods().length);
266
public void testInnerClass() throws Exception {
267
builder.addPackage("xyz");
269
ClassDef outerDef = new ClassDef();
270
outerDef.name = "Outer";
271
builder.beginClass(outerDef);
273
ClassDef innerDef = new ClassDef();
274
innerDef.name = "Inner";
275
builder.beginClass(innerDef);
277
MethodDef fooDef = new MethodDef();
279
builder.addMethod(fooDef);
282
MethodDef barDef = new MethodDef();
284
builder.addMethod(barDef);
287
JavaSource source = builder.getSource();
288
assertEquals(1, source.getClasses().length);
289
JavaClass outerClass = source.getClasses()[0];
290
assertEquals("xyz.Outer", outerClass.getFullyQualifiedName());
291
assertEquals(1, outerClass.getMethods().length);
292
assertEquals("bar", outerClass.getMethods()[0].getName());
293
assertEquals(1, outerClass.getNestedClasses().length);
294
JavaClass innerClass = outerClass.getNestedClasses()[0];
295
assertEquals("xyz.Outer$Inner", innerClass.getFullyQualifiedName());
296
assertEquals(1, innerClass.getMethods().length);
297
assertEquals("foo", innerClass.getMethods()[0].getName());
300
public void testSimpleMethod() throws Exception {
301
builder.beginClass(new ClassDef());
302
MethodDef mth = new MethodDef();
303
mth.name = "doSomething";
304
mth.returns = "void";
305
builder.addMethod(mth);
308
JavaSource source = builder.getSource();
309
JavaMethod doSomething = source.getClasses()[0].getMethods()[0];
310
assertEquals("doSomething", doSomething.getName());
311
assertEquals("void", doSomething.getReturns().getValue());
312
JavaSource parentSource = doSomething.getReturns().getJavaClassParent().getParentSource();
313
assertSame(source, parentSource);
314
assertEquals(0, doSomething.getModifiers().length);
315
assertEquals(0, doSomething.getParameters().length);
316
assertEquals(0, doSomething.getExceptions().length);
319
public void testMethodNoArray() throws Exception {
320
builder.beginClass(new ClassDef());
321
MethodDef mth = new MethodDef();
322
mth.name = "doSomething";
323
mth.returns = "void";
325
builder.addMethod(mth);
328
JavaSource source = builder.getSource();
329
JavaMethod result = source.getClasses()[0].getMethods()[0];
330
assertEquals(0, result.getReturns().getDimensions());
333
public void testMethod1dArray() throws Exception {
334
builder.beginClass(new ClassDef());
335
MethodDef mth = new MethodDef();
336
mth.name = "doSomething";
337
mth.returns = "void";
339
builder.addMethod(mth);
342
JavaSource source = builder.getSource();
343
JavaMethod result = source.getClasses()[0].getMethods()[0];
344
assertEquals(1, result.getReturns().getDimensions());
347
public void testMethod2dArray() throws Exception {
348
builder.beginClass(new ClassDef());
349
MethodDef mth = new MethodDef();
350
mth.name = "doSomething";
351
mth.returns = "void";
353
builder.addMethod(mth);
356
JavaSource source = builder.getSource();
357
JavaMethod result = source.getClasses()[0].getMethods()[0];
358
assertEquals(2, result.getReturns().getDimensions());
361
public void testMethodParameters() throws Exception {
362
builder.beginClass(new ClassDef());
363
MethodDef mth = new MethodDef();
365
FieldDef f1 = new FieldDef();
368
f1.modifiers.add("final");
371
FieldDef f2 = new FieldDef();
376
builder.addMethod(mth);
379
JavaSource source = builder.getSource();
380
JavaMethod result = source.getClasses()[0].getMethods()[0];
381
assertEquals(2, result.getParameters().length);
382
assertEquals("count", result.getParameters()[0].getName());
383
assertEquals("int", result.getParameters()[0].getType().getValue());
384
assertEquals("name", result.getParameters()[1].getName());
385
assertEquals("String", result.getParameters()[1].getType().getValue());
388
public void testMethodParametersWithArrays() throws Exception {
389
builder.beginClass(new ClassDef());
390
MethodDef mth = new MethodDef();
392
FieldDef f1 = new FieldDef();
395
f1.modifiers.add("final");
399
FieldDef f2 = new FieldDef();
405
builder.addMethod(mth);
408
JavaSource source = builder.getSource();
409
JavaMethod result = source.getClasses()[0].getMethods()[0];
410
assertEquals(1, result.getParameters()[0].getType().getDimensions());
411
assertEquals(2, result.getParameters()[1].getType().getDimensions());
414
public void testMethodExceptions() throws Exception {
415
builder.beginClass(new ClassDef());
416
MethodDef mth = new MethodDef();
418
mth.exceptions.add("RuntimeException");
419
mth.exceptions.add("java.io.IOException");
421
builder.addMethod(mth);
424
JavaSource source = builder.getSource();
425
JavaMethod result = source.getClasses()[0].getMethods()[0];
426
assertEquals(2, result.getExceptions().length);
428
Arrays.sort(result.getExceptions());
429
assertEquals("RuntimeException", result.getExceptions()[0].getValue());
430
assertEquals("java.io.IOException", result.getExceptions()[1].getValue());
433
public void testMethodModifiers() throws Exception {
434
builder.beginClass(new ClassDef());
435
MethodDef mth = new MethodDef();
437
mth.modifiers.add("public");
438
mth.modifiers.add("final");
439
mth.modifiers.add("synchronized");
441
builder.addMethod(mth);
444
JavaSource source = builder.getSource();
445
JavaMethod result = source.getClasses()[0].getMethods()[0];
446
assertEquals(3, result.getModifiers().length);
448
String[] modifiers = result.getModifiers();
449
Arrays.sort(modifiers);
450
assertEquals("final", modifiers[0]);
451
assertEquals("public", modifiers[1]);
452
assertEquals("synchronized", modifiers[2]);
455
public void testSimpleField() throws Exception {
456
builder.beginClass(new ClassDef());
458
FieldDef fld = new FieldDef();
461
builder.addField(fld);
464
JavaSource source = builder.getSource();
466
JavaField result = source.getClasses()[0].getFields()[0];
467
assertNotNull(result);
468
assertEquals("count", result.getName());
469
assertEquals("int", result.getType().getValue());
473
public void testFieldWithModifiers() throws Exception {
474
builder.beginClass(new ClassDef());
476
FieldDef fld = new FieldDef();
477
fld.modifiers.add("blah");
478
fld.modifiers.add("blah2");
479
builder.addField(fld);
482
JavaSource source = builder.getSource();
484
JavaField result = source.getClasses()[0].getFields()[0];
485
assertNotNull(result);
486
assertNotNull(result.getModifiers());
487
Arrays.sort(result.getModifiers());
488
assertEquals("blah2", result.getModifiers()[0]);
489
assertEquals("blah", result.getModifiers()[1]);
492
public void testFieldNoArray() throws Exception {
493
builder.beginClass(new ClassDef());
495
FieldDef fld = new FieldDef();
499
builder.addField(fld);
502
JavaSource source = builder.getSource();
504
JavaField result = source.getClasses()[0].getFields()[0];
505
assertEquals(0, result.getType().getDimensions());
509
public void testField1dArray() throws Exception {
510
builder.beginClass(new ClassDef());
512
FieldDef fld = new FieldDef();
516
builder.addField(fld);
519
JavaSource source = builder.getSource();
521
JavaField result = source.getClasses()[0].getFields()[0];
522
assertEquals(1, result.getType().getDimensions());
526
public void testField2dArray() throws Exception {
527
builder.beginClass(new ClassDef());
529
FieldDef fld = new FieldDef();
533
builder.addField(fld);
536
JavaSource source = builder.getSource();
538
JavaField result = source.getClasses()[0].getFields()[0];
539
assertEquals(2, result.getType().getDimensions());
542
public void testSimpleConstructor() throws Exception {
543
builder.beginClass(new ClassDef());
545
MethodDef mth = new MethodDef();
546
mth.name = "MyClass";
547
mth.constructor = true;
548
builder.addMethod(mth);
550
MethodDef mth2 = new MethodDef();
551
mth2.name = "method";
552
mth2.returns = "void";
553
builder.addMethod(mth2);
556
JavaSource source = builder.getSource();
558
JavaMethod result1 = source.getClasses()[0].getMethods()[0];
559
JavaMethod result2 = source.getClasses()[0].getMethods()[1];
561
assertTrue(result1.isConstructor());
562
assertNull(result1.getReturns());
563
assertTrue(!result2.isConstructor());
564
assertNotNull(result2.getReturns());
567
public void testJavaDocOnClass() throws Exception {
568
builder.addJavaDoc("Hello");
569
builder.beginClass(new ClassDef());
572
JavaSource source = builder.getSource();
573
assertEquals("Hello", source.getClasses()[0].getComment());
576
public void testJavaDocSpiradiclyOnManyClasses() throws Exception {
578
builder.addJavaDoc("Hello");
579
builder.beginClass(new ClassDef());
582
builder.beginClass(new ClassDef());
585
builder.addJavaDoc("World");
586
builder.beginClass(new ClassDef());
589
JavaSource source = builder.getSource();
591
assertEquals("Hello", source.getClasses()[0].getComment());
592
assertNull(source.getClasses()[1].getComment());
593
assertEquals("World", source.getClasses()[2].getComment());
596
public void testJavaDocOnMethod() throws Exception {
597
builder.beginClass(new ClassDef());
599
builder.addJavaDoc("Hello");
600
builder.addMethod(new MethodDef());
603
JavaSource source = builder.getSource();
605
assertNull(source.getClasses()[0].getComment());
606
assertEquals("Hello", source.getClasses()[0].getMethods()[0].getComment());
609
public void testJavaDocOnField() throws Exception {
610
builder.beginClass(new ClassDef());
612
builder.addJavaDoc("Hello");
613
builder.addField(new FieldDef());
616
JavaSource source = builder.getSource();
618
assertNull(source.getClasses()[0].getComment());
619
assertEquals("Hello", source.getClasses()[0].getFields()[0].getComment());
622
public void testJavaDocOnMethodsAndFields() throws Exception {
623
builder.addJavaDoc("Thing");
624
builder.beginClass(new ClassDef());
626
builder.addField(new FieldDef());// f0
628
builder.addJavaDoc("Hello");
629
builder.addMethod(new MethodDef());//m0
631
builder.addJavaDoc("Hello field");
632
builder.addField(new FieldDef());//f1
634
builder.addMethod(new MethodDef());//m1
636
builder.addJavaDoc("World");
637
builder.addMethod(new MethodDef());//m2
641
JavaSource source = builder.getSource();
643
assertEquals("Thing", source.getClasses()[0].getComment());
644
assertNull(source.getClasses()[0].getFields()[0].getComment());
645
assertEquals("Hello field", source.getClasses()[0].getFields()[1].getComment());
646
assertEquals("Hello", source.getClasses()[0].getMethods()[0].getComment());
647
assertNull(source.getClasses()[0].getMethods()[1].getComment());
648
assertEquals("World", source.getClasses()[0].getMethods()[2].getComment());
651
public void testDocletTag() throws Exception {
652
builder.addJavaDoc("Hello");
653
builder.addJavaDocTag(new TagDef("cheese", "is good"));
654
builder.beginClass(new ClassDef());
658
JavaSource source = builder.getSource();
660
assertEquals("Hello", source.getClasses()[0].getComment());
661
assertEquals(1, source.getClasses()[0].getTags().length);
662
assertEquals("cheese", source.getClasses()[0].getTags()[0].getName());
663
assertEquals("is good", source.getClasses()[0].getTags()[0].getValue());
666
public void testDocletTagWithNoComment() throws Exception {
667
builder.addJavaDoc(""); // parser will always call this method to signify start of javadoc
668
builder.addJavaDocTag(new TagDef("cheese", "is good"));
669
builder.beginClass(new ClassDef());
673
JavaSource source = builder.getSource();
675
assertEquals("", source.getClasses()[0].getComment());
676
assertEquals(1, source.getClasses()[0].getTags().length);
677
assertEquals("cheese", source.getClasses()[0].getTags()[0].getName());
678
assertEquals("is good", source.getClasses()[0].getTags()[0].getValue());
681
public void testMultipleDocletTags() throws Exception {
682
builder.addJavaDoc("Hello");
683
builder.addJavaDocTag(new TagDef("cheese", "is good"));
684
builder.addJavaDocTag(new TagDef("food", "is great"));
685
builder.addJavaDocTag(new TagDef("chairs", "are boring"));
686
builder.beginClass(new ClassDef());
690
JavaSource source = builder.getSource();
692
assertEquals("Hello", source.getClasses()[0].getComment());
693
assertEquals(3, source.getClasses()[0].getTags().length);
694
assertEquals("cheese", source.getClasses()[0].getTags()[0].getName());
695
assertEquals("is good", source.getClasses()[0].getTags()[0].getValue());
696
assertEquals("food", source.getClasses()[0].getTags()[1].getName());
697
assertEquals("is great", source.getClasses()[0].getTags()[1].getValue());
698
assertEquals("chairs", source.getClasses()[0].getTags()[2].getName());
699
assertEquals("are boring", source.getClasses()[0].getTags()[2].getValue());
702
public void testDocletTagsOnMethodsAndFields() throws Exception {
703
builder.addJavaDoc("");
704
builder.addJavaDocTag(new TagDef("cheese", "is good"));
705
builder.beginClass(new ClassDef());
707
builder.addJavaDoc("");
708
builder.addJavaDocTag(new TagDef("food", "is great"));
709
builder.addMethod(new MethodDef());
711
builder.addJavaDoc("");
712
builder.addJavaDocTag(new TagDef("chairs", "are boring"));
713
builder.addField(new FieldDef());
716
JavaSource source = builder.getSource();
718
assertEquals("cheese", source.getClasses()[0].getTags()[0].getName());
719
assertEquals("is good", source.getClasses()[0].getTags()[0].getValue());
720
assertEquals("food", source.getClasses()[0].getMethods()[0].getTags()[0].getName());
721
assertEquals("is great", source.getClasses()[0].getMethods()[0].getTags()[0].getValue());
722
assertEquals("chairs", source.getClasses()[0].getFields()[0].getTags()[0].getName());
723
assertEquals("are boring", source.getClasses()[0].getFields()[0].getTags()[0].getValue());
726
public void testRetrieveJavaSource() throws Exception {
727
builder.beginClass(new ClassDef());
730
JavaSource source = builder.getSource();
731
assertNotNull(source);
734
public void testJavaSourceClassCount() throws Exception {
735
builder.beginClass(new ClassDef());
737
builder.beginClass(new ClassDef());
739
builder.beginClass(new ClassDef());
741
JavaSource result = builder.getSource();
742
assertEquals(3, result.getClasses().length);
745
public void testJavaSourceNoPackage() throws Exception {
746
JavaSource result = builder.getSource();
747
assertNull(result.getPackage());
750
public void testJavaSourceWithPackage() throws Exception {
751
builder.addPackage("com.blah.thing");
752
JavaSource result = builder.getSource();
753
assertEquals("com.blah.thing", result.getPackage());
756
public void testJavaSourceNoImports() throws Exception {
757
JavaSource result = builder.getSource();
758
assertEquals(0, result.getImports().length);
761
public void testJavaSourceOneImport() throws Exception {
762
builder.addImport("com.blah.Thing");
763
JavaSource result = builder.getSource();
764
assertEquals(1, result.getImports().length);
765
assertEquals("com.blah.Thing", result.getImports()[0]);
768
public void testJavaSourceMultipleImports() throws Exception {
769
builder.addImport("com.blah.Thing");
770
builder.addImport("java.util.List");
771
builder.addImport("org.apache.*");
772
JavaSource result = builder.getSource();
773
assertEquals(3, result.getImports().length);
774
assertEquals("com.blah.Thing", result.getImports()[0]);
775
assertEquals("java.util.List", result.getImports()[1]);
776
assertEquals("org.apache.*", result.getImports()[2]);
779
public void testModelHashCodes() {
781
ClassDef classDef = new ClassDef();
782
classDef.name = "hello";
783
assertTrue(classDef.hashCode() > 0);
785
MethodDef methodDef = new MethodDef();
786
methodDef.name = "hello";
787
assertTrue(methodDef.hashCode() > 0);
789
FieldDef fieldDef = new FieldDef();
790
fieldDef.name = "hello";
791
assertTrue(fieldDef.hashCode() > 0);
793
JavaParameter javaParameter = new JavaParameter(new Type("q"), "w");
794
assertTrue(javaParameter.hashCode() > 0);
799
public void testType() {
801
Type type1 = new Type("fred", 1);
802
Type type2 = new Type("fred", 1);
803
Type type3 = new Type("wilma", 2);
804
assertTrue(type1.compareTo(type2) == 0);
805
assertFalse(type1.compareTo(type3) == 0);
806
assertTrue(type1.compareTo("barney") == 0);