Update SettingsFileReader
Improve parsing to be less strict. Change-Id: I123a98bb8341b007c8fe6e7556ebaa113d1f076e Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
parent
949e4cba76
commit
29821b5a25
|
@ -155,3 +155,105 @@ TEST(SettingsFileReader, given64bitKeyValueWhenGetSettingThenValueIsCorrect) {
|
|||
|
||||
EXPECT_EQ(-18764712120594, returnedValue);
|
||||
}
|
||||
|
||||
TEST(SettingsFileReader, givenKeyValueWithoutSpacesWhenGetSettingThenValueIsCorrect) {
|
||||
auto reader = std::make_unique<TestSettingsFileReader>();
|
||||
ASSERT_NE(nullptr, reader);
|
||||
EXPECT_EQ(0u, reader->getStringSettingsCount());
|
||||
|
||||
std::stringstream inputLine("SomeKey=12");
|
||||
reader->parseStream(inputLine);
|
||||
|
||||
int64_t returnedValue = reader->getSetting("SomeKey", 0);
|
||||
EXPECT_EQ(1u, reader->getStringSettingsCount());
|
||||
EXPECT_EQ(12, returnedValue);
|
||||
}
|
||||
|
||||
TEST(SettingsFileReader, givenKeyValueWithAdditionalWhitespaceCharactersWhenGetSettingThenValueIsCorrect) {
|
||||
auto reader = std::make_unique<TestSettingsFileReader>();
|
||||
ASSERT_NE(nullptr, reader);
|
||||
EXPECT_EQ(0u, reader->getStringSettingsCount());
|
||||
|
||||
std::stringstream inputLine("\t \t SomeKey\t \t =\t \t 12\t \t ");
|
||||
reader->parseStream(inputLine);
|
||||
|
||||
int64_t returnedValue = reader->getSetting("SomeKey", 0);
|
||||
EXPECT_EQ(1u, reader->getStringSettingsCount());
|
||||
EXPECT_EQ(12, returnedValue);
|
||||
}
|
||||
|
||||
TEST(SettingsFileReader, givenKeyValueWithAdditionalCharactersWhenGetSettingThenValueIsIncorrect) {
|
||||
{
|
||||
auto reader = std::make_unique<TestSettingsFileReader>();
|
||||
ASSERT_NE(nullptr, reader);
|
||||
EXPECT_EQ(0u, reader->getStringSettingsCount());
|
||||
|
||||
std::stringstream inputLine("Some Key = 12");
|
||||
reader->parseStream(inputLine);
|
||||
|
||||
EXPECT_EQ(0u, reader->getStringSettingsCount());
|
||||
}
|
||||
{
|
||||
auto reader = std::make_unique<TestSettingsFileReader>();
|
||||
ASSERT_NE(nullptr, reader);
|
||||
EXPECT_EQ(0u, reader->getStringSettingsCount());
|
||||
|
||||
std::stringstream inputLine("SomeKey = 1 2");
|
||||
reader->parseStream(inputLine);
|
||||
|
||||
EXPECT_EQ(0u, reader->getStringSettingsCount());
|
||||
}
|
||||
}
|
||||
|
||||
TEST(SettingsFileReader, givenMultipleKeysWhenGetSettingThenInvalidKeysAreSkipped) {
|
||||
auto reader = std::make_unique<TestSettingsFileReader>();
|
||||
ASSERT_NE(nullptr, reader);
|
||||
EXPECT_EQ(0u, reader->getStringSettingsCount());
|
||||
|
||||
std::string testFile;
|
||||
testFile.append("InvalidKey1 = 1 2\n");
|
||||
testFile.append("ValidKey1 = 12\n");
|
||||
testFile.append("InvalidKey2 = - 1\n");
|
||||
testFile.append("ValidKey2 = 128\n");
|
||||
std::stringstream inputFile(testFile);
|
||||
reader->parseStream(inputFile);
|
||||
|
||||
EXPECT_EQ(2u, reader->getStringSettingsCount());
|
||||
EXPECT_EQ(0, reader->getSetting("InvalidKey1", 0));
|
||||
EXPECT_EQ(0, reader->getSetting("InvalidKey2", 0));
|
||||
EXPECT_EQ(12, reader->getSetting("ValidKey1", 0));
|
||||
EXPECT_EQ(128, reader->getSetting("ValidKey2", 0));
|
||||
}
|
||||
|
||||
TEST(SettingsFileReader, givenNoKeyOrNoValueWhenGetSettingThenExceptionIsNotThrown) {
|
||||
{
|
||||
auto reader = std::make_unique<TestSettingsFileReader>();
|
||||
ASSERT_NE(nullptr, reader);
|
||||
EXPECT_EQ(0u, reader->getStringSettingsCount());
|
||||
|
||||
std::stringstream inputLine("= 12");
|
||||
EXPECT_NO_THROW(reader->parseStream(inputLine));
|
||||
|
||||
EXPECT_EQ(0u, reader->getStringSettingsCount());
|
||||
}
|
||||
{
|
||||
auto reader = std::make_unique<TestSettingsFileReader>();
|
||||
ASSERT_NE(nullptr, reader);
|
||||
EXPECT_EQ(0u, reader->getStringSettingsCount());
|
||||
|
||||
std::stringstream inputLine("SomeKey =");
|
||||
EXPECT_NO_THROW(reader->parseStream(inputLine));
|
||||
|
||||
EXPECT_EQ(0u, reader->getStringSettingsCount());
|
||||
}
|
||||
{
|
||||
auto reader = std::make_unique<TestSettingsFileReader>();
|
||||
ASSERT_NE(nullptr, reader);
|
||||
EXPECT_EQ(0u, reader->getStringSettingsCount());
|
||||
|
||||
std::stringstream inputLine("=");
|
||||
EXPECT_NO_THROW(reader->parseStream(inputLine));
|
||||
|
||||
EXPECT_EQ(0u, reader->getStringSettingsCount());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,28 +60,39 @@ const char *SettingsFileReader::appSpecificLocation(const std::string &name) {
|
|||
}
|
||||
|
||||
void SettingsFileReader::parseStream(std::istream &inputStream) {
|
||||
std::stringstream ss;
|
||||
std::string key;
|
||||
std::string value;
|
||||
char temp = 0;
|
||||
std::string line;
|
||||
std::string tmp;
|
||||
|
||||
while (!inputStream.eof()) {
|
||||
std::string tempString;
|
||||
std::string tempStringValue;
|
||||
getline(inputStream, tempString);
|
||||
getline(inputStream, line);
|
||||
|
||||
ss << tempString;
|
||||
ss >> key;
|
||||
ss >> temp;
|
||||
ss >> value;
|
||||
|
||||
if (!ss.fail()) {
|
||||
settingStringMap.insert(std::pair<std::string, std::string>(key, value));
|
||||
auto equalsSignPosition = line.find('=');
|
||||
if (equalsSignPosition == std::string::npos) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ss.str(std::string()); // for reset string inside stringstream
|
||||
ss.clear();
|
||||
key.clear();
|
||||
{
|
||||
std::stringstream ss;
|
||||
auto linePartWithKey = line.substr(0, equalsSignPosition);
|
||||
ss << linePartWithKey;
|
||||
ss >> key;
|
||||
if (ss.fail() || (ss >> tmp)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
{
|
||||
std::stringstream ss;
|
||||
auto linePartWithValue = line.substr(equalsSignPosition + 1);
|
||||
ss << linePartWithValue;
|
||||
ss >> value;
|
||||
if (ss.fail() || (ss >> tmp)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
settingStringMap.insert(std::pair<std::string, std::string>(key, value));
|
||||
}
|
||||
}
|
||||
}; // namespace NEO
|
||||
|
|
Loading…
Reference in New Issue