From d423688def6c9274dfee77ef882e870a4918cdfe Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Mon, 25 May 2020 22:42:44 -0400 Subject: [PATCH] And added (in a somewhat dirty for now way) the noinitwrongthread.c case for uiDarwinControlHandle(). --- test/allcalls_darwin.h | 5 +++++ test/meson.build | 4 ++++ test/noinitwrongthread.c | 2 ++ test/noinitwrongthread_darwin.m | 38 +++++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+) create mode 100644 test/allcalls_darwin.h create mode 100644 test/noinitwrongthread_darwin.m diff --git a/test/allcalls_darwin.h b/test/allcalls_darwin.h new file mode 100644 index 00000000..07819849 --- /dev/null +++ b/test/allcalls_darwin.h @@ -0,0 +1,5 @@ +// 28 may 2019 + +// This file should NOT have include guards as it is intended to be included more than once; see noinitwrongthread_darwin.m for details. + +allcallsCase(uiDarwinControlHandle, NULL) diff --git a/test/meson.build b/test/meson.build index 90972ee5..8f5c5ad0 100644 --- a/test/meson.build +++ b/test/meson.build @@ -17,8 +17,12 @@ if libui_OS == 'windows' elif libui_OS == 'darwin' libui_test_sources += files([ 'controls_darwin.m', + 'noinitwrongthread_darwin.m', 'window_darwin.m', ]) + libui_allcalls_headers += files([ + 'allcalls_darwin.h', + ]) elif libui_OS == 'haiku' libui_test_sources += files([ 'controls_haiku.c', diff --git a/test/noinitwrongthread.c b/test/noinitwrongthread.c index 2d2e3569..756254de 100644 --- a/test/noinitwrongthread.c +++ b/test/noinitwrongthread.c @@ -2,6 +2,8 @@ #include "test.h" #include "thread.h" +// TODO split the macros in this file into its own file + // TODO rename to FunctionsFailBeforeInit? #define allcallsCase(f, ...) \ TestNoInit(CallBeforeInitIsProgrammerError_ ## f) \ diff --git a/test/noinitwrongthread_darwin.m b/test/noinitwrongthread_darwin.m new file mode 100644 index 00000000..2b701a01 --- /dev/null +++ b/test/noinitwrongthread_darwin.m @@ -0,0 +1,38 @@ +// 28 may 2019 +#import "test_darwin.h" +#import "thread.h" + +// TODO rename to FunctionsFailBeforeInit? +#define allcallsCase(f, ...) \ + TestNoInit(CallBeforeInitIsProgrammerError_ ## f) \ + { \ + void *ctx; \ + ctx = beginCheckProgrammerError("attempt to call " #f "() before uiInit()"); \ + f(__VA_ARGS__); \ + endCheckProgrammerError(ctx); \ + } +#include "allcalls_darwin.h" +#undef allcallsCase + +// TODO rename to FunctionsFailOnWrongThread? +#define allcallsCase(f, ...) \ + static void threadTest ## f(void *data) \ + { \ + f(__VA_ARGS__); \ + } \ + Test(CallOnWrongThreadIsProgrammerError_ ## f) \ + { \ + threadThread *thread; \ + threadSysError err; \ + void *ctx; \ + ctx = beginCheckProgrammerError("attempt to call " #f "() on a thread other than the GUI thread"); \ + err = threadNewThread(threadTest ## f, NULL, &thread); \ + if (err != 0) \ + TestFatalf("error creating thread: " threadSysErrorFmt, threadSysErrorFmtArg(err)); \ + err = threadThreadWaitAndFree(thread); \ + if (err != 0) \ + TestFatalf("error waiting for thread to finish: " threadSysErrorFmt, threadSysErrorFmtArg(err)); \ + endCheckProgrammerError(ctx); \ + } +#include "allcalls_darwin.h" +#undef allcallsCase