trying ideas about testability

This commit is contained in:
rusefi 2019-01-17 00:24:41 -05:00
parent 37ba1d53b2
commit 22b4a07927
4 changed files with 66 additions and 2 deletions

View File

@ -32,7 +32,7 @@ endif
# C++ specific options here (added to USE_OPT).
ifeq ($(USE_CPPOPT),)
USE_CPPOPT = -std=c++17 -fno-rtti -fpermissive -fno-exceptions -fno-use-cxa-atexit
USE_CPPOPT = -std=c++17 -fno-rtti -fpermissive -fexceptions -fno-use-cxa-atexit
endif
# Enable this if you want the linker to remove unused code and data

View File

@ -50,7 +50,7 @@ GTEST_API_ int main(int argc, char **argv) {
// printTriggerDebug = true;
// resizeMap();
printf("Success 20190103\r\n");
printf("Success 20190117\r\n");
printAllTriggers();
// printConvertedTable();
testing::InitGoogleTest(&argc, argv);

View File

@ -7,6 +7,7 @@ TEST_SRC_CPP = unit_test_framework.cpp \
test_basic_math/test_efilib.cpp \
tests/test_util.cpp \
tests/test_ion.cpp \
tests/test_on_demand_parameters.cpp \
tests/test_hip9011.cpp \
tests/test_cj125.cpp \
tests/test_cam_vtt_input.cpp \

View File

@ -0,0 +1,63 @@
/*
* @file test_on_demand_parameters.cpp
*
* Created on: Jan 16, 2019
* @author Andrey Belomutskiy, (c) 2012-2018
*/
#include <unordered_map>
#include "unit_test_framework.h"
using namespace std;
class TestParameters {
public:
unordered_map<string, float> values;
TestParameters* put(string key, float value);
float get(string key) const;
};
TestParameters* TestParameters::put(string key, float value) {
values[key] = value;
return this;
}
float TestParameters::get(string key) const {
// WAT? 'contains' method only defined in C++20?!
std::unordered_map<std::string, float>::const_iterator got = values.find (key);
if (got == values.end())
throw "No value for this key: " + key;
return values[key];
}
#undef METHOD_SIGNATURE
#define METHOD_SIGNATURE TestParameters *parameterValues
#define GET_VALUE(x) parameterValues->get(#x)
static float methodWeWantToTestWhichUsesKey1AndKey2(METHOD_SIGNATURE) {
return GET_VALUE(key1) + GET_VALUE(key2);
}
static float methodWeWantToTestWhichUsesKey3(METHOD_SIGNATURE) {
return GET_VALUE(key3);
}
TEST(util, readValues) {
TestParameters* v = (new TestParameters())->put("key2", 20)->put("key1", 10);
ASSERT_FLOAT_EQ(30, methodWeWantToTestWhichUsesKey1AndKey2(v));
}
TEST(util, checkForMissingParameterHandling) {
TestParameters* v = (new TestParameters())->put("key2", 2);
try {
methodWeWantToTestWhichUsesKey3(v);
FAIL() << "Expected 'missing key3' exception";
} catch(string message) {
// exception about missing value is expected
ASSERT_TRUE(message.find("No value for this key") >= 0);
ASSERT_TRUE(message.find("key3") >= 0);
}
}