]> git.lizzy.rs Git - irrlicht.git/commitdiff
Add basic test application that runs under CI
authorsfan5 <sfan5@live.de>
Thu, 22 Apr 2021 08:46:31 +0000 (10:46 +0200)
committersfan5 <sfan5@live.de>
Thu, 22 Apr 2021 08:53:09 +0000 (10:53 +0200)
.github/workflows/build.yml
examples/AutomatedTest/main.cpp [new file with mode: 0644]
examples/CMakeLists.txt

index ea1ca2073c752cd2b700a0fbf62df0af57424f63..27a71d1f6194a260a364904408f749ff4d1ed902 100644 (file)
@@ -18,7 +18,7 @@ jobs:
       - name: Build
         run: |
           cmake .
-          make
+          make -j2
 
       - name: Package
         run: |
@@ -36,14 +36,24 @@ jobs:
       - uses: actions/checkout@v2
       - name: Install deps
         run: |
-          sudo apt-get install g++ cmake libxxf86vm-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
+          sudo apt-get install g++ cmake libxxf86vm-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
 
       - name: Build
         run: |
           sed '/#define _IRR_COMPILE_WITH_OGLES2_/ s|^//||g' -i include/IrrCompileConfig.h
           sed '/#define _IRR_COMPILE_WITH_OPENGL_/ s|^|//|g' -i include/IrrCompileConfig.h
-          cmake .
-          make
+          cmake . -DBUILD_EXAMPLES=1
+          make -j2
+
+      - name: Test (headless)
+        run: |
+          cd bin/Linux
+          ./AutomatedTest null
+
+      - name: Test (Xvfb)
+        run: |
+          cd bin/Linux
+          LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest
 
   win32:
     runs-on: ubuntu-18.04
diff --git a/examples/AutomatedTest/main.cpp b/examples/AutomatedTest/main.cpp
new file mode 100644 (file)
index 0000000..b155696
--- /dev/null
@@ -0,0 +1,112 @@
+#include <irrlicht.h>\r
+#include "exampleHelper.h"\r
+\r
+using namespace irr;\r
+\r
+static video::E_DRIVER_TYPE chooseDriver(const char *arg_)\r
+{\r
+       if (core::stringc(arg_) == "null")\r
+               return video::EDT_NULL;\r
+\r
+       if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES1))\r
+               return video::EDT_OGLES1;\r
+       if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES2))\r
+               return video::EDT_OGLES2;\r
+       return video::EDT_OPENGL;\r
+}\r
+\r
+int main(int argc, char *argv[])\r
+{\r
+       SIrrlichtCreationParameters p;\r
+       p.DriverType = chooseDriver(argc > 1 ? argv[1] : "");\r
+       p.WindowSize = core::dimension2du(640, 480);\r
+       p.Vsync = true;\r
+       p.LoggingLevel = ELL_DEBUG;\r
+\r
+       IrrlichtDevice *device = createDeviceEx(p);\r
+       if (!device)\r
+               return 1;\r
+\r
+       device->setWindowCaption(L"Hello World!");\r
+       device->setResizable(true);\r
+\r
+       video::IVideoDriver* driver = device->getVideoDriver();\r
+       scene::ISceneManager* smgr = device->getSceneManager();\r
+       gui::IGUIEnvironment* guienv = device->getGUIEnvironment();\r
+\r
+       guienv->addStaticText(L"sample text", core::rect<s32>(10,10,110,22), false);\r
+\r
+       gui::IGUIButton* button = guienv->addButton(\r
+               core::rect<s32>(10,30,110,30 + 32), 0, -1, L"sample button",\r
+               L"sample tooltip");\r
+\r
+       gui::IGUIEditBox* editbox = guienv->addEditBox(L"",\r
+               core::rect<s32>(10,70,60,70 + 16));\r
+\r
+       const io::path mediaPath = getExampleMediaPath();\r
+\r
+       scene::IAnimatedMesh* mesh = smgr->getMesh(mediaPath + "sydney.md2");\r
+       if (!mesh)\r
+               return 1;\r
+       scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);\r
+       if (node)\r
+       {\r
+               node->setMaterialFlag(video::EMF_LIGHTING, false);\r
+               node->setMD2Animation(scene::EMAT_STAND);\r
+               node->setMaterialTexture(0, driver->getTexture(mediaPath + "sydney.bmp"));\r
+       }\r
+\r
+       smgr->addCameraSceneNode(0, core::vector3df(0,30,-40), core::vector3df(0,5,0));\r
+\r
+       s32 n = 0;\r
+       SEvent event;\r
+       device->getTimer()->start();\r
+\r
+       while (device->run())\r
+       {\r
+               if (device->getTimer()->getTime() >= 1300)\r
+               {\r
+                       device->getTimer()->setTime(0);\r
+                       ++n;\r
+                       if (n == 1) // Tooltip display\r
+                       {\r
+                               bzero(&event, sizeof(SEvent));\r
+                               event.EventType = irr::EET_MOUSE_INPUT_EVENT;\r
+                               event.MouseInput.Event = irr::EMIE_MOUSE_MOVED;\r
+                               event.MouseInput.X = button->getAbsolutePosition().getCenter().X;\r
+                               event.MouseInput.Y = button->getAbsolutePosition().getCenter().Y;\r
+                               device->postEventFromUser(event);\r
+                       }\r
+                       else if (n == 2) // Text input focus\r
+                               guienv->setFocus(editbox);\r
+                       else if (n == 3) // Keypress for Text input\r
+                       {\r
+                               bzero(&event, sizeof(SEvent));\r
+                               event.EventType = irr::EET_KEY_INPUT_EVENT;\r
+                               event.KeyInput.Char = L'a';\r
+                               event.KeyInput.Key = KEY_KEY_A;\r
+                               event.KeyInput.PressedDown = true;\r
+                               device->postEventFromUser(event);\r
+                               event.KeyInput.PressedDown = false;\r
+                               device->postEventFromUser(event);\r
+                       }\r
+                       else\r
+                               device->closeDevice();\r
+               }\r
+\r
+               driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH,\r
+                       video::SColor(255,100,100,150));\r
+               smgr->drawAll();\r
+               guienv->drawAll();\r
+               driver->endScene();\r
+       }\r
+\r
+       if (core::stringw(L"a") != editbox->getText()) {\r
+               device->getLogger()->log("EditBox text mismatch", ELL_INFORMATION);\r
+               return 1;\r
+       }\r
+\r
+       device->getLogger()->log("Done.", ELL_INFORMATION);\r
+       device->drop();\r
+       return 0;\r
+}\r
index e35f38cfd2ab8420d0fddc379058dcd4ed3071cc..aca268b4c46224ae8742bc6b8287cc7d2159714a 100644 (file)
@@ -32,6 +32,9 @@ set(IRREXAMPLES
 if(WIN32)
        list(APPEND IRREXAMPLES 14.Win32Window)
 endif()
+if(UNIX)
+       list(APPEND IRREXAMPLES AutomatedTest)
+endif()
 
 foreach(exname IN ITEMS ${IRREXAMPLES})
        file(GLOB sources "${CMAKE_CURRENT_SOURCE_DIR}/${exname}/*.cpp")