From 59aade762a2996d336da522a9243697b1f87571c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 1 Sep 2019 19:04:02 +0200 Subject: [PATCH] Audio, GL: add tests for global state shared across libraries. Both currently fail on static builds. --- src/Magnum/Audio/Test/CMakeLists.txt | 14 +++++ .../Test/GlobalStateAcrossLibrariesALTest.cpp | 53 +++++++++++++++++++ .../GlobalStateAcrossLibrariesLibrary.cpp | 37 +++++++++++++ .../Test/GlobalStateAcrossLibrariesLibrary.h | 44 +++++++++++++++ src/Magnum/GL/Test/CMakeLists.txt | 14 +++++ .../Test/GlobalStateAcrossLibrariesGLTest.cpp | 51 ++++++++++++++++++ .../GlobalStateAcrossLibrariesLibrary.cpp | 37 +++++++++++++ .../Test/GlobalStateAcrossLibrariesLibrary.h | 44 +++++++++++++++ 8 files changed, 294 insertions(+) create mode 100644 src/Magnum/Audio/Test/GlobalStateAcrossLibrariesALTest.cpp create mode 100644 src/Magnum/Audio/Test/GlobalStateAcrossLibrariesLibrary.cpp create mode 100644 src/Magnum/Audio/Test/GlobalStateAcrossLibrariesLibrary.h create mode 100644 src/Magnum/GL/Test/GlobalStateAcrossLibrariesGLTest.cpp create mode 100644 src/Magnum/GL/Test/GlobalStateAcrossLibrariesLibrary.cpp create mode 100644 src/Magnum/GL/Test/GlobalStateAcrossLibrariesLibrary.h diff --git a/src/Magnum/Audio/Test/CMakeLists.txt b/src/Magnum/Audio/Test/CMakeLists.txt index 3cf1deda84..0e934e2ec8 100644 --- a/src/Magnum/Audio/Test/CMakeLists.txt +++ b/src/Magnum/Audio/Test/CMakeLists.txt @@ -72,4 +72,18 @@ if(BUILD_AL_TESTS) AudioPlayableALTest PROPERTIES FOLDER "Magnum/Audio/Test") endif() + + if(MAGNUM_BUILD_STATIC AND NOT CORRADE_TARGET_EMSCRIPTEN AND NOT CORRADE_TARGET_IOS AND NOT CORRADE_TARGET_ANDROID AND NOT CORRADE_TARGET_WINDOWS_RT) + add_library(AudioGlobalStateAcrossLibrariesLibrary SHARED + GlobalStateAcrossLibrariesLibrary.cpp) + target_link_libraries(AudioGlobalStateAcrossLibrariesLibrary PUBLIC MagnumAudio) + + corrade_add_test(AudioGlobalStateAcrossLibrariesALTest + GlobalStateAcrossLibrariesALTest.cpp + LIBRARIES AudioGlobalStateAcrossLibrariesLibrary) + set_target_properties( + AudioGlobalStateAcrossLibrariesLibrary + AudioGlobalStateAcrossLibrariesALTest + PROPERTIES FOLDER "Magnum/Audio/Test") + endif() endif() diff --git a/src/Magnum/Audio/Test/GlobalStateAcrossLibrariesALTest.cpp b/src/Magnum/Audio/Test/GlobalStateAcrossLibrariesALTest.cpp new file mode 100644 index 0000000000..b6d96ee088 --- /dev/null +++ b/src/Magnum/Audio/Test/GlobalStateAcrossLibrariesALTest.cpp @@ -0,0 +1,53 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 + Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#include + +#include "Magnum/Audio/Context.h" + +#include "GlobalStateAcrossLibrariesLibrary.h" + +namespace Magnum { namespace Audio { namespace Test { namespace { + +struct GlobalStateAcrossLibrariesALTest: TestSuite::Tester { + explicit GlobalStateAcrossLibrariesALTest(); + + void test(); +}; + +GlobalStateAcrossLibrariesALTest::GlobalStateAcrossLibrariesALTest() { + addTests({&GlobalStateAcrossLibrariesALTest::test}); +} + +void GlobalStateAcrossLibrariesALTest::test() { + Context context; + CORRADE_VERIFY(Context::hasCurrent()); + CORRADE_COMPARE(currentContextInALibrary(), &context); +} + +}}}} + +CORRADE_TEST_MAIN(Magnum::Audio::Test::GlobalStateAcrossLibrariesALTest) + diff --git a/src/Magnum/Audio/Test/GlobalStateAcrossLibrariesLibrary.cpp b/src/Magnum/Audio/Test/GlobalStateAcrossLibrariesLibrary.cpp new file mode 100644 index 0000000000..f2d078e409 --- /dev/null +++ b/src/Magnum/Audio/Test/GlobalStateAcrossLibrariesLibrary.cpp @@ -0,0 +1,37 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 + Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#include "GlobalStateAcrossLibrariesLibrary.h" + +#include "Magnum/Audio/Context.h" + +namespace Magnum { namespace Audio { namespace Test { + +Audio::Context* currentContextInALibrary() { + if(!Audio::Context::hasCurrent()) return nullptr; + return &Audio::Context::current(); +} + +}}} diff --git a/src/Magnum/Audio/Test/GlobalStateAcrossLibrariesLibrary.h b/src/Magnum/Audio/Test/GlobalStateAcrossLibrariesLibrary.h new file mode 100644 index 0000000000..1e9fb8f70d --- /dev/null +++ b/src/Magnum/Audio/Test/GlobalStateAcrossLibrariesLibrary.h @@ -0,0 +1,44 @@ +#ifndef Magnum_Audio_Test_GlobalStateAcrossLibrariesLibrary_h +#define Magnum_Audio_Test_GlobalStateAcrossLibrariesLibrary_h +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 + Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#include + +#include "Magnum/Audio/Audio.h" + +#ifdef AudioGlobalStateAcrossLibrariesLibrary_EXPORTS + #define MAGNUM_GLOBALSTATEACROSSLIBRARIESLIBRARY_EXPORT CORRADE_VISIBILITY_EXPORT +#else + #define MAGNUM_GLOBALSTATEACROSSLIBRARIESLIBRARY_EXPORT CORRADE_VISIBILITY_IMPORT +#endif + +namespace Magnum { namespace Audio { namespace Test { + +MAGNUM_GLOBALSTATEACROSSLIBRARIESLIBRARY_EXPORT Audio::Context* currentContextInALibrary(); + +}}} + +#endif diff --git a/src/Magnum/GL/Test/CMakeLists.txt b/src/Magnum/GL/Test/CMakeLists.txt index c1d3128194..803a6b9dc9 100644 --- a/src/Magnum/GL/Test/CMakeLists.txt +++ b/src/Magnum/GL/Test/CMakeLists.txt @@ -208,4 +208,18 @@ if(BUILD_GL_TESTS) corrade_add_test(GLRectangleTextureGLTest RectangleTextureGLTest.cpp LIBRARIES MagnumOpenGLTester) set_target_properties(GLRectangleTextureGLTest PROPERTIES FOLDER "Magnum/GL/Test") endif() + + if(MAGNUM_BUILD_STATIC AND NOT CORRADE_TARGET_EMSCRIPTEN AND NOT CORRADE_TARGET_IOS AND NOT CORRADE_TARGET_ANDROID AND NOT CORRADE_TARGET_WINDOWS_RT) + add_library(GLGlobalStateAcrossLibrariesLibrary SHARED + GlobalStateAcrossLibrariesLibrary.cpp) + target_link_libraries(GLGlobalStateAcrossLibrariesLibrary PUBLIC MagnumGL) + + corrade_add_test(GLGlobalStateAcrossLibrariesGLTest + GlobalStateAcrossLibrariesGLTest.cpp + LIBRARIES GLGlobalStateAcrossLibrariesLibrary MagnumOpenGLTester) + set_target_properties( + GLGlobalStateAcrossLibrariesLibrary + GLGlobalStateAcrossLibrariesGLTest + PROPERTIES FOLDER "Magnum/GL/Test") + endif() endif() diff --git a/src/Magnum/GL/Test/GlobalStateAcrossLibrariesGLTest.cpp b/src/Magnum/GL/Test/GlobalStateAcrossLibrariesGLTest.cpp new file mode 100644 index 0000000000..70b488a530 --- /dev/null +++ b/src/Magnum/GL/Test/GlobalStateAcrossLibrariesGLTest.cpp @@ -0,0 +1,51 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 + Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#include "Magnum/GL/Context.h" +#include "Magnum/GL/OpenGLTester.h" + +#include "GlobalStateAcrossLibrariesLibrary.h" + +namespace Magnum { namespace GL { namespace Test { namespace { + +struct GlobalStateAcrossLibrariesGLTest: OpenGLTester { + explicit GlobalStateAcrossLibrariesGLTest(); + + void test(); +}; + +GlobalStateAcrossLibrariesGLTest::GlobalStateAcrossLibrariesGLTest() { + addTests({&GlobalStateAcrossLibrariesGLTest::test}); +} + +void GlobalStateAcrossLibrariesGLTest::test() { + CORRADE_VERIFY(GL::Context::hasCurrent()); + CORRADE_COMPARE(currentContextInALibrary(), &GL::Context::current()); +} + +}}}} + +CORRADE_TEST_MAIN(Magnum::GL::Test::GlobalStateAcrossLibrariesGLTest) + diff --git a/src/Magnum/GL/Test/GlobalStateAcrossLibrariesLibrary.cpp b/src/Magnum/GL/Test/GlobalStateAcrossLibrariesLibrary.cpp new file mode 100644 index 0000000000..9f102c33ca --- /dev/null +++ b/src/Magnum/GL/Test/GlobalStateAcrossLibrariesLibrary.cpp @@ -0,0 +1,37 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 + Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#include "GlobalStateAcrossLibrariesLibrary.h" + +#include "Magnum/GL/Context.h" + +namespace Magnum { namespace GL { namespace Test { + +GL::Context* currentContextInALibrary() { + if(!GL::Context::hasCurrent()) return nullptr; + return &GL::Context::current(); +} + +}}} diff --git a/src/Magnum/GL/Test/GlobalStateAcrossLibrariesLibrary.h b/src/Magnum/GL/Test/GlobalStateAcrossLibrariesLibrary.h new file mode 100644 index 0000000000..aa4afda1a1 --- /dev/null +++ b/src/Magnum/GL/Test/GlobalStateAcrossLibrariesLibrary.h @@ -0,0 +1,44 @@ +#ifndef Magnum_GL_Test_GlobalStateAcrossLibrariesLibrary_h +#define Magnum_GL_Test_GlobalStateAcrossLibrariesLibrary_h +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 + Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#include + +#include "Magnum/GL/GL.h" + +#ifdef GLGlobalStateAcrossLibrariesLibrary_EXPORTS + #define MAGNUM_GLOBALSTATEACROSSLIBRARIESLIBRARY_EXPORT CORRADE_VISIBILITY_EXPORT +#else + #define MAGNUM_GLOBALSTATEACROSSLIBRARIESLIBRARY_EXPORT CORRADE_VISIBILITY_IMPORT +#endif + +namespace Magnum { namespace GL { namespace Test { + +MAGNUM_GLOBALSTATEACROSSLIBRARIESLIBRARY_EXPORT GL::Context* currentContextInALibrary(); + +}}} + +#endif