[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