1/** 2 * Copyright © 2009 Red Hat, Inc. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 */ 23 24#ifdef HAVE_DIX_CONFIG_H 25#include <dix-config.h> 26#endif 27 28#include "scrnintstr.h" 29#include "windowstr.h" 30#include "exevents.h" 31#include <assert.h> 32 33#include "tests.h" 34 35#ifndef PROTOCOL_COMMON_H 36#define PROTOCOL_COMMON_H 37 38/* Check default values in a reply */ 39#define reply_check_defaults(rep, len, type) \ 40 { \ 41 assert((len) >= sz_x##type##Reply); \ 42 assert((rep)->repType == X_Reply); \ 43 assert((rep)->RepType == X_##type); \ 44 assert((rep)->sequenceNumber == CLIENT_SEQUENCE); \ 45 assert((rep)->length >= (sz_x##type##Reply - 32)/4); \ 46 } 47 48/* initialise default values for request */ 49#define request_init(req, type) \ 50 { \ 51 (req)->reqType = 128; /* doesn't matter */ \ 52 (req)->ReqType = X_##type; \ 53 (req)->length = (sz_x##type##Req >> 2); \ 54 } 55 56/* Various defines used in the tests. Some tests may use different values 57 * than these defaults */ 58/* default client index */ 59#define CLIENT_INDEX 1 60/* default client mask for resources and windows */ 61#define CLIENT_MASK ((CLIENT_INDEX) << CLIENTOFFSET) 62/* default client sequence number for replies */ 63#define CLIENT_SEQUENCE 0x100 64/* default root window id */ 65#define ROOT_WINDOW_ID 0x10 66/* default client window id */ 67#define CLIENT_WINDOW_ID 0x100001 68/* invalid window ID. use for BadWindow checks. */ 69#define INVALID_WINDOW_ID 0x111111 70/* initial fake sprite position */ 71#define SPRITE_X 100 72#define SPRITE_Y 200 73 74/* Various structs used throughout the tests */ 75 76/* The default devices struct, contains one pointer + keyboard and the 77 * matching master devices. Initialize with init_devices() if needed. */ 78struct devices { 79 DeviceIntPtr vcp; 80 DeviceIntPtr vck; 81 DeviceIntPtr mouse; 82 DeviceIntPtr kbd; 83 84 int num_devices; 85 int num_master_devices; 86}; 87 88/** 89 * The set of default devices available in all tests if necessary. 90 */ 91extern struct devices devices; 92 93/** 94 * test-specific userdata, passed into the reply handler. 95 */ 96extern void *global_userdata; 97 98/** 99 * The reply handler called from WriteToClient. Set this handler if you need 100 * to check the reply values. 101 */ 102extern void (*reply_handler) (ClientPtr client, int len, char *data, void *userdata); 103 104/** 105 * The default screen used for the windows. Initialized by init_simple(). 106 */ 107extern ScreenRec screen; 108 109/** 110 * Semi-initialized root window. initialized by init(). 111 */ 112extern WindowRec root; 113 114/** 115 * Semi-initialized top-level window. initialized by init(). 116 */ 117extern WindowRec window; 118 119/* various simple functions for quick setup */ 120/** 121 * Initialize the above struct with default devices and return the struct. 122 * Usually not needed if you call ::init_simple. 123 */ 124struct devices init_devices(void); 125 126/** 127 * Init a mostly zeroed out client with default values for index and mask. 128 */ 129ClientRec init_client(int request_len, void *request_data); 130 131/** 132 * Init a mostly zeroed out window with the given window ID. 133 * Usually not needed if you call ::init_simple which sets up root and 134 * window. 135 */ 136void init_window(WindowPtr window, WindowPtr parent, int id); 137 138/** 139 * Create a very simple setup that provides the minimum values for most 140 * tests, including a screen, the root and client window and the default 141 * device setup. 142 */ 143void init_simple(void); 144 145/* Declarations for various overrides in the test files. */ 146void __wrap_WriteToClient(ClientPtr client, int len, void *data); 147int __wrap_XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client, 148 int len, unsigned char *mask); 149int __wrap_dixLookupWindow(WindowPtr *win, XID id, ClientPtr client, 150 Mask access); 151int __real_dixLookupWindow(WindowPtr *win, XID id, ClientPtr client, 152 Mask access); 153Bool __wrap_AddResource(XID id, RESTYPE type, void *value); 154int __wrap_dixLookupClient(ClientPtr *c, XID id, ClientPtr client, Mask access); 155int __real_dixLookupClient(ClientPtr *c, XID id, ClientPtr client, Mask access); 156 157#endif /* PROTOCOL_COMMON_H */ 158