diff --git a/src/karts/combined_characteristic.cpp b/src/karts/combined_characteristic.cpp
index ea6ff77a8..d9ee89de5 100644
--- a/src/karts/combined_characteristic.cpp
+++ b/src/karts/combined_characteristic.cpp
@@ -18,10 +18,13 @@
#include "karts/combined_characteristic.hpp"
+#include "io/file_manager.hpp"
+#include "karts/xml_characteristic.hpp"
+
void CombinedCharacteristic::addCharacteristic(
const AbstractCharacteristic *characteristic)
{
- m_childs.push_back(characteristic);
+ m_children.push_back(characteristic);
} // addCharacteristic
// ----------------------------------------------------------------------------
@@ -29,7 +32,59 @@ void CombinedCharacteristic::addCharacteristic(
void CombinedCharacteristic::process(CharacteristicType type, Value value,
bool *is_set) const
{
- for (const AbstractCharacteristic *characteristic : m_childs)
+ for (const AbstractCharacteristic *characteristic : m_children)
characteristic->process(type, value, is_set);
} // process
+// ============================================================================
+
+void CombinedCharacteristic::unitTesting()
+{
+ // We need to use really existing xml attributes, all characteristics
+ // were designed to work with those names.
+ std::string s1=
+ ""
+ " "
+ " "
+ " "
+ " "
+ "";
+
+ XMLNode *xml1= file_manager->createXMLTreeFromString(s1);
+ XmlCharacteristic *c1 = new XmlCharacteristic(xml1);
+ delete xml1;
+
+ CombinedCharacteristic *cc = new CombinedCharacteristic();
+ cc->addCharacteristic(c1);
+
+ assert( cc->getSuspensionStiffness() == 4.5f );
+ assert( cc->getSuspensionRest() == -0.3f );
+ assert( cc->getSuspensionTravel() == 3.0f );
+ // Note: no operator precedence supported, so 1+2*3 = 9
+ assert( cc->getStabilityRollInfluence() == 9.0f );
+ assert( cc->getStabilityChassisLinearDamping() == 7.0f );
+
+ std::string s2=
+ ""
+ " "
+ " "
+ " "
+ " "
+ "";
+
+ XMLNode *xml2= file_manager->createXMLTreeFromString(s2);
+ XmlCharacteristic *c2 = new XmlCharacteristic(xml2);
+ delete xml2;
+
+ cc->addCharacteristic(c2);
+
+ assert( cc->getSuspensionStiffness() == 5.5f );
+ assert( cc->getSuspensionRest() == -1.3f );
+ assert( cc->getSuspensionTravel() == 6.0f );
+ // Note: no operator precedence supported, so (1+2*3) / 3 = 3
+ assert( cc->getStabilityRollInfluence() == 3.0f );
+ assert( cc->getStabilityChassisLinearDamping() == 7.0f );
+
+} // unitTesting
\ No newline at end of file
diff --git a/src/karts/combined_characteristic.hpp b/src/karts/combined_characteristic.hpp
index 72f89c33b..4d8a77d5b 100644
--- a/src/karts/combined_characteristic.hpp
+++ b/src/karts/combined_characteristic.hpp
@@ -24,9 +24,11 @@
class CombinedCharacteristic : public AbstractCharacteristic
{
private:
- std::vector m_childs;
+ std::vector m_children;
public:
+ static void unitTesting();
+
void addCharacteristic(const AbstractCharacteristic *characteristic);
virtual void process(CharacteristicType type, Value value, bool *is_set) const;
diff --git a/src/main.cpp b/src/main.cpp
index 03b10a884..4e81ea629 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -168,6 +168,7 @@
#include "items/attachment_manager.hpp"
#include "items/item_manager.hpp"
#include "items/projectile_manager.hpp"
+#include "karts/combined_characteristic.hpp"
#include "karts/controller/ai_base_lap_controller.hpp"
#include "karts/kart_properties.hpp"
#include "karts/kart_properties_manager.hpp"
@@ -1857,6 +1858,11 @@ void runUnitTests()
assert( isEasterMode(22, 3, 2016, 5));
assert(!isEasterMode(21, 3, 2016, 5));
UserConfigParams::m_easter_ear_mode = saved_easter_mode;
+
+
+ Log::info("UnitTest", " - Kart characteristics");
+ CombinedCharacteristic::unitTesting();
+
Log::info("UnitTest", "=====================");
Log::info("UnitTest", "Testing successful ");
Log::info("UnitTest", "=====================");