Merge pull request #340 from DarkflameUniverse/feature/tests

Add basic CTest infrastructure
This commit is contained in:
Xiphoseer 2022-01-04 09:27:24 +01:00 committed by GitHub
commit a9c0cfd9c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 93 additions and 9 deletions

View File

@ -7,7 +7,7 @@ on:
branches: [ main ]
jobs:
build:
build-and-test:
runs-on: ubuntu-latest
@ -20,6 +20,7 @@ jobs:
with:
configurePreset: 'default'
buildPreset: 'default'
testPreset: 'default'
- name: artifacts
uses: actions/upload-artifact@v2
with:

View File

@ -1,5 +1,6 @@
cmake_minimum_required(VERSION 3.12)
project(Darkflame)
include(CTest)
# Read variables from file
FILE(READ "${CMAKE_SOURCE_DIR}/CMakeVariables.txt" variables)
@ -492,4 +493,8 @@ if(WIN32)
add_dependencies(MasterServer WorldServer)
add_dependencies(MasterServer AuthServer)
add_dependencies(MasterServer ChatServer)
endif()
endif()
# Finally, add the tests
add_subdirectory(tests)

View File

@ -36,5 +36,19 @@
"description": "Default Build",
"jobs": 2
}
],
"testPresets": [
{
"name": "default",
"configurePreset": "default",
"displayName": "Default Tests",
"description": "Runs all tests",
"execution": {
"jobs": 2
},
"output": {
"outputOnFailure": true
}
}
]
}

View File

@ -93,14 +93,9 @@ Vector3 NiPoint3::CrossProduct(const Vector3& vec) const {
//! Unitize the vector
NiPoint3 NiPoint3::Unitize(void) const {
NiPoint3 unitVec;
float length = this->Length();
unitVec.x = length != 0 ? this->x / length : 0;
unitVec.y = length != 0 ? this->y / length : 0;
unitVec.z = length != 0 ? this->z / length : 0;
return unitVec;
return length != 0 ? *this / length : NiPoint3::ZERO;
}

21
tests/CMakeLists.txt Normal file
View File

@ -0,0 +1,21 @@
# create the testing file and list of tests
create_test_sourcelist (Tests
CommonCxxTests.cpp
TestNiPoint3.cpp
TestLDFFormat.cpp
)
# add the executable
add_executable (CommonCxxTests ${Tests})
target_link_libraries(CommonCxxTests dCommon raknet)
# remove the test driver source file
set (TestsToRun ${Tests})
remove (TestsToRun CommonCxxTests.cpp)
# Add all the ADD_TEST for each test
foreach (test ${TestsToRun})
get_filename_component (TName ${test} NAME_WE)
add_test (NAME ${TName} COMMAND CommonCxxTests ${TName})
set_property(TEST ${TName} PROPERTY ENVIRONMENT CTEST_OUTPUT_ON_FAILURE=1)
endforeach ()

0
tests/CommonCxxTests.cpp Normal file
View File

4
tests/CommonCxxTests.h Normal file
View File

@ -0,0 +1,4 @@
#include <cstdio>
#define ASSERT_EQ(a,b) { if (!(a == b)) { printf("Failed assertion: " #a " == " #b " \n in %s:%d\n", __FILE__, __LINE__); return 1; }}
#define ASSERT_NE(a,b) { if (!(a != b)) { printf("Failed assertion: " #a " != " #b " \n in %s:%d\n", __FILE__, __LINE__); return 1; }}

31
tests/TestLDFFormat.cpp Normal file
View File

@ -0,0 +1,31 @@
#include "LDFFormat.h"
#include "CommonCxxTests.h"
/**
* @brief Test parsing an LDF value
*
* @param argc Number of command line arguments for this test
* @param argv Command line arguments
* @return 0 on success, non-zero on failure
*/
int TestLDFFormat(int argc, char** argv) {
// Create
auto* data = LDFBaseData::DataFromString("KEY=0:VALUE");
// Check that the data type is correct
ASSERT_EQ(data->GetValueType(), eLDFType::LDF_TYPE_UTF_16);
// Check that the key is correct
ASSERT_EQ(data->GetKey(), u"KEY");
// Check that the value is correct
ASSERT_EQ(((LDFData<std::u16string>* )data)->GetValue(), u"VALUE");
// Check that the serialization is correct
ASSERT_EQ(data->GetString(), "KEY=0:VALUE");
// Cleanup the object
delete data;
return 0;
}

13
tests/TestNiPoint3.cpp Normal file
View File

@ -0,0 +1,13 @@
#include <stdexcept>
#include "NiPoint3.h"
#include "CommonCxxTests.h"
int TestNiPoint3(int argc, char** argv) {
// Check that Unitize works
ASSERT_EQ(NiPoint3(3,0,0).Unitize(), NiPoint3::UNIT_X);
// Check what unitize does to a vector of length 0
ASSERT_EQ(NiPoint3::ZERO.Unitize(), NiPoint3::ZERO);
// If we get here, all was successful
return 0;
}