private void assertStarters(List<SpringBootStarter> starters, String... expectedIds) {
   Set<String> expecteds = new HashSet<>(Arrays.asList(expectedIds));
   for (SpringBootStarter starter : starters) {
     String id = starter.getId();
     if (expecteds.remove(id)) {
       // okay
     } else {
       fail("Unexpected starter found: " + starter);
     }
   }
   if (!expecteds.isEmpty()) {
     fail("Expected starters not found: " + expecteds);
   }
 }
  private void assertUsageCounts(
      ISpringBootProject project, PopularityTracker popularities, String... idAndCount)
      throws Exception {
    Map<String, Integer> expect = new HashMap<>();
    for (String pair : idAndCount) {
      String[] pieces = pair.split(":");
      assertEquals(2, pieces.length);
      String id = pieces[0];
      int count = Integer.parseInt(pieces[1]);
      expect.put(id, count);
    }

    List<SpringBootStarter> knownStarters = project.getKnownStarters();
    assertFalse(knownStarters.isEmpty());
    for (SpringBootStarter starter : knownStarters) {
      String id = starter.getId();
      Integer expectedCountOrNull = expect.get(id);
      int expectedCount = expectedCountOrNull == null ? 0 : expectedCountOrNull;
      assertEquals("Usage count for '" + id + "'", expectedCount, popularities.getUsageCount(id));
      expect.remove(id);
    }

    assertTrue("Expected usage counts not found: " + expect, expect.isEmpty());
  }