1
1
/*
2
2
* Copyright (C) 2005, 2006 Joe Walnes.
3
- * Copyright (C) 2006, 2007, 2014 XStream Committers.
3
+ * Copyright (C) 2006, 2007, 2014, 2015 XStream Committers.
4
4
* All rights reserved.
5
5
*
6
6
* The software in this package is published under the terms of the BSD
7
7
* style license a copy of which has been included with this distribution in
8
8
* the LICENSE.txt file.
9
- *
9
+ *
10
10
* Created on 31. January 2005 by Joe Walnes
11
11
*/
12
12
package com .thoughtworks .acceptance ;
@@ -16,14 +16,14 @@ public class InnerClassesTest extends AbstractAcceptanceTest {
16
16
public void testSerializedInnerClassMaintainsReferenceToOuterClass () {
17
17
xstream .allowTypes (Outer .class , Outer .Inner .class );
18
18
19
- Outer outer = new Outer ("THE-OUTER-NAME" , "THE-INNER-NAME" );
20
- Outer .Inner inner = outer .getInner ();
19
+ final Outer outer = new Outer ("THE-OUTER-NAME" , "THE-INNER-NAME" );
20
+ final Outer .Inner inner = outer .getInner ();
21
21
22
22
assertEquals ("Hello from THE-INNER-NAME (inside THE-OUTER-NAME)" , inner .getMessage ());
23
23
24
- String xml = xstream .toXML (inner );
24
+ final String xml = xstream .toXML (inner );
25
25
26
- String expectedXml = ""
26
+ final String expectedXml = ""
27
27
+ "<com.thoughtworks.acceptance.Outer_-Inner>\n "
28
28
+ " <innerName>THE-INNER-NAME</innerName>\n "
29
29
+ " <outer-class>\n "
@@ -33,18 +33,99 @@ public void testSerializedInnerClassMaintainsReferenceToOuterClass() {
33
33
+ "</com.thoughtworks.acceptance.Outer_-Inner>" ;
34
34
assertEquals (expectedXml , xml );
35
35
36
- Outer .Inner newInner = (Outer .Inner ) xstream .fromXML (xml );
36
+ final Outer .Inner newInner = (Outer .Inner )xstream .fromXML (xml );
37
37
38
38
assertEquals ("Hello from THE-INNER-NAME (inside THE-OUTER-NAME)" , newInner .getMessage ());
39
39
}
40
+
41
+ public static class OuterType {
42
+ private final String outerName = "Outer Name" ;
43
+ public InnerType inner = new InnerType ();
44
+ private final InnerType .Dynamic1 dyn1 = inner .new Dynamic1 ();
45
+ private final InnerType .Dynamic1 .Dynamic2 dyn2 = dyn1 .new Dynamic2 ();
46
+ private final InnerType .Dynamic3 dyn3 = inner .new Dynamic3 (dyn1 );
47
+
48
+ public class InnerType {
49
+ private final String innerName = "Inner Name" ;
50
+
51
+ public class Dynamic1 {
52
+ private final String name1 = "Name 1" ;
53
+
54
+ public class Dynamic2 {
55
+ private final String name2 = "Name 2" ;
56
+ }
57
+ }
58
+
59
+ public class Dynamic3 extends Dynamic1 .Dynamic2 {
60
+ private final String name3 = "Name 3" ;
61
+ private final Dynamic1 .Dynamic2 dyn4 ;
62
+
63
+ public Dynamic3 (final Dynamic1 outer ) {
64
+ outer .super ();
65
+ class Dynamic4 extends Dynamic1 .Dynamic2 {
66
+ private final String name4 = "Name 4" ;
67
+ private final Dynamic5 dyn5 = new Dynamic5 ();
68
+ class Dynamic5 {
69
+ private final String name5 = "Name 5" ;
70
+ }
71
+ Dynamic4 (Dynamic1 outer ) {
72
+ outer .super ();
73
+ }
74
+ }
75
+ dyn4 = new Dynamic4 (outer );
76
+ }
77
+ }
78
+ }
79
+ }
80
+
81
+ public void testNestedDynamicTypes () {
82
+ xstream .alias ("inner" , OuterType .InnerType .class );
83
+
84
+ final OuterType outer = new OuterType ();
85
+
86
+ final String expectedXml = ""
87
+ + "<inner>\n "
88
+ + " <innerName>Inner Name</innerName>\n "
89
+ + " <outer-class>\n "
90
+ + " <outerName>Outer Name</outerName>\n "
91
+ + " <inner reference=\" ../..\" />\n "
92
+ + " <dyn1>\n "
93
+ + " <name1>Name 1</name1>\n "
94
+ + " <outer-class reference=\" ../../..\" />\n "
95
+ + " </dyn1>\n "
96
+ + " <dyn2>\n "
97
+ + " <name2>Name 2</name2>\n "
98
+ + " <outer-class reference=\" ../../dyn1\" />\n "
99
+ + " </dyn2>\n "
100
+ + " <dyn3>\n "
101
+ + " <name2>Name 2</name2>\n "
102
+ + " <outer-class reference=\" ../../dyn1\" />\n "
103
+ + " <name3>Name 3</name3>\n "
104
+ + " <dyn4 class=\" com.thoughtworks.acceptance.InnerClassesTest$OuterType$InnerType$Dynamic3$1Dynamic4\" >\n "
105
+ + " <name2>Name 2</name2>\n "
106
+ + " <outer-class defined-in=\" com.thoughtworks.acceptance.InnerClassesTest$OuterType$InnerType$Dynamic1$Dynamic2\" reference=\" ../../../dyn1\" />\n "
107
+ + " <name4>Name 4</name4>\n "
108
+ + " <dyn5>\n "
109
+ + " <name5>Name 5</name5>\n "
110
+ + " <outer-class reference=\" ../..\" />\n "
111
+ + " </dyn5>\n "
112
+ + " <outer-class reference=\" ../..\" />\n "
113
+ + " </dyn4>\n "
114
+ + " <outer-class-1 reference=\" ../../..\" />\n "
115
+ + " </dyn3>\n "
116
+ + " </outer-class>\n "
117
+ + "</inner>" ;
118
+
119
+ assertBothWays (outer .inner , expectedXml );
120
+ }
40
121
}
41
122
42
123
class Outer {
43
124
44
- private Inner inner ;
45
- private String outerName ;
125
+ private final Inner inner ;
126
+ private final String outerName ;
46
127
47
- public Outer (String outerName , String innerName ) {
128
+ public Outer (final String outerName , final String innerName ) {
48
129
inner = new Inner (innerName );
49
130
this .outerName = outerName ;
50
131
}
@@ -54,9 +135,9 @@ public Inner getInner() {
54
135
}
55
136
56
137
public class Inner {
57
- private String innerName ;
138
+ private final String innerName ;
58
139
59
- public Inner (String innerName ) {
140
+ public Inner (final String innerName ) {
60
141
this .innerName = innerName ;
61
142
}
62
143
@@ -65,5 +146,3 @@ public String getMessage() {
65
146
}
66
147
}
67
148
}
68
-
69
-
0 commit comments