diff --git a/tests/bugfixes/github/test_issue_1481.py b/tests/bugfixes/github/test_issue_1481.py deleted file mode 100644 index fe941346..00000000 --- a/tests/bugfixes/github/test_issue_1481.py +++ /dev/null @@ -1,160 +0,0 @@ -# -*- coding: utf-8 -*- - -import system_tests - -@system_tests.CopyFiles("$data_path/exiv2-empty.jpg") -class CheckXmpLangAltValues(metaclass=system_tests.CaseMeta): - - url = "https://github.com/Exiv2/exiv2/issues/1481" - -# Python unittest is filtering out empty pairs of "" and flags up an error if -# a mismatched number of quotes is used inside the commands[] (see -# https://docs.python.org/3/library/shlex.html#parsing-rules). -# -# This means that some of the tests in the github issue cannot be run. - - langAltValue = [ - # 1. No language value - """lang= test1-1""", - """lang=\" test1-2""", - - # 2. Empty language value - """lang=\"\" test2""", - - # 3. Mismatched and/or incorrect positioning of quotation marks - """lang=\"\"test3-1""", - """lang=\"test3-2""", - """lang=\"en-UK test3-3""", - """lang=en-US\" test3-4""", - """lang=test3-5\"""", - """lang=test3-6\"\"""", - - # 4. Invalid characters in language part - """lang=en-UK- test4-1""", - """lang=en=UK test4-2""", - ] - - filename = system_tests.path("$data_path/exiv2-empty_copy.jpg") - - commands = [ - # 1. No language value - """$exiv2 -M"set Xmp.dc.title """ + langAltValue[0] + """" $filename""", -# """$exiv2 -M"set Xmp.dc.title """ + langAltValue[1] + """" $filename""", - """$exiv2 -px $filename""", - - # 2. Empty language value -# """$exiv2 -M"set Xmp.dc.title """ + langAltValue[2] + """" $filename""", -# """$exiv2 -px $filename""", - - # 3. Mismatched and/or incorrect positioning of quotation marks -# """$exiv2 -M"set Xmp.dc.title """ + langAltValue[3] + """" $filename""", -# """$exiv2 -M"set Xmp.dc.title """ + langAltValue[4] + """" $filename""", -# """$exiv2 -M"set Xmp.dc.title """ + langAltValue[5] + """" $filename""", -# """$exiv2 -M"set Xmp.dc.title """ + langAltValue[6] + """" $filename""", -# """$exiv2 -M"set Xmp.dc.title """ + langAltValue[7] + """" $filename""", -# """$exiv2 -M"set Xmp.dc.title """ + langAltValue[8] + """" $filename""", -# """$exiv2 -px $filename""", - - # 4. Invalid characters in language part - """$exiv2 -M"set Xmp.dc.title """ + langAltValue[9] + """" $filename""", - """$exiv2 -M"set Xmp.dc.title """ + langAltValue[10] + """" $filename""", - """$exiv2 -px $filename""" - ] - - stdout = [ - # 1. No language value - "", -# "", - "", - - # 2. Empty language value -# "", -# "", - - # 3. Mismatched and/or incorrect positioning of quotation marks -# "", -# "", -# "", -# "", -# "", -# "", -# "", - - # 4. Invalid characters in language part - "", - "", - "" - ] - - stderr = [ - # 1. No language value - """$exiv2_modify_exception_message $filename: -$kerInvalidLangAltValue `""" + langAltValue[0] + """' -""", -# """$exiv2_modify_exception_message $filename: -# $kerInvalidLangAltValue `""" + langAltValue[1] + """' -# """, - "", - - # 2. Empty language value -# """$exiv2_modify_exception_message $filename: -# $kerInvalidLangAltValue `""" + langAltValue[2] + """' -# """, -# "", - - # 3. Mismatched and/or incorrect positioning of quotation marks -# """$exiv2_modify_exception_message $filename: -# $kerInvalidLangAltValue `""" + langAltValue[3] + """' -# """, -# """$exiv2_modify_exception_message $filename: -# $kerInvalidLangAltValue `""" + langAltValue[4] + """' -# """, -# """$exiv2_modify_exception_message $filename: -# $kerInvalidLangAltValue `""" + langAltValue[5] + """' -# """, -# """$exiv2_modify_exception_message $filename: -# $kerInvalidLangAltValue `""" + langAltValue[6] + """' -# """, -# """$exiv2_modify_exception_message $filename: -# $kerInvalidLangAltValue `""" + langAltValue[7] + """' -# """, -# """$exiv2_modify_exception_message $filename: -# $kerInvalidLangAltValue `""" + langAltValue[8] + """' -# """, -# "", - - # 4. Invalid characters in language part - """$exiv2_modify_exception_message $filename: -$kerInvalidLangAltValue `""" + langAltValue[9] + """' -""", - """$exiv2_modify_exception_message $filename: -$kerInvalidLangAltValue `""" + langAltValue[10] + """' -""", - "" - ] - - retval = [ - # 1. No language value - 1, -# 1, - 0, - - # 2. Empty language value -# 1, -# 0, - - # 3. Mismatched and/or incorrect positioning of quotation marks -# 1, -# 1, -# 1, -# 1, -# 1, -# 1, -# 0, - - # 4. Invalid characters in language part - 1, - 1, - 0 - ] - diff --git a/tests/suite.conf b/tests/suite.conf index 4af1af1b..e5c48c21 100644 --- a/tests/suite.conf +++ b/tests/suite.conf @@ -42,10 +42,8 @@ kerInvalidTypeValue: invalid type in tiff structure kerNotAJpeg : This does not look like a JPEG image kerNoImageInInputData: Input data does not contain a valid image kerFileContainsUnknownImageType: The file contains data of an unknown image type -kerInvalidLangAltValue: Invalid LangAlt value addition_overflow_message: Overflow in addition exiv2_exception_message: Exiv2 exception in print action for file -exiv2_modify_exception_message: Exiv2 exception in modify action for file exiv2_overflow_exception_message: std::overflow_error exception in print action for file exception_in_extract: Exiv2 exception in extract action for file uncaught_exception: Uncaught exception: diff --git a/unitTests/CMakeLists.txt b/unitTests/CMakeLists.txt index 5c74100b..331c1278 100644 --- a/unitTests/CMakeLists.txt +++ b/unitTests/CMakeLists.txt @@ -33,6 +33,7 @@ add_executable(unit_tests test_slice.cpp test_tiffheader.cpp test_types.cpp + test_LangAltValueRead.cpp gtestwrapper.h ${unit_tests_exiv2lib_SOURCES} ) diff --git a/unitTests/test_LangAltValueRead.cpp b/unitTests/test_LangAltValueRead.cpp new file mode 100644 index 00000000..4ac8e2b7 --- /dev/null +++ b/unitTests/test_LangAltValueRead.cpp @@ -0,0 +1,199 @@ +#include + +#include "gtestwrapper.h" + +using namespace Exiv2; + +// The tests corrispond to those in issue https://github.com/Exiv2/exiv2/issues/1481 + + +// 1. No language value +TEST(LangAltValueReadTest, noLangugeValBeforeSpace) +{ + XmpParser::initialize(); + ::atexit(XmpParser::terminate); + + Exiv2::XmpData xmpData; + try { + xmpData["Xmp.dc.title"] = "lang= test1-1"; + } + catch (AnyError& e) { + ASSERT_EQ(e.code(),Exiv2::kerInvalidLangAltValue); + } + catch (...) { + ASSERT_TRUE(false); + } +} + +TEST(LangAltValueReadTest, quoteThenNoLangugeValBeforeSpace) +{ + XmpParser::initialize(); + ::atexit(XmpParser::terminate); + + Exiv2::XmpData xmpData; + try { + xmpData["Xmp.dc.title"] = "lang=\" test1-2"; + } + catch (AnyError& e) { + ASSERT_EQ(e.code(),Exiv2::kerInvalidLangAltValue); + } + catch (...) { + ASSERT_TRUE(false); + } +} + +// 2. Empty language value +TEST(LangAltValueReadTest, emptyDoubleQuotesLanguageValBeforeSpace) +{ + XmpParser::initialize(); + ::atexit(XmpParser::terminate); + + Exiv2::XmpData xmpData; + try { + xmpData["Xmp.dc.title"] = "lang=\"\" test2"; + } + catch (AnyError& e) { + ASSERT_EQ(e.code(),Exiv2::kerInvalidLangAltValue); + } + catch (...) { + ASSERT_TRUE(false); + } +} + +// 3. Mismatched and/or incorrect positioning of quotation marks +TEST(LangAltValueReadTest, emptyDoubleQuotesLanguageValNoSpace) +{ + XmpParser::initialize(); + ::atexit(XmpParser::terminate); + + Exiv2::XmpData xmpData; + try { + xmpData["Xmp.dc.title"] = "lang=\"\"test3-1"; + } + catch (AnyError& e) { + ASSERT_EQ(e.code(),Exiv2::kerInvalidLangAltValue); + } + catch (...) { + ASSERT_TRUE(false); + } +} + +TEST(LangAltValueReadTest, oneDoubleQuotesLanguageValNoSpace) +{ + XmpParser::initialize(); + ::atexit(XmpParser::terminate); + + Exiv2::XmpData xmpData; + try { + xmpData["Xmp.dc.title"] = "lang=\"test3-2"; + } + catch (AnyError& e) { + ASSERT_EQ(e.code(),Exiv2::kerInvalidLangAltValue); + } + catch (...) { + ASSERT_TRUE(false); + } +} + +TEST(LangAltValueReadTest, oneDoubleQuotesLanguageValBeforeSpace) +{ + XmpParser::initialize(); + ::atexit(XmpParser::terminate); + + Exiv2::XmpData xmpData; + try { + xmpData["Xmp.dc.title"] = "lang=\"en-UK test3-3"; + } + catch (AnyError& e) { + ASSERT_EQ(e.code(),Exiv2::kerInvalidLangAltValue); + } + catch (...) { + ASSERT_TRUE(false); + } +} + +TEST(LangAltValueReadTest, languageValOneDoubleQuotesBeforeSpace) +{ + XmpParser::initialize(); + ::atexit(XmpParser::terminate); + + Exiv2::XmpData xmpData; + try { + xmpData["Xmp.dc.title"] = "lang=en-US\" test3-4"; + } + catch (AnyError& e) { + ASSERT_EQ(e.code(),Exiv2::kerInvalidLangAltValue); + } + catch (...) { + ASSERT_TRUE(false); + } +} + +TEST(LangAltValueReadTest, languageValOneDoubleQuotesNoSpace) +{ + XmpParser::initialize(); + ::atexit(XmpParser::terminate); + + Exiv2::XmpData xmpData; + try { + xmpData["Xmp.dc.title"] = "lang=test3-5\""; + } + catch (AnyError& e) { + ASSERT_EQ(e.code(),Exiv2::kerInvalidLangAltValue); + } + catch (...) { + ASSERT_TRUE(false); + } +} + +TEST(LangAltValueReadTest, languageValTwoDoubleQuotesNoSpace) +{ + XmpParser::initialize(); + ::atexit(XmpParser::terminate); + + Exiv2::XmpData xmpData; + try { + xmpData["Xmp.dc.title"] = "lang=test3-6\"\""; + } + catch (AnyError& e) { + ASSERT_EQ(e.code(),Exiv2::kerInvalidLangAltValue); + } + catch (...) { + ASSERT_TRUE(false); + } +} + +// 4. Invalid characters in language part +TEST(LangAltValueReadTest, languageValExtraHyphenBeforeSpace) +{ + XmpParser::initialize(); + ::atexit(XmpParser::terminate); + + Exiv2::XmpData xmpData; + try { + xmpData["Xmp.dc.title"] = "lang=en-UK- test4-1"; + } + catch (AnyError& e) { + ASSERT_EQ(e.code(),Exiv2::kerInvalidLangAltValue); + } + catch (...) { + ASSERT_TRUE(false); + } +} + +TEST(LangAltValueReadTest, languageValWithInvalidCharBeforeSpace) +{ + XmpParser::initialize(); + ::atexit(XmpParser::terminate); + + Exiv2::XmpData xmpData; + try { + xmpData["Xmp.dc.title"] = "lang=en=UK test4-2"; + } + catch (AnyError& e) { + ASSERT_EQ(e.code(),Exiv2::kerInvalidLangAltValue); + } + catch (...) { + ASSERT_TRUE(false); + } +}