/*
* Copyright 2010-2011, Sikuli.org
* Released under the MIT License.
*
*/
package org.sikuli.ide.z_notused.sikuli_test;
import org.sikuli.ide.SikuliIDE;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestFailure;
import junit.framework.TestResult;
import junit.framework.TestSuite;
import org.python.util.PythonInterpreter;
import org.python.core.*;
public class TextUnitTestRunner extends junit.textui.TestRunner {
public TextUnitTestRunner(String[] args){
PythonInterpreter.initialize(System.getProperties(),null, args);
}
public boolean testSikuli(String bundle) throws Exception{
File fBundle = new File(bundle);
String path = fBundle.getAbsolutePath();
String filename = fBundle.getName();
filename = filename.substring(0, filename.lastIndexOf(".")) + ".py";
File fPy = new File(bundle, filename);
Test suite = genTestSuite(fPy.getAbsolutePath(), path);
return doRun(suite).wasSuccessful();
}
private String genTestClassName(String filename){
String fname = new File(filename).getName();
int dot = fname.indexOf(".");
return fname.substring(0, dot);
}
private Test genTestSuite(String filename, String bundlePath) throws IOException{
String className = genTestClassName(filename);
TestSuite ret = new TestSuite(className);
PythonInterpreter interp = new PythonInterpreter();
String testCode =
"# coding=utf-8\n"+
"from __future__ import with_statement\n"+
"import junit\n"+
"from junit.framework.Assert import *\n"+
"from sikuli.Sikuli import *\n"+
"class "+className+" (junit.framework.TestCase):\n"+
"\tdef __init__(self, name):\n"+
"\t\tjunit.framework.TestCase.__init__(self,name)\n"+
"\t\tself.theTestFunction = getattr(self,name)\n"+
"\t\tsetBundlePath('"+bundlePath+"')\n"+
"\tdef runTest(self):\n"+
"\t\tself.theTestFunction()\n";
BufferedReader in = new BufferedReader(new FileReader(filename));
String line;
while( (line = in.readLine()) != null ){
testCode += "\t" + line + "\n";
}
interp.exec(testCode);
PyList tests = (PyList)interp.eval(
"["+className+"(f) for f in dir("+className+") if f.startswith(\"test\")]");
while( tests.size() > 0 ){
PyObject t = tests.pop();
Test t2 = (Test)(t).__tojava__(TestCase.class);
ret.addTest( t2 );
}
return ret;
}
}