From 749d9bb10245985a25ee2a6a3262b8d882b8a889 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Tue, 13 Sep 2022 18:46:43 -0700 Subject: Add simple test cases for _XEditRes{Put,Get}* functions Signed-off-by: Alan Coopersmith --- Makefile.am | 2 +- configure.ac | 1 + test/EditResStream.c | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++ test/Makefile.am | 30 ++++++++++++++++ 4 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 test/EditResStream.c create mode 100644 test/Makefile.am diff --git a/Makefile.am b/Makefile.am index 271d872..61110df 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = include src doc +SUBDIRS = include src doc test pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = xmu.pc xmuu.pc diff --git a/configure.ac b/configure.ac index 4afe3d5..04538ae 100644 --- a/configure.ac +++ b/configure.ac @@ -46,6 +46,7 @@ AC_CONFIG_FILES([Makefile doc/Makefile include/Makefile src/Makefile + test/Makefile xmu.pc xmuu.pc]) AC_OUTPUT diff --git a/test/EditResStream.c b/test/EditResStream.c new file mode 100644 index 0000000..4f35a37 --- /dev/null +++ b/test/EditResStream.c @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. + * + * 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. + */ + +/* Test code for ProtocolStream Get/Put functions in src/EditResCom.c */ +#include +#include + +static const char *test_string = "\tIt was a dark and stormy night...\n"; + +#define FillBuffer(d, v) memset(d, v, sizeof(d)) + +int main(void) +{ + ProtocolStream ps = { 0, 0, NULL, NULL, NULL }; + unsigned char c; + unsigned short s; + unsigned long l; + Bool res; + char *str; + unsigned long ids[] = { 1, 10, 0xbabe, 0xbabeface, 0xffffffff }; + WidgetInfo i = { + .num_widgets = sizeof(ids) / sizeof(ids[0]), + .ids = ids, + .real_widget = 0 + }; + WidgetInfo out = { 0, NULL, 0 }; + + _XEditResResetStream(&ps); + + _XEditResPut8(&ps, 8); + _XEditResPut16(&ps, 16); + _XEditResPut16(&ps, 0xface); + _XEditResPut32(&ps, 32); + _XEditResPut32(&ps, 0xbabeface); + _XEditResPutString8(&ps, test_string); + _XEditResPutWidgetInfo(&ps, &i); + + /* current is a pointer to the next byte to read from or write to, + so we need to reset it to the beginning to read the data we wrote */ + ps.current = ps.top; + + res = _XEditResGet8(&ps, &c); + assert(res == True); + assert(c == 8); + + res = _XEditResGet16(&ps, &s); + assert(res == True); + assert(s == 16); + + res = _XEditResGet16(&ps, &s); + assert(res == True); + assert(s == 0xface); + + /* set the full value so we can make sure that in 64-bit mode we + write to the full long value, not just 32-bits of it. */ + memset(&l, 0x0f, sizeof(l)); + res = _XEditResGet32(&ps, &l); + assert(res == True); + assert(l == 32); + + memset(&l, 0x0f, sizeof(l)); + res = _XEditResGet32(&ps, &l); + assert(res == True); + assert(l == 0xbabeface); + + res = _XEditResGetString8(&ps, &str); + assert(res == True); + assert(strcmp(str, test_string) == 0); + XtFree(str); + str = NULL; + + res = _XEditResGetWidgetInfo(&ps, &out); + assert(res == True); + assert(memcmp(ids, out.ids, sizeof(ids)) == 0); + XtFree((char *) out.ids); + out.ids = NULL; + + return 0; +} diff --git a/test/Makefile.am b/test/Makefile.am new file mode 100644 index 0000000..955c0a6 --- /dev/null +++ b/test/Makefile.am @@ -0,0 +1,30 @@ +# +# Copyright (c) 2022, Oracle and/or its affiliates. +# +# 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. +# + +AM_CPPFLAGS = -D_CONST_X_STRING -I${top_srcdir}/include + +check_PROGRAMS = EditResStream +TESTS = $(check_PROGRAMS) + +EditResStream_SOURCES = EditResStream.c +EditResStream_LDADD = ${top_builddir}/src/libXmu.la $(XMU_LIBS) -- cgit v1.2.1