This is an automated email from the ASF dual-hosted git repository. swebb2066 pushed a commit to branch improve_charset_tests in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
commit 3fb84fe7a23e8427b7313917c51af0a396c3e6fd Author: Stephen Webb <[email protected]> AuthorDate: Sun Nov 19 15:11:41 2023 +1100 Warn rather than fail when the locale 'en_US.UTF-8' is not available --- src/test/cpp/helpers/charsetdecodertestcase.cpp | 32 +++++++++++------ src/test/cpp/helpers/charsetencodertestcase.cpp | 46 ++++++++++++++++--------- 2 files changed, 51 insertions(+), 27 deletions(-) diff --git a/src/test/cpp/helpers/charsetdecodertestcase.cpp b/src/test/cpp/helpers/charsetdecodertestcase.cpp index ba7539db..f894e850 100644 --- a/src/test/cpp/helpers/charsetdecodertestcase.cpp +++ b/src/test/cpp/helpers/charsetdecodertestcase.cpp @@ -20,6 +20,7 @@ #include "../logunit.h" #include "../insertwide.h" #include <log4cxx/helpers/bytebuffer.h> +#include <log4cxx/helpers/loglog.h> using namespace log4cxx; using namespace log4cxx::helpers; @@ -122,16 +123,27 @@ public: const logchar* greet = utf8_greet; #endif - std::locale::global(std::locale("en_US.UTF-8")); - auto dec = CharsetDecoder::getDecoder(LOG4CXX_STR("locale")); - - ByteBuffer in(utf8_greet, sizeof (utf8_greet)); - LogString out; - log4cxx_status_t stat = dec->decode(in, out); - LOGUNIT_ASSERT_EQUAL(false, CharsetDecoder::isError(stat)); - stat = dec->decode(in, out); - LOGUNIT_ASSERT_EQUAL(false, CharsetDecoder::isError(stat)); - LOGUNIT_ASSERT(out == greet); + try + { + std::locale::global(std::locale("en_US.UTF-8")); + auto dec = CharsetDecoder::getDecoder(LOG4CXX_STR("locale")); + + ByteBuffer in(utf8_greet, sizeof (utf8_greet)); + LogString out; + log4cxx_status_t stat = dec->decode(in, out); + LOGUNIT_ASSERT_EQUAL(false, CharsetDecoder::isError(stat)); + stat = dec->decode(in, out); + LOGUNIT_ASSERT_EQUAL(false, CharsetDecoder::isError(stat)); + LOGUNIT_ASSERT(out == greet); + } + catch (std::runtime_error& ex) + { + LogString msg; + Transcoder::decode(ex.what(), msg); + msg.append(LOG4CXX_STR(": ")); + msg.append(LOG4CXX_STR("en_US.UTF-8")); + LogLog::warn(msg); + } } diff --git a/src/test/cpp/helpers/charsetencodertestcase.cpp b/src/test/cpp/helpers/charsetencodertestcase.cpp index b44a6e4c..2d6620f9 100644 --- a/src/test/cpp/helpers/charsetencodertestcase.cpp +++ b/src/test/cpp/helpers/charsetencodertestcase.cpp @@ -19,6 +19,7 @@ #include "../logunit.h" #include "../insertwide.h" #include <log4cxx/helpers/bytebuffer.h> +#include <log4cxx/helpers/loglog.h> #include <apr.h> #include <apr_atomic.h> #include <condition_variable> @@ -200,28 +201,39 @@ public: #endif LogString greeting(greet); - std::locale::global(std::locale("en_US.UTF-8")); - auto enc = CharsetEncoder::getEncoder(LOG4CXX_STR("locale")); + try + { + std::locale::global(std::locale("en_US.UTF-8")); + auto enc = CharsetEncoder::getEncoder(LOG4CXX_STR("locale")); - char buf[BUFSIZE]; - ByteBuffer out(buf, BUFSIZE); - LogString::const_iterator iter = greeting.begin(); - log4cxx_status_t stat = enc->encode(greeting, iter, out); - LOGUNIT_ASSERT_EQUAL(false, CharsetEncoder::isError(stat)); - stat = enc->encode(greeting, iter, out); - LOGUNIT_ASSERT_EQUAL(false, CharsetEncoder::isError(stat)); + char buf[BUFSIZE]; + ByteBuffer out(buf, BUFSIZE); + LogString::const_iterator iter = greeting.begin(); + log4cxx_status_t stat = enc->encode(greeting, iter, out); + LOGUNIT_ASSERT_EQUAL(false, CharsetEncoder::isError(stat)); + stat = enc->encode(greeting, iter, out); + LOGUNIT_ASSERT_EQUAL(false, CharsetEncoder::isError(stat)); - out.flip(); - LOGUNIT_ASSERT_EQUAL((size_t) 13, out.limit()); + out.flip(); + LOGUNIT_ASSERT_EQUAL((size_t) 13, out.limit()); - for (size_t i = 0; i < out.limit(); i++) + for (size_t i = 0; i < out.limit(); i++) + { + unsigned expected = (unsigned)utf8_greet[i]; + unsigned actual = (unsigned)out.data()[i]; + LOGUNIT_ASSERT_EQUAL(expected, actual); + } + + LOGUNIT_ASSERT(iter == greeting.end()); + } + catch (std::runtime_error& ex) { - unsigned expected = (unsigned)utf8_greet[i]; - unsigned actual = (unsigned)out.data()[i]; - LOGUNIT_ASSERT_EQUAL(expected, actual); + LogString msg; + Transcoder::decode(ex.what(), msg); + msg.append(LOG4CXX_STR(": ")); + msg.append(LOG4CXX_STR("en_US.UTF-8")); + LogLog::warn(msg); } - - LOGUNIT_ASSERT(iter == greeting.end()); } #if APR_HAS_THREADS
