public final void testShiftWithNames() {
    Workbook wb = _testDataProvider.createWorkbook();
    Sheet sheet1 = wb.createSheet("Sheet1");
    wb.createSheet("Sheet2");
    Row row = sheet1.createRow(0);
    row.createCell(0).setCellValue(1.1);
    row.createCell(1).setCellValue(2.2);

    Name name1 = wb.createName();
    name1.setNameName("name1");
    name1.setRefersToFormula("Sheet1!$A$1+Sheet1!$B$1");

    Name name2 = wb.createName();
    name2.setNameName("name2");
    name2.setRefersToFormula("Sheet1!$A$1");

    // refers to A1 but on Sheet2. Should stay unaffected.
    Name name3 = wb.createName();
    name3.setNameName("name3");
    name3.setRefersToFormula("Sheet2!$A$1");

    // The scope of this one is Sheet2. Should stay unaffected.
    Name name4 = wb.createName();
    name4.setNameName("name4");
    name4.setRefersToFormula("A1");
    name4.setSheetIndex(1);

    sheet1.shiftRows(0, 1, 2); // shift down the top row on Sheet1.
    name1 = wb.getNameAt(0);
    assertEquals("Sheet1!$A$3+Sheet1!$B$3", name1.getRefersToFormula());

    name2 = wb.getNameAt(1);
    assertEquals("Sheet1!$A$3", name2.getRefersToFormula());

    // name3 and name4 refer to Sheet2 and should not be affected
    name3 = wb.getNameAt(2);
    assertEquals("Sheet2!$A$1", name3.getRefersToFormula());

    name4 = wb.getNameAt(3);
    assertEquals("A1", name4.getRefersToFormula());
  }