1#!/usr/bin/env python 2 3# Copyright (C) 2001-2004 Artifex Software Inc. 4# All Rights Reserved. 5# 6# This software is provided AS-IS with no warranty, either express or 7# implied. 8# 9# This software is distributed under license and may not be copied, modified 10# or distributed except as expressly authorized under the terms of that 11# license. Refer to licensing information at http://www.artifex.com/ 12# or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, 13# San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information. 14 15# $Id: gscheck_raster.py 9206 2008-11-06 23:51:27Z marcos $ 16 17# 18# gscheck_raster.py 19# 20# rasterizes input files in several configurations and checks them 21# against known baselines 22# 23 24myself="gscheck_raster.py" 25import sys, os, stat 26import string, calendar, time 27import gstestutils 28import gssum, gsconf, gstestgs, gsparamsets, gsutil 29import shutil 30 31import time 32 33class GSCompareTestCase(gstestgs.GhostscriptTestCase): 34 35 def shortDescription(self): 36 file = "%s.%s.%d.%d" % (self.file[string.rindex(self.file, '/') + 1:], self.device, self.dpi, self.band) 37 rasterfilename = gsconf.rasterdbdir + file + ".gz" 38 39 if self.band: 40 banded = "banded" 41 else: 42 banded = "noband" 43 filename_base= os.path.basename(self.file) 44 filename_details= "%s (%s/%ddpi/%s)" % (filename_base, self.device, self.dpi,banded) 45 46 if not os.access(rasterfilename, os.F_OK): 47 message="ERROR \ncannot find "+rasterfilename+" for "+filename_details 48 print myself,message 49 self.skip = 1 50 else: 51 ct = time.localtime(os.stat(rasterfilename)[stat.ST_MTIME]) 52 baseline_date = "%s %d, %4d %02d:%02d" % ( calendar.month_abbr[ct[1]], ct[2], ct[0], ct[3], ct[4] ) 53 message="Checking %s against baseline set on %s" % (filename_details,baseline_date) 54 55 return message 56 57 def runTest(self): 58 if hasattr(self, "skip") and self.skip == 1: 59 self.assert_(True) 60 return 61 62 outputfile = "%s.%s.%d.%d" % (self.file[string.rindex(self.file, '/') + 1:], self.device, self.dpi, self.band) 63 64 gs = gstestgs.Ghostscript() 65 66 gs.gsroot = self.gsroot 67 gs.device = self.device 68 gs.dpi = self.dpi 69 gs.band = self.band 70 gs.infile = self.file 71 gs.outfile = outputfile 72 if self.log_stdout: 73 gs.log_stdout = self.log_stdout 74 if self.log_stderr: 75 gs.log_stderr = self.log_stderr 76 77 if gs.process(): 78 sum = gssum.make_sum(outputfile) 79 else: 80 sum = '' 81 82 if os.path.exists(outputfile): 83 shutil.move(outputfile, gsconf.datadir+"/raster.daily") 84# os.unlink(outputfile) 85 86 if sum and self.track_daily: # add test result to daily database 87 if gsconf.__dict__.has_key("checksumdb") and gsconf.checksumdb: 88 dbname=gsconf.dailydir+gsconf.checksumdb # mhw +".db" 89 else: 90 dbname=gsconf.get_dailydb_name() 91 gssum.add_file(outputfile, dbname=dbname, sum=sum) 92 93 if not sum: 94 message=myself+" output file "+outputfile+" was not created for input file: " + self.file 95 self.fail(message) 96 else: 97 if gssum.exists(outputfile,gsconf.baselinedb): 98 sum_baseline=gssum.get_sum(outputfile,gsconf.baselinedb) 99 message=myself+' checksum did not match baseline (' + outputfile + ') for input file: ' + self.file 100 self.assertEqual(sum,sum_baseline,message) 101 else: 102 message = myself+" no baseline checksum (" + outputfile + ") for file: " + self.file 103 self.fail(message) 104 105# add compare tests 106def add_compare_test(suite, gsroot, testfile, device, dpi, band, track, now=None): 107 108 logdir=gsconf.logdir 109 if now == None: 110 now=time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime()) 111 prefix=logdir+now+"." 112 113 log_stdout=prefix+gsconf.gs_stdout 114 log_stderr=prefix+gsconf.gs_stderr 115 116 suite.addTest(GSCompareTestCase(gsroot=gsroot, 117 file=gsconf.comparefiledir + testfile, 118 device=device,dpi=dpi,band=band, 119 log_stdout=log_stdout, 120 log_stderr=log_stderr, 121 track_daily=track,now=now) 122 ) 123 124def addTests(suite,gsroot,now,options=None, **args): 125 if args.has_key('track'): 126 track = args['track'] 127 else: 128 track = 0 129 130 # get a list of test files 131 comparefiles = os.listdir(gsconf.comparefiledir) 132 comparefiles.sort() 133 134 if sys.modules["gsconf"].__dict__.has_key("revision"): 135 print myself,gsconf.revision 136 137# for testfile in comparefiles: 138# print myself,testfile 139 140 for testfile in comparefiles: 141 if gsutil.check_extension(testfile): 142 for params in gsparamsets.testparamsets: 143 add_compare_test(suite, 144 gsroot,testfile, 145 params.device,params.resolution,params.banding, 146 track,now) 147 148if __name__ == '__main__': 149 gstestutils.gsRunTestsMain(addTests) 150