@Test
 public void testTerminate() throws Exception {
   ProBInstance proBInstance = mock(ProBInstance.class);
   BufferedReader reader = new BufferedReader(new StringReader("foo"));
   when(proBInstance.isShuttingDown()).thenReturn(true);
   Logger logger = mock(Logger.class);
   ConsoleListener listener = new ConsoleListener(proBInstance, reader, logger);
   listener.logLines();
   verify(logger, never()).debug("foo");
 }
 @Test
 public void testSingleLineRead() throws Exception {
   ProBInstance proBInstance = mock(ProBInstance.class);
   BufferedReader reader = new BufferedReader(new StringReader("foo"));
   Logger logger = mock(Logger.class);
   ConsoleListener listener = new ConsoleListener(proBInstance, reader, logger);
   String line = listener.readAndLog();
   assertEquals("foo", line);
   verify(logger).debug("foo");
 }
 @Test
 public void testTerminateNull() throws Exception {
   ProBInstance proBInstance = mock(ProBInstance.class);
   BufferedReader reader = new BufferedReader(new StringReader(""));
   when(proBInstance.isShuttingDown()).thenReturn(true);
   Logger logger = mock(Logger.class);
   ConsoleListener listener = new ConsoleListener(proBInstance, reader, logger);
   String line = listener.readAndLog();
   assertNull(line);
   verifyNoMoreInteractions(logger);
 }
 @Test
 public void testMultiLineReadAndTerminate() throws Exception {
   ProBInstance proBInstance = mock(ProBInstance.class);
   BufferedReader reader = new BufferedReader(new StringReader("foo\nbar\ngoo"));
   Logger logger = mock(Logger.class);
   ConsoleListener listener = new ConsoleListener(proBInstance, reader, logger);
   when(proBInstance.isShuttingDown()).thenReturn(false, false, true);
   listener.logLines();
   verify(logger).debug("foo");
   verify(logger).debug("bar");
   verifyNoMoreInteractions(logger);
 }
  /**
   * @param source
   * @param cmd
   * @param ev
   */
  public void cmdAnalyser(ConsoleListener source, String cmd, ViewEvent ev) {

    boolean badArgument = true;
    int i;
    int j;
    int iIndexEnd;
    int jIndexEnd;
    String sFlag;
    try {
      while (badArgument) {

        if (cmd.length() == 0) {
          throw new InvalidCommandException();

        } else if (cmd.equals("h")) {
          this.help();
          badArgument = false;
          source.catchViewEvent(ev);
        } else if ("d".equals(cmd.substring(0, 1))) {
          iIndexEnd = cmd.indexOf(" ", 2);
          i = Integer.valueOf(cmd.substring(2, iIndexEnd));
          j = Integer.valueOf(cmd.substring(iIndexEnd + 1));
          i--;
          j--;
          badArgument = false;
          Minesweeper.getInstance().getRules().demine(i, j);

        } else if ("m".equals(cmd.substring(0, 1))) {
          iIndexEnd = cmd.indexOf(" ", 2);
          jIndexEnd = cmd.indexOf(" ", iIndexEnd + 1);
          i = Integer.valueOf(cmd.substring(2, iIndexEnd));
          j = Integer.valueOf(cmd.substring(iIndexEnd + 1, jIndexEnd));
          sFlag = cmd.substring(jIndexEnd + 1);
          i--;
          j--;
          badArgument = false;
          Minesweeper.getInstance().getRules().flag(i, j, sFlag);

        } else if ("q".equals(cmd.substring(0, 1)) && cmd.length() == 1) {
          Minesweeper.getInstance().exit();
          badArgument = false;

        } else if (cmd.equals("o")) {
          Minesweeper.getInstance().jumToOptions();
          badArgument = false;

        } else if (cmd.equals("r")) {
          Minesweeper.getInstance().restart();
          badArgument = false;

        } else {
          throw new InvalidCommandException();
        }
      }
    } catch (RuntimeException e) {
      throw new InvalidCommandException();
    }
  }
 private void fireConsoleInitializedEvent(LanguageConsoleView consoleView) {
   for (ConsoleListener listener : myConsoleListeners) {
     listener.handleConsoleInitialized(consoleView);
   }
 }