public void testMessageWithExecuteScript() throws IOException, JSONException {
   StringWriter stringWriter = new StringWriter();
   PrintWriter printWriter = new PrintWriter(stringWriter);
   ProtocolMessageWriter writer = new JsonMessageWriter(printWriter);
   Display display = new Display();
   Shell shell = new Shell(display);
   Button button = new Button(shell, SWT.PUSH);
   String script = "var c = 4; c++;";
   String scriptType = "text/javascript";
   writer.addExecuteScript(WidgetUtil.getId(button), scriptType, script);
   String widgetId = WidgetUtil.getId(button);
   String actual = stringWriter.getBuffer().toString();
   JSONObject message = new JSONObject(actual + "]}");
   JSONArray widgetArray = message.getJSONArray(IProtocolConstants.MESSAGE_WIDGETS);
   JSONObject widgetObject = widgetArray.getJSONObject(0);
   String type = widgetObject.getString(IProtocolConstants.WIDGETS_TYPE);
   assertEquals(IProtocolConstants.PAYLOAD_EXECUTE_SCRIPT, type);
   String actualId = widgetObject.getString(IProtocolConstants.WIDGETS_ID);
   assertEquals(widgetId, actualId);
   JSONObject payload = widgetObject.getJSONObject(IProtocolConstants.WIDGETS_PAYLOAD);
   String actualType = payload.getString(IProtocolConstants.KEY_SCRIPT_TYPE);
   assertEquals(scriptType, actualType);
   String actualScript = payload.getString(IProtocolConstants.KEY_SCRIPT);
   assertEquals(script, actualScript);
   scriptType = "text/vb";
   script = "really bad VB;";
   writer.addExecuteScript(WidgetUtil.getId(shell), scriptType, script);
   writer.finish();
   widgetId = WidgetUtil.getId(shell);
   actual = stringWriter.getBuffer().toString();
   message = new JSONObject(actual);
   widgetArray = message.getJSONArray(IProtocolConstants.MESSAGE_WIDGETS);
   widgetObject = widgetArray.getJSONObject(1);
   type = widgetObject.getString(IProtocolConstants.WIDGETS_TYPE);
   assertEquals(IProtocolConstants.PAYLOAD_EXECUTE_SCRIPT, type);
   actualId = widgetObject.getString(IProtocolConstants.WIDGETS_ID);
   assertEquals(widgetId, actualId);
   payload = widgetObject.getJSONObject(IProtocolConstants.WIDGETS_PAYLOAD);
   actualType = payload.getString(IProtocolConstants.KEY_SCRIPT_TYPE);
   assertEquals(scriptType, actualType);
   actualScript = payload.getString(IProtocolConstants.KEY_SCRIPT);
   assertEquals(script, actualScript);
 }