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 + -
显示快捷键?