1 package com.thoughtworks.xstream.objecttree.reflection; 2 3 import com.thoughtworks.someobjects.FunnyConstructor; 4 import com.thoughtworks.someobjects.X; 5 import com.thoughtworks.someobjects.Y; 6 import com.thoughtworks.xstream.objecttree.ObjectTree; 7 import junit.framework.TestCase; 8 9 import java.util.Arrays; 10 11 public class ReflectionObjectGraphTest extends TestCase { 12 13 private ObjectFactory objectFactory = new SunReflectionObjectFactory(); 14 15 public void testGraphStartsOffEmpty() { 16 ObjectTree writer = new ReflectionObjectGraph(X.class, objectFactory); 17 assertEquals(X.class, writer.type()); 18 assertNull(writer.get()); 19 } 20 21 public void testRootItemCanBeCreated() { 22 ObjectTree writer = new ReflectionObjectGraph(X.class, objectFactory); 23 writer.create(X.class); 24 assertEquals(X.class, writer.type()); 25 assertEquals(X.class, writer.get().getClass()); 26 } 27 28 class X2 extends X { 29 } 30 31 public void testRootItemCanBeCreatedWithCustomType() { 32 ObjectTree writer = new ReflectionObjectGraph(X.class, objectFactory); 33 writer.create(X2.class); 34 assertEquals(X.class, writer.type()); 35 assertEquals(X2.class, writer.get().getClass()); 36 } 37 38 39 public void testCreateSingleObjectAndSetSimpleFields() { 40 X expected = new X(); 41 expected.aStr = "hello"; 42 expected.anInt = 22; 43 44 ObjectTree writer = new ReflectionObjectGraph(X.class, objectFactory); 45 writer.create(X.class); 46 47 writer.push("aStr"); 48 assertEquals(String.class, writer.type()); 49 writer.set("hello"); 50 assertEquals(String.class, writer.type()); 51 writer.pop(); 52 53 writer.push("anInt"); 54 assertEquals(int.class, writer.type()); 55 writer.set(new Integer(22)); 56 assertEquals(int.class, writer.type()); 57 writer.pop(); 58 59 assertEquals(expected, writer.get()); 60 } 61 62 public void testCreateObjectInsideAnotherObject() { 63 X expected = new X(); 64 expected.aStr = "hello"; 65 expected.innerObj = new Y(); 66 expected.innerObj.yField = "world"; 67 expected.anInt = 3; 68 69 ObjectTree writer = new ReflectionObjectGraph(X.class, objectFactory); 70 writer.create(X.class); 71 72 writer.push("aStr"); 73 writer.set("hello"); 74 writer.pop(); 75 76 writer.push("innerObj"); 77 writer.create(Y.class); 78 writer.push("yField"); 79 writer.set("world"); 80 writer.pop(); 81 writer.pop(); 82 83 writer.push("anInt"); 84 writer.set(new Integer(3)); 85 writer.pop(); 86 87 assertEquals(expected, writer.get()); 88 } 89 90 public void testObjectCanBeInstantiatedWithoutDefaultConstructor() { 91 FunnyConstructor expected = new FunnyConstructor(33); 92 93 ObjectTree writer = new ReflectionObjectGraph(FunnyConstructor.class, objectFactory); 94 writer.create(FunnyConstructor.class); 95 96 writer.push("i"); 97 writer.set(new Integer(33)); 98 writer.pop(); 99 100 assertEquals(expected, writer.get()); 101 } 102 103 public void testIteratesOverFieldsOfCurrentObject() { 104 ObjectTree writer = new ReflectionObjectGraph(X.class, objectFactory); 105 writer.create(X.class); 106 107 String[] result = writer.fieldNames(); 108 109 Arrays.sort(result); 110 111 assertEquals(3, result.length); 112 assertEquals("aStr", result[0]); 113 assertEquals("anInt", result[1]); 114 assertEquals("innerObj", result[2]); 115 116 writer.push("innerObj"); 117 writer.create(Y.class); 118 result = writer.fieldNames(); 119 120 assertEquals(1, result.length); 121 assertEquals("yField", result[0]); 122 123 writer.pop(); 124 result = writer.fieldNames(); 125 126 assertEquals(3, result.length); 127 } 128 129 class Z { 130 boolean a; 131 } 132 133 class Z2 extends Z { 134 int b; 135 } 136 137 public void testInheritance() { 138 ObjectTree writer = new ReflectionObjectGraph(Z.class, objectFactory); 139 writer.create(Z2.class); 140 141 String[] result = writer.fieldNames(); 142 assertEquals(2, result.length); 143 assertEquals("b", result[0]); 144 assertEquals("a", result[1]); 145 } 146 } 147

This page was automatically generated by Maven