diff --git a/tests/Application.cpp b/tests/Application.cpp new file mode 100644 index 00000000..6a43b6cf --- /dev/null +++ b/tests/Application.cpp @@ -0,0 +1,80 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2021 Filipe Coelho + * + * 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 new file mode 100644 index 00000000..0174d33f --- /dev/null +++ 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 new file mode 100644 index 00000000..4d597ac6 --- /dev/null +++ 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.