| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989 |
- /*
- * Copyright © 2010 Red Hat Inc.
- *
- * 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
- * Red Hat, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Red Hat, Inc. makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL RED HAT, INC. 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: Benjamin Otte <otte@redhat.com>
- */
- /*
- * WHAT THIS TEST DOES
- *
- * This test tests that for all public APIs Cairo behaves correct, consistent
- * and most of all doesn't crash. It does this by calling all APIs that take
- * surfaces or contexts and calling them on specially prepared arguments that
- * should fail when called on this function.
- *
- * ADDING NEW FUNCTIONS
- *
- * You need (for adding the function cairo_surface_foo):
- * 1) A surface_test_func_t named test_cairo_surface_foo that gets passed the
- * prepared surface and has the job of calling the function and checking
- * the return value (if one exists) for correctness. The top of this file
- * contains all these shim functions.
- * 2) Knowledge if the function behaves like a setter or like a getter. A
- * setter should set an error status on the surface, a getter does not
- * modify the function.
- * 3) Knowledge if the function only works for a specific surface type and for
- * which one.
- * 4) An entry in the tests array using the TEST() macro. It takes as arguments:
- * - The function name
- * - TRUE if the function modifies the surface, FALSE otherwise
- * - the surface type for which the function is valid or -1 if it is valid
- * for all surface types.
- *
- * FIXING FAILURES
- *
- * The test will dump failures notices into the api-special-cases.log file (when
- * it doesn't crash). These should be pretty self-explanatory. Usually it is
- * enough to just add a new check to the function it complained about.
- */
- #ifdef HAVE_CONFIG_H
- #include "config.h"
- #endif
- #include <assert.h>
- #include <limits.h>
- #include "cairo-test.h"
- #if CAIRO_HAS_GL_SURFACE
- #include <cairo-gl.h>
- #endif
- #if CAIRO_HAS_OS2_SURFACE
- #include <cairo-os2.h>
- #endif
- #if CAIRO_HAS_PDF_SURFACE
- #include <cairo-pdf.h>
- #endif
- #if CAIRO_HAS_PS_SURFACE
- #include <cairo-ps.h>
- #endif
- #if CAIRO_HAS_QUARTZ_SURFACE
- #define Cursor QuartzCursor
- #include <cairo-quartz.h>
- #undef Cursor
- #endif
- #if CAIRO_HAS_SVG_SURFACE
- #include <cairo-svg.h>
- #endif
- #if CAIRO_HAS_TEE_SURFACE
- #include <cairo-tee.h>
- #endif
- #if CAIRO_HAS_XCB_SURFACE
- #include <cairo-xcb.h>
- #endif
- #if CAIRO_HAS_XLIB_SURFACE
- #define Cursor XCursor
- #include <cairo-xlib.h>
- #undef Cursor
- #endif
- #define surface_has_type(surface,type) (cairo_surface_get_type (surface) == (type))
- typedef cairo_test_status_t (* surface_test_func_t) (cairo_surface_t *surface);
- typedef cairo_test_status_t (* context_test_func_t) (cairo_t *cr);
- static cairo_test_status_t
- test_cairo_reference (cairo_t *cr)
- {
- cairo_destroy (cairo_reference (cr));
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_reference_count (cairo_t *cr)
- {
- unsigned int refcount = cairo_get_reference_count (cr);
- if (refcount > 0)
- return CAIRO_TEST_SUCCESS;
- /* inert error context have a refcount of 0 */
- return cairo_status (cr) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_set_user_data (cairo_t *cr)
- {
- static cairo_user_data_key_t key;
- cairo_status_t status;
- status = cairo_set_user_data (cr, &key, &key, NULL);
- if (status == CAIRO_STATUS_NO_MEMORY)
- return CAIRO_TEST_NO_MEMORY;
- else if (status)
- return CAIRO_TEST_SUCCESS;
- if (cairo_get_user_data (cr, &key) != &key)
- return CAIRO_TEST_ERROR;
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_save (cairo_t *cr)
- {
- cairo_save (cr);
- cairo_restore (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_push_group (cairo_t *cr)
- {
- cairo_pattern_t *pattern;
- cairo_status_t status;
- cairo_push_group (cr);
- pattern = cairo_pop_group (cr);
- status = cairo_pattern_status (pattern);
- cairo_pattern_destroy (pattern);
- return status == CAIRO_STATUS_SUCCESS || status == cairo_status (cr) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_push_group_with_content (cairo_t *cr)
- {
- cairo_push_group_with_content (cr, CAIRO_CONTENT_COLOR_ALPHA);
- cairo_pop_group_to_source (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_operator (cairo_t *cr)
- {
- cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_source (cairo_t *cr)
- {
- cairo_pattern_t *source = cairo_pattern_create_rgb (0, 0, 0);
- cairo_set_source (cr, source);
- cairo_pattern_destroy (source);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_source_rgb (cairo_t *cr)
- {
- cairo_set_source_rgb (cr, 0, 0, 0);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_source_rgba (cairo_t *cr)
- {
- cairo_set_source_rgba (cr, 0, 0, 0, 1);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_source_surface (cairo_t *cr)
- {
- cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 1, 1);
- cairo_set_source_surface (cr, surface, 0, 0);
- cairo_surface_destroy (surface);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_tolerance (cairo_t *cr)
- {
- cairo_set_tolerance (cr, 42);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_antialias (cairo_t *cr)
- {
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_BEST);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_fill_rule (cairo_t *cr)
- {
- cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_line_width (cairo_t *cr)
- {
- cairo_set_line_width (cr, 42);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_line_cap (cairo_t *cr)
- {
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_line_join (cairo_t *cr)
- {
- cairo_set_line_join (cr, CAIRO_LINE_JOIN_BEVEL);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_dash (cairo_t *cr)
- {
- cairo_set_dash (cr, NULL, 0, 0);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_miter_limit (cairo_t *cr)
- {
- cairo_set_miter_limit (cr, 2);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_translate (cairo_t *cr)
- {
- cairo_translate (cr, 2, 2);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_scale (cairo_t *cr)
- {
- cairo_scale (cr, 2, 2);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_rotate (cairo_t *cr)
- {
- cairo_rotate (cr, 2);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_transform (cairo_t *cr)
- {
- cairo_matrix_t matrix;
- cairo_matrix_init_translate (&matrix, 1, 1);
- cairo_transform (cr, &matrix);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_matrix (cairo_t *cr)
- {
- cairo_matrix_t matrix;
- cairo_matrix_init_translate (&matrix, 1, 1);
- cairo_set_matrix (cr, &matrix);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_identity_matrix (cairo_t *cr)
- {
- cairo_identity_matrix (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_user_to_device (cairo_t *cr)
- {
- double x = 42, y = 42;
- cairo_user_to_device (cr, &x, &y);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_user_to_device_distance (cairo_t *cr)
- {
- double x = 42, y = 42;
- cairo_user_to_device_distance (cr, &x, &y);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_device_to_user (cairo_t *cr)
- {
- double x = 42, y = 42;
- cairo_device_to_user (cr, &x, &y);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_device_to_user_distance (cairo_t *cr)
- {
- double x = 42, y = 42;
- cairo_device_to_user_distance (cr, &x, &y);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_new_path (cairo_t *cr)
- {
- cairo_new_path (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_move_to (cairo_t *cr)
- {
- cairo_move_to (cr, 2, 2);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_new_sub_path (cairo_t *cr)
- {
- cairo_new_sub_path (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_line_to (cairo_t *cr)
- {
- cairo_line_to (cr, 2, 2);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_curve_to (cairo_t *cr)
- {
- cairo_curve_to (cr, 2, 2, 3, 3, 4, 4);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_arc (cairo_t *cr)
- {
- cairo_arc (cr, 2, 2, 3, 0, 2 * M_PI);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_arc_negative (cairo_t *cr)
- {
- cairo_arc_negative (cr, 2, 2, 3, 0, 2 * M_PI);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_rel_move_to (cairo_t *cr)
- {
- cairo_rel_move_to (cr, 2, 2);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_rel_line_to (cairo_t *cr)
- {
- cairo_rel_line_to (cr, 2, 2);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_rel_curve_to (cairo_t *cr)
- {
- cairo_rel_curve_to (cr, 2, 2, 3, 3, 4, 4);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_rectangle (cairo_t *cr)
- {
- cairo_rectangle (cr, 2, 2, 3, 3);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_close_path (cairo_t *cr)
- {
- cairo_close_path (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_path_extents (cairo_t *cr)
- {
- double x1, y1, x2, y2;
- cairo_path_extents (cr, &x1, &y1, &x2, &y2);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_paint (cairo_t *cr)
- {
- cairo_paint (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_paint_with_alpha (cairo_t *cr)
- {
- cairo_paint_with_alpha (cr, 0.5);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_mask (cairo_t *cr)
- {
- cairo_pattern_t *pattern;
- pattern = cairo_pattern_create_rgb (0.5, 0.5, 0.5);
- cairo_mask (cr, pattern);
- cairo_pattern_destroy (pattern);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_mask_surface (cairo_t *cr)
- {
- cairo_surface_t *surface;
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 1, 1);
- cairo_mask_surface (cr, surface, 0, 0);
- cairo_surface_destroy (surface);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_stroke (cairo_t *cr)
- {
- cairo_stroke (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_stroke_preserve (cairo_t *cr)
- {
- cairo_stroke_preserve (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_fill (cairo_t *cr)
- {
- cairo_fill (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_fill_preserve (cairo_t *cr)
- {
- cairo_fill_preserve (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_copy_page (cairo_t *cr)
- {
- cairo_copy_page (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_show_page (cairo_t *cr)
- {
- cairo_show_page (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_in_stroke (cairo_t *cr)
- {
- cairo_in_stroke (cr, 1, 1);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_in_fill (cairo_t *cr)
- {
- cairo_in_fill (cr, 1, 1);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_in_clip (cairo_t *cr)
- {
- cairo_in_clip (cr, 1, 1);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_stroke_extents (cairo_t *cr)
- {
- double x1, y1, x2, y2;
- cairo_stroke_extents (cr, &x1, &y1, &x2, &y2);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_fill_extents (cairo_t *cr)
- {
- double x1, y1, x2, y2;
- cairo_fill_extents (cr, &x1, &y1, &x2, &y2);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_reset_clip (cairo_t *cr)
- {
- cairo_reset_clip (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_clip (cairo_t *cr)
- {
- cairo_clip (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_clip_preserve (cairo_t *cr)
- {
- cairo_clip_preserve (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_clip_extents (cairo_t *cr)
- {
- double x1, y1, x2, y2;
- cairo_clip_extents (cr, &x1, &y1, &x2, &y2);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_copy_clip_rectangle_list (cairo_t *cr)
- {
- cairo_rectangle_list_destroy (cairo_copy_clip_rectangle_list (cr));
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_select_font_face (cairo_t *cr)
- {
- cairo_select_font_face (cr, "Arial", CAIRO_FONT_SLANT_ITALIC, CAIRO_FONT_WEIGHT_BOLD);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_font_size (cairo_t *cr)
- {
- cairo_set_font_size (cr, 42);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_font_matrix (cairo_t *cr)
- {
- cairo_matrix_t matrix;
- cairo_matrix_init_translate (&matrix, 1, 1);
- cairo_set_font_matrix (cr, &matrix);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_font_matrix (cairo_t *cr)
- {
- cairo_matrix_t matrix;
- cairo_get_font_matrix (cr, &matrix);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_font_options (cairo_t *cr)
- {
- cairo_font_options_t *opt = cairo_font_options_create ();
- cairo_set_font_options (cr, opt);
- cairo_font_options_destroy (opt);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_font_options (cairo_t *cr)
- {
- cairo_font_options_t *opt = cairo_font_options_create ();
- cairo_get_font_options (cr, opt);
- cairo_font_options_destroy (opt);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_font_face (cairo_t *cr)
- {
- cairo_set_font_face (cr, cairo_get_font_face (cr));
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_set_scaled_font (cairo_t *cr)
- {
- cairo_set_scaled_font (cr, cairo_get_scaled_font (cr));
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_show_text (cairo_t *cr)
- {
- cairo_show_text (cr, "Cairo");
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_show_glyphs (cairo_t *cr)
- {
- cairo_glyph_t glyph;
- glyph.index = 65;
- glyph.x = 0;
- glyph.y = 0;
- cairo_show_glyphs (cr, &glyph, 1);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_show_text_glyphs (cairo_t *cr)
- {
- cairo_glyph_t glyph;
- cairo_text_cluster_t cluster;
- glyph.index = 65;
- glyph.x = 0;
- glyph.y = 0;
- cluster.num_bytes = 1;
- cluster.num_glyphs = 1;
- cairo_show_text_glyphs (cr, "a", -1, &glyph, 1, &cluster, 1, 0);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_text_path (cairo_t *cr)
- {
- cairo_text_path (cr, "Cairo");
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_glyph_path (cairo_t *cr)
- {
- cairo_glyph_t glyph;
- glyph.index = 65;
- glyph.x = 0;
- glyph.y = 0;
- cairo_glyph_path (cr, &glyph, 1);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_text_extents (cairo_t *cr)
- {
- cairo_text_extents_t extents;
- cairo_text_extents (cr, "Cairo", &extents);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_glyph_extents (cairo_t *cr)
- {
- cairo_glyph_t glyph;
- cairo_text_extents_t extents;
- glyph.index = 65;
- glyph.x = 0;
- glyph.y = 0;
- cairo_glyph_extents (cr, &glyph, 1, &extents);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_font_extents (cairo_t *cr)
- {
- cairo_font_extents_t extents;
- cairo_font_extents (cr, &extents);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_operator (cairo_t *cr)
- {
- cairo_get_operator (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_source (cairo_t *cr)
- {
- cairo_get_source (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_tolerance (cairo_t *cr)
- {
- cairo_get_tolerance (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_antialias (cairo_t *cr)
- {
- cairo_get_antialias (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_has_current_point (cairo_t *cr)
- {
- cairo_has_current_point (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_current_point (cairo_t *cr)
- {
- double x, y;
- cairo_get_current_point (cr, &x, &y);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_fill_rule (cairo_t *cr)
- {
- cairo_get_fill_rule (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_line_width (cairo_t *cr)
- {
- cairo_get_line_width (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_line_cap (cairo_t *cr)
- {
- cairo_get_line_cap (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_line_join (cairo_t *cr)
- {
- cairo_get_line_join (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_miter_limit (cairo_t *cr)
- {
- cairo_get_miter_limit (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_dash_count (cairo_t *cr)
- {
- cairo_get_dash_count (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_dash (cairo_t *cr)
- {
- double dashes[42];
- double offset;
- cairo_get_dash (cr, &dashes[0], &offset);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_matrix (cairo_t *cr)
- {
- cairo_matrix_t matrix;
- cairo_get_matrix (cr, &matrix);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_target (cairo_t *cr)
- {
- cairo_get_target (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_get_group_target (cairo_t *cr)
- {
- cairo_get_group_target (cr);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_copy_path (cairo_t *cr)
- {
- cairo_path_destroy (cairo_copy_path (cr));
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_copy_path_flat (cairo_t *cr)
- {
- cairo_path_destroy (cairo_copy_path_flat (cr));
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_append_path (cairo_t *cr)
- {
- cairo_path_data_t data[3];
- cairo_path_t path;
- path.status = CAIRO_STATUS_SUCCESS;
- path.data = &data[0];
- path.num_data = ARRAY_LENGTH(data);
- data[0].header.type = CAIRO_PATH_MOVE_TO;
- data[0].header.length = 2;
- data[1].point.x = 1;
- data[1].point.y = 2;
- data[2].header.type = CAIRO_PATH_CLOSE_PATH;
- data[2].header.length = 1;
- cairo_append_path (cr, &path);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_create_similar (cairo_surface_t *surface)
- {
- cairo_surface_t *similar;
-
- similar = cairo_surface_create_similar (surface, CAIRO_CONTENT_ALPHA, 100, 100);
-
- cairo_surface_destroy (similar);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_create_for_rectangle (cairo_surface_t *surface)
- {
- cairo_surface_t *similar;
-
- similar = cairo_surface_create_for_rectangle (surface, 1, 1, 8, 8);
-
- cairo_surface_destroy (similar);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_reference (cairo_surface_t *surface)
- {
- cairo_surface_destroy (cairo_surface_reference (surface));
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_finish (cairo_surface_t *surface)
- {
- cairo_surface_finish (surface);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_get_device (cairo_surface_t *surface)
- {
- /* cairo_device_t *device = */cairo_surface_get_device (surface);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_get_reference_count (cairo_surface_t *surface)
- {
- unsigned int refcount = cairo_surface_get_reference_count (surface);
- if (refcount > 0)
- return CAIRO_TEST_SUCCESS;
- /* inert error surfaces have a refcount of 0 */
- return cairo_surface_status (surface) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_surface_status (cairo_surface_t *surface)
- {
- cairo_status_t status = cairo_surface_status (surface);
- return status < CAIRO_STATUS_LAST_STATUS ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_surface_get_type (cairo_surface_t *surface)
- {
- /* cairo_surface_type_t type = */cairo_surface_get_type (surface);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_get_content (cairo_surface_t *surface)
- {
- cairo_content_t content = cairo_surface_get_content (surface);
- switch (content) {
- case CAIRO_CONTENT_COLOR:
- case CAIRO_CONTENT_ALPHA:
- case CAIRO_CONTENT_COLOR_ALPHA:
- return CAIRO_TEST_SUCCESS;
- default:
- return CAIRO_TEST_ERROR;
- }
- }
- static cairo_test_status_t
- test_cairo_surface_set_user_data (cairo_surface_t *surface)
- {
- static cairo_user_data_key_t key;
- cairo_status_t status;
- status = cairo_surface_set_user_data (surface, &key, &key, NULL);
- if (status == CAIRO_STATUS_NO_MEMORY)
- return CAIRO_TEST_NO_MEMORY;
- else if (status)
- return CAIRO_TEST_SUCCESS;
- if (cairo_surface_get_user_data (surface, &key) != &key)
- return CAIRO_TEST_ERROR;
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_set_mime_data (cairo_surface_t *surface)
- {
- const char *mimetype = "text/x-uri";
- const char *data = "http://www.cairographics.org";
- cairo_status_t status;
- status = cairo_surface_set_mime_data (surface,
- mimetype,
- (const unsigned char *) data,
- strlen (data),
- NULL, NULL);
- return status ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_surface_get_mime_data (cairo_surface_t *surface)
- {
- const char *mimetype = "text/x-uri";
- const unsigned char *data;
- unsigned long length;
- cairo_surface_get_mime_data (surface, mimetype, &data, &length);
- return data == NULL && length == 0 ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_surface_get_font_options (cairo_surface_t *surface)
- {
- cairo_font_options_t *options;
- cairo_status_t status;
- options = cairo_font_options_create ();
- if (likely (!cairo_font_options_status (options)))
- cairo_surface_get_font_options (surface, options);
- status = cairo_font_options_status (options);
- cairo_font_options_destroy (options);
- return status ? CAIRO_TEST_ERROR : CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_flush (cairo_surface_t *surface)
- {
- cairo_surface_flush (surface);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_mark_dirty (cairo_surface_t *surface)
- {
- cairo_surface_mark_dirty (surface);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_mark_dirty_rectangle (cairo_surface_t *surface)
- {
- cairo_surface_mark_dirty_rectangle (surface, 1, 1, 8, 8);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_set_device_offset (cairo_surface_t *surface)
- {
- cairo_surface_set_device_offset (surface, 5, 5);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_get_device_offset (cairo_surface_t *surface)
- {
- double x, y;
- cairo_surface_get_device_offset (surface, &x, &y);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_set_fallback_resolution (cairo_surface_t *surface)
- {
- cairo_surface_set_fallback_resolution (surface, 42, 42);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_get_fallback_resolution (cairo_surface_t *surface)
- {
- double x, y;
- cairo_surface_get_fallback_resolution (surface, &x, &y);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_copy_page (cairo_surface_t *surface)
- {
- cairo_surface_copy_page (surface);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_show_page (cairo_surface_t *surface)
- {
- cairo_surface_show_page (surface);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_surface_has_show_text_glyphs (cairo_surface_t *surface)
- {
- cairo_surface_has_show_text_glyphs (surface);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_image_surface_get_data (cairo_surface_t *surface)
- {
- unsigned char *data = cairo_image_surface_get_data (surface);
- return data == NULL || surface_has_type (surface, CAIRO_SURFACE_TYPE_IMAGE) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_image_surface_get_format (cairo_surface_t *surface)
- {
- cairo_format_t format = cairo_image_surface_get_format (surface);
- return format == CAIRO_FORMAT_INVALID || surface_has_type (surface, CAIRO_SURFACE_TYPE_IMAGE) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_image_surface_get_width (cairo_surface_t *surface)
- {
- unsigned int width = cairo_image_surface_get_width (surface);
- return width == 0 || surface_has_type (surface, CAIRO_SURFACE_TYPE_IMAGE) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_image_surface_get_height (cairo_surface_t *surface)
- {
- unsigned int height = cairo_image_surface_get_height (surface);
- return height == 0 || surface_has_type (surface, CAIRO_SURFACE_TYPE_IMAGE) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_image_surface_get_stride (cairo_surface_t *surface)
- {
- unsigned int stride = cairo_image_surface_get_stride (surface);
- return stride == 0 || surface_has_type (surface, CAIRO_SURFACE_TYPE_IMAGE) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- #if CAIRO_HAS_PNG_FUNCTIONS
- static cairo_test_status_t
- test_cairo_surface_write_to_png (cairo_surface_t *surface)
- {
- cairo_status_t status;
- status = cairo_surface_write_to_png (surface, "/this/file/will/definitely/not/exist.png");
-
- return status ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_status_t
- write_func_that_always_fails (void *closure, const unsigned char *data, unsigned int length)
- {
- return CAIRO_STATUS_WRITE_ERROR;
- }
- static cairo_test_status_t
- test_cairo_surface_write_to_png_stream (cairo_surface_t *surface)
- {
- cairo_status_t status;
- status = cairo_surface_write_to_png_stream (surface,
- write_func_that_always_fails,
- NULL);
-
- return status && status != CAIRO_STATUS_WRITE_ERROR ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- #endif /* CAIRO_HAS_PNG_FUNCTIONS */
- static cairo_test_status_t
- test_cairo_recording_surface_ink_extents (cairo_surface_t *surface)
- {
- double x, y, w, h;
- cairo_recording_surface_ink_extents (surface, &x, &y, &w, &h);
- return x == 0 && y == 0 && w == 0 && h == 0 ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- #if CAIRO_HAS_TEE_SURFACE
- static cairo_test_status_t
- test_cairo_tee_surface_add (cairo_surface_t *surface)
- {
- cairo_surface_t *image = cairo_image_surface_create (CAIRO_FORMAT_A8, 10, 10);
- cairo_tee_surface_add (surface, image);
- cairo_surface_destroy (image);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_tee_surface_remove (cairo_surface_t *surface)
- {
- cairo_surface_t *image = cairo_image_surface_create (CAIRO_FORMAT_A8, 10, 10);
- cairo_tee_surface_remove (surface, image);
- cairo_surface_destroy (image);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_tee_surface_index (cairo_surface_t *surface)
- {
- cairo_surface_t *master;
- cairo_status_t status;
- master = cairo_tee_surface_index (surface, 0);
- status = cairo_surface_status (master);
- cairo_surface_destroy (master);
- return status ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- #endif /* CAIRO_HAS_TEE_SURFACE */
- #if CAIRO_HAS_GL_SURFACE
- static cairo_test_status_t
- test_cairo_gl_surface_set_size (cairo_surface_t *surface)
- {
- cairo_gl_surface_set_size (surface, 5, 5);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_gl_surface_get_width (cairo_surface_t *surface)
- {
- unsigned int width = cairo_gl_surface_get_width (surface);
- return width == 0 || surface_has_type (surface, CAIRO_SURFACE_TYPE_GL) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_gl_surface_get_height (cairo_surface_t *surface)
- {
- unsigned int height = cairo_gl_surface_get_height (surface);
- return height == 0 || surface_has_type (surface, CAIRO_SURFACE_TYPE_GL) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_gl_surface_swapbuffers (cairo_surface_t *surface)
- {
- cairo_gl_surface_swapbuffers (surface);
- return CAIRO_TEST_SUCCESS;
- }
- #endif /* CAIRO_HAS_GL_SURFACE */
- #if CAIRO_HAS_PDF_SURFACE
- static cairo_test_status_t
- test_cairo_pdf_surface_restrict_to_version (cairo_surface_t *surface)
- {
- cairo_pdf_surface_restrict_to_version (surface, CAIRO_PDF_VERSION_1_4);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_pdf_surface_set_size (cairo_surface_t *surface)
- {
- cairo_pdf_surface_set_size (surface, 5, 5);
- return CAIRO_TEST_SUCCESS;
- }
- #endif /* CAIRO_HAS_PDF_SURFACE */
- #if CAIRO_HAS_PS_SURFACE
- static cairo_test_status_t
- test_cairo_ps_surface_restrict_to_level (cairo_surface_t *surface)
- {
- cairo_ps_surface_restrict_to_level (surface, CAIRO_PS_LEVEL_2);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_ps_surface_set_eps (cairo_surface_t *surface)
- {
- cairo_ps_surface_set_eps (surface, TRUE);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_ps_surface_get_eps (cairo_surface_t *surface)
- {
- cairo_bool_t eps = cairo_ps_surface_get_eps (surface);
- return eps ? CAIRO_TEST_ERROR : CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_ps_surface_set_size (cairo_surface_t *surface)
- {
- cairo_ps_surface_set_size (surface, 5, 5);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_ps_surface_dsc_comment (cairo_surface_t *surface)
- {
- cairo_ps_surface_dsc_comment (surface, "54, 74, 90, 2010");
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_ps_surface_dsc_begin_setup (cairo_surface_t *surface)
- {
- cairo_ps_surface_dsc_begin_setup (surface);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_ps_surface_dsc_begin_page_setup (cairo_surface_t *surface)
- {
- cairo_ps_surface_dsc_begin_page_setup (surface);
- return CAIRO_TEST_SUCCESS;
- }
- #endif /* CAIRO_HAS_PS_SURFACE */
- #if CAIRO_HAS_QUARTZ_SURFACE
- static cairo_test_status_t
- test_cairo_quartz_surface_get_cg_context (cairo_surface_t *surface)
- {
- CGContextRef context = cairo_quartz_surface_get_cg_context (surface);
- return context == NULL || surface_has_type (surface, CAIRO_SURFACE_TYPE_QUARTZ) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- #endif /* CAIRO_HAS_QUARTZ_SURFACE */
- #if CAIRO_HAS_SVG_SURFACE
- static cairo_test_status_t
- test_cairo_svg_surface_restrict_to_version (cairo_surface_t *surface)
- {
- cairo_svg_surface_restrict_to_version (surface, CAIRO_SVG_VERSION_1_1);
- return CAIRO_TEST_SUCCESS;
- }
- #endif /* CAIRO_HAS_SVG_SURFACE */
- #if CAIRO_HAS_XCB_SURFACE
- static cairo_test_status_t
- test_cairo_xcb_surface_set_size (cairo_surface_t *surface)
- {
- cairo_xcb_surface_set_size (surface, 5, 5);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_xcb_surface_set_drawable (cairo_surface_t *surface)
- {
- cairo_xcb_surface_set_drawable (surface, 0, 5, 5);
- return CAIRO_TEST_SUCCESS;
- }
- #endif
- #if CAIRO_HAS_XLIB_SURFACE
- static cairo_test_status_t
- test_cairo_xlib_surface_set_size (cairo_surface_t *surface)
- {
- cairo_xlib_surface_set_size (surface, 5, 5);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_xlib_surface_set_drawable (cairo_surface_t *surface)
- {
- cairo_xlib_surface_set_drawable (surface, 0, 5, 5);
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_cairo_xlib_surface_get_display (cairo_surface_t *surface)
- {
- Display *display = cairo_xlib_surface_get_display (surface);
- return display == NULL || surface_has_type (surface, CAIRO_SURFACE_TYPE_XLIB) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_xlib_surface_get_screen (cairo_surface_t *surface)
- {
- Screen *screen = cairo_xlib_surface_get_screen (surface);
- return screen == NULL || surface_has_type (surface, CAIRO_SURFACE_TYPE_XLIB) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_xlib_surface_get_visual (cairo_surface_t *surface)
- {
- Visual *visual = cairo_xlib_surface_get_visual (surface);
- return visual == NULL || surface_has_type (surface, CAIRO_SURFACE_TYPE_XLIB) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_xlib_surface_get_drawable (cairo_surface_t *surface)
- {
- Drawable drawable = cairo_xlib_surface_get_drawable (surface);
- return drawable == 0 || surface_has_type (surface, CAIRO_SURFACE_TYPE_XLIB) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_xlib_surface_get_depth (cairo_surface_t *surface)
- {
- int depth = cairo_xlib_surface_get_depth (surface);
- return depth == 0 || surface_has_type (surface, CAIRO_SURFACE_TYPE_XLIB) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_xlib_surface_get_width (cairo_surface_t *surface)
- {
- int width = cairo_xlib_surface_get_width (surface);
- return width == 0 || surface_has_type (surface, CAIRO_SURFACE_TYPE_XLIB) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- static cairo_test_status_t
- test_cairo_xlib_surface_get_height (cairo_surface_t *surface)
- {
- int height = cairo_xlib_surface_get_height (surface);
- return height == 0 || surface_has_type (surface, CAIRO_SURFACE_TYPE_XLIB) ? CAIRO_TEST_SUCCESS : CAIRO_TEST_ERROR;
- }
- #endif
- #define TEST(name) { #name, test_ ## name }
- struct {
- const char *name;
- context_test_func_t func;
- } context_tests[] = {
- TEST (cairo_reference),
- TEST (cairo_get_reference_count),
- TEST (cairo_set_user_data),
- TEST (cairo_save),
- TEST (cairo_push_group),
- TEST (cairo_push_group_with_content),
- TEST (cairo_set_operator),
- TEST (cairo_set_source),
- TEST (cairo_set_source_rgb),
- TEST (cairo_set_source_rgba),
- TEST (cairo_set_source_surface),
- TEST (cairo_set_tolerance),
- TEST (cairo_set_antialias),
- TEST (cairo_set_fill_rule),
- TEST (cairo_set_line_width),
- TEST (cairo_set_line_cap),
- TEST (cairo_set_line_join),
- TEST (cairo_set_dash),
- TEST (cairo_set_miter_limit),
- TEST (cairo_translate),
- TEST (cairo_scale),
- TEST (cairo_rotate),
- TEST (cairo_transform),
- TEST (cairo_set_matrix),
- TEST (cairo_identity_matrix),
- TEST (cairo_user_to_device),
- TEST (cairo_user_to_device_distance),
- TEST (cairo_device_to_user),
- TEST (cairo_device_to_user_distance),
- TEST (cairo_new_path),
- TEST (cairo_move_to),
- TEST (cairo_new_sub_path),
- TEST (cairo_line_to),
- TEST (cairo_curve_to),
- TEST (cairo_arc),
- TEST (cairo_arc_negative),
- TEST (cairo_rel_move_to),
- TEST (cairo_rel_line_to),
- TEST (cairo_rel_curve_to),
- TEST (cairo_rectangle),
- TEST (cairo_close_path),
- TEST (cairo_path_extents),
- TEST (cairo_paint),
- TEST (cairo_paint_with_alpha),
- TEST (cairo_mask),
- TEST (cairo_mask_surface),
- TEST (cairo_stroke),
- TEST (cairo_stroke_preserve),
- TEST (cairo_fill),
- TEST (cairo_fill_preserve),
- TEST (cairo_copy_page),
- TEST (cairo_show_page),
- TEST (cairo_in_stroke),
- TEST (cairo_in_fill),
- TEST (cairo_in_clip),
- TEST (cairo_stroke_extents),
- TEST (cairo_fill_extents),
- TEST (cairo_reset_clip),
- TEST (cairo_clip),
- TEST (cairo_clip_preserve),
- TEST (cairo_clip_extents),
- TEST (cairo_copy_clip_rectangle_list),
- TEST (cairo_select_font_face),
- TEST (cairo_set_font_size),
- TEST (cairo_set_font_matrix),
- TEST (cairo_get_font_matrix),
- TEST (cairo_set_font_options),
- TEST (cairo_get_font_options),
- TEST (cairo_set_font_face),
- TEST (cairo_set_scaled_font),
- TEST (cairo_show_text),
- TEST (cairo_show_glyphs),
- TEST (cairo_show_text_glyphs),
- TEST (cairo_text_path),
- TEST (cairo_glyph_path),
- TEST (cairo_text_extents),
- TEST (cairo_glyph_extents),
- TEST (cairo_font_extents),
- TEST (cairo_get_operator),
- TEST (cairo_get_source),
- TEST (cairo_get_tolerance),
- TEST (cairo_get_antialias),
- TEST (cairo_has_current_point),
- TEST (cairo_get_current_point),
- TEST (cairo_get_fill_rule),
- TEST (cairo_get_line_width),
- TEST (cairo_get_line_cap),
- TEST (cairo_get_line_join),
- TEST (cairo_get_miter_limit),
- TEST (cairo_get_dash_count),
- TEST (cairo_get_dash),
- TEST (cairo_get_matrix),
- TEST (cairo_get_target),
- TEST (cairo_get_group_target),
- TEST (cairo_copy_path),
- TEST (cairo_copy_path_flat),
- TEST (cairo_append_path),
- };
- #undef TEST
- #define TEST(name, surface_type, sets_status) { #name, test_ ## name, surface_type, sets_status }
- struct {
- const char *name;
- surface_test_func_t func;
- int surface_type; /* cairo_surface_type_t or -1 */
- cairo_bool_t modifies_surface;
- } surface_tests[] = {
- TEST (cairo_surface_create_similar, -1, FALSE),
- TEST (cairo_surface_create_for_rectangle, -1, FALSE),
- TEST (cairo_surface_reference, -1, FALSE),
- TEST (cairo_surface_finish, -1, TRUE),
- TEST (cairo_surface_get_device, -1, FALSE),
- TEST (cairo_surface_get_reference_count, -1, FALSE),
- TEST (cairo_surface_status, -1, FALSE),
- TEST (cairo_surface_get_type, -1, FALSE),
- TEST (cairo_surface_get_content, -1, FALSE),
- TEST (cairo_surface_set_user_data, -1, FALSE),
- TEST (cairo_surface_set_mime_data, -1, TRUE),
- TEST (cairo_surface_get_mime_data, -1, FALSE),
- TEST (cairo_surface_get_font_options, -1, FALSE),
- TEST (cairo_surface_flush, -1, TRUE),
- TEST (cairo_surface_mark_dirty, -1, TRUE),
- TEST (cairo_surface_mark_dirty_rectangle, -1, TRUE),
- TEST (cairo_surface_set_device_offset, -1, TRUE),
- TEST (cairo_surface_get_device_offset, -1, FALSE),
- TEST (cairo_surface_set_fallback_resolution, -1, TRUE),
- TEST (cairo_surface_get_fallback_resolution, -1, FALSE),
- TEST (cairo_surface_copy_page, -1, TRUE),
- TEST (cairo_surface_show_page, -1, TRUE),
- TEST (cairo_surface_has_show_text_glyphs, -1, FALSE),
- TEST (cairo_image_surface_get_data, CAIRO_SURFACE_TYPE_IMAGE, FALSE),
- TEST (cairo_image_surface_get_format, CAIRO_SURFACE_TYPE_IMAGE, FALSE),
- TEST (cairo_image_surface_get_width, CAIRO_SURFACE_TYPE_IMAGE, FALSE),
- TEST (cairo_image_surface_get_height, CAIRO_SURFACE_TYPE_IMAGE, FALSE),
- TEST (cairo_image_surface_get_stride, CAIRO_SURFACE_TYPE_IMAGE, FALSE),
- #if CAIRO_HAS_PNG_FUNCTIONS
- TEST (cairo_surface_write_to_png, -1, FALSE),
- TEST (cairo_surface_write_to_png_stream, -1, FALSE),
- #endif
- TEST (cairo_recording_surface_ink_extents, CAIRO_SURFACE_TYPE_RECORDING, FALSE),
- #if CAIRO_HAS_TEE_SURFACE
- TEST (cairo_tee_surface_add, CAIRO_SURFACE_TYPE_TEE, TRUE),
- TEST (cairo_tee_surface_remove, CAIRO_SURFACE_TYPE_TEE, TRUE),
- TEST (cairo_tee_surface_index, CAIRO_SURFACE_TYPE_TEE, FALSE),
- #endif
- #if CAIRO_HAS_GL_SURFACE
- TEST (cairo_gl_surface_set_size, CAIRO_SURFACE_TYPE_GL, TRUE),
- TEST (cairo_gl_surface_get_width, CAIRO_SURFACE_TYPE_GL, FALSE),
- TEST (cairo_gl_surface_get_height, CAIRO_SURFACE_TYPE_GL, FALSE),
- TEST (cairo_gl_surface_swapbuffers, CAIRO_SURFACE_TYPE_GL, TRUE),
- #endif
- #if CAIRO_HAS_PDF_SURFACE
- TEST (cairo_pdf_surface_restrict_to_version, CAIRO_SURFACE_TYPE_PDF, TRUE),
- TEST (cairo_pdf_surface_set_size, CAIRO_SURFACE_TYPE_PDF, TRUE),
- #endif
- #if CAIRO_HAS_PS_SURFACE
- TEST (cairo_ps_surface_restrict_to_level, CAIRO_SURFACE_TYPE_PS, TRUE),
- TEST (cairo_ps_surface_set_eps, CAIRO_SURFACE_TYPE_PS, TRUE),
- TEST (cairo_ps_surface_get_eps, CAIRO_SURFACE_TYPE_PS, FALSE),
- TEST (cairo_ps_surface_set_size, CAIRO_SURFACE_TYPE_PS, TRUE),
- TEST (cairo_ps_surface_dsc_comment, CAIRO_SURFACE_TYPE_PS, TRUE),
- TEST (cairo_ps_surface_dsc_begin_setup, CAIRO_SURFACE_TYPE_PS, TRUE),
- TEST (cairo_ps_surface_dsc_begin_page_setup, CAIRO_SURFACE_TYPE_PS, TRUE),
- #endif
- #if CAIRO_HAS_QUARTZ_SURFACE
- TEST (cairo_quartz_surface_get_cg_context, CAIRO_SURFACE_TYPE_QUARTZ, FALSE),
- #endif
- #if CAIRO_HAS_SVG_SURFACE
- TEST (cairo_svg_surface_restrict_to_version, CAIRO_SURFACE_TYPE_SVG, TRUE),
- #endif
- #if CAIRO_HAS_XCB_SURFACE
- TEST (cairo_xcb_surface_set_size, CAIRO_SURFACE_TYPE_XCB, TRUE),
- TEST (cairo_xcb_surface_set_drawable, CAIRO_SURFACE_TYPE_XCB, TRUE),
- #endif
- #if CAIRO_HAS_XLIB_SURFACE
- TEST (cairo_xlib_surface_set_size, CAIRO_SURFACE_TYPE_XLIB, TRUE),
- TEST (cairo_xlib_surface_set_drawable, CAIRO_SURFACE_TYPE_XLIB, TRUE),
- TEST (cairo_xlib_surface_get_display, CAIRO_SURFACE_TYPE_XLIB, FALSE),
- TEST (cairo_xlib_surface_get_drawable, CAIRO_SURFACE_TYPE_XLIB, FALSE),
- TEST (cairo_xlib_surface_get_screen, CAIRO_SURFACE_TYPE_XLIB, FALSE),
- TEST (cairo_xlib_surface_get_visual, CAIRO_SURFACE_TYPE_XLIB, FALSE),
- TEST (cairo_xlib_surface_get_depth, CAIRO_SURFACE_TYPE_XLIB, FALSE),
- TEST (cairo_xlib_surface_get_width, CAIRO_SURFACE_TYPE_XLIB, FALSE),
- TEST (cairo_xlib_surface_get_height, CAIRO_SURFACE_TYPE_XLIB, FALSE),
- #endif
- };
- static cairo_test_status_t
- preamble (cairo_test_context_t *ctx)
- {
- cairo_surface_t *surface;
- cairo_t *cr;
- cairo_test_status_t test_status;
- cairo_status_t status_before, status_after;
- unsigned int i;
- /* Test an error surface */
- for (i = 0; i < ARRAY_LENGTH (surface_tests); i++) {
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, INT_MAX, INT_MAX);
- status_before = cairo_surface_status (surface);
- assert (status_before);
- test_status = surface_tests[i].func (surface);
- status_after = cairo_surface_status (surface);
- cairo_surface_destroy (surface);
- if (test_status != CAIRO_TEST_SUCCESS) {
- cairo_test_log (ctx,
- "Failed test %s with %d\n",
- surface_tests[i].name, (int) test_status);
- return test_status;
- }
- if (status_before != status_after) {
- cairo_test_log (ctx,
- "Failed test %s: Modified surface status from %u (%s) to %u (%s)\n",
- surface_tests[i].name,
- status_before, cairo_status_to_string (status_before),
- status_after, cairo_status_to_string (status_after));
- return CAIRO_TEST_ERROR;
- }
- }
- /* Test an error context */
- for (i = 0; i < ARRAY_LENGTH (context_tests); i++) {
- cr = cairo_create (NULL);
- status_before = cairo_status (cr);
- assert (status_before);
- test_status = context_tests[i].func (cr);
- status_after = cairo_status (cr);
- cairo_destroy (cr);
- if (test_status != CAIRO_TEST_SUCCESS) {
- cairo_test_log (ctx,
- "Failed test %s with %d\n",
- context_tests[i].name, (int) test_status);
- return test_status;
- }
- if (status_before != status_after) {
- cairo_test_log (ctx,
- "Failed test %s: Modified context status from %u (%s) to %u (%s)\n",
- context_tests[i].name,
- status_before, cairo_status_to_string (status_before),
- status_after, cairo_status_to_string (status_after));
- return CAIRO_TEST_ERROR;
- }
- }
- /* Test a context for an error surface */
- for (i = 0; i < ARRAY_LENGTH (context_tests); i++) {
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, INT_MAX, INT_MAX);
- cr = cairo_create (surface);
- cairo_surface_destroy (surface);
- status_before = cairo_status (cr);
- assert (status_before);
- test_status = context_tests[i].func (cr);
- status_after = cairo_status (cr);
- cairo_destroy (cr);
- if (test_status != CAIRO_TEST_SUCCESS) {
- cairo_test_log (ctx,
- "Failed test %s with %d\n",
- context_tests[i].name, (int) test_status);
- return test_status;
- }
- if (status_before != status_after) {
- cairo_test_log (ctx,
- "Failed test %s: Modified context status from %u (%s) to %u (%s)\n",
- context_tests[i].name,
- status_before, cairo_status_to_string (status_before),
- status_after, cairo_status_to_string (status_after));
- return CAIRO_TEST_ERROR;
- }
- }
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- test_context (const cairo_test_context_t *ctx, cairo_t *cr, const char *name, unsigned int i)
- {
- cairo_test_status_t test_status;
- cairo_status_t status_before, status_after;
- /* Make sure that there is a current point */
- cairo_move_to (cr, 0, 0);
- status_before = cairo_status (cr);
- test_status = context_tests[i].func (cr);
- status_after = cairo_status (cr);
- if (test_status != CAIRO_TEST_SUCCESS) {
- cairo_test_log (ctx,
- "Failed test %s on %s with %d\n",
- context_tests[i].name, name, (int) test_status);
- return test_status;
- }
- if (status_after != CAIRO_STATUS_SURFACE_FINISHED && status_before != status_after) {
- cairo_test_log (ctx,
- "Failed test %s on %s: Modified context status from %u (%s) to %u (%s)\n",
- context_tests[i].name, name,
- status_before, cairo_status_to_string (status_before),
- status_after, cairo_status_to_string (status_after));
- return CAIRO_TEST_ERROR;
- }
- return CAIRO_TEST_SUCCESS;
- }
- static cairo_test_status_t
- draw (cairo_t *cr, int width, int height)
- {
- const cairo_test_context_t *ctx = cairo_test_get_context (cr);
- cairo_surface_t *similar, *target;
- cairo_test_status_t test_status;
- cairo_status_t status;
- cairo_t *cr2;
- unsigned int i;
- target = cairo_get_target (cr);
- /* Test a finished similar surface */
- for (i = 0; i < ARRAY_LENGTH (surface_tests); i++) {
- similar = cairo_surface_create_similar (target,
- cairo_surface_get_content (target),
- 10, 10);
- cairo_surface_finish (similar);
- test_status = surface_tests[i].func (similar);
- status = cairo_surface_status (similar);
- cairo_surface_destroy (similar);
- if (test_status != CAIRO_TEST_SUCCESS) {
- cairo_test_log (ctx,
- "Failed test %s with %d\n",
- surface_tests[i].name, (int) test_status);
- return test_status;
- }
- if (surface_tests[i].modifies_surface &&
- strcmp (surface_tests[i].name, "cairo_surface_finish") &&
- strcmp (surface_tests[i].name, "cairo_surface_flush") &&
- status != CAIRO_STATUS_SURFACE_FINISHED) {
- cairo_test_log (ctx,
- "Failed test %s: Finished surface not set into error state\n",
- surface_tests[i].name);
- return CAIRO_TEST_ERROR;
- }
- }
- /* Test a context for a finished similar surface */
- for (i = 0; i < ARRAY_LENGTH (context_tests); i++) {
- similar = cairo_surface_create_similar (target,
- cairo_surface_get_content (target),
- 10, 10);
- cairo_surface_finish (similar);
- cr2 = cairo_create (similar);
- test_status = test_context (ctx, cr2, "finished surface", i);
- cairo_surface_destroy (similar);
- cairo_destroy (cr2);
- if (test_status != CAIRO_TEST_SUCCESS)
- return test_status;
- }
- /* Test a context for a similar surface finished later */
- for (i = 0; i < ARRAY_LENGTH (context_tests); i++) {
- similar = cairo_surface_create_similar (target,
- cairo_surface_get_content (target),
- 10, 10);
- cr2 = cairo_create (similar);
- cairo_surface_finish (similar);
- test_status = test_context (ctx, cr2, "finished surface after create", i);
- cairo_surface_destroy (similar);
- cairo_destroy (cr2);
- if (test_status != CAIRO_TEST_SUCCESS)
- return test_status;
- }
- /* Test a context for a similar surface finished later with a path */
- for (i = 0; i < ARRAY_LENGTH (context_tests); i++) {
- similar = cairo_surface_create_similar (target,
- cairo_surface_get_content (target),
- 10, 10);
- cr2 = cairo_create (similar);
- cairo_rectangle (cr2, 2, 2, 4, 4);
- cairo_surface_finish (similar);
- test_status = test_context (ctx, cr2, "finished surface with path", i);
- cairo_surface_destroy (similar);
- cairo_destroy (cr2);
- if (test_status != CAIRO_TEST_SUCCESS)
- return test_status;
- }
- /* Test a normal surface for functions that have the wrong type */
- for (i = 0; i < ARRAY_LENGTH (surface_tests); i++) {
- cairo_status_t desired_status;
- if (surface_tests[i].surface_type == -1)
- continue;
- similar = cairo_surface_create_similar (target,
- cairo_surface_get_content (target),
- 10, 10);
- if (cairo_surface_get_type (similar) == (cairo_surface_type_t) surface_tests[i].surface_type) {
- cairo_surface_destroy (similar);
- continue;
- }
- test_status = surface_tests[i].func (similar);
- status = cairo_surface_status (similar);
- cairo_surface_destroy (similar);
- if (test_status != CAIRO_TEST_SUCCESS) {
- cairo_test_log (ctx,
- "Failed test %s with %d\n",
- surface_tests[i].name, (int) test_status);
- return test_status;
- }
- desired_status = surface_tests[i].modifies_surface ? CAIRO_STATUS_SURFACE_TYPE_MISMATCH : CAIRO_STATUS_SUCCESS;
- if (status != desired_status) {
- cairo_test_log (ctx,
- "Failed test %s: Surface status should be %u (%s), but is %u (%s)\n",
- surface_tests[i].name,
- desired_status, cairo_status_to_string (desired_status),
- status, cairo_status_to_string (status));
- return CAIRO_TEST_ERROR;
- }
- }
- /* 565-compatible gray background */
- cairo_set_source_rgb (cr, 0.51613, 0.55555, 0.51613);
- cairo_paint (cr);
- return CAIRO_TEST_SUCCESS;
- }
- CAIRO_TEST (api_special_cases,
- "Check surface functions properly handle wrong surface arguments",
- "api", /* keywords */
- NULL, /* requirements */
- 10, 10,
- preamble, draw)
|