test_generator.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. //
  2. // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
  3. //
  4. // Distributed under the Boost Software License, Version 1.0. (See
  5. // accompanying file LICENSE_1_0.txt or copy at
  6. // http://www.boost.org/LICENSE_1_0.txt)
  7. //
  8. #include <boost/locale/generator.hpp>
  9. #include <boost/locale/info.hpp>
  10. #include <boost/locale/message.hpp>
  11. #include <iomanip>
  12. #include "test_locale.hpp"
  13. bool has_message(std::locale const &l)
  14. {
  15. return std::has_facet<boost::locale::message_format<char> >(l);
  16. }
  17. struct test_facet : public std::locale::facet {
  18. test_facet() : std::locale::facet(0) {}
  19. static std::locale::id id;
  20. };
  21. std::locale::id test_facet::id;
  22. int main()
  23. {
  24. try {
  25. boost::locale::generator g;
  26. std::locale l=g("en_US.UTF-8");
  27. TEST(has_message(l));
  28. g.categories(g.categories() ^ boost::locale::message_facet);
  29. g.locale_cache_enabled(true);
  30. g("en_US.UTF-8");
  31. g.categories(g.categories() | boost::locale::message_facet);
  32. l=g("en_US.UTF-8");
  33. TEST(!has_message(l));
  34. g.clear_cache();
  35. g.locale_cache_enabled(false);
  36. l=g("en_US.UTF-8");
  37. TEST(has_message(l));
  38. g.characters(g.characters() ^ boost::locale::char_facet);
  39. l=g("en_US.UTF-8");
  40. TEST(!has_message(l));
  41. g.characters(g.characters() | boost::locale::char_facet);
  42. l=g("en_US.UTF-8");
  43. TEST(has_message(l));
  44. l=g("en_US.ISO8859-1");
  45. TEST(std::use_facet<boost::locale::info>(l).language()=="en");
  46. TEST(std::use_facet<boost::locale::info>(l).country()=="US");
  47. TEST(!std::use_facet<boost::locale::info>(l).utf8());
  48. TEST(std::use_facet<boost::locale::info>(l).encoding()=="iso8859-1");
  49. l=g("en_US.UTF-8");
  50. TEST(std::use_facet<boost::locale::info>(l).language()=="en");
  51. TEST(std::use_facet<boost::locale::info>(l).country()=="US");
  52. TEST(std::use_facet<boost::locale::info>(l).utf8());
  53. l=g("en_US.ISO8859-1");
  54. TEST(std::use_facet<boost::locale::info>(l).language()=="en");
  55. TEST(std::use_facet<boost::locale::info>(l).country()=="US");
  56. TEST(!std::use_facet<boost::locale::info>(l).utf8());
  57. TEST(std::use_facet<boost::locale::info>(l).encoding()=="iso8859-1");
  58. l=g("en_US.ISO8859-1");
  59. TEST(std::use_facet<boost::locale::info>(l).language()=="en");
  60. TEST(std::use_facet<boost::locale::info>(l).country()=="US");
  61. TEST(!std::use_facet<boost::locale::info>(l).utf8());
  62. TEST(std::use_facet<boost::locale::info>(l).encoding()=="iso8859-1");
  63. std::locale l_wt(std::locale::classic(),new test_facet);
  64. TEST(std::has_facet<test_facet>(g.generate(l_wt,"en_US.UTF-8")));
  65. TEST(std::has_facet<test_facet>(g.generate(l_wt,"en_US.ISO8859-1")));
  66. TEST(!std::has_facet<test_facet>(g("en_US.UTF-8")));
  67. TEST(!std::has_facet<test_facet>(g("en_US.ISO8859-1")));
  68. g.locale_cache_enabled(true);
  69. g.generate(l_wt,"en_US.UTF-8");
  70. g.generate(l_wt,"en_US.ISO8859-1");
  71. TEST(std::has_facet<test_facet>(g("en_US.UTF-8")));
  72. TEST(std::has_facet<test_facet>(g("en_US.ISO8859-1")));
  73. TEST(std::use_facet<boost::locale::info>(g("en_US.UTF-8")).utf8());
  74. TEST(!std::use_facet<boost::locale::info>(g("en_US.ISO8859-1")).utf8());
  75. }
  76. catch(std::exception const &e) {
  77. std::cerr << "Failed " << e.what() << std::endl;
  78. return EXIT_FAILURE;
  79. }
  80. FINALIZE();
  81. }
  82. // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
  83. // boostinspect:noascii