@Test
 public void testJSONToPOJO() {
   Ad pojo = new Ad();
   pojo.adId = 123;
   pojo.campaignId = 234876274;
   pojo.description = "sports";
   pojo.sizes = Lists.newArrayList("200x350", "600x800");
   pojo.startDate =
       new DateTime()
           .withDate(2016, 1, 1)
           .withMillisOfDay(0)
           .withZoneRetainFields(DateTimeZone.UTC)
           .toDate();
   pojo.endDate =
       new DateTime()
           .withDate(2016, 2, 1)
           .withMillisOfDay(0)
           .withZoneRetainFields(DateTimeZone.UTC)
           .toDate();
   operator.in.put(pojo);
   Assert.assertEquals(1, validDataSink.collectedTuples.size());
   Assert.assertEquals(0, invalidDataSink.collectedTuples.size());
   String expectedJSONString =
       "{\"adId\":123,\"campaignId\":234876274,\"sizes\":[\"200x350\",\"600x800\"],\"startDate\":\"Fri, 1 Jan 2016 00:00:00\",\"endDate\":\"01-Feb-2016\",\"desc\":\"sports\"}";
   Assert.assertEquals(expectedJSONString, validDataSink.collectedTuples.get(0));
   Assert.assertEquals(1, operator.getIncomingTuplesCount());
   Assert.assertEquals(1, operator.getEmittedObjectCount());
   Assert.assertEquals(0, operator.getErrorTupleCount());
 }
 @Test
 public void testJSONToPOJONullPOJO() {
   operator.in.put(null);
   Assert.assertEquals(0, validDataSink.collectedTuples.size());
   Assert.assertEquals(1, invalidDataSink.collectedTuples.size());
   Assert.assertEquals(1, operator.getIncomingTuplesCount());
   Assert.assertEquals(0, operator.getEmittedObjectCount());
   Assert.assertEquals(1, operator.getErrorTupleCount());
 }
 @Test
 public void testJSONToPOJOEmptyPOJO() {
   Ad pojo = new Ad();
   operator.in.put(pojo);
   Assert.assertEquals(1, validDataSink.collectedTuples.size());
   Assert.assertEquals(0, invalidDataSink.collectedTuples.size());
   String expectedJSONString =
       "{\"adId\":0,\"campaignId\":0,\"sizes\":null,\"startDate\":null,\"endDate\":null,\"desc\":null}";
   Assert.assertEquals(expectedJSONString, validDataSink.collectedTuples.get(0));
   Assert.assertEquals(1, operator.getIncomingTuplesCount());
   Assert.assertEquals(1, operator.getEmittedObjectCount());
   Assert.assertEquals(0, operator.getErrorTupleCount());
 }
  @Test
  public void testJSONToPOJONoFieldPOJO() {
    operator.endWindow();
    operator.teardown();
    operator.setup(null);
    operator.beginWindow(1);

    TestPojo o = new TestPojo();
    operator.in.put(o);
    Assert.assertEquals(0, validDataSink.collectedTuples.size());
    Assert.assertEquals(1, invalidDataSink.collectedTuples.size());
    Assert.assertEquals(o, invalidDataSink.collectedTuples.get(0));
    Assert.assertEquals(1, operator.getIncomingTuplesCount());
    Assert.assertEquals(0, operator.getEmittedObjectCount());
    Assert.assertEquals(1, operator.getErrorTupleCount());
  }
  @Test
  public void testJSONToPOJONullFields() {
    Ad pojo = new Ad();
    pojo.adId = 123;
    pojo.campaignId = 234876274;
    pojo.description = "sports";
    pojo.sizes = null;
    pojo.startDate = null;
    pojo.endDate = null;

    operator.in.put(pojo);
    Assert.assertEquals(1, validDataSink.collectedTuples.size());
    Assert.assertEquals(0, invalidDataSink.collectedTuples.size());
    String expectedJSONString =
        "{\"adId\":123,\"campaignId\":234876274,\"sizes\":null,\"startDate\":null,\"endDate\":null,\"desc\":\"sports\"}";
    Assert.assertEquals(expectedJSONString, validDataSink.collectedTuples.get(0));
    Assert.assertEquals(1, operator.getIncomingTuplesCount());
    Assert.assertEquals(1, operator.getEmittedObjectCount());
    Assert.assertEquals(0, operator.getErrorTupleCount());
  }