From 41e62cdce1dba1e84ed90cc11c47cf2f59348739 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Sat, 9 May 2020 02:04:51 -0400 Subject: [PATCH] Added basic testing for init failing. Now to add support for testing for the lack of a programmer error. --- common/main.c | 12 ++++++++++++ common/testhooks.h | 3 +++ test/initmain.c | 18 ++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/common/main.c b/common/main.c index fb0bfc78..5aa3b61c 100644 --- a/common/main.c +++ b/common/main.c @@ -1,5 +1,6 @@ // 19 april 2019 #include "uipriv.h" +#include "testhooks.h" enum { stateUninitialized, @@ -14,6 +15,13 @@ static int state = stateUninitialized; #define initialized() (state != stateUninitialized && state != stateError) +bool testHookInitShouldFail = false; + +void uiprivTestHookSetInitShouldFailArtificially(bool shouldFail) +{ + testHookInitShouldFail = shouldFail; +} + bool uiInit(void *options, uiInitError *err) { if (state != stateUninitialized) { @@ -37,6 +45,10 @@ bool uiInit(void *options, uiInitError *err) return false; } + if (testHookInitShouldFail) { + state = stateError; + return uiprivInitReturnErrorf(err, "general failure"); + } if (!uiprivSysInit(options, err)) { state = stateError; return false; diff --git a/common/testhooks.h b/common/testhooks.h index 54984692..2743262e 100644 --- a/common/testhooks.h +++ b/common/testhooks.h @@ -4,6 +4,9 @@ extern "C" { #endif +// main.c +uiprivExtern void uiprivTestHookSetInitShouldFailArtificially(bool shouldFail); + // errors.c typedef void (*uiprivTestHookReportProgrammerErrorFunc)(const char *msg, void *data); uiprivExtern void uiprivTestHookReportProgrammerError(uiprivTestHookReportProgrammerErrorFunc f, void *data); diff --git a/test/initmain.c b/test/initmain.c index c741bcd9..58f60607 100644 --- a/test/initmain.c +++ b/test/initmain.c @@ -1,9 +1,27 @@ // 10 april 2019 #include "test.h" #include "thread.h" +#include "../common/testhooks.h" // TODO test the number of calls to queued functions made +TestNoInit(InitFailure) +{ + uiInitError err; +//TODO void *ctx; + +//TODO ctx = beginCheckProgrammerError(NULL); + uiprivTestHookSetInitShouldFailArtificially(true); + memset(&err, 0, sizeof (uiInitError)); + err.Size = sizeof (uiInitError); + if (uiInit(NULL, &err)) + TestErrorf("uiInit() succeeded; expected failure"); + else if (strcmp(err.Message, "general failure") != 0) + TestErrorf("uiInit() failed with wrong message:" diff("%s"), + err.Message, "general failure"); +//TODO endCheckProgrammerError(ctx); +} + TestNoInit(InitWithNonNullOptionsIsProgrammerError) { void *ctx;