Home | History | Annotate | Download | only in conversions.string
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // <locale>
     11 
     12 // wstring_convert<Codecvt, Elem, Wide_alloc, Byte_alloc>
     13 
     14 // wstring_convert(const byte_string& byte_err,
     15 //                 const wide_string& wide_err = wide_string());
     16 
     17 #include <locale>
     18 #include <codecvt>
     19 #include <cassert>
     20 
     21 #include "test_macros.h"
     22 
     23 int main()
     24 {
     25     typedef std::codecvt_utf8<wchar_t> Codecvt;
     26     typedef std::wstring_convert<Codecvt> Myconv;
     27 #if TEST_STD_VER > 11
     28     static_assert(!std::is_convertible<std::string, Myconv>::value, "");
     29     static_assert( std::is_constructible<Myconv, std::string>::value, "");
     30 #endif
     31 #ifndef TEST_HAS_NO_EXCEPTIONS
     32     {
     33         Myconv myconv;
     34         try
     35         {
     36             TEST_IGNORE_NODISCARD myconv.to_bytes(L"\xDA83");
     37             assert(false);
     38         }
     39         catch (const std::range_error&)
     40         {
     41         }
     42         try
     43         {
     44             TEST_IGNORE_NODISCARD myconv.from_bytes('\xA5');
     45             assert(false);
     46         }
     47         catch (const std::range_error&)
     48         {
     49         }
     50     }
     51 #endif
     52     {
     53         Myconv myconv("byte error");
     54         std::string bs = myconv.to_bytes(L"\xDA83");
     55         assert(bs == "byte error");
     56 #ifndef TEST_HAS_NO_EXCEPTIONS
     57         try
     58         {
     59             TEST_IGNORE_NODISCARD myconv.from_bytes('\xA5');
     60             assert(false);
     61         }
     62         catch (const std::range_error&)
     63         {
     64         }
     65 #endif
     66     }
     67     {
     68         Myconv myconv("byte error", L"wide error");
     69         std::string bs = myconv.to_bytes(L"\xDA83");
     70         assert(bs == "byte error");
     71         std::wstring ws = myconv.from_bytes('\xA5');
     72         assert(ws == L"wide error");
     73     }
     74 }
     75