oaatestcase.java

来自「SRI international 发布的OAA框架软件」· Java 代码 · 共 121 行

JAVA
121
字号
/*
#=========================================================================
# Copyright 2003 SRI International.  All rights reserved.
#
# The material contained in this file is confidential and proprietary to SRI
# International and may not be reproduced, published, or disclosed to others
# without authorization from SRI International.
#
# DISCLAIMER OF WARRANTIES
#
# SRI International MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
# SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
# LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SRI International SHALL NOT BE
# LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
# OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES
#=========================================================================
*/
package com.sri.oaa2.tools.oaatest;

import java.io.*;
import java.util.*;
import junit.framework.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import com.sri.oaa2.icl.*;


class OaaTestCase extends TestCase {
  /** Use given parser to parse XML test file to create this OaaTestCase. */
  OaaTestCase(SAXParser parser,File file) throws IOException, SAXException {
    super(file.toString());

    // Set content and error handlers.
    XMLReader xmlReader = parser.getXMLReader();
    xmlReader.setContentHandler(new OaaContentHandler(items,DEFAULT_TIMEOUT_MS));
    xmlReader.setErrorHandler(new MyErrorHandler());

    // Do the parse, MyContentHandler will fill this.items.
    xmlReader.parse(file.toURL().toString());
  }

  protected void runTest()  {
    // Don't care about events that came in before Test started.
    OaaConnector.get().flushEventQ();


    // Add triggers to watch for appropriate events.
    final IclList recvTriggers = new IclList();
    final IclList sendTriggers = new IclList();
    // Add event to triggers if unique according to unification.
    TestItem.EventAdder adder = new TestItem.EventAdder() {
      public void addRecv(IclTerm event) {
        add(recvTriggers,event);
      }      
      public void addSend(IclTerm event) {
        add(sendTriggers,event);
      }
      private void add(IclList triggers,IclTerm event) {
        // Not very efficient, O(n^2) to add all events.
        // But, n probably isn't very big.  Would need to make a 
        // hash table with equals() implemented as unification to do
        // it faster.
        Unifier unifier = Unifier.getInstance();
        Iterator iter = triggers.iterator();
        while (iter.hasNext()) {
          IclTerm child = (IclTerm)iter.next();
          if (unifier.unify(child,event) != null) {
            return;    
          }
        }

        triggers.add(event);
      }
    };
    // Loop through all TestItems, giving each a chance to add events.
    Iterator iter1 = items.iterator();
    while (iter1.hasNext()) {
      ((TestItem)iter1.next()).addTriggerEvents(adder); 
    }
    // This will automatically remove any previously set triggers.
    OaaConnector.get().setTriggers(recvTriggers,sendTriggers);


    // Run all TestItems
    Iterator iter2 = items.iterator();
    while (iter2.hasNext()) {
      TestItem item = (TestItem)iter2.next(); 
      item.runTest();
    }    
  }

  /** Handler error encountered during parsing.  For now, treat all 
    * warnings/errors as fatal. */
  private static class MyErrorHandler implements ErrorHandler {
    public void warning(SAXParseException spe) throws SAXException {
      throw new ParseException(spe);
    }
      
    public void error(SAXParseException spe) throws SAXException {
      throw new ParseException(spe);
    }

    public void fatalError(SAXParseException spe) throws SAXException {
      throw new ParseException(spe);
    }
  }

  // The TestItems in this test-case.
  // Make package-available so SelfTest can get to them.
  List items = new ArrayList();

  // Default value for timeout, in seconds.
  private static final int DEFAULT_TIMEOUT_S = 5;
  static final int DEFAULT_TIMEOUT_MS = DEFAULT_TIMEOUT_S * 1000;
}




⌨️ 快捷键说明

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