Browse Source

Ported non-interactive window manager test.

Daniel Buckmaster 11 years ago
parent
commit
fbd97b0cf8

+ 0 - 538
Engine/source/windowManager/test/testWinMgr.cpp

@@ -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<RectI> 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; i<monitorRects.size(); i++)
-      {
-         Con::printf(" Monitor #%d region is (%d,%d) (%d,%d)", i,
-            monitorRects[i].point.x, monitorRects[i].point.y, monitorRects[i].extent.x, monitorRects[i].extent.y);
-
-         test(monitorRects[i].isValidRect(), "Got an invalid rect for this monitor - no good.");
-      }
-   }
-};
-
-CreateInteractiveTest(TestWinMgrCreate, "WindowManager/CreateAWindow")
-{
-   void handleMouseEvent(WindowId,U32,S32 x,S32 y, bool isRelative)
-   {
-      Con::printf("Mouse at %d, %d %s", x, y, isRelative ? "(relative)" : "(absolute)");
-   }
-
-   void handleAppEvent(WindowId, S32 event)
-   {
-      if(event == WindowClose)
-         Process::requestShutdown();
-   }
-
-   void run()
-   {
-      PlatformWindowManager *pwm = CreatePlatformWindowManager();
-
-      GFXVideoMode vm;
-      vm.resolution.x = 800;
-      vm.resolution.y = 600;
-
-      PlatformWindow *pw = pwm->createWindow(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; i<NumWindows; i++)
-         handleDrawEvent(mWindows[i]->getWindowId());
-   }
-
-   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; i<NumWindows; i++)
-      {
-         mWindows[i] = mWindowManager->createWindow(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; i<NumWindows; i++)
-         drawToWindow(mWindows[i]);
-   }
-
-   void handleResizeEvent(WindowId id, S32 width, S32 height)
-   {
-      // Do some simple checks to make sure we resize the same number of times
-      // on both runs.
-
-      if(Journal::IsPlaying())
-      {
-         // If we're playing back, APPLY the resize event...
-         mWindowManager->getWindowById(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; i<NumWindows; i++)
-      {
-         mWindows[i] = mWindowManager->createWindow(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<NumWindows; i++)
-         SAFE_DELETE(mWindows[i]);
-
-      SAFE_DELETE(mDevice);
-      SAFE_DELETE(mWindowManager);
-   }
-
-
-   void run()
-   {
-      return;
-
-// CodeReview: this should be deleted or enabled.
-#if 0
-      mNumDraws = 0;
-      mNumResize = 0;
-
-      // Record a run of the main loop.
-      Journal::Record("multiwindow.jrn");
-      mainLoop();
-      Journal::Stop();
-
-      test(mNumDraws > 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; i<NumWindows; i++)
-         drawToWindow(mWindows[i]);
-
-      // Don't monopolize the CPU.
-      Platform::sleep(10);
-   }
-
-   void handleButtonEvent(WindowId did,U32 modifier,U32 action,U16 button)
-   {
-      // Only respond to button down
-      if(action != IA_MAKE)
-         return;
-
-      // Get the window...
-      PlatformWindow *win = mWindowManager->getWindowById(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; i<NumWindows; i++)
-      {
-         mWindows[i] = mWindowManager->createWindow(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; i<NumWindows; i++)
-         SAFE_DELETE(mWindows[i]);
-
-      mDevice->preDestroy();
-      SAFE_DELETE(mDevice);
-      SAFE_DELETE(mWindowManager);
-   }
-};

+ 58 - 0
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<RectI> 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<monitorRects.size(); i++)
+   {
+      EXPECT_TRUE(monitorRects[i].isValidRect())
+         << "Got an invalid rect for this monitor - no good.";
+   }
+
+   // No way to destroy the window manager.
+};
+
+#endif