1
+ package com .genexus .xml ;
2
+
3
+ import com .genexus .ModelContext ;
4
+ import com .genexus .specific .java .Connect ;
5
+ import org .junit .Before ;
6
+ import org .junit .Test ;
7
+
8
+ import static org .junit .Assert .*;
9
+
10
+ public class GXXMLSerializableTest {
11
+
12
+ private TestSerializable testObj ;
13
+
14
+ @ Before
15
+ public void setUp () {
16
+ Connect .init ();
17
+ testObj = new TestSerializable (new ModelContext (TestSerializable .class ), "TestType" );
18
+ }
19
+
20
+ @ Test
21
+ public void testFromJSonStringWithSimpleFields () {
22
+ // Arrange
23
+ String json = "{\" stringField\" :\" test value\" ,\" intField\" :42,\" boolField\" :true,\" doubleField\" :3.14}" ;
24
+
25
+ // Act
26
+ boolean result = testObj .fromJSonString (json );
27
+
28
+ // Assert
29
+ assertTrue ("JSON parsing should succeed" , result );
30
+ assertEquals ("String field should match" , "test value" , testObj .getStringField ());
31
+ assertEquals ("Int field should match" , 42 , testObj .getIntField ());
32
+ assertTrue ("Boolean field should match" , testObj .isBoolField ());
33
+ assertEquals ("Double field should match" , 3.14 , testObj .getDoubleField (), 0.001 );
34
+ }
35
+
36
+ @ Test
37
+ public void testFromJSonStringWithNullFields () {
38
+ // Arrange
39
+ String json = "{\" stringField\" :null,\" intField\" :null,\" boolField\" :null,\" doubleField\" :null}" ;
40
+
41
+ // Act
42
+ boolean result = testObj .fromJSonString (json );
43
+
44
+ // Assert
45
+ assertTrue ("JSON parsing should succeed" , result );
46
+ assertNull ("String field should be null" , testObj .getStringField ());
47
+ assertEquals ("Int field should be default" , 0 , testObj .getIntField ());
48
+ assertFalse ("Boolean field should be default" , testObj .isBoolField ());
49
+ assertEquals ("Double field should be default" , 0.0 , testObj .getDoubleField (), 0.001 );
50
+ }
51
+
52
+ @ Test
53
+ public void testFromJSonStringWithNestedObject () {
54
+ // Arrange
55
+ String json = "{\" stringField\" :\" parent\" ,\" nestedObject\" :{\" stringField\" :\" child\" }}" ;
56
+
57
+ // Act
58
+ boolean result = testObj .fromJSonString (json );
59
+
60
+ // Assert
61
+ assertTrue ("JSON parsing should succeed" , result );
62
+ assertEquals ("Parent string field should match" , "parent" , testObj .getStringField ());
63
+ assertNotNull ("Nested object should not be null" , testObj .getNestedObject ());
64
+ assertEquals ("Nested string field should match" , "child" , testObj .getNestedObject ().getStringField ());
65
+ }
66
+
67
+ @ Test
68
+ public void testFromJSonStringWithCollection () {
69
+ // Arrange
70
+ String json = "{\" stringField\" :\" parent\" ,\" items\" :[{\" stringField\" :\" item1\" },{\" stringField\" :\" item2\" }]}" ;
71
+
72
+ // Act
73
+ boolean result = testObj .fromJSonString (json );
74
+
75
+ // Assert
76
+ assertTrue ("JSON parsing should succeed" , result );
77
+ assertEquals ("Parent string field should match" , "parent" , testObj .getStringField ());
78
+ assertNotNull ("Items collection should not be null" , testObj .getItems ());
79
+ assertEquals ("Items collection should have correct size" , 2 , testObj .getItems ().size ());
80
+ assertEquals ("First item should match" , "item1" , (testObj .getItems ().item (1 )).getStringField ());
81
+ assertEquals ("Second item should match" , "item2" , (testObj .getItems ().item (2 )).getStringField ());
82
+ }
83
+
84
+ @ Test
85
+ public void testFromJSonStringWithInvalidJson () {
86
+ // Arrange
87
+ String json = "{invalid json" ;
88
+
89
+ // Act
90
+ boolean result = testObj .fromJSonString (json );
91
+
92
+ // Assert
93
+ assertFalse ("JSON parsing should fail" , result );
94
+ }
95
+
96
+ @ Test
97
+ public void testFromJSonStringWithEmptyJson () {
98
+ // Arrange
99
+ String json = "{}" ;
100
+
101
+ // Act
102
+ boolean result = testObj .fromJSonString (json );
103
+
104
+ // Assert
105
+ assertTrue ("Empty JSON parsing should succeed" , result );
106
+ assertNull ("String field should be null" , testObj .getStringField ());
107
+ }
108
+
109
+ // Test implementation of GXXMLSerializable for testing purposes
110
+ public static class TestSerializable extends GXXMLSerializable {
111
+ private String stringField ;
112
+ private int intField ;
113
+ private boolean boolField ;
114
+ private double doubleField ;
115
+ private TestSerializable nestedObject ;
116
+ private TestSerializableCollection items ;
117
+
118
+ public TestSerializable () {
119
+ super (new ModelContext (TestSerializable .class ), "TestType" );
120
+ }
121
+
122
+ public TestSerializable (ModelContext context ) {
123
+ super (context , "TestType" );
124
+ }
125
+
126
+ public TestSerializable (ModelContext context , String type ) {
127
+ super (context , type );
128
+ }
129
+
130
+ @ Override
131
+ public String getJsonMap (String value ) {
132
+ return value ;
133
+ }
134
+
135
+ @ Override
136
+ public void initialize () {
137
+ items = new TestSerializableCollection ();
138
+ }
139
+
140
+ // Getter and setter methods with patterns expected by GXXMLSerializable
141
+ public String getgxTv_GXXMLSerializableTest$TestSerializable_StringField () {
142
+ return stringField ;
143
+ }
144
+
145
+ public void setgxTv_GXXMLSerializableTest$TestSerializable_StringField (String value ) {
146
+ this .stringField = value ;
147
+ }
148
+
149
+ public int getgxTv_GXXMLSerializableTest$TestSerializable_IntField () {
150
+ return intField ;
151
+ }
152
+
153
+ public void setgxTv_GXXMLSerializableTest$TestSerializable_IntField (int value ) {
154
+ this .intField = value ;
155
+ }
156
+
157
+ public boolean getgxTv_GXXMLSerializableTest$TestSerializable_BoolField () {
158
+ return boolField ;
159
+ }
160
+
161
+ public void setgxTv_GXXMLSerializableTest$TestSerializable_BoolField (boolean value ) {
162
+ this .boolField = value ;
163
+ }
164
+
165
+ public double getgxTv_GXXMLSerializableTest$TestSerializable_DoubleField () {
166
+ return doubleField ;
167
+ }
168
+
169
+ public void setgxTv_GXXMLSerializableTest$TestSerializable_DoubleField (double value ) {
170
+ this .doubleField = value ;
171
+ }
172
+
173
+ public TestSerializable getgxTv_GXXMLSerializableTest$TestSerializable_NestedObject () {
174
+ return nestedObject ;
175
+ }
176
+
177
+ public void setgxTv_GXXMLSerializableTest$TestSerializable_NestedObject (TestSerializable value ) {
178
+ this .nestedObject = value ;
179
+ }
180
+
181
+ public TestSerializableCollection getgxTv_GXXMLSerializableTest$TestSerializable_Items () {
182
+ return items ;
183
+ }
184
+
185
+ public void setgxTv_GXXMLSerializableTest$TestSerializable_Items (TestSerializableCollection value ) {
186
+ this .items = value ;
187
+ }
188
+
189
+ // Convenience getters for simpler test code
190
+ public String getStringField () {
191
+ return stringField ;
192
+ }
193
+
194
+ public int getIntField () {
195
+ return intField ;
196
+ }
197
+
198
+ public boolean isBoolField () {
199
+ return boolField ;
200
+ }
201
+
202
+ public double getDoubleField () {
203
+ return doubleField ;
204
+ }
205
+
206
+ public TestSerializable getNestedObject () {
207
+ return nestedObject ;
208
+ }
209
+
210
+ public TestSerializableCollection getItems () {
211
+ return items ;
212
+ }
213
+ }
214
+
215
+ // Collection class needed for collection tests
216
+ public static class TestSerializableCollection extends com .genexus .GXSimpleCollection <TestSerializable > {
217
+ public TestSerializableCollection () {
218
+ super (TestSerializable .class , "TestSerializable" , "TestCollection" );
219
+ }
220
+
221
+ @ Override
222
+ public TestSerializable item (int i ) {
223
+ return get (i -1 );
224
+ }
225
+ }
226
+ }
0 commit comments