]> git.lizzy.rs Git - irrlicht.git/blob - examples/AutomatedTest/main.cpp
Add basic test application that runs under CI
[irrlicht.git] / examples / AutomatedTest / main.cpp
1 #include <irrlicht.h>\r
2 #include "exampleHelper.h"\r
3 \r
4 using namespace irr;\r
5 \r
6 static video::E_DRIVER_TYPE chooseDriver(const char *arg_)\r
7 {\r
8         if (core::stringc(arg_) == "null")\r
9                 return video::EDT_NULL;\r
10 \r
11         if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES1))\r
12                 return video::EDT_OGLES1;\r
13         if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES2))\r
14                 return video::EDT_OGLES2;\r
15         return video::EDT_OPENGL;\r
16 }\r
17 \r
18 int main(int argc, char *argv[])\r
19 {\r
20         SIrrlichtCreationParameters p;\r
21         p.DriverType = chooseDriver(argc > 1 ? argv[1] : "");\r
22         p.WindowSize = core::dimension2du(640, 480);\r
23         p.Vsync = true;\r
24         p.LoggingLevel = ELL_DEBUG;\r
25 \r
26         IrrlichtDevice *device = createDeviceEx(p);\r
27         if (!device)\r
28                 return 1;\r
29 \r
30         device->setWindowCaption(L"Hello World!");\r
31         device->setResizable(true);\r
32 \r
33         video::IVideoDriver* driver = device->getVideoDriver();\r
34         scene::ISceneManager* smgr = device->getSceneManager();\r
35         gui::IGUIEnvironment* guienv = device->getGUIEnvironment();\r
36 \r
37         guienv->addStaticText(L"sample text", core::rect<s32>(10,10,110,22), false);\r
38 \r
39         gui::IGUIButton* button = guienv->addButton(\r
40                 core::rect<s32>(10,30,110,30 + 32), 0, -1, L"sample button",\r
41                 L"sample tooltip");\r
42 \r
43         gui::IGUIEditBox* editbox = guienv->addEditBox(L"",\r
44                 core::rect<s32>(10,70,60,70 + 16));\r
45 \r
46         const io::path mediaPath = getExampleMediaPath();\r
47 \r
48         scene::IAnimatedMesh* mesh = smgr->getMesh(mediaPath + "sydney.md2");\r
49         if (!mesh)\r
50                 return 1;\r
51         scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);\r
52         if (node)\r
53         {\r
54                 node->setMaterialFlag(video::EMF_LIGHTING, false);\r
55                 node->setMD2Animation(scene::EMAT_STAND);\r
56                 node->setMaterialTexture(0, driver->getTexture(mediaPath + "sydney.bmp"));\r
57         }\r
58 \r
59         smgr->addCameraSceneNode(0, core::vector3df(0,30,-40), core::vector3df(0,5,0));\r
60 \r
61         s32 n = 0;\r
62         SEvent event;\r
63         device->getTimer()->start();\r
64 \r
65         while (device->run())\r
66         {\r
67                 if (device->getTimer()->getTime() >= 1300)\r
68                 {\r
69                         device->getTimer()->setTime(0);\r
70                         ++n;\r
71                         if (n == 1) // Tooltip display\r
72                         {\r
73                                 bzero(&event, sizeof(SEvent));\r
74                                 event.EventType = irr::EET_MOUSE_INPUT_EVENT;\r
75                                 event.MouseInput.Event = irr::EMIE_MOUSE_MOVED;\r
76                                 event.MouseInput.X = button->getAbsolutePosition().getCenter().X;\r
77                                 event.MouseInput.Y = button->getAbsolutePosition().getCenter().Y;\r
78                                 device->postEventFromUser(event);\r
79                         }\r
80                         else if (n == 2) // Text input focus\r
81                                 guienv->setFocus(editbox);\r
82                         else if (n == 3) // Keypress for Text input\r
83                         {\r
84                                 bzero(&event, sizeof(SEvent));\r
85                                 event.EventType = irr::EET_KEY_INPUT_EVENT;\r
86                                 event.KeyInput.Char = L'a';\r
87                                 event.KeyInput.Key = KEY_KEY_A;\r
88                                 event.KeyInput.PressedDown = true;\r
89                                 device->postEventFromUser(event);\r
90                                 event.KeyInput.PressedDown = false;\r
91                                 device->postEventFromUser(event);\r
92                         }\r
93                         else\r
94                                 device->closeDevice();\r
95                 }\r
96 \r
97                 driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH,\r
98                         video::SColor(255,100,100,150));\r
99                 smgr->drawAll();\r
100                 guienv->drawAll();\r
101                 driver->endScene();\r
102         }\r
103 \r
104         if (core::stringw(L"a") != editbox->getText()) {\r
105                 device->getLogger()->log("EditBox text mismatch", ELL_INFORMATION);\r
106                 return 1;\r
107         }\r
108 \r
109         device->getLogger()->log("Done.", ELL_INFORMATION);\r
110         device->drop();\r
111         return 0;\r
112 }\r