📄 coreclass.java
字号:
import java.util.Properties;
import java.util.Vector;
import java.io.*;
class PTester{
public
Vector inData;
Vector outData;
int delay=0;
int inputLines=1; // C程序执行一次输入行数
int outputLines=1;// C程序执行一次输出行数
protected
Process handle;
public void test(String FileName){
int i,j;
InputStreamReader inputStream;
OutputStreamWriter outputStream;
BufferedReader in;
BufferedWriter out;
for(i=0;i<inData.size();)
{
try
{//测试代码段
handle = Runtime.getRuntime().exec(FileName);
//System.out.println(FileName);
outputStream=new OutputStreamWriter(handle.getOutputStream() );
inputStream=new InputStreamReader(handle.getInputStream() );
in=new BufferedReader(inputStream);
out=new BufferedWriter(outputStream);
String tmpStr;
//PdelayThread dt=new PdelayThread ();
//dt.run (handle,10,outData,outputLines);
for (j=0;j<inputLines;j++,i++){
tmpStr=inData.elementAt(i).toString()+"\r\n";
out.write(tmpStr);
out.flush() ;
}
for (j=0;j<outputLines;j++){
tmpStr=in.readLine();
outData.addElement (tmpStr);
//outData.addElement(inData.elementAt(j/outputLines)); //测试代码
}
handle.waitFor ();
handle.destroy ();
in.close();
out.close();
}catch(Exception ex)
{
//System.out.println("File Not Found!");
}
}
}
void addInputData(String Data){
inData.addElement(Data);
}
void clearInputData(){
inData.removeAllElements();
}
void startCount(){
int i=0;
for (i=0;i<delay*100;i++);
handle.destroy ();
for (i=0;i<outputLines;i++){
outData.addElement("overtime error"); //
}
}
PTester(){
inData=new Vector();
outData=new Vector();
}
PTester(int inDataLength,int outDataLength){
inData=new Vector(inDataLength);
outData=new Vector(outDataLength);
}
PTester(Vector data){
inData=(Vector)data.clone();
}
}
class PBlackTester extends PTester {
public Vector stdData;
public Vector cmpResult=new Vector();
public void compare(){
int i=0;
for (i=0;i<stdData.size();i++){
try
{
if (stdData.elementAt(i).toString().trim().equals(outData.elementAt(i).toString()))
cmpResult.addElement("yes");
else
cmpResult.addElement("no");
}catch(Exception ex)
{
cmpResult.addElement("no");
}
}
}
PBlackTester(){
}
PBlackTester(int inDataLength,int outDataLength){
super(inDataLength,outDataLength);
}
PBlackTester(Vector data){
super(data);
}
}
class PCFileCreator{
protected String tempFileName;
protected String testFileName;
protected Vector funName=new Vector();
public Vector testData=new Vector();
public Vector randData=new Vector();
protected Vector start=new Vector();
protected Vector end=new Vector();
protected Vector testStart=new Vector();
protected Vector testEnd=new Vector();
public int funCount=0;
PCFileCreator(String tempFilename,String testFilename){ //生成模板文件流和测试文件流,并读取模板中的函数
String tmpStr;
tempFileName=tempFilename;
testFileName=testFilename;
try
{
FileReader tempFile=new FileReader(tempFileName);
BufferedReader temp=new BufferedReader(tempFile);
/////////读取模板中可用作测试的函数名//////////////
while((tmpStr=temp.readLine())!=null){
if (tmpStr.startsWith("/*Function:"))
{ tmpStr=tmpStr.substring(11,tmpStr.indexOf(","));
funName.addElement (tmpStr);
start.addElement("");
end.addElement ("");
testStart.addElement ("");
testEnd.addElement ("");
funCount++;
}
else if(tmpStr.startsWith ("/*Start*/")) break;
else if (tmpStr.startsWith("/*Data:"))
{
tmpStr=tmpStr.substring(7,tmpStr.indexOf("*/"));
testData.addElement (tmpStr);
}
else if (tmpStr.startsWith("/*RandData:"))
{
tmpStr=tmpStr.substring(11,tmpStr.indexOf("*/"));
randData.addElement (tmpStr);
}
}
temp.close();
tempFile.close ();
getTempFunPos(0);
getTempFunPos(1);
///////////////////////////////////////////////////
}catch(Exception ex)
{
}
}
protected boolean getTempFunPos(int type){//读取模板文件中的函数位置记录在 start end数组中
//type 表示是对模板文件查找还是对被测程序查找 0:模板文件 1:被测文件
String tmpStr,tmpChar,filename;
int i,j,funIndex=0,flag=0,flag2=0,flag3=0;
try
{
if (type==0) filename=tempFileName; //根据type给filename赋不同文件名
else filename=testFileName;
FileReader tempFile=new FileReader(filename); //打开文件
BufferedReader infile=new BufferedReader(tempFile);
int count=1; //行数,第一行记作1
while((tmpStr=infile.readLine())!=null) //逐行读取
{
for (i=0;i<funName.size();i++) //判断是否为指定可替换的函数定义部分
if (tmpStr.startsWith(funName.elementAt(i).toString()))
{
if (type==0) start.setElementAt(Integer.toString (count),i); //记录所在行
else testStart.setElementAt(Integer.toString (count),i);
funIndex=i;
flag=1; flag2=0; flag3=0; //flag =1 启动函数体范围检索 flag2=0记录找到是否找到过"{"
//flag3=0 记录找到的"{"个数
}
if (flag==1)
for (j=0;j<tmpStr.length();j++)
{
tmpChar=tmpStr.substring(j,j+1);
if (tmpChar.equals ("{")) {
flag3++;flag2=1;
}
else if (tmpChar.equals ("}")) flag3--;
if (flag2==1&&flag3==0) //找到过"{"并且此时"{"找到个数为0,则认为函数体结束
{
if (type==0) end.setElementAt(Integer.toString(count),funIndex); //记录结束所在行
else testEnd.setElementAt(Integer.toString(count),funIndex);
flag=0; //关闭函数体范围检索
}
}
count++; //行数递增
}
infile.close ();
tempFile.close ();
}catch(Exception ex)
{
//文件读取生成失败
return(false);
}
return(true);
}
public boolean createSrcFile(int funIndex,String srcFileName){ //替换模板中的第funIndex个函数,生成新的C源文件
int i,count=0;
try
{
FileWriter objFile=new FileWriter(srcFileName);
FileReader tempFile=new FileReader(tempFileName);
FileReader testFile=new FileReader(testFileName);
BufferedWriter outfile=new BufferedWriter (objFile);
BufferedReader infile=new BufferedReader(tempFile);
BufferedReader testfile=new BufferedReader(testFile);
if (funIndex>0)
funIndex--; //用户传入为第几个函数,但在funName中从0开始记数,在此做修正
else funIndex=0;
String tmpStr;
int countTemp=0,countTest=0,flag;
while((tmpStr=infile.readLine())!=null)
{ if (countTemp==Integer.parseInt(start.elementAt (funIndex).toString())-1)
{ for (countTest=0;countTest<Integer.parseInt(testStart.elementAt(funIndex).toString ())-1;countTest++)
testfile.readLine();
while (countTest<=Integer.parseInt (testEnd.elementAt (funIndex).toString()))
{ tmpStr=testfile.readLine ();
outfile.write(tmpStr+"\r\n");
countTest++;
}
while (countTemp<Integer.parseInt (end.elementAt (funIndex).toString()))
{ infile.readLine ();
countTemp++;
}
}
else{
outfile.write(tmpStr+"\r\n");
countTemp++;
}
}
outfile.flush (); //发送并清空最后的碎片
outfile.close() ;
objFile.close ();
infile.close();
tempFile.close();
}catch(Exception ex)
{
ex.toString ();
}
return(true);
}
public boolean createSrcFile(int funIndex,String srcFileName,String fillBlank){ //替换模板中的第funIndex个空格,生成新的C源文件
int i,count=0;
try
{
FileWriter objFile=new FileWriter(srcFileName);
FileReader tempFile=new FileReader(tempFileName);
FileReader testFile=new FileReader(testFileName);
BufferedWriter outfile=new BufferedWriter (objFile);
BufferedReader infile=new BufferedReader(tempFile);
BufferedReader testfile=new BufferedReader(testFile);
if (funIndex>0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -