@Test
 public void headPathShouldReturnTheCorrectSubPath() {
   TreePath path = new TreePath(new Object[] {"a", "b", "c"});
   TreePath expected = path.getParentPath();
   TreePath actual = TreePaths.headPath(path, path.getSegmentCount() - 1);
   assertThat(actual, equalTo(expected));
 }
 @Test
 public void indexOfShouldThrowAnExceptionIfSegmentIsNull() {
   TreePath path = newPath();
   thrown.expect(NullPointerException.class);
   TreePaths.indexOf(path, null);
 }
 @Test
 public void indexOfShouldThrowAnExceptionIfPathIsNull() {
   thrown.expect(NullPointerException.class);
   TreePaths.indexOf(null, "");
 }
 @Test
 public void indexOfShouldReturnTheFirstIndex() {
   TreePath path = new TreePath(new Object[] {"a", "a", "a"});
   assertThat(TreePaths.indexOf(path, "a"), is(0));
 }
 @Test
 public void indexOfShouldReturnTheCorrectIndex() {
   TreePath path = new TreePath(new Object[] {"a", "b", "c"});
   int index = 1; // Index of "b"
   assertThat(TreePaths.indexOf(path, "b"), is(index));
 }
 @Test
 public void indexOfShouldReturnNegative1IfNotFound() {
   TreePath path = new TreePath(new Object[] {"a", "b", "c"});
   assertThat(TreePaths.indexOf(path, "d"), is(-1));
 }
 @Test
 public void headPathShouldThrowAnExceptionIfIndexIsNegative() {
   TreePath path = newPath();
   thrown.expect(IllegalArgumentException.class);
   TreePaths.headPath(path, -1);
 }
 @Test
 public void headPathShouldReturnAnEqualPathIfIndexIsEqualToThePathLength() {
   TreePath path = newPath();
   assertThat(TreePaths.headPath(path, path.getSegmentCount()), equalTo(path));
 }
 @Test
 public void headPathShouldThrowAnExceptionIfIndexIsGreaterThanThePathLength() {
   TreePath path = newPath();
   thrown.expect(IllegalArgumentException.class);
   TreePaths.headPath(path, path.getSegmentCount() + 1);
 }