@Test
  public void chatTest() throws ExecutionException, InterruptedException {
    factory.get("/a/chat1");
    factory.get("/a/chat2");
    factory.get("/a/chat3");

    assertEquals(MetaBroadcaster.getDefault().broadcastTo("/a", "yo").get().size(), 0);
    assertEquals(MetaBroadcaster.getDefault().broadcastTo("/a/", "yo").get().size(), 0);
    assertEquals(MetaBroadcaster.getDefault().broadcastTo("/a/*", "yo").get().size(), 3);
  }
  @Test
  public void complexBroadcastTest() throws ExecutionException, InterruptedException {
    factory.get("/a/b/c/d");
    factory.get("/b");
    factory.get("/c");

    assertEquals(MetaBroadcaster.getDefault().broadcastTo("/*", "yo").get().size(), 3);
    assertEquals(MetaBroadcaster.getDefault().broadcastTo("/a/b/c/d", "yo").get().size(), 1);
    assertEquals(MetaBroadcaster.getDefault().broadcastTo("/a", "yo").get().size(), 0);
    assertEquals(MetaBroadcaster.getDefault().broadcastTo("/b", "yo").get().size(), 1);
  }
  @Test
  public void wildcardBroadcastTest() throws ExecutionException, InterruptedException {
    factory.get("/a");
    factory.get("/b");
    factory.get("/c");

    assertEquals(metaBroadcaster.broadcastTo("/*", "yo").get().size(), 3);
    assertEquals(metaBroadcaster.broadcastTo("/a/b", "yo").get().size(), 0);
    assertEquals(metaBroadcaster.broadcastTo("/a", "yo").get().size(), 1);
    assertEquals(metaBroadcaster.broadcastTo("/", "yo").get().size(), 3);

    factory.get("/*");
    assertEquals(metaBroadcaster.broadcastTo("/", "yo").get().size(), 4);
  }
 @Test
 public void issue836Test() throws ExecutionException, InterruptedException {
   factory.get("/a/@b");
   factory.get("/b");
   factory.get("/c");
   assertEquals(metaBroadcaster.broadcastTo("/a/@b", "yo").get().size(), 1);
 }
 @Test
 public void underscoreMatching() throws ExecutionException, InterruptedException {
   factory.get("/a/_b");
   factory.get("/b");
   factory.get("/c");
   assertEquals(metaBroadcaster.broadcastTo("/a/_b", "yo").get().size(), 1);
 }
  @Test
  public void traillingBroadcastTest() throws ExecutionException, InterruptedException {

    factory.get("/a/b");
    factory.get("/b");
    factory.get("/c");
    assertEquals(MetaBroadcaster.getDefault().broadcastTo("/a/b", "yo").get().size(), 1);
  }
  @Test
  public void exactBroadcastTest() throws ExecutionException, InterruptedException {

    factory.get("/a");
    factory.get("/a/b");
    factory.get("/c");

    assertEquals(MetaBroadcaster.getDefault().broadcastTo("/a", "yo").get().get(0).getID(), "/a");
  }