commit 1f2f2e5c4e2bf146af73fc1f28a8c253a516fa9f
parent cbb95d5855b97321370f11cd0f03279bc5d2acdb
Author: falkTX <falktx@falktx.com>
Date: Fri, 30 Apr 2021 21:54:13 +0100
Start of DPF tests
Signed-off-by: falkTX <falktx@falktx.com>
Diffstat:
3 files changed, 159 insertions(+), 0 deletions(-)
diff --git a/tests/Application.cpp b/tests/Application.cpp
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ */
+
+#define DPF_TEST_APPLICATION_CPP
+#include "dgl/src/pugl.cpp"
+#include "dgl/src/Application.cpp"
+#include "dgl/src/ApplicationPrivateData.cpp"
+
+#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
+
+// --------------------------------------------------------------------------------------------------------------------
+
+class ApplicationQuitter : public Thread
+{
+ Application& app;
+
+public:
+ ApplicationQuitter(Application& a)
+ : Thread("ApplicationQuitter"),
+ app(a)
+ {
+ startThread();
+ }
+
+private:
+ void run() override
+ {
+ d_sleep(5);
+ app.quit();
+ }
+};
+
+// --------------------------------------------------------------------------------------------------------------------
+
+END_NAMESPACE_DGL
+
+int main()
+{
+ USE_NAMESPACE_DGL;
+
+ // regular usage
+ {
+ Application app(true);
+ DISTRHO_ASSERT_EQUAL(app.isQuiting(), false, "app MUST NOT be set as quitting during init");
+ app.idle();
+ DISTRHO_ASSERT_EQUAL(app.isQuiting(), false, "app MUST NOT be set as quitting after idle()");
+ app.quit();
+ DISTRHO_ASSERT_EQUAL(app.isQuiting(), true, "app MUST be set as quitting after quit()");
+ }
+
+ // standalone exec, must not block forever due to quit() called from another thread
+ {
+ Application app(true);
+ ApplicationQuitter appQuitter(app);
+ app.exec();
+ DISTRHO_ASSERT_EQUAL(appQuitter.isThreadRunning(), false, "app quit triggered because we told it so");
+ }
+
+ return 0;
+}
+
+// --------------------------------------------------------------------------------------------------------------------
diff --git a/tests/Makefile b/tests/Makefile
@@ -0,0 +1,73 @@
+#!/usr/bin/make -f
+# Makefile for DGL #
+# ---------------- #
+# Created by falkTX
+#
+
+# debug mode by default
+DEBUG=true
+
+include ../Makefile.base.mk
+
+# ---------------------------------------------------------------------------------------------------------------------
+
+BUILD_C_FLAGS += $(DGL_FLAGS) -I..
+BUILD_CXX_FLAGS += $(DGL_FLAGS) -I.. -I../dgl/src/pugl-upstream/include -DDONT_SET_USING_DGL_NAMESPACE
+LINK_FLAGS += -lpthread
+
+# TODO fix within pugl
+BUILD_CXX_FLAGS += -Wno-missing-field-initializers -Wno-extra
+
+# ---------------------------------------------------------------------------------------------------------------------
+
+# TODO
+src=Application.cpp
+
+TESTS = $(src:%.cpp=../build/tests/%)
+OBJS = $(TESTS:%=%.o)
+
+# ---------------------------------------------------------------------------------------------------------------------
+
+ifeq ($(HAVE_CAIRO),true)
+endif
+
+ifeq ($(HAVE_OPENGL),true)
+endif
+
+# ---------------------------------------------------------------------------------------------------------------------
+
+all: $(TESTS)
+
+# ---------------------------------------------------------------------------------------------------------------------
+
+../build/tests/%: ../build/tests/%.cpp.o
+ @echo "Linking $*"
+ $(SILENT)$(CXX) $< $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) -o $@
+ $@
+ valgrind --leak-check=full $@
+
+# ---------------------------------------------------------------------------------------------------------------------
+
+../build/tests/%.c.o: %.c
+ -@mkdir -p ../build/tests
+ @echo "Compiling $<"
+ $(SILENT)$(CC) $< $(BUILD_C_FLAGS) -c -o $@
+
+../build/tests/%.cpp.o: %.cpp
+ -@mkdir -p ../build/tests
+ @echo "Compiling $<"
+ $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@
+
+# ---------------------------------------------------------------------------------------------------------------------
+
+clean:
+ rm -rf ../build/tests
+
+debug:
+ $(MAKE) DEBUG=true
+
+# ---------------------------------------------------------------------------------------------------------------------
+
+-include $(OBJS:%.o=%.d)
+
+# ---------------------------------------------------------------------------------------------------------------------
diff --git a/tests/README.txt b/tests/README.txt
@@ -0,0 +1,6 @@
+This directory contains several tests for DPF related things, from graphics to plugin stuff to utilities.
+Each *.cpp file is meant to be its own test.
+
+In order to test DPF components individually, these tests do not link against DGL directly,
+but will directly import the needed source code.
+All files must be self-contained, in order to prevent surprises in regards global state and initialization stuff.