@Test
public void testSubCategories() {

  Category subA1 = Category.of("Sub A1");
  Category subA2 = Category.of("Sub A2", ImmutableList.of(subA1), ImmutableList.of());
  Category rootA = Category.of("Root A", ImmutableList.of(subA2), ImmutableList.of());
  Category rootB = Category.of("Root B", ImmutableList.of(subA1), ImmutableList.of());
  FxUtils.runOnFxThread(() -> controller.setRootCategories(ImmutableList.of(rootA, rootB)));
  waitForFxEvents();
  // Category Hierarchy
  //-------------------
  // Root A
  //  - Sub A2
  //    - Sub A1
  // Root B
  //  - Sub A1
  // Should be two children
  TreeView<Category> tree = lookup(".settings-categories").query();
  ObservableList<TreeItem<Category>> children = tree.getRoot().getChildren();
  assertEquals(2, children.size(), "Two children should be present");
  assertEquals(rootA, children.get(0).getValue());
  assertEquals(rootB, children.get(1).getValue());
  // Check first root child
  TreeItem<Category> rootAItem = children.get(0);
  assertEquals(1, rootAItem.getChildren().size());
  TreeItem<Category> subA2Item = rootAItem.getChildren().get(0);
  assertEquals(subA2, subA2Item.getValue());
  assertEquals(1, subA2Item.getChildren().size());
  assertEquals(subA1, subA2Item.getChildren().get(0).getValue());
  // Check second root child
  TreeItem<Category> rootBItem = children.get(1);
  assertEquals(1, rootBItem.getChildren().size());
  assertEquals(subA1, rootBItem.getChildren().get(0).getValue());
}