X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=spec%2Fedit_spec.py;h=ba6448dc7f587d0921faa9785c86d713b77e5688;hp=dec96efc775a3668799953010d411d1bb72ba6e9;hb=98caa66dc7bb7a304b7b9d4d95d8d0849cefec01;hpb=f42e0edd3094808c319a89594ae6f55843a0a3bf diff --git a/spec/edit_spec.py b/spec/edit_spec.py old mode 100644 new mode 100755 index dec96ef..ba6448d --- a/spec/edit_spec.py +++ b/spec/edit_spec.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python import wx import wx.lib.scrolledpanel as scrolled import os @@ -16,6 +17,8 @@ class Check: return "pixel at (%d,%d)" % (self.x,self.y) def right(self): return "" + def verifies(self, model): + return True class PixelColorCheck(Check): def __init__(self, x,y, color): @@ -23,6 +26,10 @@ class PixelColorCheck(Check): self.color = color def right(self): return "is of color 0x%06x" % self.color + def verifies(self, model): + p = model.getPixel(self.x,self.y) + val = p[0]<<16 | p[1]<<8 | p[2] + return val == self.color class TwoPixelCheck(Check): def __init__(self, x,y, x2,y2): @@ -55,6 +62,8 @@ class AreaNotPlain(AreaCheck): checktypes = [PixelColorCheck,PixelBrighterThan,PixelDarkerThan,PixelEqualTo,AreaPlain,AreaNotPlain] +global TESTMODE + def convert_to_ppm(pdf): print pdf f = os.popen("pdfinfo "+pdf, "rb") @@ -62,13 +71,21 @@ def convert_to_ppm(pdf): f.close() width,heigth = re.compile(r"Page size:\s*([0-9]+) x ([0-9]+) pts").findall(info)[0] dpi = int(72.0 * 612 / int(width)) - os.system("pdftoppm -r "+str(dpi)+" -f 1 -l 1 "+pdf+" test") + if TESTMODE: + os.system("pdf2swf -s zoom="+str(dpi)+" -p1 "+pdf+" -o test.swf") + os.system("swfrender --legacy test.swf -o test.png") + os.unlink("test.swf") + return "test.png" + else: + os.system("pdftoppm -r "+str(dpi)+" -f 1 -l 1 "+pdf+" test") return "test-000001.ppm" + class Model: - def __init__(self, filename, checks): - self.filename = filename - self.imgfilename = convert_to_ppm(filename) + def __init__(self, specfile, docfile, checks): + self.specfile = specfile + self.docfile = docfile + self.imgfilename = convert_to_ppm(self.docfile) self.bitmap = wx.Bitmap(self.imgfilename) self.image = wx.ImageFromBitmap(self.bitmap) self.width = self.bitmap.GetWidth() @@ -78,6 +95,13 @@ class Model: self.appendListeners = [] self.drawModeListeners = [] self.drawmode = PixelColorCheck + + def close(self): + try: os.unlink(self.imgfilename) + except: pass + + def getPixel(self,x,y): + return (self.image.GetRed(x,y), self.image.GetGreen(x,y), self.image.GetBlue(x,y)) def setdrawmode(self, mode): self.drawmode = mode @@ -102,7 +126,18 @@ class Model: @staticmethod def load(filename): - path = os.path.splitext(filename)[0]+".rb" + # convenience, allow to do "edit_spec.py file.pdf" + p,ext = os.path.splitext(filename) + if ext!=".rb": + path = p+".rb" + if not os.path.isfile(path): + path = p+".spec.rb" + if not os.path.isfile(path): + print "No file %s found, creating new..." % path + return Model(path, filename, []) + else: + path = filename + fi = open(path, "rb") r_file = re.compile(r"^convert_file \"([^\"]*)\"") r_pixelcolor = re.compile(r"^pixel_at\(([0-9]+),([0-9]+)\).should_be_of_color (0x[0-9a-fA-F]+)") @@ -127,7 +162,7 @@ class Model: if filename: raise Exception("can't load multi-file specs (in line %d)" % (nr+1)) filename = m.group(1); - model = Model(filename, []) + model = Model(path, filename, []) continue m = r_pixelcolor.match(line) if m: model.append(PixelColorCheck(int(m.group(1)),int(m.group(2)),int(m.group(3),16)));continue @@ -152,10 +187,10 @@ class Model: return model def save(self): - path = os.path.splitext(self.filename)[0]+".rb" + path = self.specfile fi = open(path, "wb") fi.write("require File.dirname(__FILE__) + '/spec_helper'\n\ndescribe \"pdf conversion\" do\n") - fi.write(" convert_file \"%s\" do\n" % self.filename) + fi.write(" convert_file \"%s\" do\n" % self.docfile) for check in self.checks: c = check.__class__ if c == PixelColorCheck: @@ -201,7 +236,7 @@ class ZoomWindow(wx.Window): for xx in range(15): x = self.x+xx-8 if 0<=x