diff --git a/Engine/source/windowManager/test/testWinMgr.cpp b/Engine/source/windowManager/test/testWinMgr.cpp deleted file mode 100644 index efe3ec770..000000000 --- a/Engine/source/windowManager/test/testWinMgr.cpp +++ /dev/null @@ -1,538 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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 "console/console.h" -#include "windowManager/platformWindowMgr.h" -#include "unit/test.h" -#include "core/util/tVector.h" -#include "gfx/gfxStructs.h" -#include "core/util/journal/process.h" -#include "gfx/gfxInit.h" - -using namespace UnitTesting; - -CreateUnitTest(TestWinMgrQueries, "WindowManager/BasicQueries") -{ - void run() - { - PlatformWindowManager *pwm = CreatePlatformWindowManager(); - - // Check out the primary desktop area... - RectI primary = pwm->getPrimaryDesktopArea(); - - Con::printf("Primary desktop area is (%d,%d) (%d,%d)", - primary.point.x, primary.point.y, primary.extent.x, primary.extent.y); - - test(primary.isValidRect(), "Got some sort of invalid rect from the window manager!"); - - // Now try to get info about all the monitors. - Vector monitorRects; - pwm->getMonitorRegions(monitorRects); - - test(monitorRects.size() > 0, "Should get at least one monitor rect back from getMonitorRegions!"); - - // This test is here just to detect overflow/runaway situations. -- BJG - test(monitorRects.size() < 64, "Either something's wrong, or you have a lot of monitors..."); - - for(S32 i=0; icreateWindow(NULL, vm); - - test(pw, "Didn't get a window back from the window manager, no good."); - if(!pw) - return; - - // Setup our events. - pw->mouseEvent.notify(this, &TestWinMgrCreate::handleMouseEvent); - pw->appEvent.notify(this, &TestWinMgrCreate::handleAppEvent); - - // And, go on our way. - while(Process::processEvents()) - ; - - SAFE_DELETE(pw); - } -}; - -CreateInteractiveTest(TestWinMgrGFXInit, "WindowManager/SimpleGFX") -{ - PlatformWindow *mWindow; - GFXDevice *mDevice; - - void handleDrawEvent(WindowId id) - { - mDevice->beginScene(); - mDevice->setActiveRenderTarget(mWindow->getGFXTarget()); - mDevice->clear( GFXClearZBuffer | GFXClearStencil | GFXClearTarget, ColorI( 255, 255, 0 ), 1.0f, 0 ); - mDevice->endScene(); - mWindow->getGFXTarget()->present(); - } - - void forceDraw() - { - handleDrawEvent(0); - } - - void handleAppEvent(WindowId, S32 event) - { - if(event == WindowClose) - Process::requestShutdown(); - } - - void run() - { - PlatformWindowManager *pwm = CreatePlatformWindowManager(); - - // Create a device. - GFXAdapter a; - a.mType = Direct3D9; - a.mIndex = 0; - - mDevice = GFXInit::createDevice(&a); - test(mDevice, "Unable to create d3d9 device #0."); - - // Initialize the window... - GFXVideoMode vm; - vm.resolution.x = 400; - vm.resolution.y = 400; - - mWindow = pwm->createWindow(mDevice, vm); - - test(mWindow, "Didn't get a window back from the window manager, no good."); - if(!mWindow) - return; - - // Setup our events. - mWindow->displayEvent.notify(this, &TestWinMgrGFXInit::handleDrawEvent); - mWindow->idleEvent.notify(this, &TestWinMgrGFXInit::forceDraw); - mWindow->appEvent.notify(this, &TestWinMgrGFXInit::handleAppEvent); - - // And, go on our way. - while(Process::processEvents()) - ; - - mWindow->displayEvent.remove(this, &TestWinMgrGFXInit::handleDrawEvent); - mWindow->idleEvent.remove(this, &TestWinMgrGFXInit::forceDraw); - mWindow->appEvent.remove(this, &TestWinMgrGFXInit::handleAppEvent); - - // Clean up! - SAFE_DELETE(mDevice); - SAFE_DELETE(mWindow); - } -}; - -CreateInteractiveTest(TestWinMgrGFXInitMultiWindow, "WindowManager/GFXMultiWindow") -{ - enum { - NumWindows = 4, - }; - - PlatformWindowManager *mWindowManager; - PlatformWindow *mWindows[NumWindows]; - GFXDevice *mDevice; - - void handleDrawEvent(WindowId id) - { - // Which window are we getting this event on? - PlatformWindow *w = mWindowManager->getWindowById(id); - - mDevice->beginScene(); - mDevice->setActiveRenderTarget(w->getGFXTarget()); - - // Vary clear color by window to discern which window is which. - mDevice->clear( GFXClearTarget, - ColorI( 255 - (id * 50), 255, id * 100 ), 1.0f, 0 ); - mDevice->endScene(); - - // Call swap on the window's render target. - ((GFXWindowTarget*)w->getGFXTarget())->present(); - } - - void handleAppEvent(WindowId, S32 event) - { - if(event == WindowClose) - Process::requestShutdown(); - } - - void handleIdleEvent() - { - for(S32 i=0; igetWindowId()); - } - - void run() - { - mWindowManager = CreatePlatformWindowManager(); - - // Create a device. - GFXAdapter a; - a.mType = Direct3D9; - a.mIndex = 0; - - mDevice = GFXInit::createDevice(&a); - test(mDevice, "Unable to create d3d9 device #0."); - - // Initialize the windows... - GFXVideoMode vm; - vm.resolution.x = 400; - vm.resolution.y = 400; - - for(S32 i=0; icreateWindow(mDevice, vm); - - test(mWindows[i], "Didn't get a window back from the window manager, no good."); - if(!mWindows[i]) - continue; - - // Setup our events. - mWindows[i]->displayEvent.notify(this, &TestWinMgrGFXInitMultiWindow::handleDrawEvent); - mWindows[i]->appEvent.notify(this, &TestWinMgrGFXInitMultiWindow::handleAppEvent); - mWindows[i]->idleEvent.notify(this, &TestWinMgrGFXInitMultiWindow::handleIdleEvent); - } - - // And, go on our way. - while(Process::processEvents()) - ; - - SAFE_DELETE(mWindowManager); - SAFE_DELETE(mDevice); - } -}; - -CreateInteractiveTest(TestJournaledMultiWindowGFX, "WindowManager/GFXJournaledMultiWindow") -{ - enum { - NumWindows = 2, - }; - - PlatformWindowManager *mWindowManager; - PlatformWindow *mWindows[NumWindows]; - GFXDevice *mDevice; - - S32 mNumDraws; - S32 mNumResize; - - void drawToWindow(PlatformWindow *win) - { - // Do some simple checks to make sure we draw the same number of times - // on both runs. - if(Journal::IsPlaying()) - mNumDraws--; - else - mNumDraws++; - - // Render! - mDevice->beginScene(); - mDevice->setActiveRenderTarget(win->getGFXTarget()); - - // Vary clear color by window to discern which window is which. - static S32 timeVariance = 0; - - mDevice->clear( GFXClearTarget, - ColorI( 0xFF - (++timeVariance * 5), 0xFF, win->getWindowId() * 0x0F ), 1.0f, 0 ); - - mDevice->endScene(); - - // Call swap on the window's render target. - win->getGFXTarget()->present(); - - } - - void handleDrawEvent(WindowId id) - { - // Which window are we getting this event on? - PlatformWindow *w = mWindowManager->getWindowById(id); - - drawToWindow(w); - } - - void handleAppEvent(WindowId, S32 event) - { - if(event == WindowClose) - Process::requestShutdown(); - } - - void handleIdleEvent() - { - for(S32 i=0; igetWindowById(id)->setSize(Point2I(width, height)); - - mNumResize--; - } - else - { - // If we're not playing back, do nothing except note it. - mNumResize++; - } - - // Which window are we getting this event on? - PlatformWindow *w = mWindowManager->getWindowById(id); - - drawToWindow(w); - } - - /// The mainloop of our app - we'll run this twice, once to create - /// a journal and again to play it back. - void mainLoop() - { - mWindowManager = CreatePlatformWindowManager(); - - // Create a device. - GFXAdapter a; - a.mType = Direct3D9; - a.mIndex = 0; - - mDevice = GFXInit::createDevice(&a); - test(mDevice, "Unable to create ogl device #0."); - - // Initialize the windows... - GFXVideoMode vm; - vm.resolution.x = 400; - vm.resolution.y = 400; - - for(S32 i=0; icreateWindow(mDevice, vm); - - test(mWindows[i], "Didn't get a window back from the window manager, no good."); - if(!mWindows[i]) - continue; - - // Setup our events. - mWindows[i]->displayEvent.notify(this, &TestJournaledMultiWindowGFX::handleDrawEvent); - mWindows[i]->appEvent.notify(this, &TestJournaledMultiWindowGFX::handleAppEvent); - mWindows[i]->resizeEvent.notify(this, &TestJournaledMultiWindowGFX::handleResizeEvent); - - // Only subscribe to the first idle event. - if(i==0) - mWindows[i]->idleEvent.notify(this, &TestJournaledMultiWindowGFX::handleIdleEvent); - } - - // And, go on our way. - while(Process::processEvents()) - ; - - // Finally, clean up. - for(S32 i=0; i 0, "No draws occurred!"); - test(mNumResize > 0, "No resizes occurred!"); - - // And play it back. - Journal::Play("multiwindow.jrn"); - mainLoop(); - Journal::Stop(); - - test(mNumDraws == 0, "Failed to play journal back with same number of draws."); - test(mNumResize == 0, "Failed to play journal back with same number of resizes."); -#endif - } -}; - -CreateInteractiveTest(GFXTestFullscreenToggle, "GFX/TestFullscreenToggle") -{ - enum Constants - { - NumWindows = 1, - }; - - PlatformWindowManager *mWindowManager; - PlatformWindow *mWindows[NumWindows]; - GFXDevice *mDevice; - - void drawToWindow(PlatformWindow *win) - { - // Render! - mDevice->beginScene(); - mDevice->setActiveRenderTarget(win->getGFXTarget()); - - // Vary clear color by window to discern which window is which. - static S32 timeVariance = 0; - - mDevice->clear( GFXClearZBuffer | GFXClearStencil | GFXClearTarget, - ColorI( 0xFF - (++timeVariance * 5), 0xFF, win->getWindowId() * 0x40 ), 1.0f, 0 ); - - mDevice->endScene(); - - // Call swap on the window's render target. - win->getGFXTarget()->present(); - } - - void handleDrawEvent(WindowId id) - { - // Which window are we getting this event on? - PlatformWindow *w = mWindowManager->getWindowById(id); - - drawToWindow(w); - } - - void handleAppEvent(WindowId, S32 event) - { - if(event == WindowClose) - Process::requestShutdown(); - } - - void handleIdleEvent() - { - // Redraw everything. - for(S32 i=0; igetWindowById(did); - GFXVideoMode winVm = win->getVideoMode(); - - // If the window is not full screen, make it full screen 800x600x32 - if(winVm.fullScreen == false) - { - winVm.fullScreen = true; - winVm.resolution.set(800,600); - } - else - { - // If the window is full screen, then bump it to 400x400x32 - winVm.fullScreen = false; - winVm.resolution.set(400,400); - } - - win->setVideoMode(winVm); - } - - void run() - { - mWindowManager = CreatePlatformWindowManager(); - - // Create a device. - GFXAdapter a; - a.mType = Direct3D9; - a.mIndex = 0; - - mDevice = GFXInit::createDevice(&a); - test(mDevice, "Unable to create d3d9 device #0."); - - // Initialize the windows... - GFXVideoMode vm; - vm.resolution.x = 400; - vm.resolution.y = 400; - - for(S32 i=0; icreateWindow(mDevice, vm); - - test(mWindows[i], "Didn't get a window back from the window manager, no good."); - if(!mWindows[i]) - continue; - - // Setup our events. - mWindows[i]->appEvent.notify(this, &GFXTestFullscreenToggle::handleAppEvent); - mWindows[i]->buttonEvent.notify(this, &GFXTestFullscreenToggle::handleButtonEvent); - mWindows[i]->displayEvent.notify(this, &GFXTestFullscreenToggle::handleDrawEvent); - - // Only subscribe to the first idle event. - if(i==0) - mWindows[i]->idleEvent.notify(this, &GFXTestFullscreenToggle::handleIdleEvent); - } - - // And, go on our way. - while(Process::processEvents()) - ; - - // Finally, clean up. - for(S32 i=0; ipreDestroy(); - SAFE_DELETE(mDevice); - SAFE_DELETE(mWindowManager); - } -}; \ No newline at end of file diff --git a/Engine/source/windowManager/test/windowManagerTest.cpp b/Engine/source/windowManager/test/windowManagerTest.cpp new file mode 100644 index 000000000..d6179c96b --- /dev/null +++ b/Engine/source/windowManager/test/windowManagerTest.cpp @@ -0,0 +1,58 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2014 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifdef TORQUE_TESTS_ENABLED +#include "testing/unitTesting.h" +#include "windowManager/platformWindowMgr.h" + +// Mysteriously, TEST(WindowManager, BasicAPI) gives an error. Huh. +TEST(WinMgr, BasicAPI) +{ + PlatformWindowManager *pwm = CreatePlatformWindowManager(); + + // Check out the primary desktop area... + RectI primary = pwm->getPrimaryDesktopArea(); + + EXPECT_TRUE(primary.isValidRect()) + << "Got some sort of invalid rect from the window manager!"; + + // Now try to get info about all the monitors. + Vector monitorRects; + pwm->getMonitorRegions(monitorRects); + + EXPECT_GT(monitorRects.size(), 0) + << "Should get at least one monitor rect back from getMonitorRegions!"; + + // This test is here just to detect overflow/runaway situations. -- BJG + EXPECT_LT(monitorRects.size(), 64) + << "Either something's wrong, or you have a lot of monitors..."; + + for(S32 i=0; i