Application.cpp (3515B)
1 /* 2 * DISTRHO Plugin Framework (DPF) 3 * Copyright (C) 2012-2021 Filipe Coelho <falktx@falktx.com> 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any purpose with 6 * or without fee is hereby granted, provided that the above copyright notice and this 7 * permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD 10 * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN 11 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 12 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 13 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 #include "tests.hpp" 18 19 #define DPF_TEST_APPLICATION_CPP 20 #include "dgl/src/pugl.cpp" 21 #include "dgl/src/Application.cpp" 22 #include "dgl/src/ApplicationPrivateData.cpp" 23 24 START_NAMESPACE_DGL 25 26 // -------------------------------------------------------------------------------------------------------------------- 27 28 struct IdleCallbackCounter : IdleCallback 29 { 30 int counter; 31 32 IdleCallbackCounter() 33 : counter(0) {} 34 35 void idleCallback() override 36 { 37 ++counter; 38 } 39 }; 40 41 // -------------------------------------------------------------------------------------------------------------------- 42 43 END_NAMESPACE_DGL 44 45 int main() 46 { 47 USE_NAMESPACE_DGL; 48 49 // regular usage 50 { 51 Application app(true); 52 IdleCallbackCounter idleCounter; 53 app.addIdleCallback(&idleCounter); 54 DISTRHO_ASSERT_EQUAL(app.isQuitting(), false, "app MUST NOT be set as quitting during init"); 55 DISTRHO_ASSERT_EQUAL(idleCounter.counter, 0, "app MUST NOT have triggered idle callbacks yet"); 56 app.idle(); 57 DISTRHO_ASSERT_EQUAL(app.isQuitting(), false, "app MUST NOT be set as quitting after idle()"); 58 DISTRHO_ASSERT_EQUAL(idleCounter.counter, 1, "app MUST have triggered 1 idle callback"); 59 app.idle(); 60 DISTRHO_ASSERT_EQUAL(idleCounter.counter, 2, "app MUST have triggered 2 idle callbacks"); 61 app.quit(); 62 DISTRHO_ASSERT_EQUAL(app.isQuitting(), true, "app MUST be set as quitting after quit()"); 63 DISTRHO_ASSERT_EQUAL(idleCounter.counter, 2, "app MUST have triggered only 2 idle callbacks in its lifetime"); 64 } 65 66 // standalone exec, must not block forever due to quit() called from another thread 67 { 68 Application app(true); 69 ApplicationQuitter appQuitter(app); 70 IdleCallbackCounter idleCounter; 71 app.addIdleCallback(&idleCounter); 72 app.exec(); 73 DISTRHO_ASSERT_EQUAL(appQuitter.isThreadRunning(), false, "app quit triggered because we told it so"); 74 DISTRHO_ASSERT_NOT_EQUAL(idleCounter.counter, 0, "app idle callbacks MUST have been triggered"); 75 } 76 77 // standalone exec, but with 0 as timeout 78 { 79 Application app(true); 80 ApplicationQuitter appQuitter(app); 81 IdleCallbackCounter idleCounter; 82 app.addIdleCallback(&idleCounter); 83 app.exec(0); 84 DISTRHO_ASSERT_EQUAL(appQuitter.isThreadRunning(), false, "app quit triggered because we told it so"); 85 DISTRHO_ASSERT_NOT_EQUAL(idleCounter.counter, 0, "app idle callbacks MUST have been triggered"); 86 } 87 88 return 0; 89 } 90 91 // --------------------------------------------------------------------------------------------------------------------