123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- /**
- * Copyright © 2011 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 (including the next
- * paragraph) 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.
- */
- #ifdef HAVE_DIX_CONFIG_H
- #include <dix-config.h>
- #endif
- #include <stdint.h>
- #include "misc.h"
- #include "scrnintstr.h"
- #include "dix.h"
- #include "dixstruct.h"
- ScreenInfo screenInfo;
- static void
- dix_version_compare(void)
- {
- int rc;
- rc = version_compare(0, 0, 1, 0);
- assert(rc < 0);
- rc = version_compare(1, 0, 0, 0);
- assert(rc > 0);
- rc = version_compare(0, 0, 0, 0);
- assert(rc == 0);
- rc = version_compare(1, 0, 1, 0);
- assert(rc == 0);
- rc = version_compare(1, 0, 0, 9);
- assert(rc > 0);
- rc = version_compare(0, 9, 1, 0);
- assert(rc < 0);
- rc = version_compare(1, 0, 1, 9);
- assert(rc < 0);
- rc = version_compare(1, 9, 1, 0);
- assert(rc > 0);
- rc = version_compare(2, 0, 1, 9);
- assert(rc > 0);
- rc = version_compare(1, 9, 2, 0);
- assert(rc < 0);
- }
- static void
- dix_update_desktop_dimensions(void)
- {
- int i;
- int x, y, w, h;
- int w2, h2;
- ScreenRec screens[MAXSCREENS];
- for (i = 0; i < MAXSCREENS; i++)
- screenInfo.screens[i] = &screens[i];
- x = 0;
- y = 0;
- w = 10;
- h = 5;
- w2 = 35;
- h2 = 25;
- #define assert_dimensions(_x, _y, _w, _h) \
- update_desktop_dimensions(); \
- assert(screenInfo.x == _x); \
- assert(screenInfo.y == _y); \
- assert(screenInfo.width == _w); \
- assert(screenInfo.height == _h);
- #define set_screen(idx, _x, _y, _w, _h) \
- screenInfo.screens[idx]->x = _x; \
- screenInfo.screens[idx]->y = _y; \
- screenInfo.screens[idx]->width = _w; \
- screenInfo.screens[idx]->height = _h; \
- /* single screen */
- screenInfo.numScreens = 1;
- set_screen(0, x, y, w, h);
- assert_dimensions(x, y, w, h);
- /* dualhead rightof */
- screenInfo.numScreens = 2;
- set_screen(1, w, 0, w2, h2);
- assert_dimensions(x, y, w + w2, h2);
- /* dualhead belowof */
- screenInfo.numScreens = 2;
- set_screen(1, 0, h, w2, h2);
- assert_dimensions(x, y, w2, h + h2);
- /* triplehead L shape */
- screenInfo.numScreens = 3;
- set_screen(1, 0, h, w2, h2);
- set_screen(2, w2, h2, w, h);
- assert_dimensions(x, y, w + w2, h + h2);
- /* quadhead 2x2 */
- screenInfo.numScreens = 4;
- set_screen(1, 0, h, w, h);
- set_screen(2, w, h, w, h2);
- set_screen(3, w, 0, w2, h);
- assert_dimensions(x, y, w + w2, h + h2);
- /* quadhead horiz line */
- screenInfo.numScreens = 4;
- set_screen(1, w, 0, w, h);
- set_screen(2, 2 * w, 0, w, h);
- set_screen(3, 3 * w, 0, w, h);
- assert_dimensions(x, y, 4 * w, h);
- /* quadhead vert line */
- screenInfo.numScreens = 4;
- set_screen(1, 0, h, w, h);
- set_screen(2, 0, 2 * h, w, h);
- set_screen(3, 0, 3 * h, w, h);
- assert_dimensions(x, y, w, 4 * h);
- /* x overlap */
- screenInfo.numScreens = 2;
- set_screen(0, 0, 0, w2, h2);
- set_screen(1, w, 0, w2, h2);
- assert_dimensions(x, y, w2 + w, h2);
- /* y overlap */
- screenInfo.numScreens = 2;
- set_screen(0, 0, 0, w2, h2);
- set_screen(1, 0, h, w2, h2);
- assert_dimensions(x, y, w2, h2 + h);
- /* negative origin */
- screenInfo.numScreens = 1;
- set_screen(0, -w2, -h2, w, h);
- assert_dimensions(-w2, -h2, w, h);
- /* dualhead negative origin, overlap */
- screenInfo.numScreens = 2;
- set_screen(0, -w2, -h2, w2, h2);
- set_screen(1, -w, -h, w, h);
- assert_dimensions(-w2, -h2, w2, h2);
- }
- static int
- dix_request_fixed_size_overflow(ClientRec *client)
- {
- xReq req = { 0 };
- client->req_len = req.length = 1;
- REQUEST_FIXED_SIZE(req, SIZE_MAX);
- return Success;
- }
- static int
- dix_request_fixed_size_match(ClientRec *client)
- {
- xReq req = { 0 };
- client->req_len = req.length = 9;
- REQUEST_FIXED_SIZE(req, 30);
- return Success;
- }
- static void
- dix_request_size_checks(void)
- {
- ClientRec client = { 0 };
- int rc;
- rc = dix_request_fixed_size_overflow(&client);
- assert(rc == BadLength);
- rc = dix_request_fixed_size_match(&client);
- assert(rc == Success);
- }
- int
- main(int argc, char **argv)
- {
- dix_version_compare();
- dix_update_desktop_dimensions();
- dix_request_size_checks();
- return 0;
- }
|