### Question:
Path implements Iterable<ChildKey>, Comparable<Path> { public Path popFront() { int newStart = this.start; if (!this.isEmpty()) { newStart++; } return new Path(pieces, newStart, this.end); } Path(ChildKey... segments);  Path(List<String> segments);  Path(String pathString); private  Path(ChildKey[] pieces, int start, int end); static Path getRelative(Path from, Path to); static Path getEmptyPath(); Path child(Path path); Path child(ChildKey child); @Override String toString(); String wireFormat(); List<String> asList(); ChildKey getFront(); Path popFront(); Path getParent(); ChildKey getBack(); boolean isEmpty(); int size(); @Override Iterator<ChildKey> iterator(); boolean contains(Path other); @Override boolean equals(Object other); @Override int hashCode(); @Override int compareTo(Path other);  }### Answer:
@Test public void popFront() { Assert.assertEquals(new Path("/a/b/c").popFront(), new Path("/b/c")); Assert.assertEquals(new Path("/a/b/c").popFront().popFront(), new Path("/c")); Assert.assertEquals(new Path("/a/b/c").popFront().popFront().popFront(), new Path("/")); Assert.assertEquals( new Path("/a/b/c").popFront().popFront().popFront().popFront(), new Path("/")); }