123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- //
- // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
- //
- // Distributed under the Boost Software License, Version 1.0. (See
- // accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- //
- #include <iostream>
- #include <iomanip>
- #include <stdlib.h>
- #include <locale.h>
- #include <locale>
- #include <time.h>
- #include <stdexcept>
- #include <boost/locale.hpp>
- #ifdef BOOST_LOCALE_WITH_ICU
- #include <unicode/uversion.h>
- #endif
- #include "test_locale_tools.hpp"
- char const *env(char const *s)
- {
- char const *r=getenv(s);
- if(r)
- return r;
- return "";
- }
- void check_locale(char const **names)
- {
- std::cout << " " << std::setw(32) << "locale" << std::setw(4) << "C" << std::setw(4) << "C++" << std::endl;
- while(*names) {
- char const *name = *names;
- std::cout << " " << std::setw(32) << name << std::setw(4);
- if(setlocale(LC_ALL,name)!=0)
- std::cout << "Yes";
- else
- std::cout << "No";
- std::cout << std::setw(4);
- try {
- std::locale l(name);
- std::cout << "Yes";
- }
- catch(std::exception const &) {
- std::cout << "No";
- }
- std::cout << std::endl;
- names++;
- }
- }
- int main()
- {
- std::cout << "- Backends: ";
- #ifdef BOOST_LOCALE_WITH_ICU
- std::cout << "icu:" << U_ICU_VERSION << " ";
- #endif
- #ifndef BOOST_LOCALE_NO_STD_BACKEND
- std::cout << "std ";
- #endif
- #ifndef BOOST_LOCALE_NO_POSIX_BACKEND
- std::cout << "posix ";
- #endif
- #ifndef BOOST_LOCALE_NO_WINAPI_BACKEND
- std::cout << "winapi";
- #endif
- std::cout << std::endl;
- #ifdef BOOST_LOCALE_WITH_ICONV
- std::cout << "- With iconv" << std::endl;
- #else
- std::cout << "- Without iconv" << std::endl;
- #endif
- std::cout << "- Environment " << std::endl;
- std::cout << " LANG="<< env("LANG") << std::endl;
- std::cout << " LC_ALL="<< env("LC_ALL") << std::endl;
- std::cout << " LC_CTYPE="<< env("LC_CTYPE") << std::endl;
- std::cout << " TZ="<< env("TZ") << std::endl;
- char const *clocale=setlocale(LC_ALL,"");
- if(!clocale)
- clocale= "undetected";
- std::cout <<"- C locale: " << clocale << std::endl;
- try {
- std::locale loc("");
- std::cout << "- C++ locale: " << loc.name() << std::endl;
- }
- catch(std::exception const &) {
- std::cout << "- C++ locale: is not supported" << std::endl;
- }
- char const *locales_to_check[] = {
- "en_US.UTF-8", "en_US.ISO8859-1", "English_United States.1252",
- "he_IL.UTF-8", "he_IL.ISO8859-8", "Hebrew_Israel.1255",
- "ru_RU.UTF-8", "Russian_Russia.1251",
- "tr_TR.UTF-8", "Turkish_Turkey.1254",
- "ja_JP.UTF-8", "ja_JP.SJIS", "Japanese_Japan.932",
- 0
- };
- std::cout << "- Testing locales availability on the operation system:" << std::endl;
- check_locale(locales_to_check);
- std::cout << "--- Testing Japanese_Japan.932 is working: " << test_std_supports_SJIS_codecvt("Japanese_Japan.932") << std::endl;
- std::cout << "- Testing timezone and time " << std::endl;
- {
- setlocale(LC_ALL,"C");
- time_t now = time(0);
- char buf[1024];
- strftime(buf,sizeof(buf),"%%c=%c; %%Z=%Z; %%z=%z",localtime(&now));
- std::cout << " Local Time :" << buf << std::endl;
- strftime(buf,sizeof(buf),"%%c=%c; %%Z=%Z; %%z=%z",gmtime(&now));
- std::cout << " Universal Time:" << buf << std::endl;
- }
- std::cout << "- Boost.Locale's locale: ";
- try {
- boost::locale::generator gen;
- std::locale l = gen("");
- std::cout << std::use_facet<boost::locale::info>(l).name() << std::endl;
- }
- catch(std::exception const &) {
- std::cout << " undetected" << std::endl;
- return EXIT_FAILURE;
- }
- return EXIT_SUCCESS;
- }
- // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
- // boostinspect:noascii
|