| @@ -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; | |||||
| } | |||||
| // -------------------------------------------------------------------------------------------------------------------- | |||||
| @@ -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) | |||||
| # --------------------------------------------------------------------------------------------------------------------- | |||||
| @@ -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. | |||||