10
10
import java .util .concurrent .Executors ;
11
11
import java .util .concurrent .Future ;
12
12
13
+ import org .json .simple .parser .ContentHandler ;
14
+ import org .json .simple .parser .DefaultContentHandler ;
13
15
import org .json .simple .parser .JSONParser ;
14
16
import org .junit .Assert ;
15
17
import org .junit .Test ;
@@ -73,11 +75,6 @@ public Socket call() throws Exception {
73
75
}
74
76
75
77
}
76
-
77
- public static String getJSONSample () {
78
- //return getJSONSampleLong();
79
- return getJSONSampleMedium ();
80
- }
81
78
82
79
public static String getJSONSampleMedium () {
83
80
String json = "{\" widget\" : {\n " +
@@ -220,7 +217,7 @@ public void testJSONStreamer() throws Exception {
220
217
BufferedReader reader = new BufferedReader (new InputStreamReader (rsocket .getInputStream ()));
221
218
PrintWriter writer = new PrintWriter (wsocket .getOutputStream ());
222
219
223
- String jsonSample = getJSONSample ();
220
+ String jsonSample = getJSONSampleMedium ();
224
221
225
222
DelayedChunkWriter chunkWriter = new DelayedChunkWriter (writer , jsonSample , 10 , 10 );
226
223
executor .execute (chunkWriter );
@@ -238,5 +235,59 @@ public void testJSONStreamer() throws Exception {
238
235
wsocket .close ();
239
236
server .close ();
240
237
}
238
+
239
+ @ Test
240
+ public void testJSONMultipleStreamer () throws Exception {
241
+
242
+ ServerSocket server = new ServerSocket (0 );
243
+ int port = server .getLocalPort ();
244
+
245
+ Socket rsocket ;
246
+ Socket wsocket ;
247
+
248
+ ExecutorService executor = Executors .newSingleThreadExecutor ();
249
+ Future <Socket > ss = executor .submit (new SocketConnector (server ));
250
+
251
+ wsocket = new Socket ("localhost" , port );
252
+ rsocket = ss .get ();
253
+
254
+ // send message locally
255
+ BufferedReader reader = new BufferedReader (new InputStreamReader (rsocket .getInputStream ()));
256
+ PrintWriter writer = new PrintWriter (wsocket .getOutputStream ());
257
+
258
+ String jsonSample = getJSONSampleMedium ();
259
+ DelayedChunkWriter chunkWriter = new DelayedChunkWriter (writer , jsonSample , 10 , 10 );
260
+ executor .execute (chunkWriter );
261
+
262
+ JSONParser parser = new JSONParser ();
263
+ // entire string at once
264
+ DefaultContentHandler handler = new DefaultContentHandler ();
265
+ parser .parse (jsonSample , handler );
266
+ JSONObject reference = (JSONObject )(handler .getContent ());
267
+ // from streaming input
268
+ JSONObject obj = (JSONObject )(parser .parse (reader ));
269
+
270
+ Assert .assertEquals ("First parsed JSON equal" , reference , obj );
271
+
272
+ // second streamed object
273
+ jsonSample = getJSONSampleLong ();
274
+ chunkWriter = new DelayedChunkWriter (writer , jsonSample , 10 , 10 );
275
+ executor .execute (chunkWriter );
276
+
277
+ // entire string at once
278
+ handler = new DefaultContentHandler ();
279
+ parser .parse (jsonSample , handler );
280
+ reference = (JSONObject )(handler .getContent ());
281
+ // from streaming input
282
+ obj = (JSONObject )(parser .parse (reader ));
283
+
284
+
285
+ Assert .assertEquals ("Second parsed JSON equal" , reference , obj );
286
+
287
+ // close communication
288
+ rsocket .close ();
289
+ wsocket .close ();
290
+ server .close ();
291
+ }
241
292
242
293
}
0 commit comments