### Question:
HDPath extends AbstractList<ChildNumber> { public static HDPath parsePath(@Nonnull String path) { String[] parsedNodes = path.replace("M", "").split("/"); List<ChildNumber> nodes = new ArrayList<>(); for (String n : parsedNodes) { n = n.replaceAll(" ", ""); if (n.length() == 0) continue; boolean isHard = n.endsWith("H"); if (isHard) n = n.substring(0, n.length() - 1); int nodeNumber = Integer.parseInt(n); nodes.add(new ChildNumber(nodeNumber, isHard)); } return new HDPath(nodes); } HDPath(boolean hasPrivateKey, List<ChildNumber> list);  HDPath(List<ChildNumber> list); static HDPath M(List<ChildNumber> list); static HDPath M(); static HDPath M(ChildNumber childNumber); static HDPath M(ChildNumber... children); static HDPath m(List<ChildNumber> list); static HDPath m(); static HDPath m(ChildNumber childNumber); static HDPath m(ChildNumber... children); static HDPath parsePath(@Nonnull String path); boolean hasPrivateKey(); HDPath extend(ChildNumber child1, ChildNumber... children); HDPath extend(HDPath path2); HDPath extend(List<ChildNumber> path2); @Override ChildNumber get(int index); @Override int size(); @Override String toString();  }### Answer:
@Test public void testParsePath() { Object[] tv = { "M / 44H / 0H / 0H / 1 / 1", ImmutableList.of(new ChildNumber(44, true), new ChildNumber(0, true), new ChildNumber(0, true), new ChildNumber(1, false), new ChildNumber(1, false)), "M/7H/3/3/1H/", ImmutableList.of(new ChildNumber(7, true), new ChildNumber(3, false), new ChildNumber(3, false), new ChildNumber(1, true)), "1 H / 2 H / 3 H /", ImmutableList.of(new ChildNumber(1, true), new ChildNumber(2, true), new ChildNumber(3, true)), "1 / 2 / 3 /", ImmutableList.of(new ChildNumber(1, false), new ChildNumber(2, false), new ChildNumber(3, false)) }; for (int i = 0; i < tv.length; i += 2) { String strPath = (String) tv[i]; List<ChildNumber> expectedPath = (List<ChildNumber>) tv[i + 1]; List<ChildNumber> path = HDPath.parsePath(strPath); Assert.assertEquals(path, expectedPath); } }