@Test
  public void testIndexing_HtmlCoordinates() {
    // [1][-][3] --> [1][x][3] --> [0,0][0,1][0,2]
    // [1][2][3] --> [-][2][3] --> [1,0][1,1][1,2]
    // [-][2][3] -->
    CellValue<? extends Comparable<?>> cv = data.get(0).get(0);

    data.setMerged(true);
    data.applyModelGrouping(cv);

    assertEquals(data.size(), 2);

    Coordinate c;
    c = data.get(0).get(0).getHtmlCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 0);
    c = data.get(0).get(1).getHtmlCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 1);
    c = data.get(0).get(2).getHtmlCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 2);

    c = data.get(1).get(0).getHtmlCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 0);
    c = data.get(1).get(1).getHtmlCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 1);
    c = data.get(1).get(2).getHtmlCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 2);

    data.deleteRow(1);
    assertEquals(data.size(), 1);

    // [1][-][3] --> [1][x][3] --> [0,0][0,1][0,2]
    c = data.get(0).get(0).getHtmlCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 0);
    c = data.get(0).get(1).getHtmlCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 1);
    c = data.get(0).get(2).getHtmlCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 2);
  }
  @Test
  public void testIndexing_DataCoordinates() {
    // [1][-][3] --> [0,0][0,1][0,2]
    // [1][2][3] --> [1,0][1,1][1,2]
    // [-][2][3] --> [2,0][2,1][2,2]
    data.setMerged(true);

    Coordinate c;
    c = data.get(0).get(0).getCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 0);
    c = data.get(0).get(1).getCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 1);
    c = data.get(0).get(2).getCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 2);

    c = data.get(1).get(0).getCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 0);
    c = data.get(1).get(1).getCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 1);
    c = data.get(1).get(2).getCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 2);

    c = data.get(2).get(0).getCoordinate();
    assertEquals(c.getRow(), 2);
    assertEquals(c.getCol(), 0);
    c = data.get(2).get(1).getCoordinate();
    assertEquals(c.getRow(), 2);
    assertEquals(c.getCol(), 1);
    c = data.get(2).get(2).getCoordinate();
    assertEquals(c.getRow(), 2);
    assertEquals(c.getCol(), 2);

    data.addRow(1, makeRow());
    assertEquals(data.size(), 4);

    // [1][-][3] --> [0,0][0,1][0,2]
    // [-][-][-] --> [1,0][1,1][1,2]
    // [1][2][3] --> [2,0][2,1][2,2]
    // [-][2][3] --> [3,0][3,1][3,2]
    c = data.get(0).get(0).getCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 0);
    c = data.get(0).get(1).getCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 1);
    c = data.get(0).get(2).getCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 2);

    c = data.get(1).get(0).getCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 0);
    c = data.get(1).get(1).getCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 1);
    c = data.get(1).get(2).getCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 2);

    c = data.get(2).get(0).getCoordinate();
    assertEquals(c.getRow(), 2);
    assertEquals(c.getCol(), 0);
    c = data.get(2).get(1).getCoordinate();
    assertEquals(c.getRow(), 2);
    assertEquals(c.getCol(), 1);
    c = data.get(2).get(2).getCoordinate();
    assertEquals(c.getRow(), 2);
    assertEquals(c.getCol(), 2);

    c = data.get(3).get(0).getCoordinate();
    assertEquals(c.getRow(), 3);
    assertEquals(c.getCol(), 0);
    c = data.get(3).get(1).getCoordinate();
    assertEquals(c.getRow(), 3);
    assertEquals(c.getCol(), 1);
    c = data.get(3).get(2).getCoordinate();
    assertEquals(c.getRow(), 3);
    assertEquals(c.getCol(), 2);
  }
  @Test
  public void testIndexing_DataCoordinates() {

    Coordinate c;
    c = data.get(0).get(0).getCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 0);
    c = data.get(0).get(1).getCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 1);
    c = data.get(0).get(2).getCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 2);

    c = data.get(1).get(0).getCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 0);
    c = data.get(1).get(1).getCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 1);
    c = data.get(1).get(2).getCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 2);

    c = data.get(2).get(0).getCoordinate();
    assertEquals(c.getRow(), 2);
    assertEquals(c.getCol(), 0);
    c = data.get(2).get(1).getCoordinate();
    assertEquals(c.getRow(), 2);
    assertEquals(c.getCol(), 1);
    c = data.get(2).get(2).getCoordinate();
    assertEquals(c.getRow(), 2);
    assertEquals(c.getCol(), 2);

    data.addColumn(3, makeCellValueList(), true);
    assertEquals(data.size(), 3);
    assertEquals(data.get(0).size(), 4);
    assertEquals(data.get(1).size(), 4);
    assertEquals(data.get(2).size(), 4);

    c = data.get(0).get(0).getCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 0);
    c = data.get(0).get(1).getCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 1);
    c = data.get(0).get(2).getCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 2);
    c = data.get(0).get(3).getCoordinate();
    assertEquals(c.getRow(), 0);
    assertEquals(c.getCol(), 3);

    c = data.get(1).get(0).getCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 0);
    c = data.get(1).get(1).getCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 1);
    c = data.get(1).get(2).getCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 2);
    c = data.get(1).get(3).getCoordinate();
    assertEquals(c.getRow(), 1);
    assertEquals(c.getCol(), 3);

    c = data.get(2).get(0).getCoordinate();
    assertEquals(c.getRow(), 2);
    assertEquals(c.getCol(), 0);
    c = data.get(2).get(1).getCoordinate();
    assertEquals(c.getRow(), 2);
    assertEquals(c.getCol(), 1);
    c = data.get(2).get(2).getCoordinate();
    assertEquals(c.getRow(), 2);
    assertEquals(c.getCol(), 2);
    c = data.get(2).get(3).getCoordinate();
    assertEquals(c.getRow(), 2);
    assertEquals(c.getCol(), 3);
  }