// Copyright (C) 2008-2012 Colin MacDonald and Christian Stehno // No rights reserved: this software is in the public domain. // This is the entry point for the Irrlicht test suite. // This is an MSVC pragma to link against the Irrlicht library. // Other builds must link against it in the project files. #if defined(_MSC_VER) #pragma comment(lib, "Irrlicht.lib") #define _CRT_SECURE_NO_WARNINGS 1 #endif // _MSC_VER #include "testUtils.h" #include #include #include struct STestDefinition { //! The test entry point function bool(*testSignature)(void); //! A descriptive name for the test const char * testName; }; //! This is the main entry point for the Irrlicht test suite. /** \return The number of test that failed, i.e. 0 is success. */ int main(int argumentCount, char * arguments[]) { if(argumentCount > 3) { logTestString("\nUsage: %s [testNumber] [testCount]\n"); return 9999; } #define TEST(x)\ {\ extern bool x(void);\ STestDefinition newTest;\ newTest.testSignature = x;\ newTest.testName = #x;\ tests.push_back(newTest);\ } // Use an STL vector so that we don't rely on Irrlicht. std::vector tests; #if 0 // To interactively debug a test, move it (temporarily) in here and enable the define to only run this test // Otherwise debugging is slightly tricky as each test runs in it's own process. TEST(ioScene); #else TEST(disambiguateTextures); // Normally you should run this first, since it validates the working directory. // Now the simple tests without device TEST(testIrrArray); TEST(testIrrMap); TEST(testIrrList); TEST(exports); TEST(irrCoreEquals); TEST(testIrrString); TEST(testLine2d); TEST(matrixOps); TEST(testDimension2d); TEST(testVector2d); TEST(testVector3d); TEST(testQuaternion); TEST(testS3DVertex); TEST(testaabbox3d); TEST(color); TEST(testTriangle3d); TEST(vectorPositionDimension2d); // file system checks (with null driver) TEST(filesystem); TEST(archiveReader); TEST(testXML); TEST(serializeAttributes); // null driver TEST(fast_atof); TEST(loadTextures); TEST(collisionResponseAnimator); TEST(enumerateImageManipulators); TEST(removeCustomAnimator); TEST(sceneCollisionManager); TEST(sceneNodeAnimator); TEST(meshLoaders); TEST(testTimer); TEST(testCoreutil); // software drivers only TEST(softwareDevice); TEST(b3dAnimation); TEST(burningsVideo); TEST(billboards); TEST(createImage); TEST(cursorSetVisible); TEST(flyCircleAnimator); TEST(guiDisabledMenu); TEST(makeColorKeyTexture); TEST(md2Animation); TEST(meshTransform); TEST(skinnedMesh); TEST(testGeometryCreator); TEST(writeImageToFile); TEST(ioScene); // all driver checks TEST(videoDriver); TEST(screenshot); TEST(drawPixel); TEST(drawRectOutline); TEST(drawVertexPrimitive); TEST(material); TEST(renderTargetTexture); TEST(textureFeatures); TEST(textureRenderStates); TEST(transparentMaterials); TEST(userclipplane); TEST(antiAliasing); TEST(draw2DImage); TEST(lights); TEST(twodmaterial); TEST(viewPort); TEST(mrt); TEST(projectionMatrix); // large scenes/long rendering TEST(orthoCam); TEST(stencilShadow); // q3 maps are slow TEST(planeMatrix); TEST(terrainSceneNode); TEST(lightMaps); TEST(triangleSelector); TEST(line2DTest); #endif unsigned int numberOfTests = tests.size(); unsigned int testToRun = 0; unsigned int fails = 0; bool firstRun=true; const bool spawn=false; // args: [testNumber] [testCount] if(argumentCount > 1) { if (!strcmp(arguments[1],"--list")) { for (unsigned int i=0; i=0); testToRun=abs(tmp); if (!firstRun) testToRun -= 1; if(argumentCount > 2) { numberOfTests = testToRun + abs(atoi(arguments[2])); if (numberOfTests>=tests.size()) numberOfTests=tests.size(); } } if(testToRun >= numberOfTests) { logTestString("\nError: invalid test %d (maximum %d)\n", testToRun, numberOfTests-testToRun); return 9999; } const unsigned int testCount = numberOfTests-testToRun; const bool logFileOpened = openTestLog(firstRun); assert(logFileOpened); if (firstRun) { if (numberOfTests) { for (unsigned int i=testToRun; i