Program: 68449
Project: 68449
Buggy source:
/** 
 * @throws OLAPException
 * @throws BirtException 
 */
public void testCursorModel1() throws OLAPException, BirtException {
  ICubeQueryDefinition cqd=creator.createQueryDefinition();
  IBinding rowGrandTotal=new Binding("String_Node_Str");
  rowGrandTotal.setAggrFunction(IBuildInAggregation.TOTAL_SUM_FUNC);
  rowGrandTotal.setExpression(new ScriptExpression("String_Node_Str"));
  rowGrandTotal.addAggregateOn("String_Node_Str");
  rowGrandTotal.addAggregateOn("String_Node_Str");
  IBinding columnGrandTotal=new Binding("String_Node_Str");
  columnGrandTotal.setAggrFunction(IBuildInAggregation.TOTAL_SUM_FUNC);
  columnGrandTotal.setExpression(new ScriptExpression("String_Node_Str"));
  columnGrandTotal.addAggregateOn("String_Node_Str");
  columnGrandTotal.addAggregateOn("String_Node_Str");
  columnGrandTotal.addAggregateOn("String_Node_Str");
  columnGrandTotal.addAggregateOn("String_Node_Str");
  cqd.addBinding(rowGrandTotal);
  cqd.addBinding(columnGrandTotal);
  BirtCubeView cubeView=new BirtCubeView(new CubeQueryExecutor(null,cqd,de.getSession(),this.scope,de.getContext()));
  CubeCursor dataCursor=cubeView.getCubeCursor(new StopSign(),cube);
  EdgeCursor rowCursor=cubeView.getRowEdgeView().getEdgeCursor();
  EdgeCursor columnCursor=cubeView.getColumnEdgeView().getEdgeCursor();
  DimensionCursor countryCursor=(DimensionCursor)columnCursor.getDimensionCursor().get(0);
  DimensionCursor cityCursor=(DimensionCursor)columnCursor.getDimensionCursor().get(1);
  DimensionCursor streetCursor=(DimensionCursor)columnCursor.getDimensionCursor().get(2);
  DimensionCursor timeCursor=(DimensionCursor)columnCursor.getDimensionCursor().get(3);
  columnCursor.beforeFirst();
  assertTrue(countryCursor.isBeforeFirst());
  assertTrue(cityCursor.isBeforeFirst());
  assertTrue(streetCursor.isBeforeFirst());
  assertTrue(timeCursor.isBeforeFirst());
  columnCursor.afterLast();
  assertTrue(countryCursor.isAfterLast());
  assertTrue(cityCursor.isAfterLast());
  assertTrue(streetCursor.isAfterLast());
  assertTrue(timeCursor.isAfterLast());
  columnCursor.first();
  assertTrue(columnCursor.isFirst());
  assertTrue(countryCursor.isFirst());
  assertTrue(cityCursor.isFirst());
  assertTrue(streetCursor.isFirst());
  assertTrue(timeCursor.isFirst());
  columnCursor.last();
  assertTrue(columnCursor.last());
  assertTrue(countryCursor.last());
  assertTrue(cityCursor.last());
  assertTrue(streetCursor.last());
  assertTrue(timeCursor.last());
  columnCursor.setPosition(5);
  assertTrue(countryCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(cityCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(streetCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(timeCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  columnCursor.previous();
  assertTrue(countryCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(cityCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(streetCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(timeCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  columnCursor.setPosition(24);
  try {
    countryCursor.getObject("String_Node_Str");
    fail("String_Node_Str");
  }
 catch (  OLAPException e) {
  }
  columnCursor.beforeFirst();
  columnCursor.relative(6);
  assertTrue(countryCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(cityCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(streetCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(timeCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  columnCursor.beforeFirst();
  columnCursor.next();
  columnCursor.next();
  columnCursor.next();
  columnCursor.setPosition(1);
  assertTrue(countryCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(cityCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(streetCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(timeCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  columnCursor.beforeFirst();
  columnCursor.setPosition(4);
  timeCursor.setPosition(1);
  assertTrue(countryCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(cityCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(streetCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(timeCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  columnCursor.beforeFirst();
  columnCursor.next();
  countryCursor.next();
  assertTrue(countryCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(cityCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(streetCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(timeCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  columnCursor.afterLast();
  try {
    streetCursor.getObject("String_Node_Str");
    fail("String_Node_Str");
  }
 catch (  OLAPException e) {
  }
  columnCursor.beforeFirst();
  columnCursor.setPosition(1);
  assertTrue(countryCursor.getEdgeStart() == 0);
  assertTrue(countryCursor.getEdgeEnd() == 7);
  assertTrue(cityCursor.getEdgeStart() == 0);
  assertTrue(cityCursor.getEdgeEnd() == 2);
  assertTrue(streetCursor.getEdgeStart() == 0);
  assertTrue(streetCursor.getEdgeEnd() == 1);
  assertTrue(timeCursor.getEdgeStart() == 1);
  assertTrue(timeCursor.getEdgeEnd() == 1);
  columnCursor.setPosition(9);
  assertTrue(countryCursor.getEdgeStart() == 8);
  assertTrue(countryCursor.getEdgeEnd() == 11);
  assertTrue(cityCursor.getEdgeStart() == 8);
  assertTrue(cityCursor.getEdgeEnd() == 10);
  assertTrue(streetCursor.getEdgeStart() == 8);
  assertTrue(streetCursor.getEdgeEnd() == 10);
  assertTrue(timeCursor.getEdgeStart() == 9);
  assertTrue(timeCursor.getEdgeEnd() == 9);
  columnCursor.setPosition(23);
  assertTrue(countryCursor.getEdgeStart() == 15);
  assertTrue(countryCursor.getEdgeEnd() == 23);
  assertTrue(cityCursor.getEdgeStart() == 23);
  assertTrue(cityCursor.getEdgeEnd() == 23);
  assertTrue(streetCursor.getEdgeStart() == 23);
  assertTrue(streetCursor.getEdgeEnd() == 23);
  assertTrue(timeCursor.getEdgeStart() == 23);
  assertTrue(timeCursor.getEdgeEnd() == 23);
  columnCursor.setPosition(12);
  assertTrue(countryCursor.getEdgeStart() == 12);
  assertTrue(countryCursor.getEdgeEnd() == 14);
  assertTrue(cityCursor.getEdgeStart() == 12);
  assertTrue(cityCursor.getEdgeEnd() == 13);
  assertTrue(streetCursor.getEdgeStart() == 12);
  assertTrue(streetCursor.getEdgeEnd() == 12);
  assertTrue(timeCursor.getEdgeStart() == 12);
  assertTrue(timeCursor.getEdgeEnd() == 12);
  columnCursor.beforeFirst();
  columnCursor.setPosition(24);
  assertTrue(countryCursor.getEdgeStart() == -1);
  assertTrue(countryCursor.getEdgeEnd() == -1);
  close(dataCursor);
}

Fixed version (ground truth):
/** 
 * @throws OLAPException
 * @throws BirtException 
 */
public void testCursorModel1() throws OLAPException, BirtException {
  ICubeQueryDefinition cqd=creator.createQueryDefinition();
  IBinding rowGrandTotal=new Binding("String_Node_Str");
  rowGrandTotal.setAggrFunction(IBuildInAggregation.TOTAL_SUM_FUNC);
  rowGrandTotal.setExpression(new ScriptExpression("String_Node_Str"));
  rowGrandTotal.addAggregateOn("String_Node_Str");
  rowGrandTotal.addAggregateOn("String_Node_Str");
  IBinding columnGrandTotal=new Binding("String_Node_Str");
  columnGrandTotal.setAggrFunction(IBuildInAggregation.TOTAL_SUM_FUNC);
  columnGrandTotal.setExpression(new ScriptExpression("String_Node_Str"));
  columnGrandTotal.addAggregateOn("String_Node_Str");
  columnGrandTotal.addAggregateOn("String_Node_Str");
  columnGrandTotal.addAggregateOn("String_Node_Str");
  columnGrandTotal.addAggregateOn("String_Node_Str");
  cqd.addBinding(rowGrandTotal);
  cqd.addBinding(columnGrandTotal);
  BirtCubeView cubeView=new BirtCubeView(new CubeQueryExecutor(null,cqd,de.getSession(),this.scope,de.getContext()));
  CubeCursor dataCursor=cubeView.getCubeCursor(new StopSign(),cube,false);
  EdgeCursor rowCursor=cubeView.getRowEdgeView().getEdgeCursor();
  EdgeCursor columnCursor=cubeView.getColumnEdgeView().getEdgeCursor();
  DimensionCursor countryCursor=(DimensionCursor)columnCursor.getDimensionCursor().get(0);
  DimensionCursor cityCursor=(DimensionCursor)columnCursor.getDimensionCursor().get(1);
  DimensionCursor streetCursor=(DimensionCursor)columnCursor.getDimensionCursor().get(2);
  DimensionCursor timeCursor=(DimensionCursor)columnCursor.getDimensionCursor().get(3);
  columnCursor.beforeFirst();
  assertTrue(countryCursor.isBeforeFirst());
  assertTrue(cityCursor.isBeforeFirst());
  assertTrue(streetCursor.isBeforeFirst());
  assertTrue(timeCursor.isBeforeFirst());
  columnCursor.afterLast();
  assertTrue(countryCursor.isAfterLast());
  assertTrue(cityCursor.isAfterLast());
  assertTrue(streetCursor.isAfterLast());
  assertTrue(timeCursor.isAfterLast());
  columnCursor.first();
  assertTrue(columnCursor.isFirst());
  assertTrue(countryCursor.isFirst());
  assertTrue(cityCursor.isFirst());
  assertTrue(streetCursor.isFirst());
  assertTrue(timeCursor.isFirst());
  columnCursor.last();
  assertTrue(columnCursor.last());
  assertTrue(countryCursor.last());
  assertTrue(cityCursor.last());
  assertTrue(streetCursor.last());
  assertTrue(timeCursor.last());
  columnCursor.setPosition(5);
  assertTrue(countryCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(cityCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(streetCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(timeCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  columnCursor.previous();
  assertTrue(countryCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(cityCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(streetCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(timeCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  columnCursor.setPosition(24);
  try {
    countryCursor.getObject("String_Node_Str");
    fail("String_Node_Str");
  }
 catch (  OLAPException e) {
  }
  columnCursor.beforeFirst();
  columnCursor.relative(6);
  assertTrue(countryCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(cityCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(streetCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(timeCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  columnCursor.beforeFirst();
  columnCursor.next();
  columnCursor.next();
  columnCursor.next();
  columnCursor.setPosition(1);
  assertTrue(countryCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(cityCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(streetCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(timeCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  columnCursor.beforeFirst();
  columnCursor.setPosition(4);
  timeCursor.setPosition(1);
  assertTrue(countryCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(cityCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(streetCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(timeCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  columnCursor.beforeFirst();
  columnCursor.next();
  countryCursor.next();
  assertTrue(countryCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(cityCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(streetCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  assertTrue(timeCursor.getObject("String_Node_Str").equals("String_Node_Str"));
  columnCursor.afterLast();
  try {
    streetCursor.getObject("String_Node_Str");
    fail("String_Node_Str");
  }
 catch (  OLAPException e) {
  }
  columnCursor.beforeFirst();
  columnCursor.setPosition(1);
  assertTrue(countryCursor.getEdgeStart() == 0);
  assertTrue(countryCursor.getEdgeEnd() == 7);
  assertTrue(cityCursor.getEdgeStart() == 0);
  assertTrue(cityCursor.getEdgeEnd() == 2);
  assertTrue(streetCursor.getEdgeStart() == 0);
  assertTrue(streetCursor.getEdgeEnd() == 1);
  assertTrue(timeCursor.getEdgeStart() == 1);
  assertTrue(timeCursor.getEdgeEnd() == 1);
  columnCursor.setPosition(9);
  assertTrue(countryCursor.getEdgeStart() == 8);
  assertTrue(countryCursor.getEdgeEnd() == 11);
  assertTrue(cityCursor.getEdgeStart() == 8);
  assertTrue(cityCursor.getEdgeEnd() == 10);
  assertTrue(streetCursor.getEdgeStart() == 8);
  assertTrue(streetCursor.getEdgeEnd() == 10);
  assertTrue(timeCursor.getEdgeStart() == 9);
  assertTrue(timeCursor.getEdgeEnd() == 9);
  columnCursor.setPosition(23);
  assertTrue(countryCursor.getEdgeStart() == 15);
  assertTrue(countryCursor.getEdgeEnd() == 23);
  assertTrue(cityCursor.getEdgeStart() == 23);
  assertTrue(cityCursor.getEdgeEnd() == 23);
  assertTrue(streetCursor.getEdgeStart() == 23);
  assertTrue(streetCursor.getEdgeEnd() == 23);
  assertTrue(timeCursor.getEdgeStart() == 23);
  assertTrue(timeCursor.getEdgeEnd() == 23);
  columnCursor.setPosition(12);
  assertTrue(countryCursor.getEdgeStart() == 12);
  assertTrue(countryCursor.getEdgeEnd() == 14);
  assertTrue(cityCursor.getEdgeStart() == 12);
  assertTrue(cityCursor.getEdgeEnd() == 13);
  assertTrue(streetCursor.getEdgeStart() == 12);
  assertTrue(streetCursor.getEdgeEnd() == 12);
  assertTrue(timeCursor.getEdgeStart() == 12);
  assertTrue(timeCursor.getEdgeEnd() == 12);
  columnCursor.beforeFirst();
  columnCursor.setPosition(24);
  assertTrue(countryCursor.getEdgeStart() == -1);
  assertTrue(countryCursor.getEdgeEnd() == -1);
  close(dataCursor);
}