On Fri, 2003-12-26 at 05:29, Peter Kullmann wrote: > J. Pietschmann wrote: > > > > John Austin wrote: > > > RedHat 9.0 (my system anyhow) includes a command 'pdftopbm' > > that will > > > convert a PDF to multiple PBM (protable Bit Map) files that might be > > > comparable. > > ... > > >It would certainly help detect pixel-sized changes. > > > That might help regression testing.
I wasn't thinking of using graphics as the primary means of comparing output. It was just a thought that one could use visualization in some circumstances: + pixels that were white in both images would be rendered as white + pixels that were black in both images would be rendered as black + black pixels in the first image that were white in the second could be rendered as red + white pixels in the first image that were black in the second could be rendered as blue I thought of the idea of overlaying images for comparison when I was scrolling through the side-by-side renderings of PDF's that Finn posted yesterday (what does 'yesterday' mean in a discussion that crosses the International Date Line ?) Of course, this color-based scheme breaks down for test cases that use color. > > > > We need regression tests badly. Some problems to ponder: > > a) Tests need to be automated for actually being useful. > > JUnit seems the way to go. Unfortuanately, it's still > > underutiliyed in FOP. > > b) We don't have much *unit* tests. There's only the > > UtilityCodeTestSuite.java. We need much more tests for > > basic functionality. The problem seems to be however > > that an elaborated test harness needs to be written in > > order to do unt tests for, e.g. layout managers. > > c) In order to test the whole engine at once, from FO input > > to generating PDF/whatever, well, a binary compare with > > a pregenerated PDF would be as sufficient as comparing > > bitmap images. Problems here: > > + The files to compare against are binary, and consume > > a lot of space. Well, take a look at GenericFOPTestCase.java > > which uses MD5 sums, one for the FO in order to detect > > accidental changes to the source, and one for the result. > > + Even small changes have potential to break the whole test > > suite, even if nothing important changed, let's say the > > order of entries in a PDF dictionary. Rendering bitmaps > > from PDF eliminates this, but then you wont find regressions > > in non-visible stuff. > > All in all, if there are 143 template PDFs and a change causes > > mismatches for all, what will you do? Examine everything, > > comparing pixels, check whether there are visible differences > > at all, and then judge whether the original or the newly > > generated PDF is at fault? I don't think this will be done > > often. Use tests for binary equality to detect differences. Visualization might be one tool, useful in following up on detected differences. I might want to use the technique to compare the effects of changes to a document. For example: What happens on page 7 when I change space-before="10pt" to space-before="15pt" ? A colorized visualization would give me a better idea than separate files. Remember that our brains are all quite different. Your rote visual memory ability is probably much better than mine. You might learn more from a side-by-side comparison than I would. Crap. Now I have to give an example. Perhaps it won't take that long. > > > > Ideas welcome! > > > > J.Pietschmann > > > > As an alternative approach for c) one could create tests along > the following lines: Suppose you want to test left margin > properties of a block. For this a simple fo file is rendered as > a bitmap. The bitmap will not be compared to a reference bitmap > but some elementary assertions are calculated. For instance one > such assertion could be: "The rectangle of width 1 inch of the > left edge is blank." I don't know of a tool that can do this > but it should be pretty straight forward to implement. Probably not that hard to do once you get inside an image file in a program. Especially if you know the colors will be black (0,0,0) and white (255,255,255) or a small number of selected colors. > So, in the test suit one has a piece of fo containing a test > document and some assertions in java or coded in xml that should > be fulfilled by the rendered image of the fo. > > Assertions could contain some of the following pieces: > - a specified rectangle is blank (or of some specific color) > - a specified rectangle has only colors x and y (to test background > and foreground colors of a block). > - a given line contains the color pattern white, yellow, > (white, black)*, green, white. IE. a regular expression on the colors > along a line. This could be used to test border colors along > a horizontal or vertical line through a bordered block. > - along a given line the size of the first and last black region > is at least xxx inches (to test border thickness) > > The advantage of this approach seems to me that it is relatively > easy to maintain. The test suite is small (no binaries). It can > easily be automated in junit. > > On the other hand, the approach is limited to relatively simple > test cases. For instance it will not be possible to test font > height, font style and text adjustments easily. > > Peter -- John Austin <[EMAIL PROTECTED]>