diff options
author | Max Kellermann <max@duempel.org> | 2014-12-01 20:55:05 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-12-01 20:55:05 +0100 |
commit | 4658bd8208613bad3c987ee5083e1b6c5481f037 (patch) | |
tree | 938d280afab3daa90f287d3beff38b053b5289cd | |
parent | 6eb1caa417187d0321b64fc17386d0cad3078614 (diff) | |
download | mpd-4658bd8208613bad3c987ee5083e1b6c5481f037.tar.gz mpd-4658bd8208613bad3c987ee5083e1b6c5481f037.tar.xz mpd-4658bd8208613bad3c987ee5083e1b6c5481f037.zip |
test/TestIcu: new unit test for lib/icu/*
-rw-r--r-- | Makefile.am | 13 | ||||
-rw-r--r-- | test/TestIcu.cxx | 82 |
2 files changed, 94 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am index 16cd80b9a..f126efeee 100644 --- a/Makefile.am +++ b/Makefile.am @@ -465,6 +465,7 @@ libicu_a_CPPFLAGS = $(AM_CPPFLAGS) \ $(ICU_CFLAGS) ICU_LDADD = libicu.a $(ICU_LIBS) +ICU_LDADD += $(GLIB_LIBS) # PCM library @@ -1484,7 +1485,8 @@ C_TESTS = \ test/test_mixramp \ test/test_pcm \ test/test_protocol \ - test/test_queue_priority + test/test_queue_priority \ + test/TestIcu if ENABLE_CURL C_TESTS += test/test_icy_parser @@ -2121,6 +2123,15 @@ test_test_queue_priority_LDADD = \ libutil.a \ $(CPPUNIT_LIBS) +test_TestIcu_SOURCES = \ + test/TestIcu.cxx +test_TestIcu_CPPFLAGS = $(AM_CPPFLAGS) $(CPPUNIT_CFLAGS) -DCPPUNIT_HAVE_RTTI=0 +test_TestIcu_CXXFLAGS = $(AM_CXXFLAGS) -Wno-error=deprecated-declarations +test_TestIcu_LDADD = \ + $(ICU_LDADD) \ + libutil.a \ + $(CPPUNIT_LIBS) + if ENABLE_DSD noinst_PROGRAMS += src/pcm/dsd2pcm/dsd2pcm diff --git a/test/TestIcu.cxx b/test/TestIcu.cxx new file mode 100644 index 000000000..9d525d698 --- /dev/null +++ b/test/TestIcu.cxx @@ -0,0 +1,82 @@ +/* + * Unit tests for src/util/ + */ + +#include "config.h" +#include "lib/icu/Converter.hxx" +#include "util/Error.hxx" + +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/TestFactoryRegistry.h> +#include <cppunit/ui/text/TestRunner.h> +#include <cppunit/extensions/HelperMacros.h> + +#include <string.h> +#include <stdlib.h> + +#ifdef HAVE_ICU_CONVERTER + +static const char *const invalid_utf8[] = { + "\xfc", +}; + +struct StringPair { + const char *utf8, *other; +}; + +static constexpr StringPair latin1_tests[] = { + { "foo", "foo" }, + { "\xc3\xbc", "\xfc" }, +}; + +class TestIcuConverter : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(TestIcuConverter); + CPPUNIT_TEST(TestInvalidCharset); + CPPUNIT_TEST(TestLatin1); + CPPUNIT_TEST_SUITE_END(); + +public: + void TestInvalidCharset() { + CPPUNIT_ASSERT_EQUAL((IcuConverter *)nullptr, + IcuConverter::Create("doesntexist", + IgnoreError())); + } + + void TestLatin1() { + IcuConverter *const converter = + IcuConverter::Create("iso-8859-1", IgnoreError()); + CPPUNIT_ASSERT(converter != nullptr); + + for (const auto i : invalid_utf8) { + auto f = converter->FromUTF8(i); + CPPUNIT_ASSERT_EQUAL(true, f.empty()); + } + + for (const auto i : latin1_tests) { + auto f = converter->FromUTF8(i.utf8); + CPPUNIT_ASSERT_EQUAL(true, f == i.other); + + auto t = converter->ToUTF8(i.other); + CPPUNIT_ASSERT_EQUAL(true, t == i.utf8); + } + + delete converter; + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(TestIcuConverter); + +#endif + +int +main(gcc_unused int argc, gcc_unused char **argv) +{ +#ifdef HAVE_ICU_CONVERTER + CppUnit::TextUi::TestRunner runner; + auto ®istry = CppUnit::TestFactoryRegistry::getRegistry(); + runner.addTest(registry.makeTest()); + return runner.run() ? EXIT_SUCCESS : EXIT_FAILURE; +#else + return EXIT_SUCCESS; +#endif +} |