DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 7f721e08e15a21cd9799e038d6cc11e3d9d604bc
parent 8ba6a786aa8472ad948fd865e2977ad4041a52a1
Author: falkTX <falktx@falktx.com>
Date:   Sat,  1 May 2021 14:54:40 +0100

Complete application tests

Signed-off-by: falkTX <falktx@falktx.com>

Diffstat:
Mtests/Application.cpp | 44++++++++++++++++++++++++++++++++++++++------
Mtests/Makefile | 2+-
Atests/tests.hpp | 23+++++++++++++++++++++++
3 files changed, 62 insertions(+), 7 deletions(-)

diff --git a/tests/Application.cpp b/tests/Application.cpp @@ -14,6 +14,8 @@ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include "tests.hpp" + #define DPF_TEST_APPLICATION_CPP #include "dgl/src/pugl.cpp" #include "dgl/src/Application.cpp" @@ -21,9 +23,6 @@ #include "distrho/extra/Thread.hpp" -#define DISTRHO_ASSERT_EQUAL(v1, v2, msg) \ - if (v1 != v2) { d_stderr2("Test condition failed: %s; file:%s line:%i", msg, __FILE__, __LINE__); return 1; } - START_NAMESPACE_DGL // -------------------------------------------------------------------------------------------------------------------- @@ -43,13 +42,28 @@ public: private: void run() override { - d_sleep(5); + d_sleep(2); app.quit(); } }; // -------------------------------------------------------------------------------------------------------------------- +struct IdleCallbackCounter : IdleCallback +{ + int counter; + + IdleCallbackCounter() + : counter(0) {} + + void idleCallback() override + { + ++counter; + } +}; + +// -------------------------------------------------------------------------------------------------------------------- + END_NAMESPACE_DGL int main() @@ -59,23 +73,41 @@ int main() // regular usage { Application app(true); + IdleCallbackCounter idleCounter; + app.addIdleCallback(&idleCounter); DISTRHO_ASSERT_EQUAL(app.isQuiting(), false, "app MUST NOT be set as quitting during init"); + DISTRHO_ASSERT_EQUAL(idleCounter.counter, 0, "app MUST NOT have triggered idle callbacks yet"); app.idle(); DISTRHO_ASSERT_EQUAL(app.isQuiting(), false, "app MUST NOT be set as quitting after idle()"); + DISTRHO_ASSERT_EQUAL(idleCounter.counter, 1, "app MUST have triggered 1 idle callback"); + app.idle(); + DISTRHO_ASSERT_EQUAL(idleCounter.counter, 2, "app MUST have triggered 2 idle callbacks"); app.quit(); DISTRHO_ASSERT_EQUAL(app.isQuiting(), true, "app MUST be set as quitting after quit()"); + DISTRHO_ASSERT_EQUAL(idleCounter.counter, 2, "app MUST have triggered only 2 idle callbacks in its lifetime"); } // standalone exec, must not block forever due to quit() called from another thread { Application app(true); ApplicationQuitter appQuitter(app); + IdleCallbackCounter idleCounter; + app.addIdleCallback(&idleCounter); app.exec(); DISTRHO_ASSERT_EQUAL(appQuitter.isThreadRunning(), false, "app quit triggered because we told it so"); + DISTRHO_ASSERT_NOT_EQUAL(idleCounter.counter, 0, "app idle callbacks not triggered"); } - // TODO test idle callback - // TODO test idle is called when exec(0) is used + // standalone exec, but with 0 as timeout + { + Application app(true); + ApplicationQuitter appQuitter(app); + IdleCallbackCounter idleCounter; + app.addIdleCallback(&idleCounter); + app.exec(0); + DISTRHO_ASSERT_EQUAL(appQuitter.isThreadRunning(), false, "app quit triggered because we told it so"); + DISTRHO_ASSERT_NOT_EQUAL(idleCounter.counter, 0, "app idle callbacks not triggered"); + } return 0; } diff --git a/tests/Makefile b/tests/Makefile @@ -44,7 +44,7 @@ all: $(TESTS) @echo "Linking $*" $(SILENT)$(CXX) $< $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) -o $@ $@ - valgrind --leak-check=full $@ +# valgrind --leak-check=full $@ # --------------------------------------------------------------------------------------------------------------------- diff --git a/tests/tests.hpp b/tests/tests.hpp @@ -0,0 +1,23 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2021 Filipe Coelho <falktx@falktx.com> + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "dgl/Base.hpp" + +#define DISTRHO_ASSERT_EQUAL(v1, v2, msg) \ + if (v1 != v2) { d_stderr2("Test condition failed: %s; file:%s line:%i", msg, __FILE__, __LINE__); return 1; } + +#define DISTRHO_ASSERT_NOT_EQUAL(v1, v2, msg) \ + if (v1 == v2) { d_stderr2("Test condition failed: %s; file:%s line:%i", msg, __FILE__, __LINE__); return 1; }