public void testRegisterCorrectCommand() {
   CommandFactory.registerCommand("test", Test.class);
   Assert.assertEquals(1, CommandFactory.getCommands().size());
   Assert.assertEquals(Test.class, CommandFactory.getCommands().get("test"));
   CommandFactory.unregisterCommand(Test.class, "test");
   Assert.assertEquals(0, CommandFactory.getCommands().size());
 }
 public void testRegisterMultipleCommandsForType() {
   CommandFactory.registerCommand("test", Test.class);
   CommandFactory.registerCommand("bla", Test.class);
   Assert.assertEquals(Test.class, CommandFactory.getCommands().get("test"));
   Assert.assertEquals(Test.class, CommandFactory.getCommands().get("bla"));
   Assert.assertEquals(2, CommandFactory.getCommands().size());
   CommandFactory.unregisterCommand(Test.class, null);
   Assert.assertEquals(0, CommandFactory.getCommands().size());
 }
 public void testUnregisterOneAmongMultipleSameType() {
   CommandFactory.registerCommand("test", Test.class);
   CommandFactory.registerCommand("bla", Test.class);
   Assert.assertEquals(Test.class, CommandFactory.getCommands().get("test"));
   Assert.assertEquals(Test.class, CommandFactory.getCommands().get("bla"));
   Assert.assertEquals(2, CommandFactory.getCommands().size());
   CommandFactory.unregisterCommand(Test.class, "test");
   Assert.assertEquals(1, CommandFactory.getCommands().size());
   Assert.assertEquals(Test.class, CommandFactory.getCommands().get("bla"));
   CommandFactory.unregisterCommand(Test.class, null);
 }
  public void testUnregisterMultipleAmongOtherTypes() {
    Command anotherType =
        new Command() {

          @Override
          public void execute(String source, String line) {}

          @Override
          public String help() {
            return null;
          }
        };
    CommandFactory.registerCommand("test", Test.class);
    CommandFactory.registerCommand("foo", anotherType.getClass());
    CommandFactory.registerCommand("bla", Test.class);
    Assert.assertEquals(Test.class, CommandFactory.getCommands().get("test"));
    Assert.assertEquals(Test.class, CommandFactory.getCommands().get("bla"));
    Assert.assertNotNull(CommandFactory.getCommands().get("foo"));
    Assert.assertEquals(3, CommandFactory.getCommands().size());
    CommandFactory.unregisterCommand(Test.class, null);
    Assert.assertEquals(1, CommandFactory.getCommands().size());
    Assert.assertNotSame(Test.class, CommandFactory.getCommands().get("foo"));
    CommandFactory.unregisterCommand(anotherType.getClass(), null);
  }