@Test
  public void testAppendCall_messageWithTwoCalls() {
    JsonObject parameters = new JsonObject().add("key1", 5).add("key2", "b").add("key3", false);

    writer.appendCall(shellId, "methodName", null);
    writer.appendCall(shellId, "methodName", parameters);

    CallOperation operation = (CallOperation) getMessage().getOperation(1);
    assertEquals(shellId, operation.getTarget());
    assertEquals("methodName", operation.getMethodName());
    assertEquals(5, operation.getProperty("key1").asInt());
    assertEquals("b", operation.getProperty("key2").asString());
    assertEquals(JsonValue.FALSE, operation.getProperty("key3"));
  }
  @Test
  public void testAppendSet_createsNewOperationWhenInterruptedByAnotherOperation() {
    writer.appendSet("id", "property", "value-1");
    writer.appendCall("id", "method", null);
    writer.appendSet("id", "property", "value-2");

    Message message = getMessage();
    assertEquals(3, message.getOperationCount());
    assertEquals("value-1", message.getOperation(0).getProperty("property").asString());
    assertEquals("value-2", message.getOperation(2).getProperty("property").asString());
  }
  @Test
  public void testAppendCall() {
    JsonObject parameters = new JsonObject().add("key1", "a").add("key2", "b");

    writer.appendCall(shellId, "methodName", parameters);

    CallOperation operation = (CallOperation) getMessage().getOperation(0);
    assertEquals(shellId, operation.getTarget());
    assertEquals("methodName", operation.getMethodName());
    assertEquals("a", operation.getProperty("key1").asString());
    assertEquals("b", operation.getProperty("key2").asString());
  }
 private void addButtonCall(Button button) {
   JsonObject parameters = new JsonObject().add("key1", "a1");
   writer.appendCall(WidgetUtil.getId(button), "select", parameters);
 }