[Hildon-test-aut-commits] r257 - trunk/dogtail/dogtail
manishan at garage.maemo.org
manishan at garage.maemo.org
Tue Aug 21 19:55:08 EEST 2007
Author: manishan
Date: 2007-08-21 19:55:07 +0300 (Tue, 21 Aug 2007)
New Revision: 257
Modified:
trunk/dogtail/dogtail/rocknrole.py
Log:
Modified screenshot taking method. Overide TestCase-run to check test case failure and take a screenshot then. yet to modify the syslog capture part
Modified: trunk/dogtail/dogtail/rocknrole.py
===================================================================
--- trunk/dogtail/dogtail/rocknrole.py 2007-08-21 13:58:30 UTC (rev 256)
+++ trunk/dogtail/dogtail/rocknrole.py 2007-08-21 16:55:07 UTC (rev 257)
@@ -543,10 +543,89 @@
from dogtail import tc
class testCaseR(unittest.TestCase):
+
+ def run(self, result=None):
+ #print " (((((((((((((((( In overider run"
+ if result is None: result = self.defaultTestResult()
+ result.startTest(self)
+ testMethod = getattr(self, self._TestCase__testMethodName)
+ try:
+ try:
+ self.setUp()
+ except KeyboardInterrupt:
+ raise
+ except:
+ result.addError(self, self._TestCase__exc_info())
+ return
+ ok = False
+ try:
+ testMethod()
+ ok = True
+ except self.failureException:
+
+ # Taking screenshot of the entire screen when a test case fails
+ print "Taking screenshot of the entire screen when a test case fails"
+ #os.environ['TAKEIMAGE']='TRUE'
+ #TODO: currently the env var is not being seen set at assertImage and is expecting exp png. FIXME
+ #self.assertImage(screenshot='fail')
+ defaultName='_'.join(self.id().split('.png')[0].split('.')[-2:])
+ ssfileName=config.scratchDir + '/' + defaultName.split('.png')[0]+'_fail.png'
+ createImage(ssfileName)
+ self.createLogDir()
+ self.writeSyslog()
+ result.addFailure(self, self._TestCase__exc_info())
+ except KeyboardInterrupt:
+ raise
+ except:
+ result.addError(self, self._TestCase__exc_info())
+
+ try:
+ self.tearDown()
+ except KeyboardInterrupt:
+ raise
+ except:
+ result.addError(self, self._TestCase__exc_info())
+ ok = False
+ if ok: result.addSuccess(self)
+ finally:
+ if os.environ.has_key('TAKEIMAGE') and os.environ['TAKEIMAGE'] == 'TRUE':
+ print " ENV VAR TAKEIMAGE SET TO TRUE"
+ result.stopTest(self)
+
+ def createLogDir(self):
+ self.logDir='/home/user/'+self.__class__.__name__
+ if not os.path.exists(self.logDir):
+ try:
+ os.mkdir(self.logDir,0777)
+ except os.error,msg:
+ print "Could not create directory for storing syslogs"
+
+
+ def writeSyslog(self):
+ sysLog='/var/ftd-log/syslog'
+ tcSysLog='/home/user/'+self._TestCase__testMethodName
+ #sysLog='/home/user/mytext.txt'
+ fp=open(sysLog,'r')
+ fp.seek(0,2) # seek to the last byte of the syslog file
+ tB=fp.tell()
+ if tB < 5000 : # TODO: hard coding 5000 bytes offset. Overide SetUp to seek from there till end
+ fp.seek(-tB,2)
+ else:
+ fp.seek(-5000,2)
+ logFile=self.logDir+'/'+self._TestCase__testMethodName+'.log'
+ fo=open(logFile,'w')
+ for line in fp.readlines():
+ print line
+ fo.write(line)
+ fp.close()
+ fo.close()
+
+
+
def shortDescription(self):
"""Overriding shortDescription to print all lines in docstring """
- return "\t#### Test " + self.__class__.__name__ + '_' + self._TestCase__testMethodName + '\n\t' + str(self._TestCase__testMethodDoc) + '\n\t#### End of self._TestCase__testMethodName test.\n'
+ return "\t#### Test " + self.__class__.__name__ + '_' + self._TestCase__testMethodName + '\n\t' + str(self._TestCase__testMethodDoc) + '\n\t#### End of '+ self._TestCase__testMethodName +' test.\n'
## TODO : Should override setUp and tearDown to do device-specific activity : syslog-snippets, checking-for-cores etc.
@@ -569,35 +648,10 @@
if not os.path.isdir(config.scratchDir) : raise LookupError
- expected=config.scratchDir + '/' + screenshot.split('.png')[0]+'_exp.png'
+ fileName=config.scratchDir + '/' + screenshot.split('.png')[0]+'_exp.png'
+ if node : createImage(fileName, self.node)
+ else : createImage(fileName)
- '''
- answer = []
- if not node :
- cmd = "import -window 'root' %s 2>&1" % expected
- else :
- cmd = "import -window root" +" -crop " + str(node.extents[2]) +"x"+str(node.extents[3])+"+"+str(node.extents[0])+"+"+str(node.extents[1]) +" "+ expected +" 2>&1"
- answer = os.popen(cmd).readlines()
-
- # If successful we should get nothing back. If not something went wrong
- # and our mouse is now probably unusable
- if answer:
- raise ValueError, "Screenshot failed: " + answer[-1]
-
- '''
- geometry = node.extents
- rootWindow = gtk.gdk.get_default_root_window()
- pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, geometry[2], geometry[3])
- gtk.gdk.Pixbuf.get_from_drawable(pixbuf, rootWindow, rootWindow.get_colormap(), geometry[0], geometry[1], 0, 0, geometry[2], geometry[3])
-
- try :
- pixbuf.save(expected, 'png')
- except gobject.GError :
- raise ValueError, "Failed to save screenshot in png format"
-
- self.assert_ (os.path.isfile(expected), "%s file does not exist" % expected)
- print "Took image " + expected
-
else:
def assertImage(self, node=None, screenshot=None):
@@ -617,40 +671,34 @@
actual=config.scratchDir + '/' + screenshot.split('.png')[0]+'.png'
expected=config.scratchDir + '/' + screenshot.split('.png')[0]+'_exp.png'
diff=config.scratchDir + '/' + screenshot.split('.png')[0]+'_diff.png'
-
- if not os.path.isfile(expected) :
- print expected, " does not exist"
- raise LookupError
-
- '''
- answer = []
- if not node :
- cmd = "import -window 'root' %s 2>&1" % actual
+ flag=False
+ if node :
+ if createImage(actual, self.node): flag=True
else :
- cmd = "import -window root" +" -crop " + str(node.extents[2]) +"x"+str(node.extents[3])+"+"+str(node.extents[0])+"+"+str(node.extents[1]) +" "+ actual +" 2>&1"
- answer = os.popen(cmd).readlines()
+ if createImage(actual): flag=True
+ if flag:
- # If successful we should get nothing back. If not something went wrong
- # and our mouse is now probably unusable
- if answer:
- raise ValueError, "Screenshot failed: " + answer[-1]
-
- '''
- geometry = node.extents
- rootWindow = gtk.gdk.get_default_root_window()
- pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, geometry[2], geometry[3])
- gtk.gdk.Pixbuf.get_from_drawable(pixbuf, rootWindow, rootWindow.get_colormap(), geometry[0], geometry[1], 0, 0, geometry[2], geometry[3])
-
- try:
- pixbuf.save(actual, 'png')
- except gobject.GError:
- raise ValueError, "Failed to save screenshot in png format"
+ # Image comparison using compare of IM through Dogtail
+ result = tc.TCImage().compare(screenshot, baseline=expected, undertest=actual, dfile=diff, metric='MAE', threshold=1)
+ self.assert_(result.has_key(screenshot) and result[screenshot].startswith('Passed'), 'Image is not the same as expected')
+ print "image is same as expected, exp = %s, actual = %s, diff = %s" % (expected, actual, diff)
- if not os.path.isfile(actual) :
- print actual, " does not exist"
- raise LookupError
+def createImage(fileName, node=None):
+ import gtk.gdk
+ rootWindow = gtk.gdk.get_default_root_window()
+ if not node :
+ geometry = rootWindow.get_geometry()
+ else :
+ geometry = node.extents
- # Image comparison using compare of IM through Dogtail
- result = tc.TCImage().compare(screenshot, baseline=expected, undertest=actual, dfile=diff, metric='MAE', threshold=1)
- self.assert_(result.has_key(screenshot) and result[screenshot].startswith('Passed'), 'Image is not the same as expected')
- print "image is same as expected, exp = %s, actual = %s, diff = %s" % (expected, actual, diff)
+ pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, geometry[2], geometry[3])
+ gtk.gdk.Pixbuf.get_from_drawable(pixbuf, rootWindow, rootWindow.get_colormap(), geometry[0], geometry[1], 0, 0, geometry[2], geometry[3])
+
+ try :
+ pixbuf.save(fileName, 'png')
+ except gobject.GError :
+ raise ValueError, "Failed to save screenshot in png format"
+
+ if not os.path.isfile(fileName) : raise LookupError
+ print "Took image " + fileName
+ return True
More information about the Hildon-test-aut-commits
mailing list