@Test
  public void shouldParse_withTypeTextHtml_expectFalse() throws ParseException {

    JsonSupport jsonTransformer = createJsonParser();

    final ImmutableList<String> typeList = ImmutableList.of("test/html");
    final boolean should =
        jsonTransformer.shouldParse("http://url", "<html><body></body></html>", typeList);

    assertEquals(false, should);
  }
  @Test
  public void shouldParse_withJSONContentAndUrl_expectTrue() throws ParseException {

    JsonSupport jsonTransformer = createJsonParser();

    final ImmutableList<String> typeList = ImmutableList.of("application/json");

    final boolean should =
        jsonTransformer.shouldParse(
            "http://url", "{\"id\":\"10154342691895026\",\"name\":\"Magne Nielsen\"}", typeList);

    assertEquals(true, should);
  }
  @Test
  public void parse_withExampleContentAndPathToANoneExistingPath_expectNoUrlsToBeFoundInTheList()
      throws ParseException {

    JsonSupport jsonTransformer =
        createJsonParserWithUrlExtract(newArrayList("comments", "paging", "non"));

    Long timestamp = -1L;
    String url = "";

    String response = createJSONFaceBookPost();
    final PageData parse = jsonTransformer.parse(url, response, timestamp);
    final Set<String> urlSet = parse.getUrlSet();

    assertTrue(urlSet.isEmpty());
  }
  @Test
  public void parse_withExampleContentAndPathToNextUrl_expectUrlsToBeContainedInList()
      throws ParseException {

    final String expectedUrl =
        "https://graph.facebook.com/me/albums?limit=25&after=Mjk5MzE1MzcwMjQxMDc2";

    JsonSupport jsonTransformer =
        createJsonParserWithUrlExtract(newArrayList("comments", "paging", "next"));

    Long timestamp = -1L;
    String url = "";

    String response = createJSONFaceBookPost();
    final PageData parse = jsonTransformer.parse(url, response, timestamp);
    final Set<String> urlSet = parse.getUrlSet();

    assertTrue(urlSet.contains(expectedUrl));
  }
  public void encodePacket(
      Packet packet, ByteBuf buffer, ByteBufAllocator allocator, boolean binary)
      throws IOException {
    ByteBuf buf = buffer;
    if (!binary) {
      buf = allocateBuffer(allocator);
    }
    byte type = toChar(packet.getType().getValue());
    buf.writeByte(type);

    try {
      switch (packet.getType()) {
        case PONG:
          {
            buf.writeBytes(packet.getData().toString().getBytes(CharsetUtil.UTF_8));
            break;
          }

        case OPEN:
          {
            ByteBufOutputStream out = new ByteBufOutputStream(buf);
            jsonSupport.writeValue(out, packet.getData());
            break;
          }

        case MESSAGE:
          {
            ByteBuf encBuf = null;

            if (packet.getSubType() == PacketType.ERROR) {
              encBuf = allocateBuffer(allocator);

              ByteBufOutputStream out = new ByteBufOutputStream(encBuf);
              jsonSupport.writeValue(out, packet.getData());
            }

            if (packet.getSubType() == PacketType.EVENT || packet.getSubType() == PacketType.ACK) {

              List<Object> values = new ArrayList<Object>();
              if (packet.getSubType() == PacketType.EVENT) {
                values.add(packet.getName());
              }

              encBuf = allocateBuffer(allocator);

              List<Object> args = packet.getData();
              values.addAll(args);
              ByteBufOutputStream out = new ByteBufOutputStream(encBuf);
              jsonSupport.writeValue(out, values);

              if (!jsonSupport.getArrays().isEmpty()) {
                packet.initAttachments(jsonSupport.getArrays().size());
                for (byte[] array : jsonSupport.getArrays()) {
                  packet.addAttachment(Unpooled.wrappedBuffer(array));
                }
                packet.setSubType(PacketType.BINARY_EVENT);
              }
            }

            byte subType = toChar(packet.getSubType().getValue());
            buf.writeByte(subType);

            if (packet.hasAttachments()) {
              byte[] ackId = toChars(packet.getAttachments().size());
              buf.writeBytes(ackId);
              buf.writeByte('-');
            }

            if (packet.getSubType() == PacketType.CONNECT) {
              if (!packet.getNsp().isEmpty()) {
                buf.writeBytes(packet.getNsp().getBytes(CharsetUtil.UTF_8));
              }
            } else {
              if (!packet.getNsp().isEmpty()) {
                buf.writeBytes(packet.getNsp().getBytes(CharsetUtil.UTF_8));
                buf.writeByte(',');
              }
            }

            if (packet.getAckId() != null) {
              byte[] ackId = toChars(packet.getAckId());
              buf.writeBytes(ackId);
            }

            if (encBuf != null) {
              buf.writeBytes(encBuf);
              encBuf.release();
            }

            break;
          }
      }
    } finally {
      // we need to write a buffer in any case
      if (!binary) {
        buffer.writeByte(0);
        int length = buf.writerIndex();
        buffer.writeBytes(longToBytes(length));
        buffer.writeByte(0xff);
        buffer.writeBytes(buf);

        buf.release();
      }
    }
  }