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