operator<< handles keys starting with underscore

This commit is contained in:
Philipp Hasper 2016-04-11 09:55:33 +02:00
parent 06ea0aa02b
commit 47c4ee974a
2 changed files with 12 additions and 1 deletions

View File

@ -5217,7 +5217,7 @@ FileStorage& operator << (FileStorage& fs, const String& str)
}
else if( fs.state == NAME_EXPECTED + INSIDE_MAP )
{
if( !cv_isalpha(*_str) )
if (!cv_isalpha(*_str) && *_str != '_')
CV_Error_( CV_StsError, ("Incorrect element name %s", _str) );
fs.elname = str;
fs.state = VALUE_EXPECTED + INSIDE_MAP;

View File

@ -566,3 +566,14 @@ TEST(Core_InputOutput, FileStorage)
sprintf(arr, "sprintf is hell %d", 666);
EXPECT_NO_THROW(f << arr);
}
TEST(Core_InputOutput, FileStorageKey)
{
cv::FileStorage f("dummy.yml", cv::FileStorage::WRITE | cv::FileStorage::MEMORY);
EXPECT_NO_THROW(f << "key1" << "value1");
EXPECT_NO_THROW(f << "_key2" << "value2");
EXPECT_NO_THROW(f << "key_3" << "value3");
const std::string expected = "%YAML:1.0\nkey1: value1\n_key2: value2\nkey_3: value3\n";
ASSERT_STREQ(f.releaseAndGetString().c_str(), expected.c_str());
}