@Test
  public void testDeleteBookmark() {
    addTestVerse();
    List<BookmarkDto> bookmarks = bookmarkControl.getAllBookmarks();
    BookmarkDto todelete = bookmarks.get(0);
    bookmarkControl.deleteBookmark(todelete);

    bookmarks = bookmarkControl.getAllBookmarks();
    for (BookmarkDto bookmark : bookmarks) {
      assertFalse("delete failed", bookmark.getId().equals(todelete.getId()));
    }
  }
  @Ignore // fails due to failing isOpen in rawQuery
  public void testGetBookmarksWithLabel() {
    BookmarkDto bookmark = addTestVerse();
    LabelDto label1 = addTestLabel();
    List<LabelDto> labelList = new ArrayList<LabelDto>();
    labelList.add(label1);

    // add 2 labels and check they are saved
    bookmarkControl.setBookmarkLabels(bookmark, labelList);

    List<BookmarkDto> list1 = bookmarkControl.getBookmarksWithLabel(label1);
    assertEquals(1, list1.size());
    assertEquals(bookmark, list1.get(0));
  }
  @After
  public void tearDown() throws Exception {

    List<BookmarkDto> bookmarks = bookmarkControl.getAllBookmarks();
    for (BookmarkDto dto : bookmarks) {
      bookmarkControl.deleteBookmark(dto);
    }

    List<LabelDto> labels = bookmarkControl.getAllLabels();
    for (LabelDto dto : labels) {
      bookmarkControl.deleteLabel(dto);
    }

    bookmarkControl = null;
  }
  /** @return */
  private LabelDto addTestLabel() {
    currentTestLabel = getNextTestLabel();

    LabelDto label = new LabelDto();
    label.setName(currentTestLabel);

    LabelDto newDto = bookmarkControl.saveOrUpdateLabel(label);
    return newDto;
  }
  @Ignore // fails due to failing isOpen in rawQuery
  public void testSetBookmarkLabels() {
    BookmarkDto bookmark = addTestVerse();
    LabelDto label1 = addTestLabel();
    LabelDto label2 = addTestLabel();
    List<LabelDto> labelList = new ArrayList<LabelDto>();
    labelList.add(label1);
    labelList.add(label2);

    // add 2 labels and check they are saved
    bookmarkControl.setBookmarkLabels(bookmark, labelList);

    List<BookmarkDto> list1 = bookmarkControl.getBookmarksWithLabel(label1);
    assertEquals(1, list1.size());
    assertEquals(bookmark, list1.get(0));

    List<BookmarkDto> list2 = bookmarkControl.getBookmarksWithLabel(label2);
    assertEquals(1, list2.size());
    assertEquals(bookmark, list2.get(0));

    // check 1 label is deleted if it is not linked
    List<LabelDto> labelList2 = new ArrayList<LabelDto>();
    labelList2.add(label1);
    bookmarkControl.setBookmarkLabels(bookmark, labelList2);

    List<BookmarkDto> list3 = bookmarkControl.getBookmarksWithLabel(label1);
    assertEquals(1, list3.size());
    List<BookmarkDto> list4 = bookmarkControl.getBookmarksWithLabel(label2);
    assertEquals(0, list4.size());
  }
  /** @return */
  private BookmarkDto addTestVerse() {
    try {
      currentTestVerse = getNextTestVerse();

      BookmarkDto bookmark = new BookmarkDto();
      bookmark.setVerse(
          VerseFactory.fromString(
              Versifications.instance().getVersification("KJV"), currentTestVerse));
      BookmarkDto newDto = bookmarkControl.addBookmark(bookmark);
      return newDto;
    } catch (Exception e) {
      fail("Error in verse:" + currentTestVerse);
    }
    return null;
  }
  @Test
  public void testGetAllBookmarks() {
    try {
      addTestVerse();
      addTestVerse();
      addTestVerse();

      List<BookmarkDto> bookmarks = bookmarkControl.getAllBookmarks();
      for (BookmarkDto dto : bookmarks) {
        System.out.println(dto.getId() + " " + dto.getVerse().getName());
      }
      assertTrue(bookmarks.size() == 3);
    } catch (Exception e) {
      e.printStackTrace();
      fail("exeption:" + e.getMessage());
    }
  }