summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/Makefile.am169
-rw-r--r--test/Makefile.in628
-rw-r--r--test/Makefile.sources18
-rw-r--r--test/Makefile.win3213
-rw-r--r--test/README2
-rw-r--r--test/a1-bug.quartz.xfail.pngbin0 -> 3195 bytes
-rw-r--r--test/a1-image-sample.quartz.xfail.pngbin972 -> 0 bytes
-rw-r--r--test/a1-mask-sample.quartz.xfail.pngbin972 -> 0 bytes
-rw-r--r--test/a1-rasterisation-rectangles.quartz.xfail.pngbin0 -> 2583 bytes
-rw-r--r--test/a1-rasterisation-triangles.quartz.xfail.pngbin0 -> 2583 bytes
-rw-r--r--test/a8-clear.quartz.ref.pngbin0 -> 244 bytes
-rw-r--r--test/aliasing.quartz.ref.pngbin0 -> 108801 bytes
-rw-r--r--test/arc-infinite-loop.c61
-rw-r--r--test/arc-infinite-loop.ref.pngbin0 -> 96 bytes
-rw-r--r--test/arc-looping-dash.c77
-rw-r--r--test/arc-looping-dash.image16.ref.pngbin0 -> 450 bytes
-rw-r--r--test/arc-looping-dash.ps.ref.pngbin0 -> 377 bytes
-rw-r--r--test/arc-looping-dash.quartz.ref.pngbin0 -> 470 bytes
-rw-r--r--test/arc-looping-dash.ref.pngbin0 -> 464 bytes
-rw-r--r--test/cairo-test-constructors.c36
-rw-r--r--test/cairo-test-runner.c13
-rw-r--r--test/clip-fill-eo-unbounded.quartz.argb32.ref.pngbin3366 -> 3382 bytes
-rw-r--r--test/clip-fill-eo-unbounded.quartz.rgb24.ref.pngbin3061 -> 2941 bytes
-rw-r--r--test/clip-fill-nz-unbounded.quartz.argb32.ref.pngbin3366 -> 3382 bytes
-rw-r--r--test/clip-fill-nz-unbounded.quartz.rgb24.ref.pngbin3061 -> 2941 bytes
-rw-r--r--test/clip-operator.pdf.argb32.ref.pngbin9437 -> 8792 bytes
-rw-r--r--test/clip-operator.pdf.rgb24.ref.pngbin5391 -> 4683 bytes
-rw-r--r--test/clip-operator.quartz.argb32.ref.pngbin9586 -> 9672 bytes
-rw-r--r--test/clip-operator.quartz.rgb24.ref.pngbin4104 -> 4343 bytes
-rw-r--r--test/clip-stroke-unbounded.quartz.argb32.ref.pngbin3362 -> 3290 bytes
-rw-r--r--test/clip-stroke-unbounded.quartz.rgb24.ref.pngbin3061 -> 2840 bytes
-rw-r--r--test/extended-blend-alpha.quartz.argb32.ref.pngbin0 -> 9729 bytes
-rw-r--r--test/extended-blend-alpha.quartz.rgb24.ref.pngbin0 -> 5598 bytes
-rw-r--r--test/extended-blend.quartz.argb32.ref.pngbin0 -> 4284 bytes
-rw-r--r--test/extended-blend.quartz.rgb24.ref.pngbin0 -> 3965 bytes
-rw-r--r--test/fallback-resolution.c30
-rw-r--r--test/fallback-resolution.ppi144x144.ps.ref.pngbin0 -> 5911 bytes
-rw-r--r--test/fallback-resolution.ppi144x144.ref.pngbin0 -> 8697 bytes
-rw-r--r--test/fallback-resolution.ppi144x72.ps.ref.pngbin0 -> 7206 bytes
-rw-r--r--test/fallback-resolution.ppi144x72.ref.pngbin0 -> 8445 bytes
-rw-r--r--test/fallback-resolution.ppi150x150.ref.pngbin8058 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi150x72.ref.pngbin8303 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi288x288.pdf.ref.pngbin0 -> 8681 bytes
-rw-r--r--test/fallback-resolution.ppi288x288.ps.ref.pngbin0 -> 4450 bytes
-rw-r--r--test/fallback-resolution.ppi288x288.svg.ref.pngbin0 -> 5771 bytes
-rw-r--r--test/fallback-resolution.ppi288x72.ps.ref.pngbin0 -> 6444 bytes
-rw-r--r--test/fallback-resolution.ppi288x72.ref.pngbin0 -> 7166 bytes
-rw-r--r--test/fallback-resolution.ppi300x300.ref.pngbin5639 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi300x72.ref.pngbin7014 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi37.5x37.5.ref.pngbin14092 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi37.5x72.ref.pngbin12906 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi576x576.pdf.ref.pngbin0 -> 8732 bytes
-rw-r--r--test/fallback-resolution.ppi576x576.ps.ref.pngbin0 -> 3448 bytes
-rw-r--r--test/fallback-resolution.ppi576x576.svg.ref.pngbin0 -> 4317 bytes
-rw-r--r--test/fallback-resolution.ppi576x72.ps.ref.pngbin0 -> 5992 bytes
-rw-r--r--test/fallback-resolution.ppi576x72.ref.pngbin0 -> 6432 bytes
-rw-r--r--test/fallback-resolution.ppi600x600.ref.pngbin4090 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi600x72.ref.pngbin6326 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi72x144.ps.ref.pngbin0 -> 7270 bytes
-rw-r--r--test/fallback-resolution.ppi72x144.ref.pngbin0 -> 8677 bytes
-rw-r--r--test/fallback-resolution.ppi72x150.ref.pngbin8061 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi72x288.ps.ref.pngbin0 -> 6616 bytes
-rw-r--r--test/fallback-resolution.ppi72x288.ref.pngbin0 -> 7231 bytes
-rw-r--r--test/fallback-resolution.ppi72x300.ref.pngbin6911 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi72x37.5.ref.pngbin13167 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi72x576.ps.ref.pngbin0 -> 6349 bytes
-rw-r--r--test/fallback-resolution.ppi72x576.ref.pngbin0 -> 6523 bytes
-rw-r--r--test/fallback-resolution.ppi72x600.ref.pngbin6214 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi72x72.ref.pngbin8416 -> 8510 bytes
-rw-r--r--test/fallback-resolution.ppi72x75.ref.pngbin10620 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi75x72.ref.pngbin10119 -> 0 bytes
-rw-r--r--test/fallback-resolution.ppi75x75.ref.pngbin12127 -> 0 bytes
-rw-r--r--test/filter-nearest-offset.quartz.xfail.pngbin2130 -> 0 bytes
-rw-r--r--test/filter-nearest-transformed.quartz.xfail.pngbin534 -> 349 bytes
-rw-r--r--test/ft-show-glyphs-positioning.pdf.ref.pngbin3133 -> 3117 bytes
-rw-r--r--test/get-path-extents.c3
-rw-r--r--test/group-state.c96
-rw-r--r--test/huge-linear.c2
-rw-r--r--test/huge-linear.image16.ref.pngbin1542 -> 1542 bytes
-rw-r--r--test/huge-linear.pdf.ref.pngbin1577 -> 1586 bytes
-rw-r--r--test/huge-linear.quartz.ref.pngbin0 -> 15230 bytes
-rw-r--r--test/huge-radial.c2
-rw-r--r--test/index.html42
-rw-r--r--test/large-source-roi.c4
-rw-r--r--test/linear-gradient-large.quartz.ref.pngbin0 -> 4074 bytes
-rw-r--r--test/linear-gradient-large.ref.pngbin4079 -> 4076 bytes
-rw-r--r--test/linear-gradient-subset.quartz.ref.pngbin887 -> 852 bytes
-rw-r--r--test/linear-gradient.quartz.ref.pngbin1060 -> 951 bytes
-rwxr-xr-xtest/make-html.pl303
-rw-r--r--test/mask.quartz.argb32.ref.pngbin10575 -> 10669 bytes
-rw-r--r--test/mesh-pattern-accuracy.c99
-rw-r--r--test/mesh-pattern-accuracy.image16.ref.pngbin0 -> 7209 bytes
-rw-r--r--test/mesh-pattern-accuracy.ref.pngbin0 -> 8086 bytes
-rw-r--r--test/mesh-pattern-conical.c135
-rw-r--r--test/mesh-pattern-conical.image16.ref.pngbin0 -> 6141 bytes
-rw-r--r--test/mesh-pattern-conical.ref.pngbin0 -> 8655 bytes
-rw-r--r--test/mesh-pattern-control-points.c114
-rw-r--r--test/mesh-pattern-control-points.image16.ref.pngbin0 -> 7178 bytes
-rw-r--r--test/mesh-pattern-control-points.ref.pngbin0 -> 10665 bytes
-rw-r--r--test/mesh-pattern-fold.c82
-rw-r--r--test/mesh-pattern-fold.image16.ref.pngbin0 -> 22913 bytes
-rw-r--r--test/mesh-pattern-fold.ref.pngbin0 -> 52980 bytes
-rw-r--r--test/mesh-pattern-overlap.c76
-rw-r--r--test/mesh-pattern-overlap.image16.ref.pngbin0 -> 5933 bytes
-rw-r--r--test/mesh-pattern-overlap.ref.pngbin0 -> 9129 bytes
-rw-r--r--test/mesh-pattern-transformed.c107
-rw-r--r--test/mesh-pattern-transformed.image16.ref.pngbin0 -> 9778 bytes
-rw-r--r--test/mesh-pattern-transformed.ref.pngbin0 -> 14463 bytes
-rw-r--r--test/mesh-pattern.c94
-rw-r--r--test/mesh-pattern.image16.ref.pngbin0 -> 12199 bytes
-rw-r--r--test/mesh-pattern.ref.pngbin0 -> 19566 bytes
-rw-r--r--test/operator-alpha-alpha.c4
-rw-r--r--test/operator-source.quartz.argb32.ref.pngbin4754 -> 4936 bytes
-rw-r--r--test/operator-source.quartz.rgb24.ref.pngbin3535 -> 3771 bytes
-rw-r--r--test/overlapping-glyphs.quartz.argb32.ref.pngbin0 -> 2824 bytes
-rw-r--r--test/overlapping-glyphs.quartz.rgb24.ref.pngbin0 -> 1711 bytes
-rw-r--r--test/partial-clip-text.quartz.ref.pngbin0 -> 174 bytes
-rw-r--r--test/pattern-get-type.c7
-rw-r--r--test/pattern-getters.c82
-rw-r--r--test/ps-eps.c338
-rw-r--r--test/ps-eps.ref.pngbin0 -> 4584 bytes
-rw-r--r--test/pthread-same-source.quartz.xfail.pngbin957 -> 961 bytes
-rw-r--r--test/pthread-show-text.quartz.ref.pngbin42996 -> 43005 bytes
-rw-r--r--test/push-group-color.ps2.ref.pngbin0 -> 2863 bytes
-rw-r--r--test/radial-gradient-extend.ps3.ref.pngbin0 -> 458 bytes
-rw-r--r--test/radial-gradient-mask-source.argb32.ref.pngbin116311 -> 145713 bytes
-rw-r--r--test/radial-gradient-mask-source.c111
-rw-r--r--test/radial-gradient-mask-source.image16.ref.pngbin82800 -> 109925 bytes
-rw-r--r--test/radial-gradient-mask-source.quartz.argb32.ref.pngbin0 -> 171002 bytes
-rw-r--r--test/radial-gradient-mask-source.quartz.rgb24.ref.pngbin0 -> 179120 bytes
-rw-r--r--test/radial-gradient-mask-source.rgb24.ref.pngbin129093 -> 150945 bytes
-rw-r--r--test/radial-gradient-mask-source.xlib.argb32.ref.pngbin0 -> 145801 bytes
-rw-r--r--test/radial-gradient-mask-source.xlib.rgb24.ref.pngbin0 -> 150362 bytes
-rw-r--r--test/radial-gradient-mask.argb32.ref.pngbin116311 -> 0 bytes
-rw-r--r--test/radial-gradient-mask.c110
-rw-r--r--test/radial-gradient-mask.image16.ref.pngbin82800 -> 204585 bytes
-rw-r--r--test/radial-gradient-mask.quartz.ref.pngbin0 -> 296910 bytes
-rw-r--r--test/radial-gradient-mask.ref.pngbin0 -> 286065 bytes
-rw-r--r--test/radial-gradient-mask.rgb24.ref.pngbin129093 -> 0 bytes
-rw-r--r--test/radial-gradient-one-stop.argb32.ref.pngbin1392 -> 0 bytes
-rw-r--r--test/radial-gradient-one-stop.c107
-rw-r--r--test/radial-gradient-one-stop.quartz.ref.pngbin0 -> 6316 bytes
-rw-r--r--test/radial-gradient-one-stop.ref.pngbin0 -> 6306 bytes
-rw-r--r--test/radial-gradient-one-stop.rgb24.ref.pngbin1153 -> 0 bytes
-rw-r--r--test/radial-gradient-source.argb32.ref.pngbin272428 -> 408848 bytes
-rw-r--r--test/radial-gradient-source.c115
-rw-r--r--test/radial-gradient-source.image16.ref.pngbin132037 -> 169796 bytes
-rw-r--r--test/radial-gradient-source.pdf.argb32.ref.pngbin235290 -> 0 bytes
-rw-r--r--test/radial-gradient-source.quartz.argb32.ref.pngbin0 -> 439222 bytes
-rw-r--r--test/radial-gradient-source.quartz.rgb24.ref.pngbin0 -> 279249 bytes
-rw-r--r--test/radial-gradient-source.rgb24.ref.pngbin193364 -> 263908 bytes
-rw-r--r--test/radial-gradient.c248
-rw-r--r--test/radial-gradient.image16.ref.pngbin202415 -> 256686 bytes
-rw-r--r--test/radial-gradient.pdf.ref.pngbin280944 -> 0 bytes
-rw-r--r--test/radial-gradient.quartz.ref.pngbin0 -> 389140 bytes
-rw-r--r--test/radial-gradient.ref.pngbin280971 -> 382283 bytes
-rw-r--r--test/radial-gradient.svg.xfail.pngbin264425 -> 0 bytes
-rw-r--r--test/rotate-image-surface-paint.quartz.ref.pngbin356 -> 223 bytes
-rw-r--r--test/scale-offset-image.quartz.ref.pngbin9054 -> 8977 bytes
-rw-r--r--test/scale-offset-similar.quartz.ref.pngbin9054 -> 8977 bytes
-rw-r--r--test/smask-mask.quartz.ref.pngbin3357 -> 3191 bytes
-rw-r--r--test/smask-paint.quartz.ref.pngbin3499 -> 3311 bytes
-rw-r--r--test/smask.quartz.ref.pngbin4067 -> 4031 bytes
-rw-r--r--test/surface-pattern-operator.quartz.argb32.ref.pngbin0 -> 5721 bytes
-rw-r--r--test/surface-pattern-operator.quartz.argb32.xfail.pngbin5917 -> 0 bytes
-rw-r--r--test/surface-pattern-operator.quartz.rgb24.ref.pngbin0 -> 2429 bytes
-rw-r--r--test/surface-pattern-operator.quartz.rgb24.xfail.pngbin2546 -> 0 bytes
-rw-r--r--test/testtable.js426
-rw-r--r--test/trap-clip.quartz.argb32.ref.pngbin6060 -> 6115 bytes
-rw-r--r--test/trap-clip.quartz.rgb24.ref.pngbin5694 -> 5801 bytes
-rw-r--r--test/unbounded-operator.quartz.argb32.ref.pngbin0 -> 3509 bytes
-rw-r--r--test/unbounded-operator.quartz.rgb24.ref.pngbin0 -> 1657 bytes
-rw-r--r--test/white-in-noop.c52
-rw-r--r--test/white-in-noop.ref.pngbin0 -> 95 bytes
-rw-r--r--test/xcb-stress-cache.c118
-rw-r--r--test/xcb-stress-cache.ref.pngbin0 -> 97 bytes
-rw-r--r--test/xcomposite-projection.quartz.ref.pngbin639 -> 926 bytes
177 files changed, 2766 insertions, 1158 deletions
diff --git a/test/Makefile.am b/test/Makefile.am
index 9b673d2..1648dd8 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -127,21 +127,24 @@ CLEANFILES += $(BUILT_SOURCES)
REFERENCE_IMAGES = \
a1-bug.ref.png \
a1-bug.image16.ref.png \
+ a1-bug.quartz.xfail.png \
a1-bug.xlib.ref.png \
a1-image-sample.ref.png \
a1-image-sample.gl.xfail.png \
- a1-image-sample.quartz.xfail.png \
a1-mask.ref.png \
a1-mask-sample.ref.png \
- a1-mask-sample.quartz.xfail.png \
a1-rasterisation-rectangles.ref.png \
+ a1-rasterisation-rectangles.quartz.xfail.png \
a1-rasterisation-triangles.ref.png \
+ a1-rasterisation-triangles.quartz.xfail.png \
a1-traps-sample.ref.png \
a1-traps-sample.quartz.xfail.png \
a8-clear.ref.png \
+ a8-clear.quartz.ref.png \
a8-mask.ref.png \
aliasing.ref.png \
aliasing.image16.ref.png \
+ aliasing.quartz.ref.png \
aliasing.xlib.ref.png \
alpha-similar.gl.argb32.xfail.png \
alpha-similar.gl.rgb24.xfail.png \
@@ -154,6 +157,11 @@ REFERENCE_IMAGES = \
alpha-similar.svg.argb32.xfail.png \
alpha-similar.svg.rgb24.xfail.png \
api-special-cases.ref.png \
+ arc-infinite-loop.ref.png \
+ arc-looping-dash.image16.ref.png \
+ arc-looping-dash.ps.ref.png \
+ arc-looping-dash.quartz.ref.png \
+ arc-looping-dash.ref.png \
big-line.ref.png \
big-line.image16.ref.png \
big-line.ps.ref.png \
@@ -478,11 +486,15 @@ REFERENCE_IMAGES = \
extended-blend.image16.ref.png \
extended-blend.argb32.ref.png \
extended-blend.rgb24.ref.png \
+ extended-blend.quartz.argb32.ref.png \
+ extended-blend.quartz.rgb24.ref.png \
extended-blend.svg12.argb32.xfail.png \
extended-blend.svg12.rgb24.xfail.png \
extended-blend-alpha.image16.ref.png \
extended-blend-alpha.argb32.ref.png \
extended-blend-alpha.rgb24.ref.png \
+ extended-blend-alpha.quartz.argb32.ref.png \
+ extended-blend-alpha.quartz.rgb24.ref.png \
extended-blend-alpha.svg12.argb32.xfail.png \
extended-blend-alpha.svg12.rgb24.xfail.png \
extend-pad-border.image16.ref.png \
@@ -513,22 +525,27 @@ REFERENCE_IMAGES = \
extend-repeat.ps2.ref.png \
extend-repeat.ps3.ref.png \
extend-repeat.ref.png \
- fallback-resolution.ppi150x150.ref.png \
- fallback-resolution.ppi150x72.ref.png \
- fallback-resolution.ppi300x300.ref.png \
- fallback-resolution.ppi300x72.ref.png \
- fallback-resolution.ppi37.5x37.5.ref.png \
- fallback-resolution.ppi37.5x72.ref.png \
- fallback-resolution.ppi600x600.ref.png \
- fallback-resolution.ppi600x72.ref.png \
- fallback-resolution.ppi72x150.ref.png \
- fallback-resolution.ppi72x300.ref.png \
- fallback-resolution.ppi72x37.5.ref.png \
- fallback-resolution.ppi72x600.ref.png \
+ fallback-resolution.ppi144x144.ps.ref.png \
+ fallback-resolution.ppi144x144.ref.png \
+ fallback-resolution.ppi144x72.ps.ref.png \
+ fallback-resolution.ppi144x72.ref.png \
+ fallback-resolution.ppi288x288.pdf.ref.png \
+ fallback-resolution.ppi288x288.ps.ref.png \
+ fallback-resolution.ppi288x288.svg.ref.png \
+ fallback-resolution.ppi288x72.ps.ref.png \
+ fallback-resolution.ppi288x72.ref.png \
+ fallback-resolution.ppi576x576.pdf.ref.png \
+ fallback-resolution.ppi576x576.ps.ref.png \
+ fallback-resolution.ppi576x576.svg.ref.png \
+ fallback-resolution.ppi576x72.ps.ref.png \
+ fallback-resolution.ppi576x72.ref.png \
+ fallback-resolution.ppi72x144.ps.ref.png \
+ fallback-resolution.ppi72x144.ref.png \
+ fallback-resolution.ppi72x288.ps.ref.png \
+ fallback-resolution.ppi72x288.ref.png \
+ fallback-resolution.ppi72x576.ps.ref.png \
+ fallback-resolution.ppi72x576.ref.png \
fallback-resolution.ppi72x72.ref.png \
- fallback-resolution.ppi72x75.ref.png \
- fallback-resolution.ppi75x72.ref.png \
- fallback-resolution.ppi75x75.ref.png \
fill-alpha-pattern.image16.ref.png \
fill-alpha-pattern.ps3.argb32.ref.png \
fill-alpha-pattern.ps3.ref.png \
@@ -600,7 +617,6 @@ REFERENCE_IMAGES = \
filter-nearest-offset.pdf.xfail.png \
filter-nearest-offset.ps2.ref.png \
filter-nearest-offset.ps3.ref.png \
- filter-nearest-offset.quartz.xfail.png \
filter-nearest-offset.ref.png \
filter-nearest-offset.svg.xfail.png \
filter-nearest-transformed.image16.ref.png \
@@ -712,6 +728,7 @@ REFERENCE_IMAGES = \
huge-linear.image16.ref.png \
huge-linear.pdf.ref.png \
huge-linear.ps3.ref.png \
+ huge-linear.quartz.ref.png \
huge-linear.ref.png \
huge-radial.image16.ref.png \
huge-radial.pdf.argb32.ref.png \
@@ -785,6 +802,7 @@ REFERENCE_IMAGES = \
linear-gradient.quartz.ref.png \
linear-gradient.ref.png \
linear-gradient.xlib.ref.png \
+ linear-gradient-large.quartz.ref.png \
linear-gradient-large.ref.png \
linear-gradient-one-stop.argb32.ref.png \
linear-gradient-one-stop.rgb24.ref.png \
@@ -837,20 +855,20 @@ REFERENCE_IMAGES = \
mask.svg.rgb24.xfail.png \
mask.xlib.ref.png \
mask.xlib.rgb24.ref.png \
- recording-surface-pattern.image16.ref.png \
- recording-surface-pattern.gl.argb32.ref.png \
- recording-surface-pattern.pdf.argb32.ref.png \
- recording-surface-pattern.pdf.rgb24.ref.png \
- recording-surface-pattern.ps.argb32.ref.png \
- recording-surface-pattern.ps.rgb24.ref.png \
- recording-surface-pattern.quartz.argb32.ref.png \
- recording-surface-pattern.quartz.rgb24.ref.png \
- recording-surface-pattern.ref.png \
- recording-surface-pattern.rgb24.ref.png \
- recording-surface-pattern.svg.argb32.ref.png \
- recording-surface-pattern.svg.rgb24.ref.png \
- recording-surface-pattern.xlib.argb32.ref.png \
- recording-surface-pattern.xlib.rgb24.ref.png \
+ mesh-pattern.image16.ref.png \
+ mesh-pattern.ref.png \
+ mesh-pattern-accuracy.image16.ref.png \
+ mesh-pattern-accuracy.ref.png \
+ mesh-pattern-conical.image16.ref.png \
+ mesh-pattern-conical.ref.png \
+ mesh-pattern-control-points.image16.ref.png \
+ mesh-pattern-control-points.ref.png \
+ mesh-pattern-fold.image16.ref.png \
+ mesh-pattern-fold.ref.png \
+ mesh-pattern-overlap.image16.ref.png \
+ mesh-pattern-overlap.ref.png \
+ mesh-pattern-transformed.image16.ref.png \
+ mesh-pattern-transformed.ref.png \
mime-data.pdf.ref.png \
mime-data.ps.ref.png \
mime-data.ref.png \
@@ -948,6 +966,8 @@ REFERENCE_IMAGES = \
overlapping-glyphs.rgb24.ref.png \
overlapping-glyphs.pdf.argb32.xfail.png \
overlapping-glyphs.pdf.rgb24.xfail.png \
+ overlapping-glyphs.quartz.argb32.ref.png \
+ overlapping-glyphs.quartz.rgb24.ref.png \
overlapping-glyphs.svg.rgb24.ref.png \
overlapping-glyphs.svg.argb32.ref.png \
paint-repeat.ref.png \
@@ -960,6 +980,7 @@ REFERENCE_IMAGES = \
paint.ref.png \
partial-clip-text.ref.png \
partial-clip-text.ps.ref.png \
+ partial-clip-text.quartz.ref.png \
partial-clip-text.svg.ref.png \
partial-coverage-half-reference.ref.png \
partial-coverage-half-triangles.ref.png \
@@ -994,6 +1015,7 @@ REFERENCE_IMAGES = \
pixman-rotate.ref.png \
pixman-rotate.rgb24.ref.png \
pixman-rotate.ps.argb32.ref.png \
+ ps-eps.ref.png \
pthread-same-source.image16.ref.png \
pthread-same-source.quartz.xfail.png \
pthread-same-source.ref.png \
@@ -1020,6 +1042,7 @@ REFERENCE_IMAGES = \
push-group-color.image16.ref.png \
push-group-color.quartz.ref.png \
push-group-color.ref.png \
+ push-group-color.ps2.ref.png \
push-group-color.ps3.ref.png \
push-group-color.xlib.ref.png \
quartz-surface-source.rgb24.ref.png \
@@ -1027,22 +1050,27 @@ REFERENCE_IMAGES = \
quartz-surface-source.ps2.ref.png \
quartz-surface-source.ps3.ref.png \
radial-gradient.image16.ref.png \
- radial-gradient.pdf.ref.png \
radial-gradient.ref.png \
- radial-gradient.svg.xfail.png \
+ radial-gradient.quartz.ref.png \
+ radial-gradient-extend.ps3.ref.png \
radial-gradient-extend.ref.png \
radial-gradient-source.image16.ref.png \
radial-gradient-source.argb32.ref.png \
radial-gradient-source.rgb24.ref.png \
- radial-gradient-source.pdf.argb32.ref.png \
- radial-gradient-mask.argb32.ref.png \
- radial-gradient-mask.rgb24.ref.png \
+ radial-gradient-source.quartz.argb32.ref.png \
+ radial-gradient-source.quartz.rgb24.ref.png \
+ radial-gradient-mask.ref.png \
radial-gradient-mask.image16.ref.png \
+ radial-gradient-mask.quartz.ref.png \
radial-gradient-mask-source.argb32.ref.png \
radial-gradient-mask-source.rgb24.ref.png \
radial-gradient-mask-source.image16.ref.png \
- radial-gradient-one-stop.argb32.ref.png \
- radial-gradient-one-stop.rgb24.ref.png \
+ radial-gradient-mask-source.quartz.argb32.ref.png \
+ radial-gradient-mask-source.quartz.rgb24.ref.png \
+ radial-gradient-mask-source.xlib.argb32.ref.png \
+ radial-gradient-mask-source.xlib.rgb24.ref.png \
+ radial-gradient-one-stop.ref.png \
+ radial-gradient-one-stop.quartz.ref.png \
random-intersections-eo.image16.ref.png \
random-intersections-eo.ps.ref.png \
random-intersections-eo.quartz.ref.png \
@@ -1067,6 +1095,20 @@ REFERENCE_IMAGES = \
random-intersections-curves-nz.ref.png \
random-intersections-curves-nz.xlib.ref.png \
random-intersections-curves-nz.xlib-fallback.ref.png \
+ recording-surface-pattern.image16.ref.png \
+ recording-surface-pattern.gl.argb32.ref.png \
+ recording-surface-pattern.pdf.argb32.ref.png \
+ recording-surface-pattern.pdf.rgb24.ref.png \
+ recording-surface-pattern.ps.argb32.ref.png \
+ recording-surface-pattern.ps.rgb24.ref.png \
+ recording-surface-pattern.quartz.argb32.ref.png \
+ recording-surface-pattern.quartz.rgb24.ref.png \
+ recording-surface-pattern.ref.png \
+ recording-surface-pattern.rgb24.ref.png \
+ recording-surface-pattern.svg.argb32.ref.png \
+ recording-surface-pattern.svg.rgb24.ref.png \
+ recording-surface-pattern.xlib.argb32.ref.png \
+ recording-surface-pattern.xlib.rgb24.ref.png \
rectangle-rounding-error.ref.png \
rectilinear-dash.quartz.xfail.png \
rectilinear-dash.ref.png \
@@ -1255,8 +1297,8 @@ REFERENCE_IMAGES = \
surface-pattern-operator.xlib.rgb24.ref.png \
surface-pattern-operator.pdf.argb32.xfail.png \
surface-pattern-operator.pdf.rgb24.xfail.png \
- surface-pattern-operator.quartz.argb32.xfail.png \
- surface-pattern-operator.quartz.rgb24.xfail.png \
+ surface-pattern-operator.quartz.argb32.ref.png \
+ surface-pattern-operator.quartz.rgb24.ref.png \
surface-pattern-scale-down.image16.ref.png \
surface-pattern-scale-down.pdf.ref.png \
surface-pattern-scale-down.ps2.ref.png \
@@ -1367,6 +1409,8 @@ REFERENCE_IMAGES = \
unbounded-operator.pdf.argb32.ref.png \
unbounded-operator.ps2.argb32.ref.png \
unbounded-operator.ps3.argb32.ref.png \
+ unbounded-operator.quartz.argb32.ref.png \
+ unbounded-operator.quartz.rgb24.ref.png \
unbounded-operator.ref.png \
unbounded-operator.rgb24.ref.png \
unbounded-operator.svg12.argb32.ref.png \
@@ -1399,6 +1443,7 @@ REFERENCE_IMAGES = \
user-font.ref.png \
user-font.svg.ref.png \
user-font.xlib.ref.png \
+ xcb-stress-cache.ref.png \
xcb-surface-source.rgb24.ref.png \
xcb-surface-source.argb32.ref.png \
xcomposite-projection.ref.png \
@@ -1414,20 +1459,22 @@ REFERENCE_IMAGES = \
xlib-surface-source.ps3.ref.png \
xlib-surface-source.svg12.argb32.xfail.png \
xlib-surface-source.svg12.rgb24.xfail.png \
+ white-in-noop.ref.png \
zero-mask.ref.png \
zero-mask.rgb24.ref.png \
zero-alpha.ref.png
EXTRA_DIST += \
6x13.pcf \
-make-html.pl \
+index.html \
+jp2.jp2 \
jpeg.jpg \
png.png \
-jp2.jp2 \
romedalen.jpg \
romedalen.png \
scarab.jpg \
surface-source.c \
+testtable.js \
$(REFERENCE_IMAGES)
# Any test for which the code committed to CVS is expected to fail
@@ -1662,7 +1709,6 @@ VALGRIND_FLAGS = \
CLEANFILES += \
valgrind-log \
- index.html \
ref.hash \
png-test.png \
png.out.png \
@@ -1674,7 +1720,6 @@ CLEANFILES += \
ps-surface-source.out.ps \
pdf-features.pdf \
pdf-mime-data.out* \
- ps-eps.eps \
ps-features.ps \
svg-clip.svg \
svg-surface.svg \
@@ -1705,24 +1750,16 @@ recheck:
@echo Re-checking failed tests
@$(MAKE) $(AM_MAKEFLAGS) $(recheck)
-# Checks tests and creates index.html.
+# Checks tests.
# Target doesn't fail if tests fail.
test:
- @$(MAKE) $(AM_MAKEFLAGS) check; \
- $(MAKE) $(AM_MAKEFLAGS) html
+ @$(MAKE) $(AM_MAKEFLAGS) check
-# Re-checks tests and creates index.html.
+# Re-checks tests.
# Target doesn't fail if tests fail.
retest:
@CAIRO_TESTS="$(FAILED_TESTS)"; \
- $(MAKE) $(AM_MAKEFLAGS) check; \
- $(MAKE) $(AM_MAKEFLAGS) html
-
-html-local: index.html
-
-# Make index.html with no dependency tracking, containing only the failed tests.
-rehtml:
- @CAIRO_TESTS="$(FAILED_TESTS)" $(MAKE) $(AM_MAKEFLAGS) html
+ $(MAKE) $(AM_MAKEFLAGS) check
# Run tests under a tool specified by TOOL. For example, make run TOOL=gdb
run:
@@ -1740,11 +1777,6 @@ NOLOG_TESTS_LOG = $(NOLOG_TESTS:=.log)
$(NOLOG_TESTS_LOG):
@echo dummy > $@
-index.html: $(srcdir)/make-html.pl
- @echo Creating index.html
- @perl $(srcdir)/make-html.pl > $@
-
-
# Identify identical reference images
check-ref-dups:
@LANG=C; \
@@ -1795,6 +1827,17 @@ check-ref-missing:
release-verify-sane-tests: check-ref-missing
-.PHONY: check-valgrind test recheck retest rehtml check-ref-dups check-ref-missing release-verify-sane-tests
+results.tar:
+ @tar cf $@ index.html testtable.js *.log; \
+ for i in output/*.fail.png ; do \
+ testname=$${i#output/} ; \
+ testname=$${testname%%.*} ; \
+ tar uf $@ $${testname}*.ref.png $${i%fail.png}out.png $${i%fail.png}diff.png ; \
+ done
+
+results.tar.gz: results.tar
+ gzip -c $< > $@
+
+.PHONY: check-valgrind test recheck retest check-ref-dups check-ref-missing release-verify-sane-tests
EXTRA_DIST += Makefile.win32
diff --git a/test/Makefile.in b/test/Makefile.in
index 5bcb7b6..c9bfced 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -127,19 +127,19 @@ am__cairo_test_suite_SOURCES_DIST = buffer-diff.c cairo-test.c \
cairo-test-private.h a1-bug.c a1-image-sample.c a1-mask.c \
a1-mask-sample.c a1-traps-sample.c a1-rasterisation.c \
a8-clear.c a8-mask.c aliasing.c alpha-similar.c \
- api-special-cases.c big-line.c big-trap.c bilevel-image.c \
- bug-bo-rectangular.c bug-extents.c bug-seams.c caps.c \
- caps-joins.c caps-joins-alpha.c caps-joins-curve.c \
- caps-sub-paths.c clear.c clear-source.c clip-all.c \
- clip-contexts.c clip-disjoint.c clip-device-offset.c \
- clip-draw-unbounded.c clip-empty.c clip-empty-group.c \
- clip-empty-save.c clip-fill.c clip-fill-no-op.c \
- clip-fill-rule.c clip-fill-rule-pixel-aligned.c \
- clip-group-shapes.c clip-image.c clip-nesting.c \
- clip-operator.c clip-push-group.c clip-shape.c clip-stroke.c \
- clip-stroke-no-op.c clip-text.c clip-twice.c \
- clip-twice-rectangle.c clip-unbounded.c clip-zero.c \
- clipped-group.c clipped-surface.c close-path.c \
+ arc-infinite-loop.c arc-looping-dash.c api-special-cases.c \
+ big-line.c big-trap.c bilevel-image.c bug-bo-rectangular.c \
+ bug-extents.c bug-seams.c caps.c caps-joins.c \
+ caps-joins-alpha.c caps-joins-curve.c caps-sub-paths.c clear.c \
+ clear-source.c clip-all.c clip-contexts.c clip-disjoint.c \
+ clip-device-offset.c clip-draw-unbounded.c clip-empty.c \
+ clip-empty-group.c clip-empty-save.c clip-fill.c \
+ clip-fill-no-op.c clip-fill-rule.c \
+ clip-fill-rule-pixel-aligned.c clip-group-shapes.c \
+ clip-image.c clip-nesting.c clip-operator.c clip-push-group.c \
+ clip-shape.c clip-stroke.c clip-stroke-no-op.c clip-text.c \
+ clip-twice.c clip-twice-rectangle.c clip-unbounded.c \
+ clip-zero.c clipped-group.c clipped-surface.c close-path.c \
close-path-current-point.c \
composite-integer-translate-source.c \
composite-integer-translate-over.c \
@@ -169,11 +169,11 @@ am__cairo_test_suite_SOURCES_DIST = buffer-diff.c cairo-test.c \
get-group-target.c get-path-extents.c gradient-alpha.c \
gradient-constant-alpha.c gradient-zero-stops.c \
gradient-zero-stops-mask.c group-clip.c group-paint.c \
- group-unaligned.c half-coverage.c halo.c huge-linear.c \
- huge-radial.c image-surface-source.c implicit-close.c \
- infinite-join.c in-fill-empty-trapezoid.c in-fill-trapezoid.c \
- invalid-matrix.c inverse-text.c joins.c large-clip.c \
- large-font.c large-source.c large-source-roi.c \
+ group-state.c group-unaligned.c half-coverage.c halo.c \
+ huge-linear.c huge-radial.c image-surface-source.c \
+ implicit-close.c infinite-join.c in-fill-empty-trapezoid.c \
+ in-fill-trapezoid.c invalid-matrix.c inverse-text.c joins.c \
+ large-clip.c large-font.c large-source.c large-source-roi.c \
large-twin-antialias-mixed.c leaky-dash.c \
leaky-dashed-rectangle.c leaky-dashed-stroke.c leaky-polygon.c \
line-width.c line-width-scale.c line-width-zero.c \
@@ -183,9 +183,12 @@ am__cairo_test_suite_SOURCES_DIST = buffer-diff.c cairo-test.c \
linear-step-function.c linear-uniform.c long-dashed-lines.c \
long-lines.c mask.c mask-alpha.c mask-ctm.c mask-glyphs.c \
mask-surface-ctm.c mask-transformed-image.c \
- mask-transformed-similar.c recording-surface-pattern.c \
- mime-data.c miter-precision.c move-to-show-surface.c \
- new-sub-path.c nil-surface.c operator.c operator-alpha.c \
+ mask-transformed-similar.c mesh-pattern.c \
+ mesh-pattern-accuracy.c mesh-pattern-conical.c \
+ mesh-pattern-control-points.c mesh-pattern-fold.c \
+ mesh-pattern-overlap.c mesh-pattern-transformed.c mime-data.c \
+ miter-precision.c move-to-show-surface.c new-sub-path.c \
+ nil-surface.c operator.c operator-alpha.c \
operator-alpha-alpha.c operator-clear.c operator-source.c \
over-above-source.c over-around-source.c over-below-source.c \
over-between-source.c overlapping-glyphs.c paint.c \
@@ -194,16 +197,14 @@ am__cairo_test_suite_SOURCES_DIST = buffer-diff.c cairo-test.c \
path-stroke-twice.c path-precision.c pattern-get-type.c \
pattern-getters.c pixman-rotate.c png.c push-group.c \
push-group-color.c push-group-path-offset.c radial-gradient.c \
- radial-gradient-extend.c radial-gradient-mask.c \
- radial-gradient-mask-source.c radial-gradient-one-stop.c \
- radial-gradient-source.c random-intersections-eo.c \
+ radial-gradient-extend.c random-intersections-eo.c \
random-intersections-nonzero.c \
random-intersections-curves-eo.c \
- random-intersections-curves-nz.c rectangle-rounding-error.c \
- rectilinear-fill.c rectilinear-grid.c \
- rectilinear-miter-limit.c rectilinear-dash.c \
- rectilinear-stroke.c reflected-stroke.c rel-path.c \
- rgb24-ignore-alpha.c rotate-image-surface-paint.c \
+ random-intersections-curves-nz.c recording-surface-pattern.c \
+ rectangle-rounding-error.c rectilinear-fill.c \
+ rectilinear-grid.c rectilinear-miter-limit.c \
+ rectilinear-dash.c rectilinear-stroke.c reflected-stroke.c \
+ rel-path.c rgb24-ignore-alpha.c rotate-image-surface-paint.c \
rotated-clip.c rounded-rectangle-fill.c \
rounded-rectangle-stroke.c scale-down-source-surface-paint.c \
scale-offset-image.c scale-offset-similar.c \
@@ -232,10 +233,10 @@ am__cairo_test_suite_SOURCES_DIST = buffer-diff.c cairo-test.c \
twin-antialias-none.c twin-antialias-subpixel.c \
unantialiased-shapes.c unbounded-operator.c user-data.c \
user-font.c user-font-mask.c user-font-proxy.c \
- user-font-rescale.c xcomposite-projection.c \
- xlib-expose-event.c zero-alpha.c zero-mask.c \
- pthread-same-source.c pthread-show-text.c pthread-similar.c \
- bitmap-font.c ft-font-create-for-ft-face.c \
+ user-font-rescale.c white-in-noop.c xcb-stress-cache.c \
+ xcomposite-projection.c xlib-expose-event.c zero-alpha.c \
+ zero-mask.c pthread-same-source.c pthread-show-text.c \
+ pthread-similar.c bitmap-font.c ft-font-create-for-ft-face.c \
ft-show-glyphs-positioning.c ft-show-glyphs-table.c \
ft-text-vertical-layout-type1.c \
ft-text-vertical-layout-type3.c ft-text-antialias-none.c \
@@ -306,6 +307,8 @@ am__objects_29 = cairo_test_suite-a1-bug.$(OBJEXT) \
cairo_test_suite-a8-mask.$(OBJEXT) \
cairo_test_suite-aliasing.$(OBJEXT) \
cairo_test_suite-alpha-similar.$(OBJEXT) \
+ cairo_test_suite-arc-infinite-loop.$(OBJEXT) \
+ cairo_test_suite-arc-looping-dash.$(OBJEXT) \
cairo_test_suite-api-special-cases.$(OBJEXT) \
cairo_test_suite-big-line.$(OBJEXT) \
cairo_test_suite-big-trap.$(OBJEXT) \
@@ -419,6 +422,7 @@ am__objects_29 = cairo_test_suite-a1-bug.$(OBJEXT) \
cairo_test_suite-gradient-zero-stops-mask.$(OBJEXT) \
cairo_test_suite-group-clip.$(OBJEXT) \
cairo_test_suite-group-paint.$(OBJEXT) \
+ cairo_test_suite-group-state.$(OBJEXT) \
cairo_test_suite-group-unaligned.$(OBJEXT) \
cairo_test_suite-half-coverage.$(OBJEXT) \
cairo_test_suite-halo.$(OBJEXT) \
@@ -461,7 +465,13 @@ am__objects_29 = cairo_test_suite-a1-bug.$(OBJEXT) \
cairo_test_suite-mask-surface-ctm.$(OBJEXT) \
cairo_test_suite-mask-transformed-image.$(OBJEXT) \
cairo_test_suite-mask-transformed-similar.$(OBJEXT) \
- cairo_test_suite-recording-surface-pattern.$(OBJEXT) \
+ cairo_test_suite-mesh-pattern.$(OBJEXT) \
+ cairo_test_suite-mesh-pattern-accuracy.$(OBJEXT) \
+ cairo_test_suite-mesh-pattern-conical.$(OBJEXT) \
+ cairo_test_suite-mesh-pattern-control-points.$(OBJEXT) \
+ cairo_test_suite-mesh-pattern-fold.$(OBJEXT) \
+ cairo_test_suite-mesh-pattern-overlap.$(OBJEXT) \
+ cairo_test_suite-mesh-pattern-transformed.$(OBJEXT) \
cairo_test_suite-mime-data.$(OBJEXT) \
cairo_test_suite-miter-precision.$(OBJEXT) \
cairo_test_suite-move-to-show-surface.$(OBJEXT) \
@@ -495,14 +505,11 @@ am__objects_29 = cairo_test_suite-a1-bug.$(OBJEXT) \
cairo_test_suite-push-group-path-offset.$(OBJEXT) \
cairo_test_suite-radial-gradient.$(OBJEXT) \
cairo_test_suite-radial-gradient-extend.$(OBJEXT) \
- cairo_test_suite-radial-gradient-mask.$(OBJEXT) \
- cairo_test_suite-radial-gradient-mask-source.$(OBJEXT) \
- cairo_test_suite-radial-gradient-one-stop.$(OBJEXT) \
- cairo_test_suite-radial-gradient-source.$(OBJEXT) \
cairo_test_suite-random-intersections-eo.$(OBJEXT) \
cairo_test_suite-random-intersections-nonzero.$(OBJEXT) \
cairo_test_suite-random-intersections-curves-eo.$(OBJEXT) \
cairo_test_suite-random-intersections-curves-nz.$(OBJEXT) \
+ cairo_test_suite-recording-surface-pattern.$(OBJEXT) \
cairo_test_suite-rectangle-rounding-error.$(OBJEXT) \
cairo_test_suite-rectilinear-fill.$(OBJEXT) \
cairo_test_suite-rectilinear-grid.$(OBJEXT) \
@@ -585,6 +592,8 @@ am__objects_29 = cairo_test_suite-a1-bug.$(OBJEXT) \
cairo_test_suite-user-font-mask.$(OBJEXT) \
cairo_test_suite-user-font-proxy.$(OBJEXT) \
cairo_test_suite-user-font-rescale.$(OBJEXT) \
+ cairo_test_suite-white-in-noop.$(OBJEXT) \
+ cairo_test_suite-xcb-stress-cache.$(OBJEXT) \
cairo_test_suite-xcomposite-projection.$(OBJEXT) \
cairo_test_suite-xlib-expose-event.$(OBJEXT) \
cairo_test_suite-zero-alpha.$(OBJEXT) \
@@ -927,37 +936,38 @@ xlib_xrender_CFLAGS = @xlib_xrender_CFLAGS@
xlib_xrender_LIBS = @xlib_xrender_LIBS@
BUILT_SOURCES = cairo-test-constructors.c
CLEANFILES = *.i *.s *.gch $(EXTRA_LTLIBRARIES) $(EXTRA_PROGRAMS) \
- $(check_PROGRAMS) $(BUILT_SOURCES) valgrind-log index.html \
- ref.hash png-test.png png.out.png create-for-stream.pdf \
+ $(check_PROGRAMS) $(BUILT_SOURCES) valgrind-log ref.hash \
+ png-test.png png.out.png create-for-stream.pdf \
create-for-stream.ps create-for-stream.svg \
svg-surface-source.out.svg pdf-surface-source.out.pdf \
ps-surface-source.out.ps pdf-features.pdf pdf-mime-data.out* \
- ps-eps.eps ps-features.ps svg-clip.svg svg-surface.svg \
- multi-page.pdf multi-page.ps $(NULL)
+ ps-features.ps svg-clip.svg svg-surface.svg multi-page.pdf \
+ multi-page.ps $(NULL)
DISTCLEANFILES = $(BUILT_SOURCES)
EXTRA_DIST = $(BUILT_SOURCES) $(noinst_SCRIPTS) COPYING \
make-cairo-test-constructors.sh run-cairo-test-suite.sh \
- 6x13.pcf make-html.pl jpeg.jpg png.png jp2.jp2 romedalen.jpg \
- romedalen.png scarab.jpg surface-source.c $(REFERENCE_IMAGES) \
- Makefile.win32
+ 6x13.pcf index.html jp2.jp2 jpeg.jpg png.png romedalen.jpg \
+ romedalen.png scarab.jpg surface-source.c testtable.js \
+ $(REFERENCE_IMAGES) Makefile.win32
EXTRA_LTLIBRARIES =
MAINTAINERCLEANFILES = Makefile.in
TESTS = cairo-test-suite$(EXEEXT)
test_sources = a1-bug.c a1-image-sample.c a1-mask.c a1-mask-sample.c \
a1-traps-sample.c a1-rasterisation.c a8-clear.c a8-mask.c \
- aliasing.c alpha-similar.c api-special-cases.c big-line.c \
- big-trap.c bilevel-image.c bug-bo-rectangular.c bug-extents.c \
- bug-seams.c caps.c caps-joins.c caps-joins-alpha.c \
- caps-joins-curve.c caps-sub-paths.c clear.c clear-source.c \
- clip-all.c clip-contexts.c clip-disjoint.c \
- clip-device-offset.c clip-draw-unbounded.c clip-empty.c \
- clip-empty-group.c clip-empty-save.c clip-fill.c \
- clip-fill-no-op.c clip-fill-rule.c \
- clip-fill-rule-pixel-aligned.c clip-group-shapes.c \
- clip-image.c clip-nesting.c clip-operator.c clip-push-group.c \
- clip-shape.c clip-stroke.c clip-stroke-no-op.c clip-text.c \
- clip-twice.c clip-twice-rectangle.c clip-unbounded.c \
- clip-zero.c clipped-group.c clipped-surface.c close-path.c \
+ aliasing.c alpha-similar.c arc-infinite-loop.c \
+ arc-looping-dash.c api-special-cases.c big-line.c big-trap.c \
+ bilevel-image.c bug-bo-rectangular.c bug-extents.c bug-seams.c \
+ caps.c caps-joins.c caps-joins-alpha.c caps-joins-curve.c \
+ caps-sub-paths.c clear.c clear-source.c clip-all.c \
+ clip-contexts.c clip-disjoint.c clip-device-offset.c \
+ clip-draw-unbounded.c clip-empty.c clip-empty-group.c \
+ clip-empty-save.c clip-fill.c clip-fill-no-op.c \
+ clip-fill-rule.c clip-fill-rule-pixel-aligned.c \
+ clip-group-shapes.c clip-image.c clip-nesting.c \
+ clip-operator.c clip-push-group.c clip-shape.c clip-stroke.c \
+ clip-stroke-no-op.c clip-text.c clip-twice.c \
+ clip-twice-rectangle.c clip-unbounded.c clip-zero.c \
+ clipped-group.c clipped-surface.c close-path.c \
close-path-current-point.c \
composite-integer-translate-source.c \
composite-integer-translate-over.c \
@@ -987,11 +997,11 @@ test_sources = a1-bug.c a1-image-sample.c a1-mask.c a1-mask-sample.c \
get-group-target.c get-path-extents.c gradient-alpha.c \
gradient-constant-alpha.c gradient-zero-stops.c \
gradient-zero-stops-mask.c group-clip.c group-paint.c \
- group-unaligned.c half-coverage.c halo.c huge-linear.c \
- huge-radial.c image-surface-source.c implicit-close.c \
- infinite-join.c in-fill-empty-trapezoid.c in-fill-trapezoid.c \
- invalid-matrix.c inverse-text.c joins.c large-clip.c \
- large-font.c large-source.c large-source-roi.c \
+ group-state.c group-unaligned.c half-coverage.c halo.c \
+ huge-linear.c huge-radial.c image-surface-source.c \
+ implicit-close.c infinite-join.c in-fill-empty-trapezoid.c \
+ in-fill-trapezoid.c invalid-matrix.c inverse-text.c joins.c \
+ large-clip.c large-font.c large-source.c large-source-roi.c \
large-twin-antialias-mixed.c leaky-dash.c \
leaky-dashed-rectangle.c leaky-dashed-stroke.c leaky-polygon.c \
line-width.c line-width-scale.c line-width-zero.c \
@@ -1001,9 +1011,12 @@ test_sources = a1-bug.c a1-image-sample.c a1-mask.c a1-mask-sample.c \
linear-step-function.c linear-uniform.c long-dashed-lines.c \
long-lines.c mask.c mask-alpha.c mask-ctm.c mask-glyphs.c \
mask-surface-ctm.c mask-transformed-image.c \
- mask-transformed-similar.c recording-surface-pattern.c \
- mime-data.c miter-precision.c move-to-show-surface.c \
- new-sub-path.c nil-surface.c operator.c operator-alpha.c \
+ mask-transformed-similar.c mesh-pattern.c \
+ mesh-pattern-accuracy.c mesh-pattern-conical.c \
+ mesh-pattern-control-points.c mesh-pattern-fold.c \
+ mesh-pattern-overlap.c mesh-pattern-transformed.c mime-data.c \
+ miter-precision.c move-to-show-surface.c new-sub-path.c \
+ nil-surface.c operator.c operator-alpha.c \
operator-alpha-alpha.c operator-clear.c operator-source.c \
over-above-source.c over-around-source.c over-below-source.c \
over-between-source.c overlapping-glyphs.c paint.c \
@@ -1012,16 +1025,14 @@ test_sources = a1-bug.c a1-image-sample.c a1-mask.c a1-mask-sample.c \
path-stroke-twice.c path-precision.c pattern-get-type.c \
pattern-getters.c pixman-rotate.c png.c push-group.c \
push-group-color.c push-group-path-offset.c radial-gradient.c \
- radial-gradient-extend.c radial-gradient-mask.c \
- radial-gradient-mask-source.c radial-gradient-one-stop.c \
- radial-gradient-source.c random-intersections-eo.c \
+ radial-gradient-extend.c random-intersections-eo.c \
random-intersections-nonzero.c \
random-intersections-curves-eo.c \
- random-intersections-curves-nz.c rectangle-rounding-error.c \
- rectilinear-fill.c rectilinear-grid.c \
- rectilinear-miter-limit.c rectilinear-dash.c \
- rectilinear-stroke.c reflected-stroke.c rel-path.c \
- rgb24-ignore-alpha.c rotate-image-surface-paint.c \
+ random-intersections-curves-nz.c recording-surface-pattern.c \
+ rectangle-rounding-error.c rectilinear-fill.c \
+ rectilinear-grid.c rectilinear-miter-limit.c \
+ rectilinear-dash.c rectilinear-stroke.c reflected-stroke.c \
+ rel-path.c rgb24-ignore-alpha.c rotate-image-surface-paint.c \
rotated-clip.c rounded-rectangle-fill.c \
rounded-rectangle-stroke.c scale-down-source-surface-paint.c \
scale-offset-image.c scale-offset-similar.c \
@@ -1050,12 +1061,12 @@ test_sources = a1-bug.c a1-image-sample.c a1-mask.c a1-mask-sample.c \
twin-antialias-none.c twin-antialias-subpixel.c \
unantialiased-shapes.c unbounded-operator.c user-data.c \
user-font.c user-font-mask.c user-font-proxy.c \
- user-font-rescale.c xcomposite-projection.c \
- xlib-expose-event.c zero-alpha.c zero-mask.c $(am__append_1) \
- $(am__append_2) $(am__append_3) $(am__append_4) \
- $(am__append_5) $(am__append_6) $(am__append_7) \
- $(am__append_8) $(am__append_9) $(am__append_10) \
- $(am__append_11) $(am__append_12) $(test)
+ user-font-rescale.c white-in-noop.c xcb-stress-cache.c \
+ xcomposite-projection.c xlib-expose-event.c zero-alpha.c \
+ zero-mask.c $(am__append_1) $(am__append_2) $(am__append_3) \
+ $(am__append_4) $(am__append_5) $(am__append_6) \
+ $(am__append_7) $(am__append_8) $(am__append_9) \
+ $(am__append_10) $(am__append_11) $(am__append_12) $(test)
pthread_test_sources = \
pthread-same-source.c \
pthread-show-text.c \
@@ -1163,21 +1174,24 @@ cairo_test_suite_DEPENDENCIES = \
REFERENCE_IMAGES = \
a1-bug.ref.png \
a1-bug.image16.ref.png \
+ a1-bug.quartz.xfail.png \
a1-bug.xlib.ref.png \
a1-image-sample.ref.png \
a1-image-sample.gl.xfail.png \
- a1-image-sample.quartz.xfail.png \
a1-mask.ref.png \
a1-mask-sample.ref.png \
- a1-mask-sample.quartz.xfail.png \
a1-rasterisation-rectangles.ref.png \
+ a1-rasterisation-rectangles.quartz.xfail.png \
a1-rasterisation-triangles.ref.png \
+ a1-rasterisation-triangles.quartz.xfail.png \
a1-traps-sample.ref.png \
a1-traps-sample.quartz.xfail.png \
a8-clear.ref.png \
+ a8-clear.quartz.ref.png \
a8-mask.ref.png \
aliasing.ref.png \
aliasing.image16.ref.png \
+ aliasing.quartz.ref.png \
aliasing.xlib.ref.png \
alpha-similar.gl.argb32.xfail.png \
alpha-similar.gl.rgb24.xfail.png \
@@ -1190,6 +1204,11 @@ REFERENCE_IMAGES = \
alpha-similar.svg.argb32.xfail.png \
alpha-similar.svg.rgb24.xfail.png \
api-special-cases.ref.png \
+ arc-infinite-loop.ref.png \
+ arc-looping-dash.image16.ref.png \
+ arc-looping-dash.ps.ref.png \
+ arc-looping-dash.quartz.ref.png \
+ arc-looping-dash.ref.png \
big-line.ref.png \
big-line.image16.ref.png \
big-line.ps.ref.png \
@@ -1514,11 +1533,15 @@ REFERENCE_IMAGES = \
extended-blend.image16.ref.png \
extended-blend.argb32.ref.png \
extended-blend.rgb24.ref.png \
+ extended-blend.quartz.argb32.ref.png \
+ extended-blend.quartz.rgb24.ref.png \
extended-blend.svg12.argb32.xfail.png \
extended-blend.svg12.rgb24.xfail.png \
extended-blend-alpha.image16.ref.png \
extended-blend-alpha.argb32.ref.png \
extended-blend-alpha.rgb24.ref.png \
+ extended-blend-alpha.quartz.argb32.ref.png \
+ extended-blend-alpha.quartz.rgb24.ref.png \
extended-blend-alpha.svg12.argb32.xfail.png \
extended-blend-alpha.svg12.rgb24.xfail.png \
extend-pad-border.image16.ref.png \
@@ -1549,22 +1572,27 @@ REFERENCE_IMAGES = \
extend-repeat.ps2.ref.png \
extend-repeat.ps3.ref.png \
extend-repeat.ref.png \
- fallback-resolution.ppi150x150.ref.png \
- fallback-resolution.ppi150x72.ref.png \
- fallback-resolution.ppi300x300.ref.png \
- fallback-resolution.ppi300x72.ref.png \
- fallback-resolution.ppi37.5x37.5.ref.png \
- fallback-resolution.ppi37.5x72.ref.png \
- fallback-resolution.ppi600x600.ref.png \
- fallback-resolution.ppi600x72.ref.png \
- fallback-resolution.ppi72x150.ref.png \
- fallback-resolution.ppi72x300.ref.png \
- fallback-resolution.ppi72x37.5.ref.png \
- fallback-resolution.ppi72x600.ref.png \
+ fallback-resolution.ppi144x144.ps.ref.png \
+ fallback-resolution.ppi144x144.ref.png \
+ fallback-resolution.ppi144x72.ps.ref.png \
+ fallback-resolution.ppi144x72.ref.png \
+ fallback-resolution.ppi288x288.pdf.ref.png \
+ fallback-resolution.ppi288x288.ps.ref.png \
+ fallback-resolution.ppi288x288.svg.ref.png \
+ fallback-resolution.ppi288x72.ps.ref.png \
+ fallback-resolution.ppi288x72.ref.png \
+ fallback-resolution.ppi576x576.pdf.ref.png \
+ fallback-resolution.ppi576x576.ps.ref.png \
+ fallback-resolution.ppi576x576.svg.ref.png \
+ fallback-resolution.ppi576x72.ps.ref.png \
+ fallback-resolution.ppi576x72.ref.png \
+ fallback-resolution.ppi72x144.ps.ref.png \
+ fallback-resolution.ppi72x144.ref.png \
+ fallback-resolution.ppi72x288.ps.ref.png \
+ fallback-resolution.ppi72x288.ref.png \
+ fallback-resolution.ppi72x576.ps.ref.png \
+ fallback-resolution.ppi72x576.ref.png \
fallback-resolution.ppi72x72.ref.png \
- fallback-resolution.ppi72x75.ref.png \
- fallback-resolution.ppi75x72.ref.png \
- fallback-resolution.ppi75x75.ref.png \
fill-alpha-pattern.image16.ref.png \
fill-alpha-pattern.ps3.argb32.ref.png \
fill-alpha-pattern.ps3.ref.png \
@@ -1636,7 +1664,6 @@ REFERENCE_IMAGES = \
filter-nearest-offset.pdf.xfail.png \
filter-nearest-offset.ps2.ref.png \
filter-nearest-offset.ps3.ref.png \
- filter-nearest-offset.quartz.xfail.png \
filter-nearest-offset.ref.png \
filter-nearest-offset.svg.xfail.png \
filter-nearest-transformed.image16.ref.png \
@@ -1748,6 +1775,7 @@ REFERENCE_IMAGES = \
huge-linear.image16.ref.png \
huge-linear.pdf.ref.png \
huge-linear.ps3.ref.png \
+ huge-linear.quartz.ref.png \
huge-linear.ref.png \
huge-radial.image16.ref.png \
huge-radial.pdf.argb32.ref.png \
@@ -1821,6 +1849,7 @@ REFERENCE_IMAGES = \
linear-gradient.quartz.ref.png \
linear-gradient.ref.png \
linear-gradient.xlib.ref.png \
+ linear-gradient-large.quartz.ref.png \
linear-gradient-large.ref.png \
linear-gradient-one-stop.argb32.ref.png \
linear-gradient-one-stop.rgb24.ref.png \
@@ -1873,20 +1902,20 @@ REFERENCE_IMAGES = \
mask.svg.rgb24.xfail.png \
mask.xlib.ref.png \
mask.xlib.rgb24.ref.png \
- recording-surface-pattern.image16.ref.png \
- recording-surface-pattern.gl.argb32.ref.png \
- recording-surface-pattern.pdf.argb32.ref.png \
- recording-surface-pattern.pdf.rgb24.ref.png \
- recording-surface-pattern.ps.argb32.ref.png \
- recording-surface-pattern.ps.rgb24.ref.png \
- recording-surface-pattern.quartz.argb32.ref.png \
- recording-surface-pattern.quartz.rgb24.ref.png \
- recording-surface-pattern.ref.png \
- recording-surface-pattern.rgb24.ref.png \
- recording-surface-pattern.svg.argb32.ref.png \
- recording-surface-pattern.svg.rgb24.ref.png \
- recording-surface-pattern.xlib.argb32.ref.png \
- recording-surface-pattern.xlib.rgb24.ref.png \
+ mesh-pattern.image16.ref.png \
+ mesh-pattern.ref.png \
+ mesh-pattern-accuracy.image16.ref.png \
+ mesh-pattern-accuracy.ref.png \
+ mesh-pattern-conical.image16.ref.png \
+ mesh-pattern-conical.ref.png \
+ mesh-pattern-control-points.image16.ref.png \
+ mesh-pattern-control-points.ref.png \
+ mesh-pattern-fold.image16.ref.png \
+ mesh-pattern-fold.ref.png \
+ mesh-pattern-overlap.image16.ref.png \
+ mesh-pattern-overlap.ref.png \
+ mesh-pattern-transformed.image16.ref.png \
+ mesh-pattern-transformed.ref.png \
mime-data.pdf.ref.png \
mime-data.ps.ref.png \
mime-data.ref.png \
@@ -1984,6 +2013,8 @@ REFERENCE_IMAGES = \
overlapping-glyphs.rgb24.ref.png \
overlapping-glyphs.pdf.argb32.xfail.png \
overlapping-glyphs.pdf.rgb24.xfail.png \
+ overlapping-glyphs.quartz.argb32.ref.png \
+ overlapping-glyphs.quartz.rgb24.ref.png \
overlapping-glyphs.svg.rgb24.ref.png \
overlapping-glyphs.svg.argb32.ref.png \
paint-repeat.ref.png \
@@ -1996,6 +2027,7 @@ REFERENCE_IMAGES = \
paint.ref.png \
partial-clip-text.ref.png \
partial-clip-text.ps.ref.png \
+ partial-clip-text.quartz.ref.png \
partial-clip-text.svg.ref.png \
partial-coverage-half-reference.ref.png \
partial-coverage-half-triangles.ref.png \
@@ -2030,6 +2062,7 @@ REFERENCE_IMAGES = \
pixman-rotate.ref.png \
pixman-rotate.rgb24.ref.png \
pixman-rotate.ps.argb32.ref.png \
+ ps-eps.ref.png \
pthread-same-source.image16.ref.png \
pthread-same-source.quartz.xfail.png \
pthread-same-source.ref.png \
@@ -2056,6 +2089,7 @@ REFERENCE_IMAGES = \
push-group-color.image16.ref.png \
push-group-color.quartz.ref.png \
push-group-color.ref.png \
+ push-group-color.ps2.ref.png \
push-group-color.ps3.ref.png \
push-group-color.xlib.ref.png \
quartz-surface-source.rgb24.ref.png \
@@ -2063,22 +2097,27 @@ REFERENCE_IMAGES = \
quartz-surface-source.ps2.ref.png \
quartz-surface-source.ps3.ref.png \
radial-gradient.image16.ref.png \
- radial-gradient.pdf.ref.png \
radial-gradient.ref.png \
- radial-gradient.svg.xfail.png \
+ radial-gradient.quartz.ref.png \
+ radial-gradient-extend.ps3.ref.png \
radial-gradient-extend.ref.png \
radial-gradient-source.image16.ref.png \
radial-gradient-source.argb32.ref.png \
radial-gradient-source.rgb24.ref.png \
- radial-gradient-source.pdf.argb32.ref.png \
- radial-gradient-mask.argb32.ref.png \
- radial-gradient-mask.rgb24.ref.png \
+ radial-gradient-source.quartz.argb32.ref.png \
+ radial-gradient-source.quartz.rgb24.ref.png \
+ radial-gradient-mask.ref.png \
radial-gradient-mask.image16.ref.png \
+ radial-gradient-mask.quartz.ref.png \
radial-gradient-mask-source.argb32.ref.png \
radial-gradient-mask-source.rgb24.ref.png \
radial-gradient-mask-source.image16.ref.png \
- radial-gradient-one-stop.argb32.ref.png \
- radial-gradient-one-stop.rgb24.ref.png \
+ radial-gradient-mask-source.quartz.argb32.ref.png \
+ radial-gradient-mask-source.quartz.rgb24.ref.png \
+ radial-gradient-mask-source.xlib.argb32.ref.png \
+ radial-gradient-mask-source.xlib.rgb24.ref.png \
+ radial-gradient-one-stop.ref.png \
+ radial-gradient-one-stop.quartz.ref.png \
random-intersections-eo.image16.ref.png \
random-intersections-eo.ps.ref.png \
random-intersections-eo.quartz.ref.png \
@@ -2103,6 +2142,20 @@ REFERENCE_IMAGES = \
random-intersections-curves-nz.ref.png \
random-intersections-curves-nz.xlib.ref.png \
random-intersections-curves-nz.xlib-fallback.ref.png \
+ recording-surface-pattern.image16.ref.png \
+ recording-surface-pattern.gl.argb32.ref.png \
+ recording-surface-pattern.pdf.argb32.ref.png \
+ recording-surface-pattern.pdf.rgb24.ref.png \
+ recording-surface-pattern.ps.argb32.ref.png \
+ recording-surface-pattern.ps.rgb24.ref.png \
+ recording-surface-pattern.quartz.argb32.ref.png \
+ recording-surface-pattern.quartz.rgb24.ref.png \
+ recording-surface-pattern.ref.png \
+ recording-surface-pattern.rgb24.ref.png \
+ recording-surface-pattern.svg.argb32.ref.png \
+ recording-surface-pattern.svg.rgb24.ref.png \
+ recording-surface-pattern.xlib.argb32.ref.png \
+ recording-surface-pattern.xlib.rgb24.ref.png \
rectangle-rounding-error.ref.png \
rectilinear-dash.quartz.xfail.png \
rectilinear-dash.ref.png \
@@ -2291,8 +2344,8 @@ REFERENCE_IMAGES = \
surface-pattern-operator.xlib.rgb24.ref.png \
surface-pattern-operator.pdf.argb32.xfail.png \
surface-pattern-operator.pdf.rgb24.xfail.png \
- surface-pattern-operator.quartz.argb32.xfail.png \
- surface-pattern-operator.quartz.rgb24.xfail.png \
+ surface-pattern-operator.quartz.argb32.ref.png \
+ surface-pattern-operator.quartz.rgb24.ref.png \
surface-pattern-scale-down.image16.ref.png \
surface-pattern-scale-down.pdf.ref.png \
surface-pattern-scale-down.ps2.ref.png \
@@ -2403,6 +2456,8 @@ REFERENCE_IMAGES = \
unbounded-operator.pdf.argb32.ref.png \
unbounded-operator.ps2.argb32.ref.png \
unbounded-operator.ps3.argb32.ref.png \
+ unbounded-operator.quartz.argb32.ref.png \
+ unbounded-operator.quartz.rgb24.ref.png \
unbounded-operator.ref.png \
unbounded-operator.rgb24.ref.png \
unbounded-operator.svg12.argb32.ref.png \
@@ -2435,6 +2490,7 @@ REFERENCE_IMAGES = \
user-font.ref.png \
user-font.svg.ref.png \
user-font.xlib.ref.png \
+ xcb-stress-cache.ref.png \
xcb-surface-source.rgb24.ref.png \
xcb-surface-source.argb32.ref.png \
xcomposite-projection.ref.png \
@@ -2450,6 +2506,7 @@ REFERENCE_IMAGES = \
xlib-surface-source.ps3.ref.png \
xlib-surface-source.svg12.argb32.xfail.png \
xlib-surface-source.svg12.rgb24.xfail.png \
+ white-in-noop.ref.png \
zero-mask.ref.png \
zero-mask.rgb24.ref.png \
zero-alpha.ref.png
@@ -2638,6 +2695,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-aliasing.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-alpha-similar.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-api-special-cases.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-arc-infinite-loop.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-arc-looping-dash.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-big-line.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-big-trap.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-bilevel-image.Po@am__quote@
@@ -2764,6 +2823,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-gradient-zero-stops.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-group-clip.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-group-paint.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-group-state.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-group-unaligned.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-half-coverage.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-halo.Po@am__quote@
@@ -2806,6 +2866,13 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mask-transformed-image.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mask-transformed-similar.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mask.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mime-data.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-miter-precision.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-move-to-show-surface.Po@am__quote@
@@ -2849,10 +2916,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-push-group.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-quartz-surface-source.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-radial-gradient-extend.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-radial-gradient-mask.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-radial-gradient-source.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-radial-gradient.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-random-intersections-curves-eo.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-random-intersections-curves-nz.Po@am__quote@
@@ -2945,6 +3008,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-user-font-proxy.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-user-font-rescale.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-user-font.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-white-in-noop.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-xcb-stress-cache.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-xcb-surface-source.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-xcomposite-projection.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-xlib-expose-event.Po@am__quote@
@@ -3208,6 +3273,38 @@ cairo_test_suite-alpha-similar.obj: alpha-similar.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-alpha-similar.obj `if test -f 'alpha-similar.c'; then $(CYGPATH_W) 'alpha-similar.c'; else $(CYGPATH_W) '$(srcdir)/alpha-similar.c'; fi`
+cairo_test_suite-arc-infinite-loop.o: arc-infinite-loop.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-arc-infinite-loop.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-arc-infinite-loop.Tpo -c -o cairo_test_suite-arc-infinite-loop.o `test -f 'arc-infinite-loop.c' || echo '$(srcdir)/'`arc-infinite-loop.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-arc-infinite-loop.Tpo $(DEPDIR)/cairo_test_suite-arc-infinite-loop.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='arc-infinite-loop.c' object='cairo_test_suite-arc-infinite-loop.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-arc-infinite-loop.o `test -f 'arc-infinite-loop.c' || echo '$(srcdir)/'`arc-infinite-loop.c
+
+cairo_test_suite-arc-infinite-loop.obj: arc-infinite-loop.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-arc-infinite-loop.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-arc-infinite-loop.Tpo -c -o cairo_test_suite-arc-infinite-loop.obj `if test -f 'arc-infinite-loop.c'; then $(CYGPATH_W) 'arc-infinite-loop.c'; else $(CYGPATH_W) '$(srcdir)/arc-infinite-loop.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-arc-infinite-loop.Tpo $(DEPDIR)/cairo_test_suite-arc-infinite-loop.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='arc-infinite-loop.c' object='cairo_test_suite-arc-infinite-loop.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-arc-infinite-loop.obj `if test -f 'arc-infinite-loop.c'; then $(CYGPATH_W) 'arc-infinite-loop.c'; else $(CYGPATH_W) '$(srcdir)/arc-infinite-loop.c'; fi`
+
+cairo_test_suite-arc-looping-dash.o: arc-looping-dash.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-arc-looping-dash.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-arc-looping-dash.Tpo -c -o cairo_test_suite-arc-looping-dash.o `test -f 'arc-looping-dash.c' || echo '$(srcdir)/'`arc-looping-dash.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-arc-looping-dash.Tpo $(DEPDIR)/cairo_test_suite-arc-looping-dash.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='arc-looping-dash.c' object='cairo_test_suite-arc-looping-dash.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-arc-looping-dash.o `test -f 'arc-looping-dash.c' || echo '$(srcdir)/'`arc-looping-dash.c
+
+cairo_test_suite-arc-looping-dash.obj: arc-looping-dash.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-arc-looping-dash.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-arc-looping-dash.Tpo -c -o cairo_test_suite-arc-looping-dash.obj `if test -f 'arc-looping-dash.c'; then $(CYGPATH_W) 'arc-looping-dash.c'; else $(CYGPATH_W) '$(srcdir)/arc-looping-dash.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-arc-looping-dash.Tpo $(DEPDIR)/cairo_test_suite-arc-looping-dash.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='arc-looping-dash.c' object='cairo_test_suite-arc-looping-dash.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-arc-looping-dash.obj `if test -f 'arc-looping-dash.c'; then $(CYGPATH_W) 'arc-looping-dash.c'; else $(CYGPATH_W) '$(srcdir)/arc-looping-dash.c'; fi`
+
cairo_test_suite-api-special-cases.o: api-special-cases.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-api-special-cases.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-api-special-cases.Tpo -c -o cairo_test_suite-api-special-cases.o `test -f 'api-special-cases.c' || echo '$(srcdir)/'`api-special-cases.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-api-special-cases.Tpo $(DEPDIR)/cairo_test_suite-api-special-cases.Po
@@ -5016,6 +5113,22 @@ cairo_test_suite-group-paint.obj: group-paint.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-group-paint.obj `if test -f 'group-paint.c'; then $(CYGPATH_W) 'group-paint.c'; else $(CYGPATH_W) '$(srcdir)/group-paint.c'; fi`
+cairo_test_suite-group-state.o: group-state.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-group-state.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-group-state.Tpo -c -o cairo_test_suite-group-state.o `test -f 'group-state.c' || echo '$(srcdir)/'`group-state.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-group-state.Tpo $(DEPDIR)/cairo_test_suite-group-state.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='group-state.c' object='cairo_test_suite-group-state.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-group-state.o `test -f 'group-state.c' || echo '$(srcdir)/'`group-state.c
+
+cairo_test_suite-group-state.obj: group-state.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-group-state.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-group-state.Tpo -c -o cairo_test_suite-group-state.obj `if test -f 'group-state.c'; then $(CYGPATH_W) 'group-state.c'; else $(CYGPATH_W) '$(srcdir)/group-state.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-group-state.Tpo $(DEPDIR)/cairo_test_suite-group-state.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='group-state.c' object='cairo_test_suite-group-state.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-group-state.obj `if test -f 'group-state.c'; then $(CYGPATH_W) 'group-state.c'; else $(CYGPATH_W) '$(srcdir)/group-state.c'; fi`
+
cairo_test_suite-group-unaligned.o: group-unaligned.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-group-unaligned.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-group-unaligned.Tpo -c -o cairo_test_suite-group-unaligned.o `test -f 'group-unaligned.c' || echo '$(srcdir)/'`group-unaligned.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-group-unaligned.Tpo $(DEPDIR)/cairo_test_suite-group-unaligned.Po
@@ -5688,21 +5801,117 @@ cairo_test_suite-mask-transformed-similar.obj: mask-transformed-similar.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mask-transformed-similar.obj `if test -f 'mask-transformed-similar.c'; then $(CYGPATH_W) 'mask-transformed-similar.c'; else $(CYGPATH_W) '$(srcdir)/mask-transformed-similar.c'; fi`
-cairo_test_suite-recording-surface-pattern.o: recording-surface-pattern.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-recording-surface-pattern.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo -c -o cairo_test_suite-recording-surface-pattern.o `test -f 'recording-surface-pattern.c' || echo '$(srcdir)/'`recording-surface-pattern.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Po
+cairo_test_suite-mesh-pattern.o: mesh-pattern.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern.Tpo -c -o cairo_test_suite-mesh-pattern.o `test -f 'mesh-pattern.c' || echo '$(srcdir)/'`mesh-pattern.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='recording-surface-pattern.c' object='cairo_test_suite-recording-surface-pattern.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern.c' object='cairo_test_suite-mesh-pattern.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-recording-surface-pattern.o `test -f 'recording-surface-pattern.c' || echo '$(srcdir)/'`recording-surface-pattern.c
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern.o `test -f 'mesh-pattern.c' || echo '$(srcdir)/'`mesh-pattern.c
-cairo_test_suite-recording-surface-pattern.obj: recording-surface-pattern.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-recording-surface-pattern.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo -c -o cairo_test_suite-recording-surface-pattern.obj `if test -f 'recording-surface-pattern.c'; then $(CYGPATH_W) 'recording-surface-pattern.c'; else $(CYGPATH_W) '$(srcdir)/recording-surface-pattern.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Po
+cairo_test_suite-mesh-pattern.obj: mesh-pattern.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern.Tpo -c -o cairo_test_suite-mesh-pattern.obj `if test -f 'mesh-pattern.c'; then $(CYGPATH_W) 'mesh-pattern.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='recording-surface-pattern.c' object='cairo_test_suite-recording-surface-pattern.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern.c' object='cairo_test_suite-mesh-pattern.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-recording-surface-pattern.obj `if test -f 'recording-surface-pattern.c'; then $(CYGPATH_W) 'recording-surface-pattern.c'; else $(CYGPATH_W) '$(srcdir)/recording-surface-pattern.c'; fi`
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern.obj `if test -f 'mesh-pattern.c'; then $(CYGPATH_W) 'mesh-pattern.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern.c'; fi`
+
+cairo_test_suite-mesh-pattern-accuracy.o: mesh-pattern-accuracy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-accuracy.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Tpo -c -o cairo_test_suite-mesh-pattern-accuracy.o `test -f 'mesh-pattern-accuracy.c' || echo '$(srcdir)/'`mesh-pattern-accuracy.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-accuracy.c' object='cairo_test_suite-mesh-pattern-accuracy.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-accuracy.o `test -f 'mesh-pattern-accuracy.c' || echo '$(srcdir)/'`mesh-pattern-accuracy.c
+
+cairo_test_suite-mesh-pattern-accuracy.obj: mesh-pattern-accuracy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-accuracy.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Tpo -c -o cairo_test_suite-mesh-pattern-accuracy.obj `if test -f 'mesh-pattern-accuracy.c'; then $(CYGPATH_W) 'mesh-pattern-accuracy.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-accuracy.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-accuracy.c' object='cairo_test_suite-mesh-pattern-accuracy.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-accuracy.obj `if test -f 'mesh-pattern-accuracy.c'; then $(CYGPATH_W) 'mesh-pattern-accuracy.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-accuracy.c'; fi`
+
+cairo_test_suite-mesh-pattern-conical.o: mesh-pattern-conical.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-conical.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Tpo -c -o cairo_test_suite-mesh-pattern-conical.o `test -f 'mesh-pattern-conical.c' || echo '$(srcdir)/'`mesh-pattern-conical.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-conical.c' object='cairo_test_suite-mesh-pattern-conical.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-conical.o `test -f 'mesh-pattern-conical.c' || echo '$(srcdir)/'`mesh-pattern-conical.c
+
+cairo_test_suite-mesh-pattern-conical.obj: mesh-pattern-conical.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-conical.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Tpo -c -o cairo_test_suite-mesh-pattern-conical.obj `if test -f 'mesh-pattern-conical.c'; then $(CYGPATH_W) 'mesh-pattern-conical.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-conical.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-conical.c' object='cairo_test_suite-mesh-pattern-conical.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-conical.obj `if test -f 'mesh-pattern-conical.c'; then $(CYGPATH_W) 'mesh-pattern-conical.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-conical.c'; fi`
+
+cairo_test_suite-mesh-pattern-control-points.o: mesh-pattern-control-points.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-control-points.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Tpo -c -o cairo_test_suite-mesh-pattern-control-points.o `test -f 'mesh-pattern-control-points.c' || echo '$(srcdir)/'`mesh-pattern-control-points.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-control-points.c' object='cairo_test_suite-mesh-pattern-control-points.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-control-points.o `test -f 'mesh-pattern-control-points.c' || echo '$(srcdir)/'`mesh-pattern-control-points.c
+
+cairo_test_suite-mesh-pattern-control-points.obj: mesh-pattern-control-points.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-control-points.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Tpo -c -o cairo_test_suite-mesh-pattern-control-points.obj `if test -f 'mesh-pattern-control-points.c'; then $(CYGPATH_W) 'mesh-pattern-control-points.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-control-points.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-control-points.c' object='cairo_test_suite-mesh-pattern-control-points.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-control-points.obj `if test -f 'mesh-pattern-control-points.c'; then $(CYGPATH_W) 'mesh-pattern-control-points.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-control-points.c'; fi`
+
+cairo_test_suite-mesh-pattern-fold.o: mesh-pattern-fold.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-fold.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Tpo -c -o cairo_test_suite-mesh-pattern-fold.o `test -f 'mesh-pattern-fold.c' || echo '$(srcdir)/'`mesh-pattern-fold.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-fold.c' object='cairo_test_suite-mesh-pattern-fold.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-fold.o `test -f 'mesh-pattern-fold.c' || echo '$(srcdir)/'`mesh-pattern-fold.c
+
+cairo_test_suite-mesh-pattern-fold.obj: mesh-pattern-fold.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-fold.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Tpo -c -o cairo_test_suite-mesh-pattern-fold.obj `if test -f 'mesh-pattern-fold.c'; then $(CYGPATH_W) 'mesh-pattern-fold.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-fold.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-fold.c' object='cairo_test_suite-mesh-pattern-fold.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-fold.obj `if test -f 'mesh-pattern-fold.c'; then $(CYGPATH_W) 'mesh-pattern-fold.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-fold.c'; fi`
+
+cairo_test_suite-mesh-pattern-overlap.o: mesh-pattern-overlap.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-overlap.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Tpo -c -o cairo_test_suite-mesh-pattern-overlap.o `test -f 'mesh-pattern-overlap.c' || echo '$(srcdir)/'`mesh-pattern-overlap.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-overlap.c' object='cairo_test_suite-mesh-pattern-overlap.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-overlap.o `test -f 'mesh-pattern-overlap.c' || echo '$(srcdir)/'`mesh-pattern-overlap.c
+
+cairo_test_suite-mesh-pattern-overlap.obj: mesh-pattern-overlap.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-overlap.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Tpo -c -o cairo_test_suite-mesh-pattern-overlap.obj `if test -f 'mesh-pattern-overlap.c'; then $(CYGPATH_W) 'mesh-pattern-overlap.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-overlap.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-overlap.c' object='cairo_test_suite-mesh-pattern-overlap.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-overlap.obj `if test -f 'mesh-pattern-overlap.c'; then $(CYGPATH_W) 'mesh-pattern-overlap.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-overlap.c'; fi`
+
+cairo_test_suite-mesh-pattern-transformed.o: mesh-pattern-transformed.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-transformed.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Tpo -c -o cairo_test_suite-mesh-pattern-transformed.o `test -f 'mesh-pattern-transformed.c' || echo '$(srcdir)/'`mesh-pattern-transformed.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-transformed.c' object='cairo_test_suite-mesh-pattern-transformed.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-transformed.o `test -f 'mesh-pattern-transformed.c' || echo '$(srcdir)/'`mesh-pattern-transformed.c
+
+cairo_test_suite-mesh-pattern-transformed.obj: mesh-pattern-transformed.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-transformed.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Tpo -c -o cairo_test_suite-mesh-pattern-transformed.obj `if test -f 'mesh-pattern-transformed.c'; then $(CYGPATH_W) 'mesh-pattern-transformed.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-transformed.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-transformed.c' object='cairo_test_suite-mesh-pattern-transformed.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-transformed.obj `if test -f 'mesh-pattern-transformed.c'; then $(CYGPATH_W) 'mesh-pattern-transformed.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-transformed.c'; fi`
cairo_test_suite-mime-data.o: mime-data.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mime-data.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mime-data.Tpo -c -o cairo_test_suite-mime-data.o `test -f 'mime-data.c' || echo '$(srcdir)/'`mime-data.c
@@ -6232,70 +6441,6 @@ cairo_test_suite-radial-gradient-extend.obj: radial-gradient-extend.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-extend.obj `if test -f 'radial-gradient-extend.c'; then $(CYGPATH_W) 'radial-gradient-extend.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-extend.c'; fi`
-cairo_test_suite-radial-gradient-mask.o: radial-gradient-mask.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-mask.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-mask.Tpo -c -o cairo_test_suite-radial-gradient-mask.o `test -f 'radial-gradient-mask.c' || echo '$(srcdir)/'`radial-gradient-mask.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-mask.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-mask.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-mask.c' object='cairo_test_suite-radial-gradient-mask.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-mask.o `test -f 'radial-gradient-mask.c' || echo '$(srcdir)/'`radial-gradient-mask.c
-
-cairo_test_suite-radial-gradient-mask.obj: radial-gradient-mask.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-mask.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-mask.Tpo -c -o cairo_test_suite-radial-gradient-mask.obj `if test -f 'radial-gradient-mask.c'; then $(CYGPATH_W) 'radial-gradient-mask.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-mask.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-mask.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-mask.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-mask.c' object='cairo_test_suite-radial-gradient-mask.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-mask.obj `if test -f 'radial-gradient-mask.c'; then $(CYGPATH_W) 'radial-gradient-mask.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-mask.c'; fi`
-
-cairo_test_suite-radial-gradient-mask-source.o: radial-gradient-mask-source.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-mask-source.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Tpo -c -o cairo_test_suite-radial-gradient-mask-source.o `test -f 'radial-gradient-mask-source.c' || echo '$(srcdir)/'`radial-gradient-mask-source.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-mask-source.c' object='cairo_test_suite-radial-gradient-mask-source.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-mask-source.o `test -f 'radial-gradient-mask-source.c' || echo '$(srcdir)/'`radial-gradient-mask-source.c
-
-cairo_test_suite-radial-gradient-mask-source.obj: radial-gradient-mask-source.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-mask-source.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Tpo -c -o cairo_test_suite-radial-gradient-mask-source.obj `if test -f 'radial-gradient-mask-source.c'; then $(CYGPATH_W) 'radial-gradient-mask-source.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-mask-source.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-mask-source.c' object='cairo_test_suite-radial-gradient-mask-source.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-mask-source.obj `if test -f 'radial-gradient-mask-source.c'; then $(CYGPATH_W) 'radial-gradient-mask-source.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-mask-source.c'; fi`
-
-cairo_test_suite-radial-gradient-one-stop.o: radial-gradient-one-stop.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-one-stop.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Tpo -c -o cairo_test_suite-radial-gradient-one-stop.o `test -f 'radial-gradient-one-stop.c' || echo '$(srcdir)/'`radial-gradient-one-stop.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-one-stop.c' object='cairo_test_suite-radial-gradient-one-stop.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-one-stop.o `test -f 'radial-gradient-one-stop.c' || echo '$(srcdir)/'`radial-gradient-one-stop.c
-
-cairo_test_suite-radial-gradient-one-stop.obj: radial-gradient-one-stop.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-one-stop.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Tpo -c -o cairo_test_suite-radial-gradient-one-stop.obj `if test -f 'radial-gradient-one-stop.c'; then $(CYGPATH_W) 'radial-gradient-one-stop.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-one-stop.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-one-stop.c' object='cairo_test_suite-radial-gradient-one-stop.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-one-stop.obj `if test -f 'radial-gradient-one-stop.c'; then $(CYGPATH_W) 'radial-gradient-one-stop.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-one-stop.c'; fi`
-
-cairo_test_suite-radial-gradient-source.o: radial-gradient-source.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-source.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-source.Tpo -c -o cairo_test_suite-radial-gradient-source.o `test -f 'radial-gradient-source.c' || echo '$(srcdir)/'`radial-gradient-source.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-source.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-source.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-source.c' object='cairo_test_suite-radial-gradient-source.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-source.o `test -f 'radial-gradient-source.c' || echo '$(srcdir)/'`radial-gradient-source.c
-
-cairo_test_suite-radial-gradient-source.obj: radial-gradient-source.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-source.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-source.Tpo -c -o cairo_test_suite-radial-gradient-source.obj `if test -f 'radial-gradient-source.c'; then $(CYGPATH_W) 'radial-gradient-source.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-source.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-source.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-source.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-source.c' object='cairo_test_suite-radial-gradient-source.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-source.obj `if test -f 'radial-gradient-source.c'; then $(CYGPATH_W) 'radial-gradient-source.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-source.c'; fi`
-
cairo_test_suite-random-intersections-eo.o: random-intersections-eo.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-random-intersections-eo.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-random-intersections-eo.Tpo -c -o cairo_test_suite-random-intersections-eo.o `test -f 'random-intersections-eo.c' || echo '$(srcdir)/'`random-intersections-eo.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-random-intersections-eo.Tpo $(DEPDIR)/cairo_test_suite-random-intersections-eo.Po
@@ -6360,6 +6505,22 @@ cairo_test_suite-random-intersections-curves-nz.obj: random-intersections-curves
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-random-intersections-curves-nz.obj `if test -f 'random-intersections-curves-nz.c'; then $(CYGPATH_W) 'random-intersections-curves-nz.c'; else $(CYGPATH_W) '$(srcdir)/random-intersections-curves-nz.c'; fi`
+cairo_test_suite-recording-surface-pattern.o: recording-surface-pattern.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-recording-surface-pattern.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo -c -o cairo_test_suite-recording-surface-pattern.o `test -f 'recording-surface-pattern.c' || echo '$(srcdir)/'`recording-surface-pattern.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='recording-surface-pattern.c' object='cairo_test_suite-recording-surface-pattern.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-recording-surface-pattern.o `test -f 'recording-surface-pattern.c' || echo '$(srcdir)/'`recording-surface-pattern.c
+
+cairo_test_suite-recording-surface-pattern.obj: recording-surface-pattern.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-recording-surface-pattern.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo -c -o cairo_test_suite-recording-surface-pattern.obj `if test -f 'recording-surface-pattern.c'; then $(CYGPATH_W) 'recording-surface-pattern.c'; else $(CYGPATH_W) '$(srcdir)/recording-surface-pattern.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='recording-surface-pattern.c' object='cairo_test_suite-recording-surface-pattern.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-recording-surface-pattern.obj `if test -f 'recording-surface-pattern.c'; then $(CYGPATH_W) 'recording-surface-pattern.c'; else $(CYGPATH_W) '$(srcdir)/recording-surface-pattern.c'; fi`
+
cairo_test_suite-rectangle-rounding-error.o: rectangle-rounding-error.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-rectangle-rounding-error.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-rectangle-rounding-error.Tpo -c -o cairo_test_suite-rectangle-rounding-error.o `test -f 'rectangle-rounding-error.c' || echo '$(srcdir)/'`rectangle-rounding-error.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-rectangle-rounding-error.Tpo $(DEPDIR)/cairo_test_suite-rectangle-rounding-error.Po
@@ -7672,6 +7833,38 @@ cairo_test_suite-user-font-rescale.obj: user-font-rescale.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-user-font-rescale.obj `if test -f 'user-font-rescale.c'; then $(CYGPATH_W) 'user-font-rescale.c'; else $(CYGPATH_W) '$(srcdir)/user-font-rescale.c'; fi`
+cairo_test_suite-white-in-noop.o: white-in-noop.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-white-in-noop.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-white-in-noop.Tpo -c -o cairo_test_suite-white-in-noop.o `test -f 'white-in-noop.c' || echo '$(srcdir)/'`white-in-noop.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-white-in-noop.Tpo $(DEPDIR)/cairo_test_suite-white-in-noop.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='white-in-noop.c' object='cairo_test_suite-white-in-noop.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-white-in-noop.o `test -f 'white-in-noop.c' || echo '$(srcdir)/'`white-in-noop.c
+
+cairo_test_suite-white-in-noop.obj: white-in-noop.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-white-in-noop.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-white-in-noop.Tpo -c -o cairo_test_suite-white-in-noop.obj `if test -f 'white-in-noop.c'; then $(CYGPATH_W) 'white-in-noop.c'; else $(CYGPATH_W) '$(srcdir)/white-in-noop.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-white-in-noop.Tpo $(DEPDIR)/cairo_test_suite-white-in-noop.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='white-in-noop.c' object='cairo_test_suite-white-in-noop.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-white-in-noop.obj `if test -f 'white-in-noop.c'; then $(CYGPATH_W) 'white-in-noop.c'; else $(CYGPATH_W) '$(srcdir)/white-in-noop.c'; fi`
+
+cairo_test_suite-xcb-stress-cache.o: xcb-stress-cache.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-xcb-stress-cache.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-xcb-stress-cache.Tpo -c -o cairo_test_suite-xcb-stress-cache.o `test -f 'xcb-stress-cache.c' || echo '$(srcdir)/'`xcb-stress-cache.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-xcb-stress-cache.Tpo $(DEPDIR)/cairo_test_suite-xcb-stress-cache.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xcb-stress-cache.c' object='cairo_test_suite-xcb-stress-cache.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-xcb-stress-cache.o `test -f 'xcb-stress-cache.c' || echo '$(srcdir)/'`xcb-stress-cache.c
+
+cairo_test_suite-xcb-stress-cache.obj: xcb-stress-cache.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-xcb-stress-cache.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-xcb-stress-cache.Tpo -c -o cairo_test_suite-xcb-stress-cache.obj `if test -f 'xcb-stress-cache.c'; then $(CYGPATH_W) 'xcb-stress-cache.c'; else $(CYGPATH_W) '$(srcdir)/xcb-stress-cache.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-xcb-stress-cache.Tpo $(DEPDIR)/cairo_test_suite-xcb-stress-cache.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xcb-stress-cache.c' object='cairo_test_suite-xcb-stress-cache.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-xcb-stress-cache.obj `if test -f 'xcb-stress-cache.c'; then $(CYGPATH_W) 'xcb-stress-cache.c'; else $(CYGPATH_W) '$(srcdir)/xcb-stress-cache.c'; fi`
+
cairo_test_suite-xcomposite-projection.o: xcomposite-projection.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-xcomposite-projection.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-xcomposite-projection.Tpo -c -o cairo_test_suite-xcomposite-projection.o `test -f 'xcomposite-projection.c' || echo '$(srcdir)/'`xcomposite-projection.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-xcomposite-projection.Tpo $(DEPDIR)/cairo_test_suite-xcomposite-projection.Po
@@ -8626,7 +8819,7 @@ dvi-am:
html: html-recursive
-html-am: html-local
+html-am:
info: info-recursive
@@ -8689,7 +8882,7 @@ uninstall-am:
clean-checkPROGRAMS clean-generic clean-libtool clean-local \
ctags ctags-recursive distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags distdir dvi \
- dvi-am html html-am html-local info info-am install install-am \
+ dvi-am html html-am info info-am install install-am \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
@@ -8772,24 +8965,16 @@ recheck:
@echo Re-checking failed tests
@$(MAKE) $(AM_MAKEFLAGS) $(recheck)
-# Checks tests and creates index.html.
+# Checks tests.
# Target doesn't fail if tests fail.
test:
- @$(MAKE) $(AM_MAKEFLAGS) check; \
- $(MAKE) $(AM_MAKEFLAGS) html
+ @$(MAKE) $(AM_MAKEFLAGS) check
-# Re-checks tests and creates index.html.
+# Re-checks tests.
# Target doesn't fail if tests fail.
retest:
@CAIRO_TESTS="$(FAILED_TESTS)"; \
- $(MAKE) $(AM_MAKEFLAGS) check; \
- $(MAKE) $(AM_MAKEFLAGS) html
-
-html-local: index.html
-
-# Make index.html with no dependency tracking, containing only the failed tests.
-rehtml:
- @CAIRO_TESTS="$(FAILED_TESTS)" $(MAKE) $(AM_MAKEFLAGS) html
+ $(MAKE) $(AM_MAKEFLAGS) check
# Run tests under a tool specified by TOOL. For example, make run TOOL=gdb
run:
@@ -8805,10 +8990,6 @@ check-valgrind:
$(NOLOG_TESTS_LOG):
@echo dummy > $@
-index.html: $(srcdir)/make-html.pl
- @echo Creating index.html
- @perl $(srcdir)/make-html.pl > $@
-
# Identify identical reference images
check-ref-dups:
@LANG=C; \
@@ -8859,7 +9040,18 @@ check-ref-missing:
release-verify-sane-tests: check-ref-missing
-.PHONY: check-valgrind test recheck retest rehtml check-ref-dups check-ref-missing release-verify-sane-tests
+results.tar:
+ @tar cf $@ index.html testtable.js *.log; \
+ for i in output/*.fail.png ; do \
+ testname=$${i#output/} ; \
+ testname=$${testname%%.*} ; \
+ tar uf $@ $${testname}*.ref.png $${i%fail.png}out.png $${i%fail.png}diff.png ; \
+ done
+
+results.tar.gz: results.tar
+ gzip -c $< > $@
+
+.PHONY: check-valgrind test recheck retest check-ref-dups check-ref-missing release-verify-sane-tests
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/Makefile.sources b/test/Makefile.sources
index 487fedd..3210745 100644
--- a/test/Makefile.sources
+++ b/test/Makefile.sources
@@ -9,6 +9,8 @@ test_sources = \
a8-mask.c \
aliasing.c \
alpha-similar.c \
+ arc-infinite-loop.c \
+ arc-looping-dash.c \
api-special-cases.c \
big-line.c \
big-trap.c \
@@ -122,6 +124,7 @@ test_sources = \
gradient-zero-stops-mask.c \
group-clip.c \
group-paint.c \
+ group-state.c \
group-unaligned.c \
half-coverage.c \
halo.c \
@@ -164,7 +167,13 @@ test_sources = \
mask-surface-ctm.c \
mask-transformed-image.c \
mask-transformed-similar.c \
- recording-surface-pattern.c \
+ mesh-pattern.c \
+ mesh-pattern-accuracy.c \
+ mesh-pattern-conical.c \
+ mesh-pattern-control-points.c \
+ mesh-pattern-fold.c \
+ mesh-pattern-overlap.c \
+ mesh-pattern-transformed.c \
mime-data.c \
miter-precision.c \
move-to-show-surface.c \
@@ -198,14 +207,11 @@ test_sources = \
push-group-path-offset.c \
radial-gradient.c \
radial-gradient-extend.c \
- radial-gradient-mask.c \
- radial-gradient-mask-source.c \
- radial-gradient-one-stop.c \
- radial-gradient-source.c \
random-intersections-eo.c \
random-intersections-nonzero.c \
random-intersections-curves-eo.c \
random-intersections-curves-nz.c \
+ recording-surface-pattern.c \
rectangle-rounding-error.c \
rectilinear-fill.c \
rectilinear-grid.c \
@@ -288,6 +294,8 @@ test_sources = \
user-font-mask.c \
user-font-proxy.c \
user-font-rescale.c \
+ white-in-noop.c \
+ xcb-stress-cache.c \
xcomposite-projection.c \
xlib-expose-event.c \
zero-alpha.c \
diff --git a/test/Makefile.win32 b/test/Makefile.win32
index b45617b..8d8f1f8 100644
--- a/test/Makefile.win32
+++ b/test/Makefile.win32
@@ -33,20 +33,9 @@ cairo-test-suite.exe: $(OBJECTS) ./pdiff/pdiff.lib ../boilerplate/$(CFG)/boiler.
../boilerplate/$(CFG)/boiler.lib:
(cd ../boilerplate ; $(MAKE) -f Makefile.win32)
-.PHONY: check test html
+.PHONY: check test
check: cairo-test-suite.exe
./cairo-test-suite.exe
-# define gen-html so that both 'test' and 'html' targets
-# can generate html while having different dependencies
-define gen-html
-@echo Creating index.html...
-@perl make-html.pl > index.html
-endef
-
test: check
- $(gen-html)
-
-html:
- $(gen-html)
diff --git a/test/README b/test/README
index 0cd3433..f753ccb 100644
--- a/test/README
+++ b/test/README
@@ -128,7 +128,7 @@ Here are some of the relevant details:
X server that uses only software for all rendering. One such X
server is Xvfb which can be started like this:
- Xvfb -screen 0 1280x1024x24 -ac -nolisten tcp :2
+ Xvfb -screen 0 1680x1024x24 -ac -nolisten tcp :2
after which the test suite can be run against it like so:
diff --git a/test/a1-bug.quartz.xfail.png b/test/a1-bug.quartz.xfail.png
new file mode 100644
index 0000000..4ed3793
--- /dev/null
+++ b/test/a1-bug.quartz.xfail.png
Binary files differ
diff --git a/test/a1-image-sample.quartz.xfail.png b/test/a1-image-sample.quartz.xfail.png
deleted file mode 100644
index ca24391..0000000
--- a/test/a1-image-sample.quartz.xfail.png
+++ /dev/null
Binary files differ
diff --git a/test/a1-mask-sample.quartz.xfail.png b/test/a1-mask-sample.quartz.xfail.png
deleted file mode 100644
index ca24391..0000000
--- a/test/a1-mask-sample.quartz.xfail.png
+++ /dev/null
Binary files differ
diff --git a/test/a1-rasterisation-rectangles.quartz.xfail.png b/test/a1-rasterisation-rectangles.quartz.xfail.png
new file mode 100644
index 0000000..f8f3bf8
--- /dev/null
+++ b/test/a1-rasterisation-rectangles.quartz.xfail.png
Binary files differ
diff --git a/test/a1-rasterisation-triangles.quartz.xfail.png b/test/a1-rasterisation-triangles.quartz.xfail.png
new file mode 100644
index 0000000..f8f3bf8
--- /dev/null
+++ b/test/a1-rasterisation-triangles.quartz.xfail.png
Binary files differ
diff --git a/test/a8-clear.quartz.ref.png b/test/a8-clear.quartz.ref.png
new file mode 100644
index 0000000..5b7c67f
--- /dev/null
+++ b/test/a8-clear.quartz.ref.png
Binary files differ
diff --git a/test/aliasing.quartz.ref.png b/test/aliasing.quartz.ref.png
new file mode 100644
index 0000000..f4b6e22
--- /dev/null
+++ b/test/aliasing.quartz.ref.png
Binary files differ
diff --git a/test/arc-infinite-loop.c b/test/arc-infinite-loop.c
new file mode 100644
index 0000000..8b469ea
--- /dev/null
+++ b/test/arc-infinite-loop.c
@@ -0,0 +1,61 @@
+/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */
+/*
+ * Copyright 2010 Andrea Canciani
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Andrea Canciani <ranma42@gmail.com>
+ */
+
+#include "cairo-test.h"
+#include <float.h>
+
+#define SIZE 8
+
+/*
+ cairo_arc can hang in an infinite loop if given huge (so big that
+ adding/subtracting 4*M_PI to them doesn't change the value because
+ of floating point rounding).
+
+ The purpose of this test is to check that cairo doesn't hang or crash.
+*/
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ cairo_paint (cr);
+
+ /* Check if the code that guarantees start <= end hangs */
+ cairo_arc (cr, 0, 0, 1, 1024 / DBL_EPSILON * M_PI, 0);
+
+ /* Check if the code that handles huge angles hangs */
+ cairo_arc (cr, 0, 0, 1, 0, 1024 / DBL_EPSILON * M_PI);
+
+ return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (arc_infinite_loop,
+ "Test cairo_arc with huge angles",
+ "arc", /* keywords */
+ NULL, /* requirements */
+ SIZE, SIZE,
+ NULL, draw)
diff --git a/test/arc-infinite-loop.ref.png b/test/arc-infinite-loop.ref.png
new file mode 100644
index 0000000..82d645f
--- /dev/null
+++ b/test/arc-infinite-loop.ref.png
Binary files differ
diff --git a/test/arc-looping-dash.c b/test/arc-looping-dash.c
new file mode 100644
index 0000000..2ad55f6
--- /dev/null
+++ b/test/arc-looping-dash.c
@@ -0,0 +1,77 @@
+/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */
+/*
+ * Copyright 2010 Andrea Canciani
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Andrea Canciani <ranma42@gmail.com>
+ */
+
+#include "cairo-test.h"
+
+#define SIZE 32
+
+/*
+ When cairo_arc is used to draw an arc of more than 2pi radians
+ (i.e. a circle "looping over itself"), various different behaviors
+ are possible:
+
+ - draw exactly a circle (an arc of 2pi radians)
+
+ - draw an arc such that the current point is the expected one and
+ that does at least a complete circle (an arc of [2pi, 4pi)
+ radians)
+
+ - draw an arc with the original number of loops
+
+ This test produces different results for each of these three cases.
+*/
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+ double dashes[] = { 0.3, 7 };
+
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ cairo_paint (cr);
+
+ cairo_save (cr);
+
+ cairo_translate (cr, SIZE * .5, SIZE * .5);
+ cairo_scale (cr, SIZE * 3 / 8., SIZE * 3 / 8.);
+
+ cairo_arc (cr, 0, 0, 1, 0, 11 * M_PI);
+
+ cairo_set_line_width (cr, 8. / SIZE);
+
+ cairo_set_source_rgb (cr, 0, 0, 0);
+ cairo_set_dash (cr, dashes, 2, 0);
+ cairo_stroke (cr);
+
+ return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (arc_looping_dash,
+ "Test cairo_arc for angles describing more than a complete circle",
+ "arc", /* keywords */
+ NULL, /* requirements */
+ SIZE, SIZE,
+ NULL, draw)
diff --git a/test/arc-looping-dash.image16.ref.png b/test/arc-looping-dash.image16.ref.png
new file mode 100644
index 0000000..addc93c
--- /dev/null
+++ b/test/arc-looping-dash.image16.ref.png
Binary files differ
diff --git a/test/arc-looping-dash.ps.ref.png b/test/arc-looping-dash.ps.ref.png
new file mode 100644
index 0000000..ab19b19
--- /dev/null
+++ b/test/arc-looping-dash.ps.ref.png
Binary files differ
diff --git a/test/arc-looping-dash.quartz.ref.png b/test/arc-looping-dash.quartz.ref.png
new file mode 100644
index 0000000..70304ca
--- /dev/null
+++ b/test/arc-looping-dash.quartz.ref.png
Binary files differ
diff --git a/test/arc-looping-dash.ref.png b/test/arc-looping-dash.ref.png
new file mode 100644
index 0000000..516e66c
--- /dev/null
+++ b/test/arc-looping-dash.ref.png
Binary files differ
diff --git a/test/cairo-test-constructors.c b/test/cairo-test-constructors.c
index 7a608d9..a0c09d0 100644
--- a/test/cairo-test-constructors.c
+++ b/test/cairo-test-constructors.c
@@ -15,6 +15,8 @@ extern void _register_a8_clear (void);
extern void _register_a8_mask (void);
extern void _register_aliasing (void);
extern void _register_alpha_similar (void);
+extern void _register_arc_infinite_loop (void);
+extern void _register_arc_looping_dash (void);
extern void _register_api_special_cases (void);
extern void _register_big_line (void);
extern void _register_big_trap (void);
@@ -137,6 +139,7 @@ extern void _register_gradient_zero_stops (void);
extern void _register_gradient_zero_stops_mask (void);
extern void _register_group_clip (void);
extern void _register_group_paint (void);
+extern void _register_group_state (void);
extern void _register_group_unaligned (void);
extern void _register_half_coverage_rectangles (void);
extern void _register_half_coverage_triangles (void);
@@ -181,7 +184,13 @@ extern void _register_mask_glyphs (void);
extern void _register_mask_surface_ctm (void);
extern void _register_mask_transformed_image (void);
extern void _register_mask_transformed_similar (void);
-extern void _register_recording_surface_pattern (void);
+extern void _register_mesh_pattern (void);
+extern void _register_mesh_pattern_accuracy (void);
+extern void _register_mesh_pattern_conical (void);
+extern void _register_mesh_pattern_control_points (void);
+extern void _register_mesh_pattern_fold (void);
+extern void _register_mesh_pattern_overlap (void);
+extern void _register_mesh_pattern_transformed (void);
extern void _register_mime_data (void);
extern void _register_miter_precision (void);
extern void _register_move_to_show_surface (void);
@@ -224,15 +233,16 @@ extern void _register_push_group (void);
extern void _register_push_group_color (void);
extern void _register_push_group_path_offset (void);
extern void _register_radial_gradient (void);
-extern void _register_radial_gradient_extend (void);
extern void _register_radial_gradient_mask (void);
+extern void _register_radial_gradient_source (void);
extern void _register_radial_gradient_mask_source (void);
extern void _register_radial_gradient_one_stop (void);
-extern void _register_radial_gradient_source (void);
+extern void _register_radial_gradient_extend (void);
extern void _register_random_intersections_eo (void);
extern void _register_random_intersections_nonzero (void);
extern void _register_random_intersections_curves_eo (void);
extern void _register_random_intersections_curves_nz (void);
+extern void _register_recording_surface_pattern (void);
extern void _register_rectangle_rounding_error (void);
extern void _register_rectilinear_fill (void);
extern void _register_rectilinear_grid (void);
@@ -318,6 +328,8 @@ extern void _register_user_font (void);
extern void _register_user_font_mask (void);
extern void _register_user_font_proxy (void);
extern void _register_user_font_rescale (void);
+extern void _register_white_in_noop (void);
+extern void _register_xcb_stress_cache (void);
extern void _register_xcomposite_projection (void);
extern void _register_xlib_expose_event (void);
extern void _register_zero_alpha (void);
@@ -361,6 +373,8 @@ _cairo_test_runner_register_tests (void)
_register_a8_mask ();
_register_aliasing ();
_register_alpha_similar ();
+ _register_arc_infinite_loop ();
+ _register_arc_looping_dash ();
_register_api_special_cases ();
_register_big_line ();
_register_big_trap ();
@@ -483,6 +497,7 @@ _cairo_test_runner_register_tests (void)
_register_gradient_zero_stops_mask ();
_register_group_clip ();
_register_group_paint ();
+ _register_group_state ();
_register_group_unaligned ();
_register_half_coverage_rectangles ();
_register_half_coverage_triangles ();
@@ -527,7 +542,13 @@ _cairo_test_runner_register_tests (void)
_register_mask_surface_ctm ();
_register_mask_transformed_image ();
_register_mask_transformed_similar ();
- _register_recording_surface_pattern ();
+ _register_mesh_pattern ();
+ _register_mesh_pattern_accuracy ();
+ _register_mesh_pattern_conical ();
+ _register_mesh_pattern_control_points ();
+ _register_mesh_pattern_fold ();
+ _register_mesh_pattern_overlap ();
+ _register_mesh_pattern_transformed ();
_register_mime_data ();
_register_miter_precision ();
_register_move_to_show_surface ();
@@ -570,15 +591,16 @@ _cairo_test_runner_register_tests (void)
_register_push_group_color ();
_register_push_group_path_offset ();
_register_radial_gradient ();
- _register_radial_gradient_extend ();
_register_radial_gradient_mask ();
+ _register_radial_gradient_source ();
_register_radial_gradient_mask_source ();
_register_radial_gradient_one_stop ();
- _register_radial_gradient_source ();
+ _register_radial_gradient_extend ();
_register_random_intersections_eo ();
_register_random_intersections_nonzero ();
_register_random_intersections_curves_eo ();
_register_random_intersections_curves_nz ();
+ _register_recording_surface_pattern ();
_register_rectangle_rounding_error ();
_register_rectilinear_fill ();
_register_rectilinear_grid ();
@@ -664,6 +686,8 @@ _cairo_test_runner_register_tests (void)
_register_user_font_mask ();
_register_user_font_proxy ();
_register_user_font_rescale ();
+ _register_white_in_noop ();
+ _register_xcb_stress_cache ();
_register_xcomposite_projection ();
_register_xlib_expose_event ();
_register_zero_alpha ();
diff --git a/test/cairo-test-runner.c b/test/cairo-test-runner.c
index 5aea643..539817e 100644
--- a/test/cairo-test-runner.c
+++ b/test/cairo-test-runner.c
@@ -125,6 +125,18 @@ _log (cairo_test_context_t *ctx,
va_end (ap);
}
+static void
+_tests_reverse ()
+{
+ cairo_test_t *list, *next;
+
+ for (list = tests, tests = NULL; list != NULL; list = next) {
+ next = list->next;
+ list->next = tests;
+ tests = list;
+ }
+}
+
static cairo_test_list_t *
_list_prepend (cairo_test_list_t *head, const cairo_test_t *test)
{
@@ -705,6 +717,7 @@ main (int argc, char **argv)
#endif
_cairo_test_runner_register_tests ();
+ _tests_reverse ();
memset (&runner, 0, sizeof (runner));
runner.num_device_offsets = 1;
diff --git a/test/clip-fill-eo-unbounded.quartz.argb32.ref.png b/test/clip-fill-eo-unbounded.quartz.argb32.ref.png
index 2ea24a3..3423000 100644
--- a/test/clip-fill-eo-unbounded.quartz.argb32.ref.png
+++ b/test/clip-fill-eo-unbounded.quartz.argb32.ref.png
Binary files differ
diff --git a/test/clip-fill-eo-unbounded.quartz.rgb24.ref.png b/test/clip-fill-eo-unbounded.quartz.rgb24.ref.png
index 2705008..1612801 100644
--- a/test/clip-fill-eo-unbounded.quartz.rgb24.ref.png
+++ b/test/clip-fill-eo-unbounded.quartz.rgb24.ref.png
Binary files differ
diff --git a/test/clip-fill-nz-unbounded.quartz.argb32.ref.png b/test/clip-fill-nz-unbounded.quartz.argb32.ref.png
index 2ea24a3..3423000 100644
--- a/test/clip-fill-nz-unbounded.quartz.argb32.ref.png
+++ b/test/clip-fill-nz-unbounded.quartz.argb32.ref.png
Binary files differ
diff --git a/test/clip-fill-nz-unbounded.quartz.rgb24.ref.png b/test/clip-fill-nz-unbounded.quartz.rgb24.ref.png
index 2705008..1612801 100644
--- a/test/clip-fill-nz-unbounded.quartz.rgb24.ref.png
+++ b/test/clip-fill-nz-unbounded.quartz.rgb24.ref.png
Binary files differ
diff --git a/test/clip-operator.pdf.argb32.ref.png b/test/clip-operator.pdf.argb32.ref.png
index 79600af..7f8c93e 100644
--- a/test/clip-operator.pdf.argb32.ref.png
+++ b/test/clip-operator.pdf.argb32.ref.png
Binary files differ
diff --git a/test/clip-operator.pdf.rgb24.ref.png b/test/clip-operator.pdf.rgb24.ref.png
index 163d54c..fc4f431 100644
--- a/test/clip-operator.pdf.rgb24.ref.png
+++ b/test/clip-operator.pdf.rgb24.ref.png
Binary files differ
diff --git a/test/clip-operator.quartz.argb32.ref.png b/test/clip-operator.quartz.argb32.ref.png
index bf71993..ecf6ee2 100644
--- a/test/clip-operator.quartz.argb32.ref.png
+++ b/test/clip-operator.quartz.argb32.ref.png
Binary files differ
diff --git a/test/clip-operator.quartz.rgb24.ref.png b/test/clip-operator.quartz.rgb24.ref.png
index 51a30b0..67c628f 100644
--- a/test/clip-operator.quartz.rgb24.ref.png
+++ b/test/clip-operator.quartz.rgb24.ref.png
Binary files differ
diff --git a/test/clip-stroke-unbounded.quartz.argb32.ref.png b/test/clip-stroke-unbounded.quartz.argb32.ref.png
index c6124dd..8bd5b36 100644
--- a/test/clip-stroke-unbounded.quartz.argb32.ref.png
+++ b/test/clip-stroke-unbounded.quartz.argb32.ref.png
Binary files differ
diff --git a/test/clip-stroke-unbounded.quartz.rgb24.ref.png b/test/clip-stroke-unbounded.quartz.rgb24.ref.png
index c6e0eb9..5349f84 100644
--- a/test/clip-stroke-unbounded.quartz.rgb24.ref.png
+++ b/test/clip-stroke-unbounded.quartz.rgb24.ref.png
Binary files differ
diff --git a/test/extended-blend-alpha.quartz.argb32.ref.png b/test/extended-blend-alpha.quartz.argb32.ref.png
new file mode 100644
index 0000000..e5701a6
--- /dev/null
+++ b/test/extended-blend-alpha.quartz.argb32.ref.png
Binary files differ
diff --git a/test/extended-blend-alpha.quartz.rgb24.ref.png b/test/extended-blend-alpha.quartz.rgb24.ref.png
new file mode 100644
index 0000000..477d346
--- /dev/null
+++ b/test/extended-blend-alpha.quartz.rgb24.ref.png
Binary files differ
diff --git a/test/extended-blend.quartz.argb32.ref.png b/test/extended-blend.quartz.argb32.ref.png
new file mode 100644
index 0000000..173c6e2
--- /dev/null
+++ b/test/extended-blend.quartz.argb32.ref.png
Binary files differ
diff --git a/test/extended-blend.quartz.rgb24.ref.png b/test/extended-blend.quartz.rgb24.ref.png
new file mode 100644
index 0000000..56a1214
--- /dev/null
+++ b/test/extended-blend.quartz.rgb24.ref.png
Binary files differ
diff --git a/test/fallback-resolution.c b/test/fallback-resolution.c
index 8ae952a..1d05973 100644
--- a/test/fallback-resolution.c
+++ b/test/fallback-resolution.c
@@ -328,27 +328,19 @@ preamble (cairo_test_context_t *ctx)
struct {
double x, y;
} ppi[] = {
- { 600, 600 },
- { 600, 72 },
+ { 576, 576 },
+ { 576, 72 },
- { 300, 300 },
- { 300, 72 },
+ { 288, 288 },
+ { 288, 72 },
- { 150, 150 },
- { 150, 72 },
+ { 144, 144 },
+ { 144, 72 },
- { 75, 75 },
- { 75, 72 },
-
- { 72, 600 },
- { 72, 300 },
- { 72, 150 },
- { 72, 75 },
+ { 72, 576 },
+ { 72, 288 },
+ { 72, 144 },
{ 72, 72 },
- { 72, 37.5 },
-
- { 37.5, 72 },
- { 37.5, 37.5 },
};
unsigned int i;
int n, num_ppi;
@@ -444,15 +436,13 @@ preamble (cairo_test_context_t *ctx)
fflush (stdout);
if (target->force_fallbacks != NULL)
- target->force_fallbacks (surface, ~0U);
+ target->force_fallbacks (surface, ppi[n].x, ppi[n].y);
cr = cairo_create (surface);
#if SET_TOLERANCE
cairo_set_tolerance (cr, 3.0);
#endif
cairo_surface_set_device_offset (surface, 25, 25);
- cairo_surface_set_fallback_resolution (surface,
- ppi[n].x, ppi[n].y);
cairo_save (cr); {
cairo_set_source_rgb (cr, 1, 1, 1);
diff --git a/test/fallback-resolution.ppi144x144.ps.ref.png b/test/fallback-resolution.ppi144x144.ps.ref.png
new file mode 100644
index 0000000..0922f03
--- /dev/null
+++ b/test/fallback-resolution.ppi144x144.ps.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi144x144.ref.png b/test/fallback-resolution.ppi144x144.ref.png
new file mode 100644
index 0000000..cbe93ca
--- /dev/null
+++ b/test/fallback-resolution.ppi144x144.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi144x72.ps.ref.png b/test/fallback-resolution.ppi144x72.ps.ref.png
new file mode 100644
index 0000000..2f8d82d
--- /dev/null
+++ b/test/fallback-resolution.ppi144x72.ps.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi144x72.ref.png b/test/fallback-resolution.ppi144x72.ref.png
new file mode 100644
index 0000000..4c16ca1
--- /dev/null
+++ b/test/fallback-resolution.ppi144x72.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi150x150.ref.png b/test/fallback-resolution.ppi150x150.ref.png
deleted file mode 100644
index 40e68a9..0000000
--- a/test/fallback-resolution.ppi150x150.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi150x72.ref.png b/test/fallback-resolution.ppi150x72.ref.png
deleted file mode 100644
index 47e0c58..0000000
--- a/test/fallback-resolution.ppi150x72.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi288x288.pdf.ref.png b/test/fallback-resolution.ppi288x288.pdf.ref.png
new file mode 100644
index 0000000..181e110
--- /dev/null
+++ b/test/fallback-resolution.ppi288x288.pdf.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi288x288.ps.ref.png b/test/fallback-resolution.ppi288x288.ps.ref.png
new file mode 100644
index 0000000..99bccef
--- /dev/null
+++ b/test/fallback-resolution.ppi288x288.ps.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi288x288.svg.ref.png b/test/fallback-resolution.ppi288x288.svg.ref.png
new file mode 100644
index 0000000..e71ff81
--- /dev/null
+++ b/test/fallback-resolution.ppi288x288.svg.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi288x72.ps.ref.png b/test/fallback-resolution.ppi288x72.ps.ref.png
new file mode 100644
index 0000000..89b9c51
--- /dev/null
+++ b/test/fallback-resolution.ppi288x72.ps.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi288x72.ref.png b/test/fallback-resolution.ppi288x72.ref.png
new file mode 100644
index 0000000..b213587
--- /dev/null
+++ b/test/fallback-resolution.ppi288x72.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi300x300.ref.png b/test/fallback-resolution.ppi300x300.ref.png
deleted file mode 100644
index 61af74c..0000000
--- a/test/fallback-resolution.ppi300x300.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi300x72.ref.png b/test/fallback-resolution.ppi300x72.ref.png
deleted file mode 100644
index d790a38..0000000
--- a/test/fallback-resolution.ppi300x72.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi37.5x37.5.ref.png b/test/fallback-resolution.ppi37.5x37.5.ref.png
deleted file mode 100644
index 172fbcd..0000000
--- a/test/fallback-resolution.ppi37.5x37.5.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi37.5x72.ref.png b/test/fallback-resolution.ppi37.5x72.ref.png
deleted file mode 100644
index cac416a..0000000
--- a/test/fallback-resolution.ppi37.5x72.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi576x576.pdf.ref.png b/test/fallback-resolution.ppi576x576.pdf.ref.png
new file mode 100644
index 0000000..5b37619
--- /dev/null
+++ b/test/fallback-resolution.ppi576x576.pdf.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi576x576.ps.ref.png b/test/fallback-resolution.ppi576x576.ps.ref.png
new file mode 100644
index 0000000..9dc4735
--- /dev/null
+++ b/test/fallback-resolution.ppi576x576.ps.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi576x576.svg.ref.png b/test/fallback-resolution.ppi576x576.svg.ref.png
new file mode 100644
index 0000000..b5a97e3
--- /dev/null
+++ b/test/fallback-resolution.ppi576x576.svg.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi576x72.ps.ref.png b/test/fallback-resolution.ppi576x72.ps.ref.png
new file mode 100644
index 0000000..9ac6be4
--- /dev/null
+++ b/test/fallback-resolution.ppi576x72.ps.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi576x72.ref.png b/test/fallback-resolution.ppi576x72.ref.png
new file mode 100644
index 0000000..b63e66e
--- /dev/null
+++ b/test/fallback-resolution.ppi576x72.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi600x600.ref.png b/test/fallback-resolution.ppi600x600.ref.png
deleted file mode 100644
index 34a2e56..0000000
--- a/test/fallback-resolution.ppi600x600.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi600x72.ref.png b/test/fallback-resolution.ppi600x72.ref.png
deleted file mode 100644
index ed45777..0000000
--- a/test/fallback-resolution.ppi600x72.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi72x144.ps.ref.png b/test/fallback-resolution.ppi72x144.ps.ref.png
new file mode 100644
index 0000000..50b5a99
--- /dev/null
+++ b/test/fallback-resolution.ppi72x144.ps.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi72x144.ref.png b/test/fallback-resolution.ppi72x144.ref.png
new file mode 100644
index 0000000..9d232c0
--- /dev/null
+++ b/test/fallback-resolution.ppi72x144.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi72x150.ref.png b/test/fallback-resolution.ppi72x150.ref.png
deleted file mode 100644
index db61cba..0000000
--- a/test/fallback-resolution.ppi72x150.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi72x288.ps.ref.png b/test/fallback-resolution.ppi72x288.ps.ref.png
new file mode 100644
index 0000000..b4ff82d
--- /dev/null
+++ b/test/fallback-resolution.ppi72x288.ps.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi72x288.ref.png b/test/fallback-resolution.ppi72x288.ref.png
new file mode 100644
index 0000000..fdbc382
--- /dev/null
+++ b/test/fallback-resolution.ppi72x288.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi72x300.ref.png b/test/fallback-resolution.ppi72x300.ref.png
deleted file mode 100644
index 76b5b0c..0000000
--- a/test/fallback-resolution.ppi72x300.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi72x37.5.ref.png b/test/fallback-resolution.ppi72x37.5.ref.png
deleted file mode 100644
index a459d52..0000000
--- a/test/fallback-resolution.ppi72x37.5.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi72x576.ps.ref.png b/test/fallback-resolution.ppi72x576.ps.ref.png
new file mode 100644
index 0000000..6a3ddcb
--- /dev/null
+++ b/test/fallback-resolution.ppi72x576.ps.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi72x576.ref.png b/test/fallback-resolution.ppi72x576.ref.png
new file mode 100644
index 0000000..c943f08
--- /dev/null
+++ b/test/fallback-resolution.ppi72x576.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi72x600.ref.png b/test/fallback-resolution.ppi72x600.ref.png
deleted file mode 100644
index 38235a3..0000000
--- a/test/fallback-resolution.ppi72x600.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi72x72.ref.png b/test/fallback-resolution.ppi72x72.ref.png
index b76fd94..5d1df2c 100644
--- a/test/fallback-resolution.ppi72x72.ref.png
+++ b/test/fallback-resolution.ppi72x72.ref.png
Binary files differ
diff --git a/test/fallback-resolution.ppi72x75.ref.png b/test/fallback-resolution.ppi72x75.ref.png
deleted file mode 100644
index 3c22cca..0000000
--- a/test/fallback-resolution.ppi72x75.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi75x72.ref.png b/test/fallback-resolution.ppi75x72.ref.png
deleted file mode 100644
index 161edb0..0000000
--- a/test/fallback-resolution.ppi75x72.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/fallback-resolution.ppi75x75.ref.png b/test/fallback-resolution.ppi75x75.ref.png
deleted file mode 100644
index 3769d09..0000000
--- a/test/fallback-resolution.ppi75x75.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/filter-nearest-offset.quartz.xfail.png b/test/filter-nearest-offset.quartz.xfail.png
deleted file mode 100644
index ee69e36..0000000
--- a/test/filter-nearest-offset.quartz.xfail.png
+++ /dev/null
Binary files differ
diff --git a/test/filter-nearest-transformed.quartz.xfail.png b/test/filter-nearest-transformed.quartz.xfail.png
index c616d64..246cdf4 100644
--- a/test/filter-nearest-transformed.quartz.xfail.png
+++ b/test/filter-nearest-transformed.quartz.xfail.png
Binary files differ
diff --git a/test/ft-show-glyphs-positioning.pdf.ref.png b/test/ft-show-glyphs-positioning.pdf.ref.png
index 796d4eb..0d62fd3 100644
--- a/test/ft-show-glyphs-positioning.pdf.ref.png
+++ b/test/ft-show-glyphs-positioning.pdf.ref.png
Binary files differ
diff --git a/test/get-path-extents.c b/test/get-path-extents.c
index 3a05eff..a9a6ad1 100644
--- a/test/get-path-extents.c
+++ b/test/get-path-extents.c
@@ -156,8 +156,7 @@ draw (cairo_t *cr, int width, int height)
phase = "Degenerate arc (Θ=0)";
errors += !check_extents (ctx, phase, cr2, FILL, EQUALS, 0, 0, 0, 0);
errors += !check_extents (ctx, phase, cr2, STROKE, EQUALS, 0, 0, 0, 0);
- /*XXX: I'd expect these extents to be oriented at 200, 400 */
- errors += !check_extents (ctx, phase, cr2, PATH, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (ctx, phase, cr2, PATH, EQUALS, 210, 400, 0, 0);
cairo_new_path (cr2);
cairo_restore (cr2);
diff --git a/test/group-state.c b/test/group-state.c
new file mode 100644
index 0000000..a96b2e3
--- /dev/null
+++ b/test/group-state.c
@@ -0,0 +1,96 @@
+/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */
+/*
+ * Copyright 2011 Andrea Canciani
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Andrea Canciani <ranma42@gmail.com>
+ */
+
+#include "cairo-test.h"
+
+#define CHECK_STATUS(status) \
+ do { \
+ if (cairo_status (cr) != (status)) { \
+ cairo_test_log (ctx, "Expected status: %s\n", \
+ cairo_status_to_string (status)); \
+ cairo_test_log (ctx, "Actual status: %s\n", \
+ cairo_status_to_string (cairo_status (cr))); \
+ result = CAIRO_TEST_FAILURE; \
+ } \
+ } while (0)
+
+static void
+reinit_cairo (cairo_t **cr)
+{
+ if (*cr)
+ cairo_destroy (*cr);
+
+ *cr = cairo_create (cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 1, 1));
+ cairo_surface_destroy (cairo_get_target (*cr));
+}
+
+static cairo_test_status_t
+preamble (cairo_test_context_t *ctx)
+{
+ cairo_t *cr;
+ cairo_test_status_t result = CAIRO_TEST_SUCCESS;
+
+ cr = NULL;
+
+ reinit_cairo (&cr);
+
+ /* cairo_restore() must fail with CAIRO_STATUS_INVALID_RESTORE if
+ * no matching cairo_save() call has been performed. */
+ cairo_test_log (ctx, "Checking save(); push(); restore();\n");
+ cairo_save (cr);
+ CHECK_STATUS (CAIRO_STATUS_SUCCESS);
+ cairo_push_group (cr);
+ CHECK_STATUS (CAIRO_STATUS_SUCCESS);
+ cairo_restore (cr);
+ CHECK_STATUS (CAIRO_STATUS_INVALID_RESTORE);
+
+
+ reinit_cairo (&cr);
+
+ /* cairo_restore() must fail with CAIRO_STATUS_INVALID_RESTORE if
+ * no matching cairo_save() call has been performed. */
+ cairo_test_log (ctx, "Checking push(); save(); pop();\n");
+ cairo_push_group (cr);
+ CHECK_STATUS (CAIRO_STATUS_SUCCESS);
+ cairo_save (cr);
+ CHECK_STATUS (CAIRO_STATUS_SUCCESS);
+ cairo_pop_group_to_source (cr);
+ CHECK_STATUS (CAIRO_STATUS_INVALID_POP_GROUP);
+
+
+ cairo_destroy (cr);
+
+ return result;
+}
+
+CAIRO_TEST (group_state,
+ "Tests the interaction between state (cairo_save, cairo_restore) "
+ "and group (cairo_push_group/cairo_pop_group) API",
+ "api", /* keywords */
+ NULL, /* requirements */
+ 0, 0,
+ preamble, NULL)
diff --git a/test/huge-linear.c b/test/huge-linear.c
index e57d299..f84b4ea 100644
--- a/test/huge-linear.c
+++ b/test/huge-linear.c
@@ -27,7 +27,7 @@
#include "cairo-test.h"
/* set this to 0.1 to make this test work */
-#define FACTOR 1
+#define FACTOR 1.e6
/* XXX poppler-cairo doesn't handle gradients very well... */
diff --git a/test/huge-linear.image16.ref.png b/test/huge-linear.image16.ref.png
index 30297b9..56dc58a 100644
--- a/test/huge-linear.image16.ref.png
+++ b/test/huge-linear.image16.ref.png
Binary files differ
diff --git a/test/huge-linear.pdf.ref.png b/test/huge-linear.pdf.ref.png
index cf1f8fc..8313470 100644
--- a/test/huge-linear.pdf.ref.png
+++ b/test/huge-linear.pdf.ref.png
Binary files differ
diff --git a/test/huge-linear.quartz.ref.png b/test/huge-linear.quartz.ref.png
new file mode 100644
index 0000000..3d12f7b
--- /dev/null
+++ b/test/huge-linear.quartz.ref.png
Binary files differ
diff --git a/test/huge-radial.c b/test/huge-radial.c
index 7356244..21524b7 100644
--- a/test/huge-radial.c
+++ b/test/huge-radial.c
@@ -29,7 +29,7 @@
#include "cairo-test.h"
/* set this to 0.1 to make this test work */
-#define FACTOR 1
+#define FACTOR 1.e6
/* XXX poppler-cairo doesn't handle gradients very well... */
diff --git a/test/index.html b/test/index.html
new file mode 100644
index 0000000..54c65cd
--- /dev/null
+++ b/test/index.html
@@ -0,0 +1,42 @@
+<html><head>
+<title>Cairo Test Results</title>
+<style type="text/css">
+#HcolHeader { text-align: center; }
+
+img { max-width: 15em; min-width: 3em; min-height: 3em; margin: 3px; }
+a img { border: solid 1px #FFF; }
+
+td { vertical-align: top; }
+span { cursor: pointer; }
+
+td.PASS { background-color: #0B0; min-width: 1em; }
+span.PASS { color: #0B0; }
+
+td.NEW { background-color: #B70; }
+span.NEW { color: #B70; }
+
+td.FAIL { background-color: #B00; }
+span.FAIL { color: #D00; }
+
+td.XFAIL { background-color: #BB0; }
+span.XFAIL { color: #BB0; }
+
+td.UNTESTED { background-color: #555; }
+span.UNTESTED { color: #555; }
+
+td.CRASHED { background-color: #F00; color: #FF0; }
+span.CRASHED { color: #F00; }
+
+.test { }
+.target { }
+.format { }
+.offset { }
+.similar { }
+
+</style>
+<script language="JavaScript" src="testtable.js"></script>
+</head>
+<body oncontextmenu='ignoreEvent (event)' onmouseup='noDrag (event)'>
+<table id="testTable" border="1"></table>
+</body>
+</html>
diff --git a/test/large-source-roi.c b/test/large-source-roi.c
index e429f98..dfd3554 100644
--- a/test/large-source-roi.c
+++ b/test/large-source-roi.c
@@ -47,7 +47,9 @@ static cairo_test_status_t
draw (cairo_t *cr, int width, int height)
{
cairo_surface_t *source;
- double source_width = 32767.0;
+ /* Since 1cc750ed92a936d84b47cac696aaffd226e1c02e pixman will not
+ * paint on the source surface if source_width > 30582. */
+ double source_width = 30000.0;
cairo_set_source_rgb (cr, 1,1,1);
cairo_paint (cr);
diff --git a/test/linear-gradient-large.quartz.ref.png b/test/linear-gradient-large.quartz.ref.png
new file mode 100644
index 0000000..68f0829
--- /dev/null
+++ b/test/linear-gradient-large.quartz.ref.png
Binary files differ
diff --git a/test/linear-gradient-large.ref.png b/test/linear-gradient-large.ref.png
index 753fe2a..f1f37ab 100644
--- a/test/linear-gradient-large.ref.png
+++ b/test/linear-gradient-large.ref.png
Binary files differ
diff --git a/test/linear-gradient-subset.quartz.ref.png b/test/linear-gradient-subset.quartz.ref.png
index 8183411..85d80ad 100644
--- a/test/linear-gradient-subset.quartz.ref.png
+++ b/test/linear-gradient-subset.quartz.ref.png
Binary files differ
diff --git a/test/linear-gradient.quartz.ref.png b/test/linear-gradient.quartz.ref.png
index 47332d3..1c3e7c2 100644
--- a/test/linear-gradient.quartz.ref.png
+++ b/test/linear-gradient.quartz.ref.png
Binary files differ
diff --git a/test/make-html.pl b/test/make-html.pl
deleted file mode 100755
index 9c0626d..0000000
--- a/test/make-html.pl
+++ /dev/null
@@ -1,303 +0,0 @@
-#!/usr/bin/perl
-#
-# Copyright © 2005 Mozilla Corporation
-#
-# Permission to use, copy, modify, distribute, and sell this software
-# and its documentation for any purpose is hereby granted without
-# fee, provided that the above copyright notice appear in all copies
-# and that both that copyright notice and this permission notice
-# appear in supporting documentation, and that the name of
-# Mozilla Corporation not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission. Mozilla Corporation makes no representations about the
-# suitability of this software for any purpose. It is provided "as
-# is" without express or implied warranty.
-#
-# MOZILLA CORPORTAION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-# FITNESS, IN NO EVENT SHALL MOZILLA CORPORATION BE LIABLE FOR ANY SPECIAL,
-# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
-# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-# Author: Vladimir Vukicevic <vladimir@pobox.com>
-#
-
-use MIME::Base64;
-
-##
-## Takes all the *.log files in the current directory (or those provided
-## on the command line) and spits out html to stdout that can be used to
-## view all the test results at once.
-##
-
-# show reference images
-$config_show_ref = $ENV{'CAIRO_TEST_SHOW_REF'} || 0;
-
-# show fail images
-$config_show_fail = $ENV{'CAIRO_TEST_SHOW_FAIL'} || 1;
-
-# show all results, even passes
-$config_show_all = $ENV{'CAIRO_TEST_SHOW_ALL'} || 0;
-
-# include test results inline
-$config_show_inline = $ENV{'CAIRO_TEST_SHOW_INLINE'} || 0;
-
-# end of config options
-
-$tests = {};
-$teststats = {};
-$logs = {};
-
-if ($#ARGV >= 0) { @files = @ARGV; } else { @files = <*.log>; }
-
-foreach (<@files>) {
- my $testname;
- my $out_path, $diff_path, $ref_path;
- my $fn = $_;
- (open LOG, $fn) || next;
- while (<LOG>) {
- if (/^OUTPUT: (.*)$/) {
- $out_path = $1;
- next;
- }
- if (/^DIFFERENCE: (.*)$/) {
- $diff_path = $1;
- next;
- }
- if (/^REFERENCE: (.*)$/) {
- $ref_path = $1;
- next;
- }
- next unless /^TEST: (.*) TARGET: (.*) FORMAT: (.*) OFFSET: (.*) SIMILAR: (.*) RESULT: ([A-Z]*).*$/;
- $testname = $1 if !defined($testname);
- $tests->{$1} = {} unless $tests->{$1};
- $tests->{$1}->{$2} = {} unless $tests->{$1}->{$2};
- $tests->{$1}->{$2}->{$3} = {} unless $tests->{$1}->{$2}->{$3};
- $tests->{$1}->{$2}->{$3}->{$4} = {} unless $tests->{$1}->{$2}->{$3}->{$4};
- $tests->{$1}->{$2}->{$3}->{$4}->{$5}->{'out'} = $out_path;
- $tests->{$1}->{$2}->{$3}->{$4}->{$5}->{'diff'} = $diff_path;
- $tests->{$1}->{$2}->{$3}->{$4}->{$5}->{'ref'} = $ref_path;
- $tests->{$1}->{$2}->{$3}->{$4}->{$5}->{'result'} = $6;
-
- $teststats->{$2} = {"PASS" => 0, "FAIL" => 0, "NEW" => 0, "XFAIL" => 0, "UNTESTED" => 0, "CRASHED" =>0}
- unless $teststats->{$2};
- ($teststats->{$2}->{$6})++;
-
- undef $out_path;
- undef $diff_path;
- undef $ref_path;
- }
- close LOG;
-
- (open LOG, $fn) || die "I could open it earlier, but I can't now: $!";
- {
- local $/;
- $logs->{$testname} = <LOG>;
- }
- close LOG;
-}
-
-my $targeth = {};
-my $formath = {};
-my $offseth = {};
-my $similarh = {};
-
-foreach my $testname (sort(keys %$tests)) {
- my $v0 = $tests->{$testname};
- foreach my $targetname (sort(keys %$v0)) {
- my $v1 = $v0->{$targetname};
-
- $targeth->{$targetname} = 1;
- foreach my $formatname (sort(keys %$v1)) {
- my $v2 = $v1->{$formatname};
-
- $formath->{$formatname} = 1;
- foreach my $offsetval (sort(keys %$v2)) {
- my $v3 = $v2->{$offsetval};
-
- $offseth->{$offsetval} = 1;
- foreach my $similarval (sort(keys %$v3)) {
- $similarh->{$similarval} = 1;
- }
- }
- }
- }
-}
-
-my @targets = sort(keys %$targeth);
-my @formats = sort(keys %$formath);
-my @offsets = sort(keys %$offseth);
-my @similars = sort(keys %$similarh);
-
-sub printl {
- print @_, "\n";
-}
-
-# convert file into a data URI
-sub file_to_data {
- my ($ctype,$fname) = @_;
- my $fdata;
- open FILE, $fname || return "data:" . $ctype . ",";
- {
- local $/;
- $fdata = encode_base64(<FILE>);
- }
- close FILE;
- return "data:" . $ctype . ";base64," . $fdata;
-}
-
-# convert string into a data URI
-sub string_to_data {
- my ($ctype,$str) = @_;
- $str =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
- return "data:" . $ctype . "," . $str;
-}
-
-printl '<html><head>';
-printl '<title>Cairo Test Results</title>';
-printl '<style type="text/css">';
-printl 'a img { border: solid 1px #FFF; }';
-printl '.PASS { background-color: #0B0; min-width: 1em; }';
-printl '.NEW { background-color: #B70; }';
-printl '.FAIL { background-color: #B00; }';
-printl '.XFAIL { background-color: #BB0; }';
-printl '.UNTESTED { background-color: #555; }';
-printl '.CRASHED { background-color: #F00; color: #FF0; }';
-printl '.PASSstr { color: #0B0; }';
-printl '.FAILstr { color: #D00; }';
-printl '.XFAILstr { color: #BB0; }';
-printl '.CRASHEDstr { color: #F00; }';
-printl '.UNTESTEDstr { color: #555; }';
-printl 'img { max-width: 15em; min-width: 3em; min-height: 3em; margin: 3px; }';
-printl 'td { vertical-align: top; }';
-printl '</style>';
-printl '</script>';
-printl '</head>';
-printl '<body>';
-
-printl '<table border="1">';
-print '<tr><th>Test</th>';
-
-foreach my $target (@targets) {
- print '<th>', $target, '</th>';
-}
-printl '</tr>';
-
-print '<tr><td></td>';
-
-foreach my $target (@targets) {
- print '<td>';
- print '<span class="PASSstr">', $teststats->{$target}->{"PASS"}, '</span>/';
- print '<span class="FAILstr">',
- $teststats->{$target}->{"FAIL"} +
- $teststats->{$target}->{"NEW"} +
- $teststats->{$target}->{"CRASHED"},
- '</span>/';
- print '<span class="XFAILstr">', $teststats->{$target}->{"XFAIL"}, '</span>/';
- print '<span class="UNTESTEDstr">', $teststats->{$target}->{"UNTESTED"}, '</span>';
- print '</td>';
-}
-printl '</tr>';
-
-sub img_for {
- my ($fn, $withlink) = @_;
-
- return "" unless defined $fn;
-
- if ($config_show_inline) {
- $fn = file_to_data("image/png", $fn);
- # never return links, people can just right-click view image,
- # and we don't clutter the document
- return '<img src="' . $fn . '">';
- } else {
- if ($withlink) {
- return '<a href="' . $fn . '"><img src="' . $fn . '"></a>';
- } else {
- return '<img src="' . $fn . '">';
- }
- }
-}
-
-foreach my $test (sort(keys %$tests)) {
- foreach my $offset (@offsets) {
- foreach my $similar (@similars) {
- foreach my $format (@formats) {
- my $testline = "";
-
- foreach my $target (@targets) {
- my $tgtdata = $tests->{$test}->{$target};
- if ($tgtdata) {
- my $testres = $tgtdata->{$format}->{$offset}->{$similar};
- if ($testres) {
- my %testfiles;
- $testfiles{'out'} = $testres->{'out'};
- $testfiles{'diff'} = $testres->{'diff'};
- $testfiles{'ref'} = $testres->{'ref'};
-
- $testline .= "<td class=\"$testres->{'result'}\">";
- $teststats{$target}{$testres}++;
- if ($testres->{'result'} eq "PASS") {
- if ($config_show_all) {
- $testline .= img_for($testfiles{'out'},1);
- }
- } elsif ($testres->{'result'} eq "FAIL") {
- if ($config_show_fail || $config_show_all) {
- $testline .= img_for($testfiles{'out'},1);
- $testline .= " ";
- $testline .= img_for($testfiles{'diff'},1);
- $testline .= " ";
- $testline .= img_for($testfiles{'ref'},1);
- }
- } elsif ($testres->{'result'} eq "NEW") {
- if ($config_show_fail || $config_show_all) {
- $testline .= img_for($testfiles{'new'},1);
- }
- } elsif ($testres->{'result'} eq "CRASHED") {
- $testline .= "!!!CRASHED!!!";
- } elsif ($testres->{'result'} eq "XFAIL") {
- #nothing
- if ($config_show_all) {
- $testline .= img_for($testfiles{'out'},1);
- #$testline .= "<hr size=\"1\">";
- $testline .= " ";
- $testline .= img_for($testfiles{'diff'},1);
- $testline .= " ";
- $testline .= img_for($testfiles{'ref'},1);
- }
- } elsif ($testres->{'result'} eq "UNTESTED") {
- #nothing
- } else {
- $testline .= "UNSUPPORTED STATUS '$testres->{'result'}' (update make-html.pl)";
- }
-
- $testline .= "</td>";
- } else {
- $testline .= '<td></td>';
- }
- } else {
- $testline .= '<td></td>';
- }
- }
- print '<tr><td>';
-
- if ($config_show_inline) {
- print "$test ($format/$offset) ";
- print "(<a href=\"" . string_to_data("text/plain",$logs->{$test}) . "\">log</a>)";
- } else {
- print $test, ' (', $format, '/', $offset, ($similar ? ' similar' : ''), ') ';
- print "(<a href=\"$test.log\">log</a>)";
- }
-
- print '</td>';
-
- print $testline;
-
- print "</tr>\n";
- }
- }
- }
-}
-
-print "</table></body></html>\n";
diff --git a/test/mask.quartz.argb32.ref.png b/test/mask.quartz.argb32.ref.png
index 53d034a..c7ab76e 100644
--- a/test/mask.quartz.argb32.ref.png
+++ b/test/mask.quartz.argb32.ref.png
Binary files differ
diff --git a/test/mesh-pattern-accuracy.c b/test/mesh-pattern-accuracy.c
new file mode 100644
index 0000000..0f756c5
--- /dev/null
+++ b/test/mesh-pattern-accuracy.c
@@ -0,0 +1,99 @@
+/*
+ * Copyright © 2009 Adrian Johnson
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Adrian Johnson <ajohnson@redneon.com>
+ */
+
+#include "cairo-test.h"
+#include <float.h>
+
+#define SIZE 256
+
+/* This test is designed to test the accuracy of the rendering of mesh
+ * patterns.
+ *
+ * Color accuracy is tested by a square patch covering the whole
+ * surface with black and white corners.
+ *
+ * Extents accuracy is checked by a small red square patch at the
+ * center of the surface which should measure 2x2 pixels.
+ */
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+ cairo_pattern_t *pattern;
+ double offset;
+
+ cairo_test_paint_checkered (cr);
+
+ pattern = cairo_pattern_create_mesh ();
+
+ cairo_pattern_mesh_begin_patch (pattern);
+
+ cairo_pattern_mesh_move_to (pattern, 0, 0);
+ cairo_pattern_mesh_line_to (pattern, 1, 0);
+ cairo_pattern_mesh_line_to (pattern, 1, 1);
+ cairo_pattern_mesh_line_to (pattern, 0, 1);
+
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 0, 0, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 1, 1, 1);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 1);
+
+ cairo_pattern_mesh_end_patch (pattern);
+
+ cairo_pattern_mesh_begin_patch (pattern);
+
+ /* A small 1x1 red patch, that should be rendered as a 2x2 red
+ * square in the center of the image */
+
+ offset = 0.5 / SIZE;
+
+ cairo_pattern_mesh_move_to (pattern, 0.5 + offset, 0.5 + offset);
+ cairo_pattern_mesh_line_to (pattern, 0.5 + offset, 0.5 - offset);
+ cairo_pattern_mesh_line_to (pattern, 0.5 - offset, 0.5 - offset);
+ cairo_pattern_mesh_line_to (pattern, 0.5 - offset, 0.5 + offset);
+
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 1, 0, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 1, 0, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 0, 0);
+
+ cairo_pattern_mesh_end_patch (pattern);
+
+ cairo_scale (cr, SIZE, SIZE);
+
+ cairo_set_source (cr, pattern);
+ cairo_paint (cr);
+ cairo_pattern_destroy (pattern);
+
+ return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (mesh_pattern_accuracy,
+ "Paint mesh pattern",
+ "mesh,pattern", /* keywords */
+ NULL, /* requirements */
+ SIZE, SIZE,
+ NULL, draw)
diff --git a/test/mesh-pattern-accuracy.image16.ref.png b/test/mesh-pattern-accuracy.image16.ref.png
new file mode 100644
index 0000000..a82e4fb
--- /dev/null
+++ b/test/mesh-pattern-accuracy.image16.ref.png
Binary files differ
diff --git a/test/mesh-pattern-accuracy.ref.png b/test/mesh-pattern-accuracy.ref.png
new file mode 100644
index 0000000..dfc19ff
--- /dev/null
+++ b/test/mesh-pattern-accuracy.ref.png
Binary files differ
diff --git a/test/mesh-pattern-conical.c b/test/mesh-pattern-conical.c
new file mode 100644
index 0000000..aa3e182
--- /dev/null
+++ b/test/mesh-pattern-conical.c
@@ -0,0 +1,135 @@
+/*
+ * Copyright © 2009 Adrian Johnson
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Adrian Johnson <ajohnson@redneon.com>
+ */
+
+#include "cairo-test.h"
+#include <math.h>
+
+#define PAT_WIDTH 100
+#define PAT_HEIGHT 100
+#define SIZE PAT_WIDTH
+#define PAD 2
+#define WIDTH (PAD + SIZE + PAD)
+#define HEIGHT WIDTH
+
+
+/*
+ * This test is designed to paint a mesh pattern which contains 8
+ * circular sectors approximating a conical gradient.
+ */
+
+#define CENTER_X 50
+#define CENTER_Y 50
+#define RADIUS 50
+
+static void
+sector_patch (cairo_pattern_t *pattern,
+ double angle_A,
+ double A_r, double A_g, double A_b,
+ double angle_B,
+ double B_r, double B_g, double B_b)
+{
+ double r_sin_A, r_cos_A;
+ double r_sin_B, r_cos_B;
+ double h;
+
+ r_sin_A = RADIUS * sin (angle_A);
+ r_cos_A = RADIUS * cos (angle_A);
+ r_sin_B = RADIUS * sin (angle_B);
+ r_cos_B = RADIUS * cos (angle_B);
+
+ h = 4.0/3.0 * tan ((angle_B - angle_A) / 4.0);
+
+ cairo_pattern_mesh_begin_patch (pattern);
+
+ cairo_pattern_mesh_move_to (pattern, CENTER_X, CENTER_Y);
+ cairo_pattern_mesh_line_to (pattern,
+ CENTER_X + r_cos_A,
+ CENTER_Y + r_sin_A);
+
+ cairo_pattern_mesh_curve_to (pattern,
+ CENTER_X + r_cos_A - h * r_sin_A,
+ CENTER_Y + r_sin_A + h * r_cos_A,
+ CENTER_X + r_cos_B + h * r_sin_B,
+ CENTER_Y + r_sin_B - h * r_cos_B,
+ CENTER_X + r_cos_B,
+ CENTER_Y + r_sin_B);
+
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 1, 1);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, A_r, A_g, A_b);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, B_r, B_g, B_b);
+
+ cairo_pattern_mesh_end_patch (pattern);
+}
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+ cairo_pattern_t *pattern;
+
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ cairo_paint (cr);
+
+ cairo_translate (cr, PAD, PAD);
+
+ pattern = cairo_pattern_create_mesh ();
+ sector_patch (pattern,
+ 0, 1, 0, 0,
+ M_PI/4, 1, 1, 0);
+ sector_patch (pattern,
+ M_PI/4, 0, 1, 0,
+ M_PI/2, 0, 1, 1);
+ sector_patch (pattern,
+ M_PI/2, 0, 0, 1,
+ 3*M_PI/4, 1, 0, 1);
+ sector_patch (pattern,
+ 3*M_PI/4, 1, 0, 0,
+ M_PI, 1, 1, 0);
+ sector_patch (pattern,
+ -M_PI, 1, 1, 0,
+ -3*M_PI/4, 0, 1, 0);
+ sector_patch (pattern,
+ -3*M_PI/4, 0, 1, 0,
+ -M_PI/2, 0, 1, 1);
+ sector_patch (pattern,
+ -M_PI/2, 0, 1, 1,
+ -M_PI/4, 0, 0, 1);
+ sector_patch (pattern,
+ -M_PI/4, 0, 0, 1,
+ 0, 1, 0, 0);
+
+ cairo_set_source (cr, pattern);
+ cairo_paint (cr);
+ cairo_pattern_destroy (pattern);
+
+ return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (mesh_pattern_conical,
+ "Paint a conical pattern using a mesh pattern",
+ "conical,mesh,pattern", /* keywords */
+ NULL, /* requirements */
+ WIDTH, HEIGHT,
+ NULL, draw)
diff --git a/test/mesh-pattern-conical.image16.ref.png b/test/mesh-pattern-conical.image16.ref.png
new file mode 100644
index 0000000..b8f9416
--- /dev/null
+++ b/test/mesh-pattern-conical.image16.ref.png
Binary files differ
diff --git a/test/mesh-pattern-conical.ref.png b/test/mesh-pattern-conical.ref.png
new file mode 100644
index 0000000..f5dc21d
--- /dev/null
+++ b/test/mesh-pattern-conical.ref.png
Binary files differ
diff --git a/test/mesh-pattern-control-points.c b/test/mesh-pattern-control-points.c
new file mode 100644
index 0000000..54ff850
--- /dev/null
+++ b/test/mesh-pattern-control-points.c
@@ -0,0 +1,114 @@
+/*
+ * Copyright © 2009 Adrian Johnson
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Adrian Johnson <ajohnson@redneon.com>
+ */
+
+#include "cairo-test.h"
+
+#define SIZE 90
+#define PAD 10
+#define WIDTH (PAD + 2 * (SIZE + PAD))
+#define HEIGHT (PAD + SIZE + PAD)
+
+
+/*
+ * This test is designed to paint a two mesh patches. One with default
+ * control points and one with a control point at a no default
+ * location. The control points of both of them are drawn as squares
+ * to make them visible.
+ */
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+ cairo_pattern_t *pattern;
+ unsigned int i, j;
+ unsigned int num_patches;
+ double x, y;
+
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ cairo_paint (cr);
+
+ cairo_translate (cr, PAD, PAD);
+
+ pattern = cairo_pattern_create_mesh ();
+ cairo_pattern_mesh_begin_patch (pattern);
+
+ cairo_pattern_mesh_move_to (pattern, 0, 0);
+ cairo_pattern_mesh_line_to (pattern, SIZE, 0);
+ cairo_pattern_mesh_line_to (pattern, SIZE, SIZE);
+ cairo_pattern_mesh_line_to (pattern, 0, SIZE);
+
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 1);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0);
+
+ cairo_pattern_mesh_set_control_point (pattern, 0, SIZE * .7, SIZE * .7);
+ cairo_pattern_mesh_set_control_point (pattern, 1, SIZE * .9, SIZE * .7);
+ cairo_pattern_mesh_set_control_point (pattern, 2, SIZE * .9, SIZE * .9);
+ cairo_pattern_mesh_set_control_point (pattern, 3, SIZE * .7, SIZE * .9);
+
+ cairo_pattern_mesh_end_patch (pattern);
+
+ cairo_pattern_mesh_begin_patch (pattern);
+
+ cairo_pattern_mesh_move_to (pattern, SIZE + PAD, 0);
+ cairo_pattern_mesh_line_to (pattern, 2*SIZE + PAD, 0);
+ cairo_pattern_mesh_line_to (pattern, 2*SIZE + PAD, SIZE);
+ cairo_pattern_mesh_line_to (pattern, SIZE + PAD, SIZE);
+
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 1);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0);
+
+ cairo_pattern_mesh_end_patch (pattern);
+
+ cairo_set_source (cr, pattern);
+ cairo_paint (cr);
+
+ /* mark the location of the control points */
+ cairo_set_source_rgb (cr, 0, 0, 0);
+ cairo_pattern_mesh_get_patch_count (pattern, &num_patches);
+ for (i = 0; i < num_patches; i++) {
+ for (j = 0; j < 4; j++) {
+ cairo_pattern_mesh_get_control_point (pattern, i, j, &x, &y);
+ cairo_rectangle (cr, x - 5, y - 5, 10, 10);
+ cairo_fill (cr);
+ }
+ }
+
+ cairo_pattern_destroy (pattern);
+
+ return CAIRO_TEST_SUCCESS;
+}
+
+
+CAIRO_TEST (mesh_pattern_control_points,
+ "Paint mesh pattern with non default control points",
+ "mesh,pattern", /* keywords */
+ NULL, /* requirements */
+ WIDTH, HEIGHT,
+ NULL, draw)
diff --git a/test/mesh-pattern-control-points.image16.ref.png b/test/mesh-pattern-control-points.image16.ref.png
new file mode 100644
index 0000000..b664ef9
--- /dev/null
+++ b/test/mesh-pattern-control-points.image16.ref.png
Binary files differ
diff --git a/test/mesh-pattern-control-points.ref.png b/test/mesh-pattern-control-points.ref.png
new file mode 100644
index 0000000..841fc3e
--- /dev/null
+++ b/test/mesh-pattern-control-points.ref.png
Binary files differ
diff --git a/test/mesh-pattern-fold.c b/test/mesh-pattern-fold.c
new file mode 100644
index 0000000..586b0cd
--- /dev/null
+++ b/test/mesh-pattern-fold.c
@@ -0,0 +1,82 @@
+/*
+ * Copyright © 2009 Adrian Johnson
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Adrian Johnson <ajohnson@redneon.com>
+ */
+
+#include "cairo-test.h"
+
+#define SIZE 100
+#define PAD 15
+#define WIDTH (5*SIZE)
+#define HEIGHT (5*SIZE)
+
+
+/* This test is designed to paint a mesh pattern which folds along
+ * both parameters. */
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+ cairo_pattern_t *pattern;
+
+ cairo_test_paint_checkered (cr);
+
+ pattern = cairo_pattern_create_mesh ();
+
+ cairo_pattern_mesh_begin_patch (pattern);
+
+ cairo_pattern_mesh_move_to (pattern, 1, 1);
+
+ cairo_pattern_mesh_curve_to (pattern, 6, 0, -1, 0, 4, 1);
+ cairo_pattern_mesh_curve_to (pattern, 5, 6, 5, -1, 4, 4);
+ cairo_pattern_mesh_curve_to (pattern, -1, 3, 6, 3, 1, 4);
+ cairo_pattern_mesh_curve_to (pattern, 2, -1, 2, 6, 1, 1);
+
+ cairo_pattern_mesh_set_control_point (pattern, 0, 2, 3);
+ cairo_pattern_mesh_set_control_point (pattern, 1, 3, 3);
+ cairo_pattern_mesh_set_control_point (pattern, 2, 3, 2);
+ cairo_pattern_mesh_set_control_point (pattern, 3, 2, 2);
+
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 0, 1);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 0, 1, 0);
+
+ cairo_pattern_mesh_end_patch (pattern);
+
+ cairo_scale (cr, SIZE, SIZE);
+
+ cairo_set_source (cr, pattern);
+ cairo_paint (cr);
+ cairo_pattern_destroy (pattern);
+
+ return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (mesh_pattern_fold,
+ "Paint a mesh pattern with complex folds",
+ "mesh,pattern", /* keywords */
+ NULL, /* requirements */
+ WIDTH, HEIGHT,
+ NULL, draw)
diff --git a/test/mesh-pattern-fold.image16.ref.png b/test/mesh-pattern-fold.image16.ref.png
new file mode 100644
index 0000000..4264ad2
--- /dev/null
+++ b/test/mesh-pattern-fold.image16.ref.png
Binary files differ
diff --git a/test/mesh-pattern-fold.ref.png b/test/mesh-pattern-fold.ref.png
new file mode 100644
index 0000000..6275b82
--- /dev/null
+++ b/test/mesh-pattern-fold.ref.png
Binary files differ
diff --git a/test/mesh-pattern-overlap.c b/test/mesh-pattern-overlap.c
new file mode 100644
index 0000000..63cf024
--- /dev/null
+++ b/test/mesh-pattern-overlap.c
@@ -0,0 +1,76 @@
+/*
+ * Copyright © 2009 Adrian Johnson
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Adrian Johnson <ajohnson@redneon.com>
+ */
+
+#include "cairo-test.h"
+
+#define SIZE 100
+#define PAD 15
+#define WIDTH (PAD + SIZE + PAD)
+#define HEIGHT WIDTH
+
+
+/* This test is designed to paint a mesh pattern with a simple
+ * fold. */
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+ cairo_pattern_t *pattern;
+
+ cairo_test_paint_checkered (cr);
+
+ cairo_translate (cr, PAD, PAD);
+
+ pattern = cairo_pattern_create_mesh ();
+
+ cairo_pattern_mesh_begin_patch (pattern);
+
+ cairo_pattern_mesh_move_to (pattern, 0, 0);
+ cairo_pattern_mesh_curve_to (pattern, 30, -30, 60, 30, 100, 0);
+ cairo_pattern_mesh_curve_to (pattern, 130, 140, 60, -40, 100, 100);
+ cairo_pattern_mesh_curve_to (pattern, 60, 70, 30, 130, 0, 100);
+ cairo_pattern_mesh_curve_to (pattern, -30, -40, 30, 140, 0, 0);
+
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 1);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0);
+
+ cairo_pattern_mesh_end_patch (pattern);
+
+ cairo_set_source (cr, pattern);
+ cairo_paint (cr);
+ cairo_pattern_destroy (pattern);
+
+ return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (mesh_pattern_overlap,
+ "Paint a mesh pattern with a simple fold",
+ "mesh,pattern", /* keywords */
+ NULL, /* requirements */
+ WIDTH, HEIGHT,
+ NULL, draw)
diff --git a/test/mesh-pattern-overlap.image16.ref.png b/test/mesh-pattern-overlap.image16.ref.png
new file mode 100644
index 0000000..a67f7dd
--- /dev/null
+++ b/test/mesh-pattern-overlap.image16.ref.png
Binary files differ
diff --git a/test/mesh-pattern-overlap.ref.png b/test/mesh-pattern-overlap.ref.png
new file mode 100644
index 0000000..1394c9e
--- /dev/null
+++ b/test/mesh-pattern-overlap.ref.png
Binary files differ
diff --git a/test/mesh-pattern-transformed.c b/test/mesh-pattern-transformed.c
new file mode 100644
index 0000000..278e4a8
--- /dev/null
+++ b/test/mesh-pattern-transformed.c
@@ -0,0 +1,107 @@
+/*
+ * Copyright © 2009 Adrian Johnson
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Adrian Johnson <ajohnson@redneon.com>
+ */
+
+#include "cairo-test.h"
+
+#define PAT_WIDTH 170
+#define PAT_HEIGHT 170
+#define SIZE PAT_WIDTH
+#define PAD 10
+#define WIDTH 190
+#define HEIGHT 140
+
+
+/* This test is designed to paint a mesh pattern containing two
+ * overlapping patches transformed in different ways. */
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+ cairo_pattern_t *pattern;
+
+ cairo_test_paint_checkered (cr);
+
+ cairo_translate (cr, PAD, PAD);
+
+ pattern = cairo_pattern_create_mesh ();
+
+ cairo_pattern_mesh_begin_patch (pattern);
+
+ cairo_pattern_mesh_move_to (pattern, 0, 0);
+ cairo_pattern_mesh_curve_to (pattern, 30, -30, 60, 30, 100, 0);
+ cairo_pattern_mesh_curve_to (pattern, 60, 30, 130, 60, 100, 100);
+ cairo_pattern_mesh_curve_to (pattern, 60, 70, 30, 130, 0, 100);
+ cairo_pattern_mesh_curve_to (pattern, 30, 70, -30, 30, 0, 0);
+
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 1);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0);
+
+ cairo_pattern_mesh_end_patch (pattern);
+
+ cairo_pattern_mesh_begin_patch (pattern);
+
+ cairo_pattern_mesh_move_to (pattern, 50, 50);
+ cairo_pattern_mesh_curve_to (pattern, 80, 20, 110, 80, 150, 50);
+
+ cairo_pattern_mesh_curve_to (pattern, 110, 80, 180, 110, 150, 150);
+
+ cairo_pattern_mesh_curve_to (pattern, 110, 120, 80, 180, 50, 150);
+
+ cairo_pattern_mesh_curve_to (pattern, 80, 120, 20, 80, 50, 50);
+
+ cairo_pattern_mesh_set_corner_color_rgba (pattern, 0, 1, 0, 0, 0.3);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0);
+ cairo_pattern_mesh_set_corner_color_rgba (pattern, 2, 0, 0, 1, 0.3);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0);
+
+ cairo_pattern_mesh_end_patch (pattern);
+
+ cairo_scale (cr, .5, .5);
+
+ cairo_set_source (cr, pattern);
+ cairo_paint (cr);
+
+ cairo_translate (cr, PAT_WIDTH, PAT_HEIGHT);
+ cairo_translate (cr, PAT_WIDTH/2, PAT_HEIGHT/2);
+ cairo_rotate (cr, M_PI/4);
+ cairo_translate (cr, -PAT_WIDTH, -PAT_HEIGHT);
+ cairo_set_source (cr, pattern);
+ cairo_paint (cr);
+
+ cairo_pattern_destroy (pattern);
+
+ return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (mesh_pattern_transformed,
+ "Paint mesh pattern with a transformation",
+ "mesh,pattern", /* keywords */
+ NULL, /* requirements */
+ WIDTH, HEIGHT,
+ NULL, draw)
+
diff --git a/test/mesh-pattern-transformed.image16.ref.png b/test/mesh-pattern-transformed.image16.ref.png
new file mode 100644
index 0000000..0645b86
--- /dev/null
+++ b/test/mesh-pattern-transformed.image16.ref.png
Binary files differ
diff --git a/test/mesh-pattern-transformed.ref.png b/test/mesh-pattern-transformed.ref.png
new file mode 100644
index 0000000..9aa482f
--- /dev/null
+++ b/test/mesh-pattern-transformed.ref.png
Binary files differ
diff --git a/test/mesh-pattern.c b/test/mesh-pattern.c
new file mode 100644
index 0000000..bcd49be
--- /dev/null
+++ b/test/mesh-pattern.c
@@ -0,0 +1,94 @@
+/*
+ * Copyright © 2009 Adrian Johnson
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Adrian Johnson <ajohnson@redneon.com>
+ */
+
+#include "cairo-test.h"
+
+#define PAT_WIDTH 170
+#define PAT_HEIGHT 170
+#define SIZE PAT_WIDTH
+#define PAD 2
+#define WIDTH (PAD + SIZE + PAD)
+#define HEIGHT WIDTH
+
+
+/* This test is designed to paint a mesh pattern. The mesh contains
+ * two overlapping patches */
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+ cairo_pattern_t *pattern;
+
+ cairo_test_paint_checkered (cr);
+
+ cairo_translate (cr, PAD, PAD);
+ cairo_translate (cr, 10, 10);
+
+ pattern = cairo_pattern_create_mesh ();
+
+ cairo_pattern_mesh_begin_patch (pattern);
+
+ cairo_pattern_mesh_move_to (pattern, 0, 0);
+ cairo_pattern_mesh_curve_to (pattern, 30, -30, 60, 30, 100, 0);
+ cairo_pattern_mesh_curve_to (pattern, 60, 30, 130, 60, 100, 100);
+ cairo_pattern_mesh_curve_to (pattern, 60, 70, 30, 130, 0, 100);
+ cairo_pattern_mesh_curve_to (pattern, 30, 70, -30, 30, 0, 0);
+
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 1);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0);
+
+ cairo_pattern_mesh_end_patch (pattern);
+
+ cairo_pattern_mesh_begin_patch (pattern);
+
+ cairo_pattern_mesh_move_to (pattern, 50, 50);
+ cairo_pattern_mesh_curve_to (pattern, 80, 20, 110, 80, 150, 50);
+ cairo_pattern_mesh_curve_to (pattern, 110, 80, 180, 110, 150, 150);
+ cairo_pattern_mesh_curve_to (pattern, 110, 120, 80, 180, 50, 150);
+ cairo_pattern_mesh_curve_to (pattern, 80, 120, 20, 80, 50, 50);
+
+ cairo_pattern_mesh_set_corner_color_rgba (pattern, 0, 1, 0, 0, 0.3);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0);
+ cairo_pattern_mesh_set_corner_color_rgba (pattern, 2, 0, 0, 1, 0.3);
+ cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0);
+
+ cairo_pattern_mesh_end_patch (pattern);
+
+ cairo_set_source (cr, pattern);
+ cairo_paint (cr);
+ cairo_pattern_destroy (pattern);
+
+ return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (mesh_pattern,
+ "Paint mesh pattern",
+ "mesh,pattern", /* keywords */
+ NULL, /* requirements */
+ WIDTH, HEIGHT,
+ NULL, draw)
diff --git a/test/mesh-pattern.image16.ref.png b/test/mesh-pattern.image16.ref.png
new file mode 100644
index 0000000..bd63538
--- /dev/null
+++ b/test/mesh-pattern.image16.ref.png
Binary files differ
diff --git a/test/mesh-pattern.ref.png b/test/mesh-pattern.ref.png
new file mode 100644
index 0000000..1f76639
--- /dev/null
+++ b/test/mesh-pattern.ref.png
Binary files differ
diff --git a/test/operator-alpha-alpha.c b/test/operator-alpha-alpha.c
index b76faf5..2cef858 100644
--- a/test/operator-alpha-alpha.c
+++ b/test/operator-alpha-alpha.c
@@ -93,9 +93,9 @@ subdraw (cairo_t *cr, int width, int height)
cairo_surface_t *bg, *fg;
bg = cairo_surface_create_similar (cairo_get_target (cr),
- CAIRO_CONTENT_COLOR_ALPHA, SIZE * STEPS, SIZE * STEPS);
+ CAIRO_CONTENT_ALPHA, SIZE * STEPS, SIZE * STEPS);
fg = cairo_surface_create_similar (cairo_get_target (cr),
- CAIRO_CONTENT_COLOR_ALPHA, SIZE * STEPS, SIZE * STEPS);
+ CAIRO_CONTENT_ALPHA, SIZE * STEPS, SIZE * STEPS);
bgcr = cairo_create (bg);
fgcr = cairo_create (fg);
cairo_scale (bgcr, SIZE, SIZE);
diff --git a/test/operator-source.quartz.argb32.ref.png b/test/operator-source.quartz.argb32.ref.png
index 4e15991..83d788c 100644
--- a/test/operator-source.quartz.argb32.ref.png
+++ b/test/operator-source.quartz.argb32.ref.png
Binary files differ
diff --git a/test/operator-source.quartz.rgb24.ref.png b/test/operator-source.quartz.rgb24.ref.png
index c40c242..038662f 100644
--- a/test/operator-source.quartz.rgb24.ref.png
+++ b/test/operator-source.quartz.rgb24.ref.png
Binary files differ
diff --git a/test/overlapping-glyphs.quartz.argb32.ref.png b/test/overlapping-glyphs.quartz.argb32.ref.png
new file mode 100644
index 0000000..eaa0cb9
--- /dev/null
+++ b/test/overlapping-glyphs.quartz.argb32.ref.png
Binary files differ
diff --git a/test/overlapping-glyphs.quartz.rgb24.ref.png b/test/overlapping-glyphs.quartz.rgb24.ref.png
new file mode 100644
index 0000000..c2b5fc0
--- /dev/null
+++ b/test/overlapping-glyphs.quartz.rgb24.ref.png
Binary files differ
diff --git a/test/partial-clip-text.quartz.ref.png b/test/partial-clip-text.quartz.ref.png
new file mode 100644
index 0000000..33ac283
--- /dev/null
+++ b/test/partial-clip-text.quartz.ref.png
Binary files differ
diff --git a/test/pattern-get-type.c b/test/pattern-get-type.c
index d2ef5bf..c807b14 100644
--- a/test/pattern-get-type.c
+++ b/test/pattern-get-type.c
@@ -29,7 +29,7 @@ static cairo_test_status_t
preamble (cairo_test_context_t *Ctx)
{
cairo_surface_t *surface;
- cairo_pattern_t *solid_rgb, *solid_rgba, *surface_pattern, *linear, *radial;
+ cairo_pattern_t *solid_rgb, *solid_rgba, *surface_pattern, *linear, *radial, *mesh;
cairo_test_status_t result = CAIRO_TEST_SUCCESS;
solid_rgb = cairo_pattern_create_rgb (0.0, 0.1, 0.2);
@@ -40,6 +40,7 @@ preamble (cairo_test_context_t *Ctx)
linear = cairo_pattern_create_linear (0.0, 0.0, 10.0, 10.0);
radial = cairo_pattern_create_radial (10.0, 10.0, 0.1,
10.0, 10.0, 1.0);
+ mesh = cairo_pattern_create_mesh ();
if (cairo_pattern_get_type (solid_rgb) != CAIRO_PATTERN_TYPE_SOLID)
result = CAIRO_TEST_FAILURE;
@@ -56,12 +57,16 @@ preamble (cairo_test_context_t *Ctx)
if (cairo_pattern_get_type (radial) != CAIRO_PATTERN_TYPE_RADIAL)
result = CAIRO_TEST_FAILURE;
+ if (cairo_pattern_get_type (mesh) != CAIRO_PATTERN_TYPE_MESH)
+ result = CAIRO_TEST_FAILURE;
+
cairo_pattern_destroy (solid_rgb);
cairo_pattern_destroy (solid_rgba);
cairo_pattern_destroy (surface_pattern);
cairo_surface_destroy (surface);
cairo_pattern_destroy (linear);
cairo_pattern_destroy (radial);
+ cairo_pattern_destroy (mesh);
return result;
}
diff --git a/test/pattern-getters.c b/test/pattern-getters.c
index 657159c..2d7d904 100644
--- a/test/pattern-getters.c
+++ b/test/pattern-getters.c
@@ -183,6 +183,88 @@ draw (cairo_t *cr, int width, int height)
cairo_pattern_destroy (pat);
}
+ /* Test mesh getters */
+ {
+ unsigned int count;
+ int i;
+ pat = cairo_pattern_create_mesh ();
+
+ status = cairo_pattern_mesh_get_patch_count (pat, &count);
+ CHECK_SUCCESS;
+
+ if (count != 0) {
+ cairo_pattern_destroy (pat);
+ return CAIRO_TEST_FAILURE;
+ }
+
+ cairo_pattern_mesh_begin_patch (pat);
+ cairo_pattern_mesh_move_to (pat, 0, 0);
+ cairo_pattern_mesh_line_to (pat, 0, 3);
+ cairo_pattern_mesh_line_to (pat, 3, 3);
+ cairo_pattern_mesh_line_to (pat, 3, 0);
+
+ status = cairo_pattern_mesh_get_patch_count (pat, &count);
+ CHECK_SUCCESS;
+
+ if (count != 0) {
+ cairo_pattern_destroy (pat);
+ return CAIRO_TEST_FAILURE;
+ }
+
+ cairo_pattern_mesh_end_patch (pat);
+
+ status = cairo_pattern_mesh_get_patch_count (pat, &count);
+ CHECK_SUCCESS;
+
+ if (count != 1) {
+ cairo_pattern_destroy (pat);
+ return CAIRO_TEST_FAILURE;
+ }
+
+ for (i = 0; i < 4; i++) {
+ double cp_x[4] = { 1, 1, 2, 2 };
+ double cp_y[4] = { 1, 2, 2, 1 };
+ double x, y;
+
+ status = cairo_pattern_mesh_get_control_point (pat, 0, i, &x, &y);
+ CHECK_SUCCESS;
+
+ if (!CAIRO_TEST_DOUBLE_EQUALS(x,cp_x[i]) ||
+ !CAIRO_TEST_DOUBLE_EQUALS(y,cp_y[i]))
+ {
+ cairo_pattern_destroy (pat);
+ return CAIRO_TEST_FAILURE;
+ }
+ }
+
+ cairo_pattern_mesh_begin_patch (pat);
+ cairo_pattern_mesh_move_to (pat, 0, 0);
+ cairo_pattern_mesh_line_to (pat, 1, 0);
+ cairo_pattern_mesh_line_to (pat, 1, 1);
+ cairo_pattern_mesh_set_corner_color_rgb (pat, 0, 1, 1, 1);
+ cairo_pattern_mesh_end_patch (pat);
+
+ for (i = 0; i < 4; i++) {
+ double corner_color[4] = { 1, 0, 0, 1 };
+ double a, r, g, b;
+
+ status = cairo_pattern_mesh_get_corner_color_rgba (pat, 1, i,
+ &r, &g, &b, &a);
+ CHECK_SUCCESS;
+
+ if (!CAIRO_TEST_DOUBLE_EQUALS(a,corner_color[i]) ||
+ !CAIRO_TEST_DOUBLE_EQUALS(r,corner_color[i]) ||
+ !CAIRO_TEST_DOUBLE_EQUALS(g,corner_color[i]) ||
+ !CAIRO_TEST_DOUBLE_EQUALS(b,corner_color[i]))
+ {
+ cairo_pattern_destroy (pat);
+ return CAIRO_TEST_FAILURE;
+ }
+ }
+
+ cairo_pattern_destroy (pat);
+ }
+
cairo_set_source_rgb (cr, 0, 1, 0);
cairo_paint (cr);
diff --git a/test/ps-eps.c b/test/ps-eps.c
index 726cb46..33802f3 100644
--- a/test/ps-eps.c
+++ b/test/ps-eps.c
@@ -1,6 +1,7 @@
/*
* Copyright © 2006 Red Hat, Inc.
* Copyright © 2009 Adrian Johnson
+ * Copyright © 2008 Chris Wilson
*
* Permission to use, copy, modify, distribute, and sell this software
* and its documentation for any purpose is hereby granted without
@@ -22,59 +23,342 @@
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* Author: Carl D. Worth <cworth@cworth.org>
- * Author: Adrian Johnson <ajohnson@redneon.com>
+ * Adrian Johnson <ajohnson@redneon.com>
+ * Chris Wilson <chris@chris-wilson.co.uk>
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdio.h>
+#include <stdlib.h>
#include <math.h>
#include <cairo.h>
#include <cairo-ps.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#include <errno.h>
+#endif
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
#include "cairo-test.h"
+#include "buffer-diff.h"
/* Test EPS output.
*/
-static cairo_test_status_t
-preamble (cairo_test_context_t *ctx)
+#define WIDTH 595
+#define HEIGHT 842
+
+/* Reference Bounding Box */
+#define LLX 95
+#define LLY 687
+#define URX 155
+#define URY 747
+
+static void
+_xunlink (const cairo_test_context_t *ctx, const char *pathname)
{
- cairo_surface_t *surface;
- cairo_t *cr;
+ if (unlink (pathname) < 0 && errno != ENOENT) {
+ cairo_test_log (ctx, "Error: Cannot remove %s: %s\n",
+ pathname, strerror (errno));
+ exit (1);
+ }
+}
+
+static cairo_bool_t
+check_result (cairo_test_context_t *ctx,
+ const cairo_boilerplate_target_t *target,
+ const char *test_name,
+ const char *base_name,
+ cairo_surface_t *surface)
+{
+ const char *format;
+ char *ref_name;
+ char *png_name;
+ char *diff_name;
+ cairo_surface_t *test_image, *ref_image, *diff_image;
+ buffer_diff_result_t result;
cairo_status_t status;
- const char *filename;
+ cairo_bool_t ret;
- if (! (cairo_test_is_target_enabled (ctx, "ps2") ||
- cairo_test_is_target_enabled (ctx, "ps3")))
- {
- return CAIRO_TEST_UNTESTED;
+ /* XXX log target, OUTPUT, REFERENCE, DIFFERENCE for index.html */
+
+ if (target->finish_surface != NULL) {
+ status = target->finish_surface (surface);
+ if (status) {
+ cairo_test_log (ctx, "Error: Failed to finish surface: %s\n",
+ cairo_status_to_string (status));
+ cairo_surface_destroy (surface);
+ return FALSE;
+ }
}
- filename = "ps-eps.out.eps";
+ xasprintf (&png_name, "%s.out.png", base_name);
+ xasprintf (&diff_name, "%s.diff.png", base_name);
- surface = cairo_ps_surface_create (filename, 595, 842);
- cairo_ps_surface_set_eps (surface, TRUE);
- cr = cairo_create (surface);
+ test_image = target->get_image_surface (surface, 0, WIDTH, HEIGHT);
+ if (cairo_surface_status (test_image)) {
+ cairo_test_log (ctx, "Error: Failed to extract page: %s\n",
+ cairo_status_to_string (cairo_surface_status (test_image)));
+ cairo_surface_destroy (test_image);
+ free (png_name);
+ free (diff_name);
+ return FALSE;
+ }
- cairo_new_sub_path (cr);
- cairo_arc (cr, 100, 100, 25, 0, 2*M_PI);
- cairo_set_line_width (cr, 10);
- cairo_stroke (cr);
+ _xunlink (ctx, png_name);
+ status = cairo_surface_write_to_png (test_image, png_name);
+ if (status) {
+ cairo_test_log (ctx, "Error: Failed to write output image: %s\n",
+ cairo_status_to_string (status));
+ cairo_surface_destroy (test_image);
+ free (png_name);
+ free (diff_name);
+ return FALSE;
+ }
- cairo_show_page (cr);
+ format = cairo_boilerplate_content_name (target->content);
+ ref_name = cairo_test_reference_filename (ctx,
+ base_name,
+ test_name,
+ target->name,
+ target->basename,
+ format,
+ CAIRO_TEST_REF_SUFFIX,
+ CAIRO_TEST_PNG_EXTENSION);
+ if (ref_name == NULL) {
+ cairo_test_log (ctx, "Error: Cannot find reference image for %s\n",
+ base_name);
+ cairo_surface_destroy (test_image);
+ free (png_name);
+ free (diff_name);
+ return FALSE;
+ }
- status = cairo_status (cr);
+ ref_image = cairo_test_get_reference_image (ctx, ref_name,
+ target->content == CAIRO_TEST_CONTENT_COLOR_ALPHA_FLATTENED);
+ if (cairo_surface_status (ref_image)) {
+ cairo_test_log (ctx, "Error: Cannot open reference image for %s: %s\n",
+ ref_name,
+ cairo_status_to_string (cairo_surface_status (ref_image)));
+ cairo_surface_destroy (ref_image);
+ cairo_surface_destroy (test_image);
+ free (png_name);
+ free (diff_name);
+ free (ref_name);
+ return FALSE;
+ }
- cairo_destroy (cr);
- cairo_surface_destroy (surface);
+ diff_image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+ WIDTH, HEIGHT);
+ ret = TRUE;
+ status = image_diff (ctx,
+ test_image, ref_image, diff_image,
+ &result);
+ _xunlink (ctx, diff_name);
if (status) {
- cairo_test_log (ctx, "Failed to create ps surface for file %s: %s\n",
- filename, cairo_status_to_string (status));
- return CAIRO_TEST_FAILURE;
+ cairo_test_log (ctx, "Error: Failed to compare images: %s\n",
+ cairo_status_to_string (status));
+ ret = FALSE;
+ } else if (image_diff_is_failure (&result, target->error_tolerance))
+ {
+ ret = FALSE;
+
+ status = cairo_surface_write_to_png (diff_image, diff_name);
+ if (status) {
+ cairo_test_log (ctx, "Error: Failed to write differences image: %s\n",
+ cairo_status_to_string (status));
+ }
+ }
+
+ cairo_surface_destroy (test_image);
+ cairo_surface_destroy (diff_image);
+ free (png_name);
+ free (diff_name);
+ free (ref_name);
+
+ return ret;
+}
+
+
+#define DOCUMENT_BBOX "%%BoundingBox:"
+#define PAGE_BBOX "%%PageBoundingBox:"
+
+static cairo_bool_t
+check_bbox (cairo_test_context_t *ctx,
+ const char *base_name)
+{
+ char *filename;
+ FILE *f;
+ char buf[256];
+ cairo_bool_t bbox_pass, page_bbox_pass;
+ int llx, lly, urx, ury;
+ int ret;
+
+ xasprintf (&filename, "%s.out.ps", base_name);
+ f = fopen (filename, "r");
+ if (!f) {
+ cairo_test_log (ctx, "Error: Cannot open EPS output: %s\n",
+ base_name);
+ free (filename);
+ return FALSE;
+ }
+
+ bbox_pass = FALSE;
+ page_bbox_pass = FALSE;
+ while (!feof(f)) {
+ fgets (buf, sizeof(buf), f);
+
+ if (strncmp (buf, DOCUMENT_BBOX, strlen (DOCUMENT_BBOX)) == 0) {
+ ret = sscanf (buf+strlen (DOCUMENT_BBOX), "%d %d %d %d", &llx, &lly, &urx, &ury);
+ if (ret == 4 && llx == LLX && lly == LLY && urx == URX && ury == URY)
+ bbox_pass = TRUE;
+ }
+
+ if (strncmp (buf, PAGE_BBOX, strlen (PAGE_BBOX)) == 0) {
+ ret = sscanf (buf+strlen (PAGE_BBOX), "%d %d %d %d", &llx, &lly, &urx, &ury);
+ if (ret == 4 && llx == LLX && lly == LLY && urx == URX && ury == URY)
+ page_bbox_pass = TRUE;
+ }
+ }
+ fclose (f);
+
+ if (!bbox_pass || !page_bbox_pass) {
+ cairo_test_log (ctx, "Error: EPS Bounding Box does not match reference Bounding Box\n");
+ return FALSE;
+ }
+
+ free (filename);
+
+ return TRUE;
+}
+
+static cairo_bool_t
+_cairo_test_mkdir (const char *path)
+{
+#if ! HAVE_MKDIR
+ return FALSE;
+#elif HAVE_MKDIR == 1
+ if (mkdir (path) == 0)
+ return TRUE;
+#elif HAVE_MKDIR == 2
+ if (mkdir (path, 0770) == 0)
+ return TRUE;
+#else
+#error Bad value for HAVE_MKDIR
+#endif
+
+ return errno == EEXIST;
+}
+
+static cairo_test_status_t
+preamble (cairo_test_context_t *ctx)
+{
+ cairo_t *cr;
+ cairo_test_status_t ret = CAIRO_TEST_UNTESTED;
+ const char *path = _cairo_test_mkdir (CAIRO_TEST_OUTPUT_DIR) ? CAIRO_TEST_OUTPUT_DIR : ".";
+ unsigned int i;
+
+ for (i = 0; i < ctx->num_targets; i++) {
+ const cairo_boilerplate_target_t *target = ctx->targets_to_test[i];
+ cairo_surface_t *surface = NULL;
+ char *base_name;
+ void *closure;
+ const char *format;
+ cairo_status_t status;
+ cairo_bool_t pass;
+ char *test_name;
+
+ if (! cairo_test_is_target_enabled (ctx, target->name))
+ continue;
+
+ format = cairo_boilerplate_content_name (target->content);
+ xasprintf (&test_name, "ps-eps");
+ xasprintf (&base_name, "%s/ps-eps.%s.%s",
+ path, target->name, format);
+
+ surface = (target->create_surface) (base_name,
+ target->content,
+ WIDTH, HEIGHT,
+ WIDTH, HEIGHT,
+ CAIRO_BOILERPLATE_MODE_TEST,
+ 0,
+ &closure);
+
+ if (surface == NULL) {
+ free (base_name);
+ free (test_name);
+ continue;
+ }
+
+ cairo_ps_surface_set_eps (surface, TRUE);
+ if (!cairo_ps_surface_get_eps (surface)) {
+ cairo_surface_destroy (surface);
+ if (target->cleanup)
+ target->cleanup (closure);
+
+ free (base_name);
+ free (test_name);
+ continue;
+ }
+
+ cairo_test_log (ctx,
+ "Testing ps-eps with %s target\n",
+ target->name);
+ printf ("%s:\t", base_name);
+ fflush (stdout);
+
+ cairo_surface_set_device_offset (surface, 25, 25);
+ cr = cairo_create (surface);
+
+ cairo_new_sub_path (cr);
+ cairo_arc (cr, 100, 100, 25, 0, 2*M_PI);
+ cairo_set_line_width (cr, 10);
+ cairo_stroke (cr);
+
+ cairo_show_page (cr);
+
+ status = cairo_status (cr);
+ cairo_destroy (cr);
+
+ if (status) {
+ cairo_test_log (ctx, "Error: Failed to create target surface: %s\n",
+ cairo_status_to_string (status));
+ pass = FALSE;
+ } else {
+ pass = TRUE;
+ /* extract the image and compare it to our reference */
+ if (! check_result (ctx, target, test_name, base_name, surface))
+ pass = FALSE;
+
+ /* check the bounding box of the EPS file and compare it to our reference */
+ if (! check_bbox (ctx, base_name))
+ pass = FALSE;
+ }
+ cairo_surface_destroy (surface);
+ if (target->cleanup)
+ target->cleanup (closure);
+
+ free (base_name);
+ free (test_name);
+
+ if (pass) {
+ printf ("PASS\n");
+ ret = CAIRO_TEST_SUCCESS;
+ } else {
+ printf ("FAIL\n");
+ ret = CAIRO_TEST_FAILURE;
+ }
+ fflush (stdout);
}
- printf ("ps-eps: Please check that %s looks/prints the same as ps-eps.ref.eps.\n", filename);
- return CAIRO_TEST_SUCCESS;
+ return ret;
}
CAIRO_TEST (ps_eps,
diff --git a/test/ps-eps.ref.png b/test/ps-eps.ref.png
new file mode 100644
index 0000000..9aadb08
--- /dev/null
+++ b/test/ps-eps.ref.png
Binary files differ
diff --git a/test/pthread-same-source.quartz.xfail.png b/test/pthread-same-source.quartz.xfail.png
index cc0998f..ffed619 100644
--- a/test/pthread-same-source.quartz.xfail.png
+++ b/test/pthread-same-source.quartz.xfail.png
Binary files differ
diff --git a/test/pthread-show-text.quartz.ref.png b/test/pthread-show-text.quartz.ref.png
index 9b6d774..cc9bb25 100644
--- a/test/pthread-show-text.quartz.ref.png
+++ b/test/pthread-show-text.quartz.ref.png
Binary files differ
diff --git a/test/push-group-color.ps2.ref.png b/test/push-group-color.ps2.ref.png
new file mode 100644
index 0000000..daf827e
--- /dev/null
+++ b/test/push-group-color.ps2.ref.png
Binary files differ
diff --git a/test/radial-gradient-extend.ps3.ref.png b/test/radial-gradient-extend.ps3.ref.png
new file mode 100644
index 0000000..e84041e
--- /dev/null
+++ b/test/radial-gradient-extend.ps3.ref.png
Binary files differ
diff --git a/test/radial-gradient-mask-source.argb32.ref.png b/test/radial-gradient-mask-source.argb32.ref.png
index e01459d..2bf65b3 100644
--- a/test/radial-gradient-mask-source.argb32.ref.png
+++ b/test/radial-gradient-mask-source.argb32.ref.png
Binary files differ
diff --git a/test/radial-gradient-mask-source.c b/test/radial-gradient-mask-source.c
deleted file mode 100644
index 27b5270..0000000
--- a/test/radial-gradient-mask-source.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright © 2005, 2007 Red Hat, Inc.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-test.h"
-
-#define NUM_GRADIENTS 4
-#define NUM_EXTEND 4
-#define SIZE 60
-#define WIDTH (SIZE * NUM_GRADIENTS * NUM_GRADIENTS)
-#define HEIGHT (SIZE * NUM_EXTEND)
-
-static void
-draw_gradient (cairo_t *cr,
- int x,
- int y,
- int size,
- double r1_offset,
- double r1_radius,
- double r2_offset,
- double r2_radius,
- cairo_extend_t extend)
-{
- cairo_pattern_t *pattern;
-
- cairo_save (cr);
-
- pattern = cairo_pattern_create_radial (x + size/2.0 + r1_offset,
- y + size/2.0 + r1_offset,
- r1_radius,
- x + size/2.0 + r2_offset,
- y + size/2.0 + r2_offset,
- r2_radius);
- cairo_pattern_add_color_stop_rgba (pattern, 0.0,
- 1.0, 0.0, 0.0, 1.0);
- cairo_pattern_add_color_stop_rgba (pattern, sqrt (1.0 / 2.0),
- 0.0, 1.0, 0.0, 0.0);
- cairo_pattern_add_color_stop_rgba (pattern, 1.0,
- 0.0, 0.0, 1.0, 0.5);
- cairo_pattern_set_extend (pattern, extend);
-
- cairo_rectangle (cr, x, y, size, size);
- cairo_clip (cr);
-
- cairo_set_source_rgb (cr, 1, 0, 1);
- cairo_mask (cr, pattern);
-
- cairo_pattern_destroy (pattern);
-
- cairo_restore (cr);
-}
-
-static cairo_test_status_t
-draw (cairo_t *cr, int width, int height)
-{
- int i, j, k;
- cairo_extend_t extend[NUM_EXTEND] = {
- CAIRO_EXTEND_NONE,
- CAIRO_EXTEND_REPEAT,
- CAIRO_EXTEND_REFLECT,
- CAIRO_EXTEND_PAD
- };
-
- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
- for (j = 0; j < NUM_EXTEND; j++) {
- for (i = 0; i < NUM_GRADIENTS; i++) {
- double r1_offset = i % 2 ? SIZE / 12.0 : 0.0;
- double r1_radius = i >= NUM_GRADIENTS / 2 ? SIZE / 6.0 : 0.0;
- for (k = 0; k < NUM_GRADIENTS; k++) {
- double r2_offset = k % 2 ? SIZE / 12.0 : 0.0;
- double r2_radius = k >= NUM_GRADIENTS / 2 ? SIZE / 3.0 : SIZE / 12.;
- draw_gradient (cr,
- i * SIZE * NUM_GRADIENTS + k * SIZE, j * SIZE, SIZE,
- r1_offset, r1_radius,
- r2_offset, r2_radius,
- extend[j]);
- }
- }
- }
-
- return CAIRO_TEST_SUCCESS;
-}
-
-CAIRO_TEST (radial_gradient_mask_source,
- "Simple test of radial gradients using a MASK with a SOURCE operator",
- "gradient,mask,source", /* keywords */
- NULL, /* requirements */
- WIDTH, HEIGHT,
- NULL, draw)
diff --git a/test/radial-gradient-mask-source.image16.ref.png b/test/radial-gradient-mask-source.image16.ref.png
index 7c9072a..edb93a9 100644
--- a/test/radial-gradient-mask-source.image16.ref.png
+++ b/test/radial-gradient-mask-source.image16.ref.png
Binary files differ
diff --git a/test/radial-gradient-mask-source.quartz.argb32.ref.png b/test/radial-gradient-mask-source.quartz.argb32.ref.png
new file mode 100644
index 0000000..5f734f6
--- /dev/null
+++ b/test/radial-gradient-mask-source.quartz.argb32.ref.png
Binary files differ
diff --git a/test/radial-gradient-mask-source.quartz.rgb24.ref.png b/test/radial-gradient-mask-source.quartz.rgb24.ref.png
new file mode 100644
index 0000000..4ae71f7
--- /dev/null
+++ b/test/radial-gradient-mask-source.quartz.rgb24.ref.png
Binary files differ
diff --git a/test/radial-gradient-mask-source.rgb24.ref.png b/test/radial-gradient-mask-source.rgb24.ref.png
index 55959ab..5533519 100644
--- a/test/radial-gradient-mask-source.rgb24.ref.png
+++ b/test/radial-gradient-mask-source.rgb24.ref.png
Binary files differ
diff --git a/test/radial-gradient-mask-source.xlib.argb32.ref.png b/test/radial-gradient-mask-source.xlib.argb32.ref.png
new file mode 100644
index 0000000..1c901c9
--- /dev/null
+++ b/test/radial-gradient-mask-source.xlib.argb32.ref.png
Binary files differ
diff --git a/test/radial-gradient-mask-source.xlib.rgb24.ref.png b/test/radial-gradient-mask-source.xlib.rgb24.ref.png
new file mode 100644
index 0000000..e50fe8f
--- /dev/null
+++ b/test/radial-gradient-mask-source.xlib.rgb24.ref.png
Binary files differ
diff --git a/test/radial-gradient-mask.argb32.ref.png b/test/radial-gradient-mask.argb32.ref.png
deleted file mode 100644
index e01459d..0000000
--- a/test/radial-gradient-mask.argb32.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/radial-gradient-mask.c b/test/radial-gradient-mask.c
deleted file mode 100644
index ba03a12..0000000
--- a/test/radial-gradient-mask.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright © 2005, 2007 Red Hat, Inc.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-test.h"
-
-#define NUM_GRADIENTS 4
-#define NUM_EXTEND 4
-#define SIZE 60
-#define WIDTH (SIZE * NUM_GRADIENTS * NUM_GRADIENTS)
-#define HEIGHT (SIZE * NUM_EXTEND)
-
-static void
-draw_gradient (cairo_t *cr,
- int x,
- int y,
- int size,
- double r1_offset,
- double r1_radius,
- double r2_offset,
- double r2_radius,
- cairo_extend_t extend)
-{
- cairo_pattern_t *pattern;
-
- cairo_save (cr);
-
- pattern = cairo_pattern_create_radial (x + size/2.0 + r1_offset,
- y + size/2.0 + r1_offset,
- r1_radius,
- x + size/2.0 + r2_offset,
- y + size/2.0 + r2_offset,
- r2_radius);
- cairo_pattern_add_color_stop_rgba (pattern, 0.0,
- 1.0, 0.0, 0.0, 1.0);
- cairo_pattern_add_color_stop_rgba (pattern, sqrt (1.0 / 2.0),
- 0.0, 1.0, 0.0, 0.0);
- cairo_pattern_add_color_stop_rgba (pattern, 1.0,
- 0.0, 0.0, 1.0, 0.5);
- cairo_pattern_set_extend (pattern, extend);
-
- cairo_rectangle (cr, x, y, size, size);
- cairo_clip (cr);
-
- cairo_set_source_rgb (cr, 1, 0, 1);
- cairo_mask (cr, pattern);
-
- cairo_pattern_destroy (pattern);
-
- cairo_restore (cr);
-}
-
-static cairo_test_status_t
-draw (cairo_t *cr, int width, int height)
-{
- int i, j, k;
- cairo_extend_t extend[NUM_EXTEND] = {
- CAIRO_EXTEND_NONE,
- CAIRO_EXTEND_REPEAT,
- CAIRO_EXTEND_REFLECT,
- CAIRO_EXTEND_PAD
- };
-
- for (j = 0; j < NUM_EXTEND; j++) {
- for (i = 0; i < NUM_GRADIENTS; i++) {
- double r1_offset = i % 2 ? SIZE / 12.0 : 0.0;
- double r1_radius = i >= NUM_GRADIENTS / 2 ? SIZE / 6.0 : 0.0;
- for (k = 0; k < NUM_GRADIENTS; k++) {
- double r2_offset = k % 2 ? SIZE / 12.0 : 0.0;
- double r2_radius = k >= NUM_GRADIENTS / 2 ? SIZE / 3.0 : SIZE / 12.;
- draw_gradient (cr,
- i * SIZE * NUM_GRADIENTS + k * SIZE, j * SIZE, SIZE,
- r1_offset, r1_radius,
- r2_offset, r2_radius,
- extend[j]);
- }
- }
- }
-
- return CAIRO_TEST_SUCCESS;
-}
-
-CAIRO_TEST (radial_gradient_mask,
- "Simple test of radial gradients using a MASK",
- "gradient,mask", /* keywords */
- NULL, /* requirements */
- WIDTH, HEIGHT,
- NULL, draw)
diff --git a/test/radial-gradient-mask.image16.ref.png b/test/radial-gradient-mask.image16.ref.png
index 7c9072a..78712ca 100644
--- a/test/radial-gradient-mask.image16.ref.png
+++ b/test/radial-gradient-mask.image16.ref.png
Binary files differ
diff --git a/test/radial-gradient-mask.quartz.ref.png b/test/radial-gradient-mask.quartz.ref.png
new file mode 100644
index 0000000..c1bd506
--- /dev/null
+++ b/test/radial-gradient-mask.quartz.ref.png
Binary files differ
diff --git a/test/radial-gradient-mask.ref.png b/test/radial-gradient-mask.ref.png
new file mode 100644
index 0000000..4db39aa
--- /dev/null
+++ b/test/radial-gradient-mask.ref.png
Binary files differ
diff --git a/test/radial-gradient-mask.rgb24.ref.png b/test/radial-gradient-mask.rgb24.ref.png
deleted file mode 100644
index 55959ab..0000000
--- a/test/radial-gradient-mask.rgb24.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/radial-gradient-one-stop.argb32.ref.png b/test/radial-gradient-one-stop.argb32.ref.png
deleted file mode 100644
index bdc64dc..0000000
--- a/test/radial-gradient-one-stop.argb32.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/radial-gradient-one-stop.c b/test/radial-gradient-one-stop.c
deleted file mode 100644
index 552de23..0000000
--- a/test/radial-gradient-one-stop.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright © 2005, 2007 Red Hat, Inc.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-test.h"
-
-#define NUM_GRADIENTS 4
-#define NUM_EXTEND 4
-#define SIZE 60
-#define WIDTH (SIZE * NUM_GRADIENTS * NUM_GRADIENTS)
-#define HEIGHT (SIZE * NUM_EXTEND)
-
-static void
-draw_gradient (cairo_t *cr,
- int x,
- int y,
- int size,
- double r1_offset,
- double r1_radius,
- double r2_offset,
- double r2_radius,
- cairo_extend_t extend)
-{
- cairo_pattern_t *pattern;
-
- cairo_save (cr);
-
- pattern = cairo_pattern_create_radial (x + size/2.0 + r1_offset,
- y + size/2.0 + r1_offset,
- r1_radius,
- x + size/2.0 + r2_offset,
- y + size/2.0 + r2_offset,
- r2_radius);
- cairo_pattern_add_color_stop_rgb (pattern, 0.25, 1, 0, 0);
- cairo_pattern_set_extend (pattern, extend);
-
- cairo_rectangle (cr, x, y, size, size);
- cairo_clip (cr);
-
- cairo_set_source (cr, pattern);
- cairo_paint (cr);
-
- cairo_pattern_destroy (pattern);
-
- cairo_restore (cr);
-}
-
-static cairo_test_status_t
-draw (cairo_t *cr, int width, int height)
-{
- int i, j, k;
- cairo_extend_t extend[NUM_EXTEND] = {
- CAIRO_EXTEND_NONE,
- CAIRO_EXTEND_REPEAT,
- CAIRO_EXTEND_REFLECT,
- CAIRO_EXTEND_PAD
- };
-
- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
-
- for (j = 0; j < NUM_EXTEND; j++) {
- for (i = 0; i < NUM_GRADIENTS; i++) {
- double r1_offset = i % 2 ? SIZE / 12.0 : 0.0;
- double r1_radius = i >= NUM_GRADIENTS / 2 ? SIZE / 6.0 : 0.0;
- for (k = 0; k < NUM_GRADIENTS; k++) {
- double r2_offset = k % 2 ? SIZE / 12.0 : 0.0;
- double r2_radius = k >= NUM_GRADIENTS / 2 ? SIZE / 3.0 : SIZE / 12.;
- draw_gradient (cr,
- i * SIZE * NUM_GRADIENTS + k * SIZE, j * SIZE, SIZE,
- r1_offset, r1_radius,
- r2_offset, r2_radius,
- extend[j]);
- }
- }
- }
-
- return CAIRO_TEST_SUCCESS;
-}
-
-CAIRO_TEST (radial_gradient_one_stop,
- "Tests radial gradients with a single stop",
- "gradient,radial", /* keywords */
- NULL, /* requirements */
- WIDTH, HEIGHT,
- NULL, draw)
diff --git a/test/radial-gradient-one-stop.quartz.ref.png b/test/radial-gradient-one-stop.quartz.ref.png
new file mode 100644
index 0000000..da991b1
--- /dev/null
+++ b/test/radial-gradient-one-stop.quartz.ref.png
Binary files differ
diff --git a/test/radial-gradient-one-stop.ref.png b/test/radial-gradient-one-stop.ref.png
new file mode 100644
index 0000000..fb35be6
--- /dev/null
+++ b/test/radial-gradient-one-stop.ref.png
Binary files differ
diff --git a/test/radial-gradient-one-stop.rgb24.ref.png b/test/radial-gradient-one-stop.rgb24.ref.png
deleted file mode 100644
index d9f471b..0000000
--- a/test/radial-gradient-one-stop.rgb24.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/radial-gradient-source.argb32.ref.png b/test/radial-gradient-source.argb32.ref.png
index 4733471..4ab4796 100644
--- a/test/radial-gradient-source.argb32.ref.png
+++ b/test/radial-gradient-source.argb32.ref.png
Binary files differ
diff --git a/test/radial-gradient-source.c b/test/radial-gradient-source.c
deleted file mode 100644
index b546157..0000000
--- a/test/radial-gradient-source.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright © 2005, 2007 Red Hat, Inc.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-/* 20091017: A simple variant on radial-gradient, using the SOURCE operator
- * instead as a potential bug was found in pixman under those conditions.
- */
-
-#include "cairo-test.h"
-
-#define NUM_GRADIENTS 4
-#define NUM_EXTEND 4
-#define SIZE 60
-#define WIDTH (SIZE * NUM_GRADIENTS * NUM_GRADIENTS)
-#define HEIGHT (SIZE * NUM_EXTEND)
-
-static void
-draw_gradient (cairo_t *cr,
- int x,
- int y,
- int size,
- double r1_offset,
- double r1_radius,
- double r2_offset,
- double r2_radius,
- cairo_extend_t extend)
-{
- cairo_pattern_t *pattern;
-
- cairo_save (cr);
-
- pattern = cairo_pattern_create_radial (x + size/2.0 + r1_offset,
- y + size/2.0 + r1_offset,
- r1_radius,
- x + size/2.0 + r2_offset,
- y + size/2.0 + r2_offset,
- r2_radius);
- cairo_pattern_add_color_stop_rgba (pattern, 0.0,
- 1.0, 0.0, 0.0, 1.0);
- cairo_pattern_add_color_stop_rgba (pattern, sqrt (1.0 / 2.0),
- 0.0, 1.0, 0.0, 0.0);
- cairo_pattern_add_color_stop_rgba (pattern, 1.0,
- 0.0, 0.0, 1.0, 0.5);
- cairo_pattern_set_extend (pattern, extend);
-
- cairo_rectangle (cr, x, y, size, size);
- cairo_clip (cr);
-
- cairo_set_source (cr, pattern);
- cairo_paint (cr);
-
- cairo_pattern_destroy (pattern);
-
- cairo_restore (cr);
-}
-
-static cairo_test_status_t
-draw (cairo_t *cr, int width, int height)
-{
- int i, j, k;
- cairo_extend_t extend[NUM_EXTEND] = {
- CAIRO_EXTEND_NONE,
- CAIRO_EXTEND_REPEAT,
- CAIRO_EXTEND_REFLECT,
- CAIRO_EXTEND_PAD
- };
-
- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
- for (j = 0; j < NUM_EXTEND; j++) {
- for (i = 0; i < NUM_GRADIENTS; i++) {
- double r1_offset = i % 2 ? SIZE / 12.0 : 0.0;
- double r1_radius = i >= NUM_GRADIENTS / 2 ? SIZE / 6.0 : 0.0;
- for (k = 0; k < NUM_GRADIENTS; k++) {
- double r2_offset = k % 2 ? SIZE / 12.0 : 0.0;
- double r2_radius = k >= NUM_GRADIENTS / 2 ? SIZE / 3.0 : SIZE / 12.;
- draw_gradient (cr,
- i * SIZE * NUM_GRADIENTS + k * SIZE, j * SIZE, SIZE,
- r1_offset, r1_radius,
- r2_offset, r2_radius,
- extend[j]);
- }
- }
- }
-
- return CAIRO_TEST_SUCCESS;
-}
-
-CAIRO_TEST (radial_gradient_source,
- "Simple test of radial gradients using the SOURCE operator",
- "gradient,source", /* keywords */
- NULL, /* requirements */
- WIDTH, HEIGHT,
- NULL, draw)
diff --git a/test/radial-gradient-source.image16.ref.png b/test/radial-gradient-source.image16.ref.png
index 2a78cc5..f992b6f 100644
--- a/test/radial-gradient-source.image16.ref.png
+++ b/test/radial-gradient-source.image16.ref.png
Binary files differ
diff --git a/test/radial-gradient-source.pdf.argb32.ref.png b/test/radial-gradient-source.pdf.argb32.ref.png
deleted file mode 100644
index 7c32d81..0000000
--- a/test/radial-gradient-source.pdf.argb32.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/radial-gradient-source.quartz.argb32.ref.png b/test/radial-gradient-source.quartz.argb32.ref.png
new file mode 100644
index 0000000..421c0b9
--- /dev/null
+++ b/test/radial-gradient-source.quartz.argb32.ref.png
Binary files differ
diff --git a/test/radial-gradient-source.quartz.rgb24.ref.png b/test/radial-gradient-source.quartz.rgb24.ref.png
new file mode 100644
index 0000000..22f2b90
--- /dev/null
+++ b/test/radial-gradient-source.quartz.rgb24.ref.png
Binary files differ
diff --git a/test/radial-gradient-source.rgb24.ref.png b/test/radial-gradient-source.rgb24.ref.png
index 27e9927..afaa241 100644
--- a/test/radial-gradient-source.rgb24.ref.png
+++ b/test/radial-gradient-source.rgb24.ref.png
Binary files differ
diff --git a/test/radial-gradient.c b/test/radial-gradient.c
index a6d145c..3ad4bb9 100644
--- a/test/radial-gradient.c
+++ b/test/radial-gradient.c
@@ -26,56 +26,113 @@
#include "cairo-test.h"
-#define NUM_GRADIENTS 4
+#define NUM_GRADIENTS 7
#define NUM_EXTEND 4
-#define SIZE 60
-#define WIDTH (SIZE * NUM_GRADIENTS * NUM_GRADIENTS)
+#define SIZE 120
+#define WIDTH (SIZE * NUM_GRADIENTS)
#define HEIGHT (SIZE * NUM_EXTEND)
-static void
-draw_gradient (cairo_t *cr,
- int x,
- int y,
- int size,
- double r1_offset,
- double r1_radius,
- double r2_offset,
- double r2_radius,
- cairo_extend_t extend)
+typedef void (*composite_t)(cairo_t *cr, cairo_pattern_t *pattern);
+typedef void (*add_stops_t)(cairo_pattern_t *pattern);
+
+/*
+ * We want to test all the possible relative positions of the start
+ * and end circle:
+ *
+ * - The start circle can be smaller/equal/bigger than the end
+ * circle. A radial gradient can be classified in one of these
+ * three cases depending on the sign of dr.
+ *
+ * - The smaller circle can be completely inside/internally
+ * tangent/outside (at least in part) of the bigger circle. This
+ * classification is the same as the one which can be computed by
+ * examining the sign of a = (dx^2 + dy^2 - dr^2).
+ *
+ * - If the two circles have the same size, neither can be inside or
+ * internally tangent
+ *
+ * This test draws radial gradients whose circles always have the same
+ * centers (0, 0) and (1, 0), but with different radiuses. From left
+ * to right:
+ *
+ * - Small start circle completely inside the end circle
+ * 0.25 -> 1.75; dr = 1.5 > 0; a = 1 - 1.50^2 < 0
+ *
+ * - Small start circle internally tangent to the end circle
+ * 0.50 -> 1.50; dr = 1.0 > 0; a = 1 - 1.00^2 = 0
+ *
+ * - Small start circle outside of the end circle
+ * 0.50 -> 1.00; dr = 0.5 > 0; a = 1 - 0.50^2 > 0
+ *
+ * - Start circle with the same size as the end circle
+ * 1.00 -> 1.00; dr = 0.0 = 0; a = 1 - 0.00^2 > 0
+ *
+ * - Small end circle outside of the start circle
+ * 1.00 -> 0.50; dr = -0.5 > 0; a = 1 - 0.50^2 > 0
+ *
+ * - Small end circle internally tangent to the start circle
+ * 1.50 -> 0.50; dr = -1.0 > 0; a = 1 - 1.00^2 = 0
+ *
+ * - Small end circle completely inside the start circle
+ * 1.75 -> 0.25; dr = -1.5 > 0; a = 1 - 1.50^2 < 0
+ *
+ */
+
+const static double radiuses[NUM_GRADIENTS] = {
+ 0.25,
+ 0.50,
+ 0.50,
+ 1.00,
+ 1.00,
+ 1.50,
+ 1.75
+};
+
+static cairo_pattern_t *
+create_pattern (int index)
{
- cairo_pattern_t *pattern;
-
- cairo_save (cr);
-
- pattern = cairo_pattern_create_radial (x + size/2.0 + r1_offset,
- y + size/2.0 + r1_offset,
- r1_radius,
- x + size/2.0 + r2_offset,
- y + size/2.0 + r2_offset,
- r2_radius);
- cairo_pattern_add_color_stop_rgba (pattern, 0.0,
- 1.0, 0.0, 0.0, 1.0);
- cairo_pattern_add_color_stop_rgba (pattern, sqrt (1.0 / 2.0),
- 0.0, 1.0, 0.0, 0.0);
- cairo_pattern_add_color_stop_rgba (pattern, 1.0,
- 0.0, 0.0, 1.0, 0.5);
- cairo_pattern_set_extend (pattern, extend);
-
- cairo_rectangle (cr, x, y, size, size);
- cairo_clip (cr);
+ double x0, x1, radius0, radius1, left, right, center;
- cairo_set_source (cr, pattern);
- cairo_paint (cr);
+ x0 = 0;
+ x1 = 1;
+ radius0 = radiuses[index];
+ radius1 = radiuses[NUM_GRADIENTS - index - 1];
+
+ /* center the gradient */
+ left = fmin (x0 - radius0, x1 - radius1);
+ right = fmax (x0 + radius0, x1 + radius1);
+ center = (left + right) * 0.5;
+ x0 -= center;
+ x1 -= center;
- cairo_pattern_destroy (pattern);
+ /* scale to make it fit within a 1x1 rect centered in (0,0) */
+ x0 *= 0.25;
+ x1 *= 0.25;
+ radius0 *= 0.25;
+ radius1 *= 0.25;
- cairo_restore (cr);
+ return cairo_pattern_create_radial (x0, 0, radius0, x1, 0, radius1);
}
+static void
+pattern_add_stops (cairo_pattern_t *pattern)
+{
+ cairo_pattern_add_color_stop_rgba (pattern, 0.0, 1, 0, 0, 0.75);
+ cairo_pattern_add_color_stop_rgba (pattern, sqrt (0.5), 0, 1, 0, 0);
+ cairo_pattern_add_color_stop_rgba (pattern, 1.0, 0, 0, 1, 1);
+}
+
+static void
+pattern_add_single_stop (cairo_pattern_t *pattern)
+{
+ cairo_pattern_add_color_stop_rgba (pattern, 0.25, 1, 0, 0, 1);
+}
+
+
static cairo_test_status_t
-draw (cairo_t *cr, int width, int height)
+draw (cairo_t *cr, add_stops_t add_stops, composite_t composite)
{
- int i, j, k;
+ int i, j;
cairo_extend_t extend[NUM_EXTEND] = {
CAIRO_EXTEND_NONE,
CAIRO_EXTEND_REPEAT,
@@ -83,30 +140,117 @@ draw (cairo_t *cr, int width, int height)
CAIRO_EXTEND_PAD
};
- cairo_test_paint_checkered (cr);
+ cairo_scale (cr, SIZE, SIZE);
+ cairo_translate (cr, 0.5, 0.5);
for (j = 0; j < NUM_EXTEND; j++) {
+ cairo_save (cr);
for (i = 0; i < NUM_GRADIENTS; i++) {
- double r1_offset = i % 2 ? SIZE / 12.0 : 0.0;
- double r1_radius = i >= NUM_GRADIENTS / 2 ? SIZE / 6.0 : 0.0;
- for (k = 0; k < NUM_GRADIENTS; k++) {
- double r2_offset = k % 2 ? SIZE / 12.0 : 0.0;
- double r2_radius = k >= NUM_GRADIENTS / 2 ? SIZE / 3.0 : SIZE / 12.;
- draw_gradient (cr,
- i * SIZE * NUM_GRADIENTS + k * SIZE, j * SIZE, SIZE,
- r1_offset, r1_radius,
- r2_offset, r2_radius,
- extend[j]);
- }
+ cairo_pattern_t *pattern;
+
+ pattern = create_pattern (i);
+ add_stops (pattern);
+ cairo_pattern_set_extend (pattern, extend[j]);
+
+ cairo_save (cr);
+ cairo_rectangle (cr, -0.5, -0.5, 1, 1);
+ cairo_clip (cr);
+ composite (cr, pattern);
+ cairo_restore (cr);
+ cairo_pattern_destroy (pattern);
+
+ cairo_translate (cr, 1, 0);
}
+ cairo_restore (cr);
+ cairo_translate (cr, 0, 1);
}
return CAIRO_TEST_SUCCESS;
}
+
+static void
+composite_simple (cairo_t *cr, cairo_pattern_t *pattern)
+{
+ cairo_set_source (cr, pattern);
+ cairo_paint (cr);
+}
+
+static void
+composite_mask (cairo_t *cr, cairo_pattern_t *pattern)
+{
+ cairo_set_source_rgb (cr, 1, 0, 1);
+ cairo_mask (cr, pattern);
+}
+
+
+static cairo_test_status_t
+draw_simple (cairo_t *cr, int width, int height)
+{
+ cairo_test_paint_checkered (cr);
+ return draw (cr, pattern_add_stops, composite_simple);
+}
+
+static cairo_test_status_t
+draw_mask (cairo_t *cr, int width, int height)
+{
+ cairo_test_paint_checkered (cr);
+ return draw (cr, pattern_add_stops, composite_mask);
+}
+
+static cairo_test_status_t
+draw_source (cairo_t *cr, int width, int height)
+{
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+ return draw (cr, pattern_add_stops, composite_simple);
+}
+
+
+static cairo_test_status_t
+draw_mask_source (cairo_t *cr, int width, int height)
+{
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+ return draw (cr, pattern_add_stops, composite_mask);
+}
+
+static cairo_test_status_t
+draw_one_stop (cairo_t *cr, int width, int height)
+{
+ cairo_test_paint_checkered (cr);
+ return draw (cr, pattern_add_single_stop, composite_simple);
+}
+
CAIRO_TEST (radial_gradient,
"Simple test of radial gradients",
"gradient", /* keywords */
NULL, /* requirements */
WIDTH, HEIGHT,
- NULL, draw)
+ NULL, draw_simple)
+
+CAIRO_TEST (radial_gradient_mask,
+ "Simple test of radial gradients using a MASK",
+ "gradient,mask", /* keywords */
+ NULL, /* requirements */
+ WIDTH, HEIGHT,
+ NULL, draw_mask)
+
+CAIRO_TEST (radial_gradient_source,
+ "Simple test of radial gradients using the SOURCE operator",
+ "gradient,source", /* keywords */
+ NULL, /* requirements */
+ WIDTH, HEIGHT,
+ NULL, draw_source)
+
+CAIRO_TEST (radial_gradient_mask_source,
+ "Simple test of radial gradients using a MASK with a SOURCE operator",
+ "gradient,mask,source", /* keywords */
+ NULL, /* requirements */
+ WIDTH, HEIGHT,
+ NULL, draw_mask_source)
+
+CAIRO_TEST (radial_gradient_one_stop,
+ "Tests radial gradients with a single stop",
+ "gradient,radial", /* keywords */
+ NULL, /* requirements */
+ WIDTH, HEIGHT,
+ NULL, draw_one_stop)
diff --git a/test/radial-gradient.image16.ref.png b/test/radial-gradient.image16.ref.png
index 76a57fc..91202d3 100644
--- a/test/radial-gradient.image16.ref.png
+++ b/test/radial-gradient.image16.ref.png
Binary files differ
diff --git a/test/radial-gradient.pdf.ref.png b/test/radial-gradient.pdf.ref.png
deleted file mode 100644
index 1c288b4..0000000
--- a/test/radial-gradient.pdf.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/radial-gradient.quartz.ref.png b/test/radial-gradient.quartz.ref.png
new file mode 100644
index 0000000..f01c6eb
--- /dev/null
+++ b/test/radial-gradient.quartz.ref.png
Binary files differ
diff --git a/test/radial-gradient.ref.png b/test/radial-gradient.ref.png
index bec83b7..a2cbbc8 100644
--- a/test/radial-gradient.ref.png
+++ b/test/radial-gradient.ref.png
Binary files differ
diff --git a/test/radial-gradient.svg.xfail.png b/test/radial-gradient.svg.xfail.png
deleted file mode 100644
index ab54a3d..0000000
--- a/test/radial-gradient.svg.xfail.png
+++ /dev/null
Binary files differ
diff --git a/test/rotate-image-surface-paint.quartz.ref.png b/test/rotate-image-surface-paint.quartz.ref.png
index 1b317f9..a716b63 100644
--- a/test/rotate-image-surface-paint.quartz.ref.png
+++ b/test/rotate-image-surface-paint.quartz.ref.png
Binary files differ
diff --git a/test/scale-offset-image.quartz.ref.png b/test/scale-offset-image.quartz.ref.png
index 3d8e71a..f7a5e72 100644
--- a/test/scale-offset-image.quartz.ref.png
+++ b/test/scale-offset-image.quartz.ref.png
Binary files differ
diff --git a/test/scale-offset-similar.quartz.ref.png b/test/scale-offset-similar.quartz.ref.png
index 3d8e71a..f7a5e72 100644
--- a/test/scale-offset-similar.quartz.ref.png
+++ b/test/scale-offset-similar.quartz.ref.png
Binary files differ
diff --git a/test/smask-mask.quartz.ref.png b/test/smask-mask.quartz.ref.png
index 97359b4..98ba299 100644
--- a/test/smask-mask.quartz.ref.png
+++ b/test/smask-mask.quartz.ref.png
Binary files differ
diff --git a/test/smask-paint.quartz.ref.png b/test/smask-paint.quartz.ref.png
index 1d56558..4ee25fd 100644
--- a/test/smask-paint.quartz.ref.png
+++ b/test/smask-paint.quartz.ref.png
Binary files differ
diff --git a/test/smask.quartz.ref.png b/test/smask.quartz.ref.png
index b8dd1af..f9ab00f 100644
--- a/test/smask.quartz.ref.png
+++ b/test/smask.quartz.ref.png
Binary files differ
diff --git a/test/surface-pattern-operator.quartz.argb32.ref.png b/test/surface-pattern-operator.quartz.argb32.ref.png
new file mode 100644
index 0000000..5e934b2
--- /dev/null
+++ b/test/surface-pattern-operator.quartz.argb32.ref.png
Binary files differ
diff --git a/test/surface-pattern-operator.quartz.argb32.xfail.png b/test/surface-pattern-operator.quartz.argb32.xfail.png
deleted file mode 100644
index eb6e890..0000000
--- a/test/surface-pattern-operator.quartz.argb32.xfail.png
+++ /dev/null
Binary files differ
diff --git a/test/surface-pattern-operator.quartz.rgb24.ref.png b/test/surface-pattern-operator.quartz.rgb24.ref.png
new file mode 100644
index 0000000..30408c1
--- /dev/null
+++ b/test/surface-pattern-operator.quartz.rgb24.ref.png
Binary files differ
diff --git a/test/surface-pattern-operator.quartz.rgb24.xfail.png b/test/surface-pattern-operator.quartz.rgb24.xfail.png
deleted file mode 100644
index 6275a48..0000000
--- a/test/surface-pattern-operator.quartz.rgb24.xfail.png
+++ /dev/null
Binary files differ
diff --git a/test/testtable.js b/test/testtable.js
new file mode 100644
index 0000000..f51b0fd
--- /dev/null
+++ b/test/testtable.js
@@ -0,0 +1,426 @@
+/* configuration */
+/* TODO: UNTESTED count can't be shown because it's not tracked explicitly */
+headerResults = [ "PASS", "NEW", "FAIL", "XFAIL", "CRASHED" ];
+logResults = [ "PASS", "NEW", "FAIL", "XFAIL", "CRASH!" ];
+resultToImgs = {
+ "PASS" : [],
+ "NEW" : [ "output" ],
+ "FAIL" : [ "output", "difference", "reference" ],
+ "XFAIL" : [],
+ "UNTESTED" : [],
+ "CRASHED" : []
+};
+
+resultToString = {
+ "PASS" : "",
+ "NEW" : "",
+ "FAIL" : "",
+ "XFAIL" : "",
+ "UNTESTED" : "",
+ "CRASHED" : "CRASHED!"
+};
+
+resultField = "result";
+rowFields = [ "test", "offset", "similar" ];
+colFields = [ "target", "format" ];
+allFields = [ resultField ].concat (rowFields, colFields);
+
+
+/* globals: */
+function resetGlobals () {
+ dragElement = undefined;
+ table = document.getElementById ("testTable");
+ while (table.rows.length)
+ table.deleteRow (0);
+ colsArray = [ "HrowHeader" ];
+ colsMap = undefined;
+ headerId = "HcolHeader";
+
+ fTrue = function (x) { return true; };
+
+ empty = new Row ();
+ header = new Row ();
+ header[colsArray[0]].toString = function () { return ""; };
+
+ untested = new Test ();
+ untested[resultField] = "UNTESTED";
+}
+
+
+/* utility functions */
+function normalizeKey (key) { return key.toLowerCase ().replace (/[^a-z0-9]/, ""); }
+function isVisible (x) { return x.style.display != "none"; }
+
+function link (html, url) { return "<a href='" + url + "'>" + html + "</a>"; }
+function image (url) { return "<img src='" + url + "'>"; }
+function span (html, id, cls) { return "<span id='" + id + "' class='" + cls + "' onmousedown='startDrag (event)' onmouseup='mouseUp (event)'>" + html + "</span>"; }
+
+function fieldsToHTML (bColumns, values) {
+ var fields = bColumns ? colFields : rowFields;
+ var prefix = bColumns ? "c" : "r";
+ var tmpRE = arrayApply (function (x) { return "[^/]*"; }, fields);
+ var r = Array ();
+ for (var i = 0; i < fields.length; i++)
+ if (fields[i] == "test") {
+ r.push (link (values[fields[i]], values[fields[i]] + ".log"));
+ } else {
+ tmpRE[i] = values[fields[i]];
+ r.push (span (values[fields[i]], prefix + "/" + tmpRE.join ("/") + "/", fields[i]));
+ tmpRE[i] = "[^/]*";
+ }
+ return r.join ("/");
+}
+
+function inArray (value, array) {
+ for (var i = 0; i < array.length; i++)
+ if (value == array[i])
+ return true;
+ return false;
+}
+
+function arrayApply (fun, array) {
+ var r = new Array ();
+ for (var i = 0; i < array.length; i++)
+ r.push (fun(array[i]));
+ return r;
+}
+
+function arrayPred (pred, array) {
+ var r = new Array ();
+ for (var i = 0; i < array.length; i++)
+ if (pred (array[i]))
+ r.push (array[i]);
+ return r;
+}
+
+function arrayMap (map, array) { return arrayApply (function (x) { return map[x]; }, array); }
+
+function binSearch (rows, newId){
+ var min = 0;
+ var max = rows.length;
+
+ while (max - min > 1) {
+ var mid = (max + min) >> 1;
+ if (rows[mid].id > newId)
+ max = mid;
+ else
+ min = mid;
+ }
+
+ if (max == min)
+ return max;
+ else
+ return rows[min].id > newId ? min : max;
+}
+
+/* dynamic table utils */
+function updateCurrent () {
+ for (var i = 0; i < table.rows.length; i++) {
+ var row = table.rows[i];
+ if (isVisible (row)) {
+ /* j starts from 1 because we want to ignore _rowHeader */
+ for (var j = 1; j < row.cells.length; j++)
+ if (row.id[0] == "H")
+ for (var k = 0; k < headerResults.length; k++)
+ header[row.cells[j].id].current[headerResults[k]] = 0;
+ else if (isVisible (row.cells[j]))
+ header[row.cells[j].id].current[row.cells[j].className]++;
+ }
+ }
+
+ updateHeader ();
+}
+
+function setVisible (array, subsetPred, visibilityPred, visibleFlag) {
+ var modified = false, somethingVisible = false;
+ for (var i = 0; i < array.length; i++)
+ if (array[i].id[0] != "H") {
+ if (subsetPred (array[i])) {
+ var wanted = visibilityPred (array[i]);
+ if (isVisible (array[i]) != wanted) {
+ modified = true;
+ array[i].style.display = wanted ? visibleFlag : "none";
+ }
+ }
+ somethingVisible = somethingVisible || isVisible (array[i]);
+ }
+ return modified && somethingVisible;
+}
+
+function setVisibleOnly (array, pred, visibleFlag) {
+ return setVisible (array, fTrue, pred, visibleFlag);
+}
+
+function flipVisible (array, subsetPred, visibleFlag) {
+ return setVisible (array, subsetPred, function (x) { return !isVisible (x); }, visibleFlag);
+}
+
+
+/* event handling */
+function ignoreEvent (event) {
+ if (event.preventDefault)
+ event.preventDefault();
+ else
+ event.returnValue= false;
+ return false;
+}
+
+function mouseUp (event) {
+ var visFun;
+ if (event.button == 0)
+ visFun = setVisibleOnly;
+ else if (event.button == 2)
+ visFun = flipVisible;
+ else
+ return false;
+
+ var structureFun;
+ if (event.target.id[0] == "r") /* rows */
+ structureFun = function (f, p) { return f (table.rows, p, "table-row"); };
+ else if (event.target.id[0] == "c") /* cols */
+ structureFun = function (f, p) { return inArray (true, arrayApply (function (row) { return f (row.cells, p, "table-cell") }, table.rows)) };
+ else
+ return false;
+
+ var pred;
+ if (event.target.id[1] == "/") { /* regexp */
+ var re = new RegExp (event.target.id);
+ pred = function (x) { return re.test (x.id); };
+ } else if (event.target.id[1] == "#") { /* counters */
+ var s = event.target.id.substr (2).split ("/");
+ pred = function (row) { return row.cells[s[0]].className == s[1]; }
+ } else
+ return false;
+
+ if (!structureFun (visFun, pred))
+ if (!structureFun (flipVisible, fTrue))
+ structureFun (flipVisible, fTrue);
+
+ updateCurrent ();
+
+ return false;
+}
+
+function noDrag (event) {
+ dragElement = undefined;
+ return false;
+}
+
+function startDrag (event) {
+ if (event.button == 0)
+ dragElement = event.target;
+ else
+ dragElement = undefined;
+ return false;
+}
+
+function endDrag (event) {
+ if (!dragElement)
+ return false;
+
+ if (event.currentTarget.id == colsArray[0] &&
+ inArray (dragElement.className, colFields)) {
+ rowFields.push (dragElement.className);
+ colFields = arrayPred (function (x) { return x != dragElement.className; }, colFields);
+ } else if (event.currentTarget.id == headerId &&
+ inArray (dragElement.className, rowFields)) {
+ colFields.push (dragElement.className);
+ rowFields = arrayPred (function (x) { return x != dragElement.className; }, rowFields);
+ } else
+ return true;
+
+ reloadAll ();
+ return false;
+}
+
+
+/* table content */
+function Row (id, t) {
+ this[colsArray[0]] = new RowHeader (id, t);
+
+ this.get = function (c) { return this[c] != undefined ? this[c] : untested; }
+ this.getHTML = function (c) { return this.get(c).toString (); };
+ this.setStyle = function (c, element) { return this.get(c).setStyle (element); };
+}
+
+function ColumnHeader (id, values) {
+ this.id = id;
+ this.values = values;
+ this.total = new Object ();
+ this.current = new Object ();
+
+ for (var i = 0; i < headerResults.length; i++) {
+ this.total[headerResults[i]] = 0;
+ this.current[headerResults[i]] = 0;
+ }
+
+ this.toString = function () {
+ var counts = new Array ();
+ for (var i = 0; i < headerResults.length; i++) {
+ var hr = headerResults[i];
+ var s = span (this.current[hr], "r#" + colsMap[this.id] + "/" + hr, hr);
+ if (this.current[hr] != this.total[hr])
+ s += span ("[" + this.total[hr] + "]", "r#" + colsMap[this.id] + "/" + hr, hr);
+ counts.push (s);
+ }
+
+ return fieldsToHTML (true, this.values) + "<br>" + counts.join ("/");
+ }
+
+ this.setStyle = function (element) { };
+}
+
+function RowHeader (id, values) {
+ this.id = id;
+ this.values = values;
+ this.toString = function () { return fieldsToHTML (false, this.values); }
+ this.setStyle = function (element) { element.onmouseup = endDrag; };
+}
+
+function Test () {
+ this.rowId = function () { return "r/" + arrayMap (this, rowFields).join("/") + "/"; };
+ this.colId = function () { return "c/" + arrayMap (this, colFields).join("/") + "/"; };
+ this.isComplete = function () { return !inArray (undefined, arrayMap (this, allFields)); }
+ this.toString = function () {
+ var images = arrayMap (this, resultToImgs[this[resultField]]);
+ images = arrayPred (function (x) { return x != undefined; }, images);
+ images = arrayApply (function (x) { return link (image (x), x); }, images);
+ images.push (resultToString[this[resultField]]);
+ return images.join (" ");
+ };
+
+ this.setStyle = function (element) { element.className = this[resultField]; };
+
+ this.addData = function (array) {
+ for (var i = 0; i < array.length - 1; i += 2)
+ this[normalizeKey (array[i])] = array[i+1];
+ };
+}
+
+
+/* table creation */
+function insertCell (domRow, nid, tests) {
+ var domCell = domRow.insertCell (nid);
+ domCell.id = colsArray[nid];
+ domCell.innerHTML = tests.getHTML (colsArray[nid]);
+ tests.setStyle (colsArray[nid], domCell);
+}
+
+function updateRow (row, tests) {
+ var domRow = document.getElementById (row);
+ if (!domRow) {
+ domRow = table.insertRow (binSearch (table.rows, row));
+ domRow.id = row;
+ }
+
+ for (var i = 0; i < colsArray.length; i++)
+ if (i >= domRow.cells.length || domRow.cells[i].id != colsArray[i])
+ insertCell (domRow, i, tests);
+}
+
+function updateHeader () {
+ var visibility;
+ var domRow = document.getElementById (headerId);
+ if (domRow) {
+ visibility = new Object ();
+ for (var i = 0; i < domRow.cells.length; i++)
+ visibility[domRow.cells[i].id] = domRow.cells[i].style.display;
+ table.deleteRow (domRow.rowIndex);
+ }
+
+ updateRow (headerId, header);
+ table.rows[0].onmouseup = endDrag;
+
+ if (visibility)
+ for (var i = 0; i < colsArray.length; i++)
+ if (visibility[colsArray[i]])
+ table.rows[0].cells[colsMap[colsArray[i]]].style.display = visibility[colsArray[i]];
+}
+
+function updateTable () {
+ colsArray.sort ();
+
+ colsMap = new Object ();
+ for (var i = 0; i < colsArray.length; i++)
+ colsMap[colsArray[i]] = i;
+
+ updateHeader ();
+ for (var i = 0; i < table.rows.length; i++)
+ updateRow (table.rows[i].id, empty);
+}
+
+
+/* log file parsing */
+function parseTest (testData) {
+ var colsChanged = false;
+ var rows = new Array ();
+ var data = new Object ();
+ var t = new Test ();
+ var lines = testData.split ("\n");
+ for (var i = 0; i < lines.length; i++) {
+ t.addData (lines[i].split (" "));
+ if (t.isComplete ()) {
+ var c = t.colId ();
+ if (header[c] == undefined) {
+ colsArray.push (c);
+ header[c] = new ColumnHeader (c, t);
+ colsChanged = true;
+ }
+
+ var r = t.rowId ();
+ if (!data[r]) {
+ rows.push (r);
+ data[r] = new Row (r, t);
+ }
+
+ data[r][c] = t;
+ header[c].total[t[resultField]]++;
+ header[c].current[t[resultField]]++;
+ t = new Test ();
+ }
+ }
+
+ if (colsChanged)
+ updateTable ();
+ else
+ updateHeader ();
+
+ for (var i = 0; i < rows.length; i++)
+ updateRow (rows[i], data[rows[i]]);
+}
+
+function parseFile (fileName, parser) {
+ var req = new XMLHttpRequest ();
+ req.onreadystatechange = function () {
+ if (req.readyState == 4)
+ parser (req.responseText);
+ }
+
+ try {
+ req.open ("GET", fileName);
+ req.send (null);
+ } catch (e) {}
+}
+
+function parseTestList (listData) {
+ var summaryRE = /\d+ Passed, \d+ Failed \x5b\d+ crashed, \d+ expected\x5d, \d+ Skipped/;
+ var lines = listData.split ("\n");
+ for (var i = 0; i < lines.length; i++) {
+ if (summaryRE.test (lines[i]))
+ return;
+
+ var words = lines[i].split (" ");
+ if (words.length >= 2 &&
+ words[0][words[0].length-1] == ":" &&
+ inArray (words[1], logResults))
+ parseFile (words[0].substr (0, words[0].length-1) + ".log", parseTest);
+ }
+}
+
+function reloadAll() {
+ resetGlobals ();
+
+ parseFile ("cairo-test-suite.log", parseTestList);
+}
+
+window.onload = reloadAll; \ No newline at end of file
diff --git a/test/trap-clip.quartz.argb32.ref.png b/test/trap-clip.quartz.argb32.ref.png
index 8ad99ce..e045ea4 100644
--- a/test/trap-clip.quartz.argb32.ref.png
+++ b/test/trap-clip.quartz.argb32.ref.png
Binary files differ
diff --git a/test/trap-clip.quartz.rgb24.ref.png b/test/trap-clip.quartz.rgb24.ref.png
index 110ac6e..1044d86 100644
--- a/test/trap-clip.quartz.rgb24.ref.png
+++ b/test/trap-clip.quartz.rgb24.ref.png
Binary files differ
diff --git a/test/unbounded-operator.quartz.argb32.ref.png b/test/unbounded-operator.quartz.argb32.ref.png
new file mode 100644
index 0000000..b2e9916
--- /dev/null
+++ b/test/unbounded-operator.quartz.argb32.ref.png
Binary files differ
diff --git a/test/unbounded-operator.quartz.rgb24.ref.png b/test/unbounded-operator.quartz.rgb24.ref.png
new file mode 100644
index 0000000..ea41dc8
--- /dev/null
+++ b/test/unbounded-operator.quartz.rgb24.ref.png
Binary files differ
diff --git a/test/white-in-noop.c b/test/white-in-noop.c
new file mode 100644
index 0000000..e6a93e8
--- /dev/null
+++ b/test/white-in-noop.c
@@ -0,0 +1,52 @@
+/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */
+/*
+ * Copyright 2011 Andrea Canciani
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Andrea Canciani <ranma42@gmail.com>
+ */
+
+#include "cairo-test.h"
+
+#define HEIGHT 4
+#define WIDTH 4
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+ cairo_set_source_rgb (cr, 0, 0, 0);
+ cairo_paint (cr);
+
+ cairo_set_operator (cr, CAIRO_OPERATOR_IN);
+
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ cairo_paint (cr);
+
+ return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (white_in_noop,
+ "Test an invalid optimization of the IN operator with white sources",
+ "operator", /* keywords */
+ NULL, /* requirements */
+ WIDTH, HEIGHT,
+ NULL, draw)
diff --git a/test/white-in-noop.ref.png b/test/white-in-noop.ref.png
new file mode 100644
index 0000000..f42bb8d
--- /dev/null
+++ b/test/white-in-noop.ref.png
Binary files differ
diff --git a/test/xcb-stress-cache.c b/test/xcb-stress-cache.c
new file mode 100644
index 0000000..3c7ee15
--- /dev/null
+++ b/test/xcb-stress-cache.c
@@ -0,0 +1,118 @@
+/*
+ * Copyright © 2011 Uli Schlachter
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Uli Schlachter <psychon@znc.in>
+ */
+
+#include "cairo-test.h"
+
+#define WIDTH 512
+#define HEIGHT 512
+
+/* This is a random pick. This results in 512 (width) * 512 (height) *
+ * 2 (surfaces per run) * 4 (ARGB32) * ITERATIONS = 200 MiB of image data. */
+#define ITERATIONS 100
+
+/* This tries to trigger a bug in the xcb backend where a Picture is freed to
+ * early. It goes something like this:
+ *
+ * - _composite_mask calls _cairo_xcb_picture_for_pattern to get a xcb_picture_t
+ * for the source.
+ * - _cairo_xcb_picture_for_pattern calls _cairo_xcb_surface_picture which calls
+ * _cairo_xcb_screen_store_surface_picture which adds the picture to a cache.
+ * - _cairo_xcb_surface_picture also attached the picture as a snapshot to
+ * the source surface using cairo_surface_finish as detach_func.
+ * - _composite_mask calls _cairo_xcb_picture_for_pattern to get a xcb_picture_t
+ * for the mask.
+ * - The resulting picture surface is added to the cache again, but the cache is
+ * already full, so a random cache entry is picked and removed.
+ * - The surface that was added before is picked and gets fed to
+ * _surface_cache_entry_destroy.
+ * - This calls _cairo_surface_detach_snapshot which causes the
+ * detach_func from above to be called, so the surface is finished and the
+ * associated picture is FreePicture'd.
+ * - _composite_mask now uses a Picture that was already freed.
+ *
+ * So this depends on the screen's surface cache to be full which is why we do
+ * all this looping.
+ */
+
+static cairo_surface_t *
+create_image ()
+{
+ cairo_surface_t *surface;
+ cairo_t *cr;
+
+ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, WIDTH, HEIGHT);
+ /* Paint something random to the image */
+ cr = cairo_create (surface);
+ cairo_paint (cr);
+ cairo_set_source_rgb (cr, 0, 1, 1);
+ cairo_rectangle (cr, 0, 0, WIDTH/2.0, HEIGHT/2.0);
+ cairo_fill (cr);
+ cairo_set_source_rgb (cr, 1, 0, 1);
+ cairo_rectangle (cr, WIDTH/2.0, HEIGHT/2.0, WIDTH/2.0, HEIGHT/2.0);
+ cairo_fill (cr);
+ cairo_destroy (cr);
+
+ return surface;
+}
+
+static cairo_surface_t *
+dirty_cache (cairo_t *cr)
+{
+ cairo_surface_t *surface;
+
+ /* Set a source surface... */
+ surface = create_image ();
+ cairo_set_source_surface (cr, surface, 0, 0);
+ cairo_surface_destroy (surface);
+ /* ...and create a mask surface, so that we can hit the early FreePicture */
+ surface = create_image ();
+ cairo_mask_surface (cr, surface, 0, 0);
+
+ return surface;
+}
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+ int i;
+ cairo_surface_t *array[ITERATIONS];
+
+ /* We have to keep the associated cairo_surface_t alive so that they aren't
+ * removed from the cache */
+ for (i = 0; i < ITERATIONS; i++)
+ array[i] = dirty_cache (cr);
+ for (i = 0; i < ITERATIONS; i++)
+ cairo_surface_destroy (array[i]);
+
+ return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (xcb_stress_cache,
+ "Stress test for a image surface cache in cairo-xcb",
+ "xcb, stress", /* keywords */
+ NULL, /* requirements */
+ 2, 2,
+ NULL, draw)
diff --git a/test/xcb-stress-cache.ref.png b/test/xcb-stress-cache.ref.png
new file mode 100644
index 0000000..850ce59
--- /dev/null
+++ b/test/xcb-stress-cache.ref.png
Binary files differ
diff --git a/test/xcomposite-projection.quartz.ref.png b/test/xcomposite-projection.quartz.ref.png
index c7b6f5c..0221607 100644
--- a/test/xcomposite-projection.quartz.ref.png
+++ b/test/xcomposite-projection.quartz.ref.png
Binary files differ