@Test
 public void removeRootShouldRemoveIndexAgainstTreeNodeId() {
   index.addRoot(A);
   assertThat(index.getTreeNodeData(idA), equalTo(A));
   index.removeRoot(idA);
   assertThat(index.getTreeNodeData(idA), nullValue());
 }
 @Test
 public void removeRootShouldRemoveIndexAgainstUserObject() {
   index.addRoot(A);
   assertThat(index.getTreeNodesForUserObject(userObjectA), hasItem(A));
   index.removeRoot(A.getId());
   assertThat(index.getTreeNodesForUserObject(userObjectA), is(empty()));
 }
 @Test
 public void addRootShouldIndexAgainstUserObject() {
   index.addRoot(A);
   List<TreeNodeData<U>> result = index.getTreeNodesForUserObject(userObjectA);
   assertThat(result.size(), equalTo(1));
   assertThat(result, hasItem(A));
 }
 @Test
 public void addRootShouldAddRoot() {
   index.addRoot(A);
   List<TreeNodeData<U>> roots = index.getRoots();
   assertThat(roots.size(), equalTo(1));
   assertThat(roots, hasItem(A));
 }
 @Test
 public void addRootShouldIndexAgainstTreeNodeId() {
   index.addRoot(A);
   TreeNodeData<U> result = index.getTreeNodeData(idA);
   assertThat(result, equalTo(A));
 }