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:
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; }