[PATCH 2/2] XKB: Add two tests around XkbListComponents

Peter Hutterer peter.hutterer at who-t.net
Sun Nov 4 22:40:09 PST 2012


On Mon, Nov 05, 2012 at 03:58:43PM +1100, Daniel Stone wrote:
> These require patches which aren't even in git master yet.
> 
> Signed-off-by: Daniel Stone <daniel at fooishbar.org>
> ---
>  configure.ac          |    1 +
>  tests/Makefile.am     |    2 +-
>  tests/xkb/Makefile.am |    7 ++++
>  tests/xkb/list.cpp    |  107 +++++++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 116 insertions(+), 1 deletion(-)
>  create mode 100644 tests/xkb/Makefile.am
>  create mode 100644 tests/xkb/list.cpp
> 
> diff --git a/configure.ac b/configure.ac
> index f9459a7..0456678 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -93,5 +93,6 @@ AC_CONFIG_FILES([Makefile
>                   tests/input/Makefile
>                   tests/video/Makefile
>                   tests/server/Makefile
> +                 tests/xkb/Makefile
>                   tests/lib/Makefile])
>  AC_OUTPUT
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index 7e389e9..40c2545 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -1 +1 @@
> -SUBDIRS = common input server lib video
> +SUBDIRS = common input server lib video xkb

tbh I think the xkb tests should just be in the server directory.

> diff --git a/tests/xkb/Makefile.am b/tests/xkb/Makefile.am
> new file mode 100644
> index 0000000..c7ef5b8
> --- /dev/null
> +++ b/tests/xkb/Makefile.am
> @@ -0,0 +1,7 @@
> +include $(top_srcdir)/tests/common/Makefile.am
> +
> +noinst_PROGRAMS = list
> +TESTS=$(noinst_PROGRAMS)
> +
> +list_SOURCES = list.cpp $(common_sources)
> +list_LDADD = $(GTEST_LDADDS)
> diff --git a/tests/xkb/list.cpp b/tests/xkb/list.cpp
> new file mode 100644
> index 0000000..2359744
> --- /dev/null
> +++ b/tests/xkb/list.cpp
> @@ -0,0 +1,107 @@
> +#include <stdexcept>
> +#include <tr1/tuple>
> +
> +#include "helpers.h"
> +#include "device-interface.h"
> +#include "xit-server-input-test.h"
> +
> +#include <xorg/gtest/xorg-gtest.h>
> +
> +#include <X11/Xlibint.h>
> +#include <X11/XKBlib.h>
> +#include <X11/extensions/XKBproto.h>
> +
> +class XKBTest : public XITServerTest {
> +public:
> +    virtual void SetUpConfigAndLog() {
> +        config.AddDefaultScreenWithDriver();
> +        config.AddInputSection("void", "--device--", "Option \"CorePointer\" \"on\"\n");
> +        config.WriteConfig();
> +        server.SetOption("-config", config.GetPath());

last two lines aren't needed anymore, XITServerTest will do this
automatically.

> +    }
> +
> +    virtual void SetUp() {
> +        XITServerTest::SetUp();
> +        dpy = Display();
> +        ASSERT_TRUE(XkbQueryExtension(dpy, &base_req, &base_ev, &base_err, NULL, NULL));
> +    }
> +
> +    ::Display *dpy;

we already have a display variable in the parent class, why not use
Display()?

> +    int base_req;
> +    int base_ev;
> +    int base_err;

rename to xkb_..blah

> +};
> +
> +TEST_F(XKBTest, XKBComponentListLength)
> +{
> +    XORG_TESTCASE("Register for the XKB extension.\n"
> +                  "Construct a component list query with a malicious length.\n"

what's a malicious length? Too long? specific value?

rest looks good.

Cheers,
   Peter

> +                  "Hope the server doesn't crash.\n");
> +
> +    XErrorEvent *err;
> +    xkbListComponentsReq *req;
> +    xkbListComponentsReply rep;
> +    char *str;
> +    int i;
> +
> +    SetErrorTrap(dpy);
> +
> +    LockDisplay(dpy);
> +    GetReq(kbListComponents, req);
> +    req->reqType = base_req;
> +    req->xkbReqType = X_kbListComponents;
> +    req->deviceSpec = XkbUseCoreKbd;
> +    req->maxNames = 1024;
> +    req->length += 2;
> +    BufAlloc(char *, str, 8);
> +    for (i = 0; i < 6; i++)
> +        *str++ = 255;
> +    ASSERT_FALSE(_XReply(dpy, (xReply *) &rep, 0, xFalse));
> +    UnlockDisplay(dpy);
> +    SyncHandle();
> +
> +    err = ReleaseErrorTrap(dpy);
> +    ASSERT_ERROR(err, BadLength);
> +}
> +
> +TEST_F(XKBTest, XKBComponentListEmpty)
> +{
> +    XORG_TESTCASE("Register for the XKB extension.\n"
> +                  "Check the listed legacy components.\n"
> +                  "Ensure that no components are listed.\n");
> +
> +    XkbComponentListPtr list;
> +    XkbComponentNamesRec patterns;
> +    int max = 1024;
> +
> +    memset(&patterns, 0, sizeof(patterns));
> +    patterns.keymap = NULL;
> +    patterns.keycodes = strdup("*");
> +    patterns.types = strdup("*");
> +    patterns.compat = strdup("*");
> +    patterns.symbols = strdup("*");
> +    patterns.geometry = strdup("*");
> +
> +    list = XkbListComponents(Display(), XkbUseCoreKbd, &patterns, &max);
> +    ASSERT_TRUE(list);
> +
> +    ASSERT_EQ(list->num_keymaps, 0);
> +    ASSERT_EQ(list->num_keycodes, 0);
> +    ASSERT_EQ(list->num_types, 0);
> +    ASSERT_EQ(list->num_compat, 0);
> +    ASSERT_EQ(list->num_symbols, 0);
> +    ASSERT_EQ(list->num_geometry, 0);
> +    ASSERT_EQ(max, 0);
> +
> +    free(patterns.keycodes);
> +    free(patterns.types);
> +    free(patterns.compat);
> +    free(patterns.symbols);
> +    free(patterns.geometry);
> +    free(list);
> +}
> +
> +int main(int argc, char** argv) {
> +    testing::InitGoogleTest(&argc, argv);
> +    return RUN_ALL_TESTS();
> +}
> -- 
> 1.7.10.4
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 


More information about the xorg-devel mailing list