public void testIterateStatement() {
    epService
        .getEPAdministrator()
        .createEPL("create context PartitionedByString partition by theString from SupportBean");
    String[] fields = "c0,c1".split(",");
    EPStatement stmt =
        epService
            .getEPAdministrator()
            .createEPL(
                "@Name('StmtOne') context PartitionedByString select context.key1 as c0, sum(intPrimitive) as c1 from SupportBean.win:length(5)");

    epService.getEPRuntime().sendEvent(new SupportBean("E1", 10));
    epService.getEPRuntime().sendEvent(new SupportBean("E2", 20));
    epService.getEPRuntime().sendEvent(new SupportBean("E2", 21));

    Object[][] expectedAll = new Object[][] {{"E1", 10}, {"E2", 41}};
    EPAssertionUtil.assertPropsPerRow(stmt.iterator(), stmt.safeIterator(), fields, expectedAll);

    // test iterator ALL
    ContextPartitionSelector selector = ContextPartitionSelectorAll.INSTANCE;
    EPAssertionUtil.assertPropsPerRow(
        stmt.iterator(selector), stmt.safeIterator(selector), fields, expectedAll);

    // test iterator by context partition id
    selector = new SupportSelectorById(new HashSet<Integer>(Arrays.asList(0, 1, 2)));
    EPAssertionUtil.assertPropsPerRow(
        stmt.iterator(selector), stmt.safeIterator(selector), fields, expectedAll);

    selector = new SupportSelectorById(new HashSet<Integer>(Arrays.asList(1)));
    EPAssertionUtil.assertPropsPerRow(
        stmt.iterator(selector), stmt.safeIterator(selector), fields, new Object[][] {{"E2", 41}});

    assertFalse(stmt.iterator(new SupportSelectorById(Collections.<Integer>emptySet())).hasNext());
    assertFalse(stmt.iterator(new SupportSelectorById(null)).hasNext());

    try {
      stmt.iterator(null);
      fail();
    } catch (IllegalArgumentException ex) {
      assertEquals(ex.getMessage(), "No selector provided");
    }

    try {
      stmt.safeIterator(null);
      fail();
    } catch (IllegalArgumentException ex) {
      assertEquals(ex.getMessage(), "No selector provided");
    }

    EPStatement stmtTwo =
        epService.getEPAdministrator().createEPL("select * from java.lang.Object");
    try {
      stmtTwo.iterator(null);
      fail();
    } catch (UnsupportedOperationException ex) {
      assertEquals(
          ex.getMessage(),
          "Iterator with context selector is only supported for statements under context");
    }

    try {
      stmtTwo.safeIterator(null);
      fail();
    } catch (UnsupportedOperationException ex) {
      assertEquals(
          ex.getMessage(),
          "Iterator with context selector is only supported for statements under context");
    }
  }