#!/usr/bin/python -d
import sys, os, re, subprocess, inspect
from PyQt4 import QtCore, QtGui
from etk.unittests.testconverter.scripts.nosetestsGUI import Ui_Dialog
class nosetestUI(QtGui.QMainWindow):
def __init__(self, parent=None):
self.localpath = os.getcwd()
self.localpath = os.path.abspath(os.path.join(self.localpath,
"..", "..", "..", ".."))
self.projectPath = 'main\\employer_toolkit\\app\\server\\etk\\unittests\\converted'
QtGui.QWidget.__init__(self, parent)
self.processTests = self.getTestFiles()
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.filepath = ''
for test in self.processTests.keys():
self.ui.selectProcess.addItem(test) # name
self.ui.selectProcess.activated['QString'].connect(self.getTestProcess)
self.ui.selectTest.activated['QString'].connect(self.getTest)
QtCore.QObject.connect(self.ui.testButton,
QtCore.SIGNAL("clicked()"), self.runTest)
QtCore.QObject.connect(self.ui.cancelButton,
QtCore.SIGNAL("clicked()"), self.close)
def getTestFiles(self):
""" returns a dict of the unittest files in the converted folder, e.g.
fileDict[studentloan] = studentloan_unittest.py
"""
fileDict = {}
path = os.path.join(self.localpath, self.projectPath)
results = []
results += [fname for fname in os.listdir(path) if fname.endswith('.py')]
results.remove('__init__.py')
for fname in results:
fileDict[re.sub('_unittest.py','',fname)] = fname
return fileDict
def getTestProcess(self):
self.ui.errorMsg.setText('')
testProcess = unicode(self.ui.selectProcess.currentText())
tests = [] # Make sure the list is clear when the process changes
try:
self.filepath = os.path.join(self.localpath, self.projectPath,
self.processTests[testProcess])
print self.filepath
except KeyError:
self.ui.errorMsg.setText('Select a process')
with open(self.filepath) as f:
lines = f.readlines()
tests += [line.split(' ', 1)[1].split('(')[0] for line in lines
if line.strip().startswith('def test_')]
self.ui.selectTest.clear()
self.ui.selectTest.addItem('All')
for test in tests:
test = re.sub('def','',test)
self.ui.selectTest.addItem(re.sub('\s','',test))
def getTest(self):
test = unicode(self.ui.selectTest.currentText())
return test
def runTest(self):
args = []
if self.ui.verbose.checkState() == 2: args.append('-v')
if self.ui.doctest.checkState() == 2: args.append('--with-doctest')
if self.ui.pyDebug.checkState() == 2: args.append('--pdb')
if self.ui.pyDebugFails.checkState() == 2: args.append('--pdb-failures')
testProcess = unicode(self.ui.selectProcess.currentText())
test = self.getTest()
# Create the command to run the conversion
if test == "All":
cmd = "nosetests {process} {args}".format(process= self.filepath,
args= ', '.join(args))
else:
cmd = "nosetests {process}:{test} {args}".format(process = self.filepath,
test= test, args= ' '.join(args))
print cmd
try:
# Run the converter tool
os.system(cmd)
except OSError, e:
raise Exception, "Error: ", e
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
nosetest = nosetestUI()
nosetest.show()
sys.exit(app.exec_())