@@ -64,118 +64,174 @@ public void setup() throws Exception
64
64
public void testMessage1 () throws Exception
65
65
{
66
66
final UnsafeBuffer buffer = new UnsafeBuffer (new byte [4096 ]);
67
- final Object encoder = wrap (buffer , compile ("TestMessage1Encoder" ).newInstance ());
68
-
69
- set (encoder , "tag1" , int .class , 100 );
70
- set (encoder , "tag2" , int .class , 200 );
71
-
72
- final Object compositeEncoder = getACompositeEncoder (buffer , 8 );
73
- wrap (8 , compositeEncoder , buffer , BUFFER_CLASS );
74
-
75
- set (compositeEncoder , "value" , int .class , 300 );
76
-
77
- final Object decoderVersion0 = getMessage1Decoder (buffer , 4 , 0 );
78
- assertEquals (100 , get (decoderVersion0 , "tag1" ));
79
- assertEquals (Integer .MIN_VALUE , get (decoderVersion0 , "tag2" ));
80
- assertNull (get (decoderVersion0 , "tag3" ));
81
-
82
- assertEquals (0 , decoderVersion0 .getClass ().getMethod ("tag1SinceVersion" ).invoke (null ));
83
- assertEquals (1 , decoderVersion0 .getClass ().getMethod ("tag2SinceVersion" ).invoke (null ));
84
- assertEquals (3 , decoderVersion0 .getClass ().getMethod ("tag3SinceVersion" ).invoke (null ));
85
-
86
- final Object decoderVersion1 = getMessage1Decoder (buffer , 8 , 1 );
87
- assertEquals (100 , get (decoderVersion1 , "tag1" ));
88
- assertEquals (200 , get (decoderVersion1 , "tag2" ));
89
- assertNull (get (decoderVersion1 , "tag3" ));
90
-
91
- final Object decoderVersion2 = getMessage1Decoder (buffer , 8 , 2 );
92
- assertEquals (100 , get (decoderVersion2 , "tag1" ));
93
- assertEquals (200 , get (decoderVersion2 , "tag2" ));
94
- assertNull (get (decoderVersion1 , "tag3" ));
95
-
96
- final Object decoderVersion3 = getMessage1Decoder (buffer , 12 , 3 );
97
- assertEquals (100 , get (decoderVersion3 , "tag1" ));
98
- assertEquals (200 , get (decoderVersion3 , "tag2" ));
99
- final Object compositeDecoder3 = get (decoderVersion3 , "tag3" );
100
- assertNotNull (compositeDecoder3 );
101
- assertEquals (300 , get (compositeDecoder3 , "value" ));
102
-
103
- final Object decoderVersion4 = getMessage1Decoder (buffer , 12 , 4 );
104
- assertEquals (100 , get (decoderVersion4 , "tag1" ));
105
- assertEquals (200 , get (decoderVersion4 , "tag2" ));
106
- final Object compositeDecoder4 = get (decoderVersion4 , "tag3" );
107
- assertNotNull (compositeDecoder4 );
108
- assertEquals (300 , get (compositeDecoder4 , "value" ));
67
+
68
+ { // Encode
69
+ final Object encoder = wrap (buffer , compile ("TestMessage1Encoder" ).newInstance ());
70
+
71
+ set (encoder , "tag1" , int .class , 100 );
72
+ set (encoder , "tag2" , int .class , 200 );
73
+
74
+ final Object compositeEncoder = encoder .getClass ().getMethod ("tag3" ).invoke (encoder );
75
+ set (compositeEncoder , "value" , int .class , 300 );
76
+
77
+ final Object enumConstant = getAEnumConstant (encoder , "AEnum" , 1 );
78
+ set (encoder , "tag4" , enumConstant .getClass (), enumConstant );
79
+
80
+ final Object setEncoder = encoder .getClass ().getMethod ("tag5" ).invoke (encoder );
81
+ set (setEncoder , "firstChoice" , boolean .class , false );
82
+ set (setEncoder , "secondChoice" , boolean .class , true );
83
+ }
84
+
85
+ { // Decode version 0
86
+ final Object decoderVersion0 = getMessage1Decoder (buffer , 4 , 0 );
87
+ assertEquals (100 , get (decoderVersion0 , "tag1" ));
88
+ assertEquals (Integer .MIN_VALUE , get (decoderVersion0 , "tag2" ));
89
+ assertNull (get (decoderVersion0 , "tag3" ));
90
+ assertNull (get (decoderVersion0 , "tag4" ));
91
+ assertNull (get (decoderVersion0 , "tag5" ));
92
+
93
+ assertEquals (0 , decoderVersion0 .getClass ().getMethod ("tag1SinceVersion" ).invoke (null ));
94
+ assertEquals (1 , decoderVersion0 .getClass ().getMethod ("tag2SinceVersion" ).invoke (null ));
95
+ assertEquals (2 , decoderVersion0 .getClass ().getMethod ("tag3SinceVersion" ).invoke (null ));
96
+ assertEquals (3 , decoderVersion0 .getClass ().getMethod ("tag4SinceVersion" ).invoke (null ));
97
+ assertEquals (4 , decoderVersion0 .getClass ().getMethod ("tag5SinceVersion" ).invoke (null ));
98
+ }
99
+
100
+ { // Decode version 1
101
+ final Object decoderVersion1 = getMessage1Decoder (buffer , 8 , 1 );
102
+ assertEquals (100 , get (decoderVersion1 , "tag1" ));
103
+ assertEquals (200 , get (decoderVersion1 , "tag2" ));
104
+ assertNull (get (decoderVersion1 , "tag3" ));
105
+ assertNull (get (decoderVersion1 , "tag4" ));
106
+ assertNull (get (decoderVersion1 , "tag5" ));
107
+ }
108
+
109
+ { // Decode version 2
110
+ final Object decoderVersion2 = getMessage1Decoder (buffer , 8 , 2 );
111
+ assertEquals (100 , get (decoderVersion2 , "tag1" ));
112
+ assertEquals (200 , get (decoderVersion2 , "tag2" ));
113
+ final Object compositeDecoder2 = get (decoderVersion2 , "tag3" );
114
+ assertNotNull (compositeDecoder2 );
115
+ assertEquals (300 , get (compositeDecoder2 , "value" ));
116
+ assertNull (get (decoderVersion2 , "tag4" ));
117
+ assertNull (get (decoderVersion2 , "tag5" ));
118
+ }
119
+
120
+ { // Decode version 3
121
+ final Object decoderVersion3 = getMessage1Decoder (buffer , 12 , 3 );
122
+ assertEquals (100 , get (decoderVersion3 , "tag1" ));
123
+ assertEquals (200 , get (decoderVersion3 , "tag2" ));
124
+ final Object compositeDecoder3 = get (decoderVersion3 , "tag3" );
125
+ assertNotNull (compositeDecoder3 );
126
+ assertEquals (300 , get (compositeDecoder3 , "value" ));
127
+ final Object enumConstant = getAEnumConstant (decoderVersion3 , "AEnum" , 1 );
128
+ assertEquals (enumConstant , get (decoderVersion3 , "tag4" ));
129
+ assertNull (get (decoderVersion3 , "tag5" ));
130
+ }
131
+
132
+ { // Decode version 4
133
+ final Object decoderVersion4 = getMessage1Decoder (buffer , 12 , 4 );
134
+ assertEquals (100 , get (decoderVersion4 , "tag1" ));
135
+ assertEquals (200 , get (decoderVersion4 , "tag2" ));
136
+ final Object compositeDecoder4 = get (decoderVersion4 , "tag3" );
137
+ assertNotNull (compositeDecoder4 );
138
+ assertEquals (300 , get (compositeDecoder4 , "value" ));
139
+ final Object enumConstant = getAEnumConstant (decoderVersion4 , "AEnum" , 1 );
140
+ assertEquals (enumConstant , get (decoderVersion4 , "tag4" ));
141
+ final Object setDecoder = get (decoderVersion4 , "tag5" );
142
+ assertNotNull (setDecoder );
143
+ assertEquals (false , get (setDecoder , "firstChoice" ));
144
+ assertEquals (true , get (setDecoder , "secondChoice" ));
145
+ }
109
146
}
110
147
111
148
@ Test
112
149
public void testMessage2 () throws Exception
113
150
{
114
151
final UnsafeBuffer buffer = new UnsafeBuffer (new byte [4096 ]);
115
- final Object encoder = wrap (buffer , compile ("TestMessage2Encoder" ).newInstance ());
116
-
117
- set (encoder , "tag1" , int .class , 100 );
118
- set (encoder , "tag2" , int .class , 200 );
119
-
120
- final Object compositeEncoder = getACompositeEncoder (buffer , 8 );
121
- set (compositeEncoder , "value" , int .class , 300 );
122
-
123
- final Object decoderVersion0 = getMessage2Decoder (buffer , 4 , 0 );
124
- assertEquals (100 , get (decoderVersion0 , "tag1" ));
125
- assertEquals (Integer .MIN_VALUE , get (decoderVersion0 , "tag2" ));
126
- assertNull (get (decoderVersion0 , "tag3" ));
127
-
128
- assertEquals (0 , decoderVersion0 .getClass ().getMethod ("tag1SinceVersion" ).invoke (null ));
129
- assertEquals (2 , decoderVersion0 .getClass ().getMethod ("tag2SinceVersion" ).invoke (null ));
130
- assertEquals (4 , decoderVersion0 .getClass ().getMethod ("tag3SinceVersion" ).invoke (null ));
131
-
132
- final Object decoderVersion1 = getMessage2Decoder (buffer , 4 , 1 );
133
- assertEquals (100 , get (decoderVersion1 , "tag1" ));
134
- assertEquals (Integer .MIN_VALUE , get (decoderVersion1 , "tag2" ));
135
- assertNull (get (decoderVersion1 , "tag3" ));
136
-
137
- final Object decoderVersion2 = getMessage2Decoder (buffer , 8 , 2 );
138
- assertEquals (100 , get (decoderVersion2 , "tag1" ));
139
- assertEquals (200 , get (decoderVersion2 , "tag2" ));
140
- assertNull (get (decoderVersion1 , "tag3" ));
141
-
142
- final Object decoderVersion3 = getMessage2Decoder (buffer , 8 , 3 );
143
- assertEquals (100 , get (decoderVersion3 , "tag1" ));
144
- assertEquals (200 , get (decoderVersion3 , "tag2" ));
145
- assertNull (get (decoderVersion1 , "tag3" ));
146
-
147
- final Object decoderVersion4 = getMessage2Decoder (buffer , 12 , 4 );
148
- assertEquals (100 , get (decoderVersion4 , "tag1" ));
149
- assertEquals (200 , get (decoderVersion4 , "tag2" ));
150
- final Object compositeDecoder4 = get (decoderVersion4 , "tag3" );
151
- assertNotNull (compositeDecoder4 );
152
- assertEquals (300 , get (compositeDecoder4 , "value" ));
153
- }
154
152
155
- @ Test
156
- public void testMessageHeader () throws Exception
157
- {
158
- final UnsafeBuffer buffer = new UnsafeBuffer (new byte [4096 ]);
159
- final Object encoder = wrap (buffer , compile ("MessageHeaderEncoder" ).newInstance ());
160
-
161
- set (encoder , "blockLength" , int .class , 10 );
162
- set (encoder , "templateId" , int .class , 1 );
163
- set (encoder , "schemaId" , int .class , 1 );
164
- set (encoder , "version" , int .class , 5 );
165
- set (encoder , "headerLength" , int .class , 12 );
166
- set (encoder , "extraField" , int .class , 100 );
167
-
168
- final Object decoder = compile ("MessageHeaderDecoder" ).newInstance ();
169
- wrap (0 , decoder , buffer , READ_ONLY_BUFFER_CLASS );
170
-
171
- assertEquals (10 , get (decoder , "blockLength" ));
172
- assertEquals (1 , get (decoder , "templateId" ));
173
- assertEquals (1 , get (decoder , "schemaId" ));
174
- assertEquals (5 , get (decoder , "version" ));
175
- assertEquals (12 , get (decoder , "headerLength" ));
176
- assertEquals (100 , get (decoder , "extraField" ));
177
-
178
- assertEquals (5 , decoder .getClass ().getMethod ("extraFieldSinceVersion" ).invoke (null ));
153
+ { // Encode
154
+ final Object encoder = wrap (buffer , compile ("TestMessage2Encoder" ).newInstance ());
155
+
156
+ set (encoder , "tag1" , int .class , 100 );
157
+ set (encoder , "tag2" , int .class , 200 );
158
+
159
+ final Object compositeEncoder = encoder .getClass ().getMethod ("tag3" ).invoke (encoder );
160
+ set (compositeEncoder , "value" , int .class , 300 );
161
+
162
+ final Object enumConstant = getAEnumConstant (encoder , "AEnum" , 1 );
163
+ set (encoder , "tag4" , enumConstant .getClass (), enumConstant );
164
+
165
+ final Object setEncoder = encoder .getClass ().getMethod ("tag5" ).invoke (encoder );
166
+ set (setEncoder , "firstChoice" , boolean .class , false );
167
+ set (setEncoder , "secondChoice" , boolean .class , true );
168
+ }
169
+
170
+ { // Decode version 0
171
+ final Object decoderVersion0 = getMessage2Decoder (buffer , 4 , 0 );
172
+ assertEquals (100 , get (decoderVersion0 , "tag1" ));
173
+ assertEquals (Integer .MIN_VALUE , get (decoderVersion0 , "tag2" ));
174
+ assertNull (get (decoderVersion0 , "tag3" ));
175
+ assertNull (get (decoderVersion0 , "tag4" ));
176
+ assertNull (get (decoderVersion0 , "tag5" ));
177
+
178
+ assertEquals (0 , decoderVersion0 .getClass ().getMethod ("tag1SinceVersion" ).invoke (null ));
179
+ assertEquals (2 , decoderVersion0 .getClass ().getMethod ("tag2SinceVersion" ).invoke (null ));
180
+ assertEquals (1 , decoderVersion0 .getClass ().getMethod ("tag3SinceVersion" ).invoke (null ));
181
+ assertEquals (4 , decoderVersion0 .getClass ().getMethod ("tag4SinceVersion" ).invoke (null ));
182
+ assertEquals (3 , decoderVersion0 .getClass ().getMethod ("tag5SinceVersion" ).invoke (null ));
183
+ }
184
+
185
+ { // Decode version 1
186
+ final Object decoderVersion1 = getMessage2Decoder (buffer , 8 , 1 );
187
+ assertEquals (100 , get (decoderVersion1 , "tag1" ));
188
+ assertEquals (Integer .MIN_VALUE , get (decoderVersion1 , "tag2" ));
189
+ final Object compositeDecoder2 = get (decoderVersion1 , "tag3" );
190
+ assertNotNull (compositeDecoder2 );
191
+ assertEquals (300 , get (compositeDecoder2 , "value" ));
192
+ assertNull (get (decoderVersion1 , "tag4" ));
193
+ assertNull (get (decoderVersion1 , "tag5" ));
194
+ }
195
+
196
+ { // Decode version 2
197
+ final Object decoderVersion2 = getMessage2Decoder (buffer , 8 , 2 );
198
+ assertEquals (100 , get (decoderVersion2 , "tag1" ));
199
+ assertEquals (200 , get (decoderVersion2 , "tag2" ));
200
+ final Object compositeDecoder2 = get (decoderVersion2 , "tag3" );
201
+ assertNotNull (compositeDecoder2 );
202
+ assertEquals (300 , get (compositeDecoder2 , "value" ));
203
+ assertNull (get (decoderVersion2 , "tag4" ));
204
+ assertNull (get (decoderVersion2 , "tag5" ));
205
+ }
206
+
207
+ { // Decode version 3
208
+ final Object decoderVersion3 = getMessage2Decoder (buffer , 12 , 3 );
209
+ assertEquals (100 , get (decoderVersion3 , "tag1" ));
210
+ assertEquals (200 , get (decoderVersion3 , "tag2" ));
211
+ final Object compositeDecoder3 = get (decoderVersion3 , "tag3" );
212
+ assertNotNull (compositeDecoder3 );
213
+ assertEquals (300 , get (compositeDecoder3 , "value" ));
214
+ assertNull (get (decoderVersion3 , "tag4" ));
215
+ final Object setDecoder = get (decoderVersion3 , "tag5" );
216
+ assertNotNull (setDecoder );
217
+ assertEquals (false , get (setDecoder , "firstChoice" ));
218
+ assertEquals (true , get (setDecoder , "secondChoice" ));
219
+ }
220
+
221
+ { // Decode version 4
222
+ final Object decoderVersion4 = getMessage2Decoder (buffer , 12 , 4 );
223
+ assertEquals (100 , get (decoderVersion4 , "tag1" ));
224
+ assertEquals (200 , get (decoderVersion4 , "tag2" ));
225
+ final Object compositeDecoder4 = get (decoderVersion4 , "tag3" );
226
+ assertNotNull (compositeDecoder4 );
227
+ assertEquals (300 , get (compositeDecoder4 , "value" ));
228
+ final Object enumConstant = getAEnumConstant (decoderVersion4 , "AEnum" , 1 );
229
+ assertEquals (enumConstant , get (decoderVersion4 , "tag4" ));
230
+ final Object setDecoder = get (decoderVersion4 , "tag5" );
231
+ assertNotNull (setDecoder );
232
+ assertEquals (false , get (setDecoder , "firstChoice" ));
233
+ assertEquals (true , get (setDecoder , "secondChoice" ));
234
+ }
179
235
}
180
236
181
237
private JavaGenerator generator ()
@@ -197,11 +253,11 @@ private Object getMessage2Decoder(final UnsafeBuffer buffer, final int blockLeng
197
253
return wrap (buffer , decoder , blockLength , version );
198
254
}
199
255
200
- private Object getACompositeEncoder (final UnsafeBuffer buffer , final int offset ) throws Exception
256
+ private Object getAEnumConstant (
257
+ final Object flyweight , final String enumClassName , final int constantIndex ) throws Exception
201
258
{
202
- final Object encoder = compile ("ACompositeEncoder" ).newInstance ();
203
- wrap (offset , encoder , buffer , BUFFER_CLASS );
204
- return encoder ;
259
+ final String fqClassName = ir .applicableNamespace () + "." + enumClassName ;
260
+ return flyweight .getClass ().getClassLoader ().loadClass (fqClassName ).getEnumConstants ()[constantIndex ];
205
261
}
206
262
207
263
private Class <?> compile (final String className ) throws Exception
0 commit comments