⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testeventsfilter.java

📁 MoMEUnit是一个单元测试的J2ME的应用程序xUnit架构实例。这是来自JUnit框架
💻 JAVA
字号:
package org.momeunit.ant.event;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.HashSet;import java.util.Iterator;import java.util.Set;import org.momeunit.ant.core.OutputPipe;/** * Class intended to filter out test events from input stream. Notifies test * event listeners about test events occurred. Sends filtered stream to pipe if * requested. *  * @author Sergio Morozov * @version 1.1.2 */public class TestEventsFilter extends OutputPipe implements Runnable{  /**   * Test event keyword.   */  private static final String TESTEVENTS_KEWORD = "<<!!MOMEUNIT_TESTEVENT!!>>";  /**   * Test event keyword length.   */  private static final int TESTEVENTS_KEWORD_LENGTH = TESTEVENTS_KEWORD      .length();  /**   * Test event here document string.   */  private static final String TESTEVENTS_HEREDOCUMENT_KEWORD = "<<<-"      + TESTEVENTS_KEWORD;  /**   * Test event here document string length.   */  private static final int TESTEVENTS_HEREDOCUMENT_KEWORD_LENGTH = TESTEVENTS_HEREDOCUMENT_KEWORD      .length();  /**   * Stack trace keyword.   */  private static final String STACK_TRACE_KEYWORD = "<<!!STACK_TRACE!!>>";  /**   * Stack trace keyword length.   */  private static final int STACK_TRACE_KEYWORD_LENGTH = STACK_TRACE_KEYWORD      .length();  /**   * Test event type keywords.   */  private static final String[] TESTEVENTS_KEYWORDS = { "TEST_EVENT:",      "TEST_START:", "TEST_FAIL:", "TEST_ERROR:", "TEST_END:" };  /**   * Test event type keywords lengthes.   */  private static final int[] TESTEVENTS_KEYWORDS_LENGTHES = new int[TESTEVENTS_KEYWORDS.length];  static  {    for (int i = TESTEVENTS_KEYWORDS.length - 1; i >= 0; i--)      TESTEVENTS_KEYWORDS_LENGTHES[i] = TESTEVENTS_KEYWORDS[i].length();  }  /**   * Event listeners that will be notified of test events.   */  private Set eventListeners = null;  /**   * Indicates that test evend ends,   */  private boolean endOfEvent = false;  /**   * Current test event.   */  private TestEvent event = null;  /**   * Buffer being used to generate test events.   */  private StringBuffer testsSB = null;  /**   * Instantiates TestEventsFilter with given {@link InputStream} and set of   * test event listeners.   *    * @param in   *          input stream.   * @param eventListeners   *          event listeners.   * @since 1.1   */  public TestEventsFilter(InputStream in, Set eventListeners)  {    super(in);    setEventListeners(eventListeners);  }  /**   * Sets test event listeners to be notified about test events occurred.   *    * @param eventListeners   *          set of test event listeners.   * @since 1.1   */  public void setEventListeners(Set eventListeners)  {    if (eventListeners == null) throw new NullPointerException("eventListeners");    this.eventListeners = new HashSet(eventListeners);  }  /**   * Adds given test event listener.   *    * @param listener   *          test event listener to add.   * @return <code>true</code> if added, <code>false</code> otherwise.   * @since 1.1   */  public boolean addEventListener(TestEventListener listener)  {    boolean res = false;    if (listener != null) res = this.eventListeners.add(listener);    return res;  }  /**   * Removes given test event listener.   *    * @param listener   *          test event listener to remove.   * @return <code>true</code> if removed, <code>false</code> otherwise.   * @since 1.1   */  public boolean removeEventListener(TestEventListener listener)  {    boolean res = false;    if (listener != null) res = this.eventListeners.remove(listener);    return res;  }  /**   * Starts filtering out test events from input stream until it is closed.   *    * @see java.lang.Runnable#run()   */  public void run()  {    if (this.getInputStream() != null)    {      BufferedReader reader = new BufferedReader(new InputStreamReader(this          .getInputStream()));      this.testsSB = new StringBuffer();      Writer writer = null;      if (this.getOutpuStream() != null) writer = new OutputStreamWriter(this          .getOutpuStream());      try      {        for (String line; (line = reader.readLine()) != null;)        {          String toParse = line;          if (this.event == null              && toParse.startsWith(TESTEVENTS_HEREDOCUMENT_KEWORD))          {            this.event = new TestEvent();            this.endOfEvent = false;            toParse = toParse.substring(TESTEVENTS_HEREDOCUMENT_KEWORD_LENGTH)                .trim();          }          if (this.event != null)          {            int pos = toParse.indexOf(TESTEVENTS_KEWORD);            if (this.endOfEvent = (pos >= 0))            {              line = toParse.substring(pos + TESTEVENTS_KEWORD_LENGTH).trim();              toParse = toParse.substring(0, pos);            }            this.parseTestEventString(toParse);          }          if (this.event == null && writer != null && line.length() > 0)          {            writer.write(line + '\n');            writer.flush();          }        }      } catch (IOException e)      {} finally      {        try        {          if (this.getOutpuStream() != System.err              && this.getOutpuStream() != System.out) writer.close();          if (reader != null) reader.close();        } catch (IOException e)        {}      }    }  }  private void pushEvent()  {    for (Iterator i = this.eventListeners.iterator(); i.hasNext();)      ((TestEventListener) i.next()).onEvevnt(this.event);    this.event = null;  }  /**   * @param line   * @throws IOException   */  private void parseTestEventString(String line) throws IOException  {    int i = TESTEVENTS_KEYWORDS.length - 1;    for (; i >= 0 && !line.startsWith(TESTEVENTS_KEYWORDS[i]); i--);    if (i >= 0)    {      this.event.setType(i);      line = line.substring(TESTEVENTS_KEYWORDS_LENGTHES[i]).trim();      this.parseTestCase(line);    } else if (line.startsWith(STACK_TRACE_KEYWORD))    {      this.event.setMsg(this.testsSB.toString());      this.testsSB.setLength(0);      line = line.substring(STACK_TRACE_KEYWORD_LENGTH).trim();      if (line.length() > 0) this.testsSB.append(line + '\n');    } else if (line.length() > 0) this.testsSB.append('\n').append(line);    if (this.endOfEvent)    {      if (this.event.getMsg() == null) this.event.setMsg(this.testsSB          .toString());      else this.event.setStackTrace(this.testsSB.toString());      this.pushEvent();    }  }  private void parseTestCase(String line)  {    int pos = line.indexOf(',');    if (pos < 0) pos = line.length();    this.event.setTimestamp(Long.parseLong(line.substring(0, pos)));    if (line.length() > pos)    {      line = line.substring(++pos).trim();      pos = line.indexOf(',');      if (pos < 0) pos = line.length();      this.event.setTestName(line.substring(0, pos));    }    if (line.length() > pos)    {      line = line.substring(++pos).trim();      pos = line.indexOf(',');      if (pos < 0) pos = line.length();      this.event.setTestClassName(line.substring(0, pos));    }    if (line.length() > pos)    {      line = line.substring(++pos).trim();      pos = line.indexOf(',');      if (pos < 0) pos = line.length();      this.event.setErrorClassName(line.substring(0, pos));    }    if (line.length() > pos)    {      line = line.substring(++pos).trim();      this.testsSB.setLength(0);      this.testsSB.append(line);    }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -