Merge pull request #2137 from Exiv2/mainRecoverRecordId

Recover IptDataSets::recordId in the API
This commit is contained in:
Luis Díaz Más 2022-03-10 17:35:59 +01:00 committed by GitHub
commit 5c36c690f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 16 deletions

View File

@ -381,21 +381,6 @@ namespace Exiv2 {
false, false, 0, 0, Exiv2::unsignedShort, IptcDataSets::application2, ""},
};
uint16_t recordId(const std::string& recordName)
{
uint16_t i;
for (i = IptcDataSets::application2; i > 0; --i) {
if (recordInfo_[i].name_ == recordName)
break;
}
if (i == 0) {
if (!isHex(recordName, 4, "0x"))
throw Error(kerInvalidRecord, recordName);
std::istringstream is(recordName);
is >> std::hex >> i;
}
return i;
}
constexpr DataSet unknownDataSet{
0xffff, "Unknown dataset", N_("Unknown dataset"), N_("Unknown dataset"), false, true, 0,
@ -533,6 +518,21 @@ namespace Exiv2 {
return recordInfo_[recordId].desc_;
}
uint16_t IptcDataSets::recordId(const std::string& recordName)
{
uint16_t i;
for (i = IptcDataSets::application2; i > 0; --i) {
if (recordInfo_[i].name_ == recordName)
break;
}
if (i == 0) {
if (!isHex(recordName, 4, "0x"))
throw Error(kerInvalidRecord, recordName);
std::istringstream is(recordName);
is >> std::hex >> i;
}
return i;
}
void IptcDataSets::dataSetList(std::ostream& os)
{
@ -629,7 +629,7 @@ namespace Exiv2 {
std::string dataSetName = key_.substr(posDot2+1);
// Use the parts of the key to find dataSet and recordId
uint16_t recId = recordId(recordName);
uint16_t recId = IptcDataSets::recordId(recordName);
uint16_t dataSet = IptcDataSets::dataSet(dataSetName, recId);
// Possibly translate hex name parts (0xabcd) to real names

View File

@ -210,6 +210,21 @@ TEST(IptcDataSets, recordDesc_)
ASSERT_STREQ("Unknown dataset", IptcDataSets::recordDesc(3));
}
// ----------------------
TEST(IptcDataSets, recordId_returnsExpectedIdWithValidRecordName)
{
ASSERT_EQ(IptcDataSets::envelope, IptcDataSets::recordId("Envelope"));
ASSERT_EQ(IptcDataSets::application2, IptcDataSets::recordId("Application2"));
}
TEST(IptcDataSets, recordId_throwsExceptionWithInvalidRecordName)
{
ASSERT_THROW(IptcDataSets::recordId("NonExistingName"), Exiv2::Error);
ASSERT_THROW(IptcDataSets::recordId(""), Exiv2::Error);
}
// ----------------------
TEST(IptcDataSets, dataSetLists_printDatasetsIntoOstream)