| 1 | /*============================================================================= |
| 2 | Copyright (c) 2018-2023 Nikita Kniazev |
| 3 | |
| 4 | Distributed under the Boost Software License, Version 1.0. (See accompanying |
| 5 | file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| 6 | =============================================================================*/ |
| 7 | #include <boost/spirit/home/support/utf8.hpp> |
| 8 | #include <boost/core/lightweight_test.hpp> |
| 9 | #include <boost/config.hpp> |
| 10 | #include <string> |
| 11 | |
| 12 | #if defined(_MSC_VER) && _MSC_VER < 1700 |
| 13 | # pragma warning(disable: 4428) // universal-character-name encountered in source |
| 14 | #endif |
| 15 | |
| 16 | static bool nowarn_constexpr(bool x) { return x; } |
| 17 | |
| 18 | int main() |
| 19 | { |
| 20 | using boost::spirit::to_utf8; |
| 21 | |
| 22 | BOOST_TEST_CSTR_EQ("\xED\x9F\xBF" , to_utf8(0xD7FFul).c_str()); |
| 23 | BOOST_TEST_CSTR_EQ("\xEE\x80\x80" , to_utf8(0xE000ul).c_str()); |
| 24 | |
| 25 | if (nowarn_constexpr(x: sizeof(L"\u00FF" ) == 2)) |
| 26 | BOOST_TEST_CSTR_EQ("\xC3\xBF" , to_utf8(L"\u00FF" [0]).c_str()); |
| 27 | if (nowarn_constexpr(x: sizeof(L"\uFFE1" ) == 2)) |
| 28 | BOOST_TEST_CSTR_EQ("\xEF\xBF\xA1" , to_utf8(L"\uFFE1" [0]).c_str()); |
| 29 | if (nowarn_constexpr(x: sizeof(L"\U0001F9D0" ) == 2)) |
| 30 | BOOST_TEST_CSTR_EQ("\xF0\x9F\xA7\x90" , to_utf8(L"\U0001F9D0" [0]).c_str()); |
| 31 | BOOST_TEST_CSTR_EQ("\xF0\x9F\xA7\x90\xF0\x9F\xA7\xA0" , to_utf8(L"\U0001F9D0\U0001F9E0" ).c_str()); |
| 32 | BOOST_TEST_CSTR_EQ("\xF0\x9F\xA7\x90\xF0\x9F\xA7\xA0" , to_utf8(std::wstring(L"\U0001F9D0\U0001F9E0" )).c_str()); |
| 33 | |
| 34 | #ifndef BOOST_NO_CXX11_UNICODE_LITERALS |
| 35 | BOOST_TEST_CSTR_EQ("\xC3\xBF" , to_utf8(U'\u00FF').c_str()); |
| 36 | BOOST_TEST_CSTR_EQ("\xEF\xBF\xA1" , to_utf8(U'\uFFE1').c_str()); |
| 37 | BOOST_TEST_CSTR_EQ("\xF0\x9F\xA7\x90" , to_utf8(U'\U0001F9D0').c_str()); |
| 38 | BOOST_TEST_CSTR_EQ("\xF0\x9F\xA7\x90\xF0\x9F\xA7\xA0" , to_utf8(U"\U0001F9D0\U0001F9E0" ).c_str()); |
| 39 | BOOST_TEST_CSTR_EQ("\xF0\x9F\xA7\x90\xF0\x9F\xA7\xA0" , to_utf8(std::u32string(U"\U0001F9D0\U0001F9E0" )).c_str()); |
| 40 | #endif |
| 41 | |
| 42 | return boost::report_errors(); |
| 43 | } |
| 44 | |