git repos / blockattack-game

blame: source/misc/embedded_libs/fmt-8.1.1/test/unicode-test.cc

normal view · raw

f8deb5b9 Poul Sander 2022-01-15 13:55 1
// Formatting library for C++ - Unicode tests
f8deb5b9 Poul Sander 2022-01-15 13:55 2
//
f8deb5b9 Poul Sander 2022-01-15 13:55 3
// Copyright (c) 2012 - present, Victor Zverovich
f8deb5b9 Poul Sander 2022-01-15 13:55 4
// All rights reserved.
f8deb5b9 Poul Sander 2022-01-15 13:55 5
//
f8deb5b9 Poul Sander 2022-01-15 13:55 6
// For the license information refer to format.h.
f8deb5b9 Poul Sander 2022-01-15 13:55 7
f8deb5b9 Poul Sander 2022-01-15 13:55 8
#include <iomanip>
f8deb5b9 Poul Sander 2022-01-15 13:55 9
#include <locale>
f8deb5b9 Poul Sander 2022-01-15 13:55 10
#include <vector>
f8deb5b9 Poul Sander 2022-01-15 13:55 11
f8deb5b9 Poul Sander 2022-01-15 13:55 12
#include "fmt/chrono.h"
f8deb5b9 Poul Sander 2022-01-15 13:55 13
#include "gmock/gmock.h"
f8deb5b9 Poul Sander 2022-01-15 13:55 14
#include "util.h"  // get_locale
f8deb5b9 Poul Sander 2022-01-15 13:55 15
f8deb5b9 Poul Sander 2022-01-15 13:55 16
using testing::Contains;
f8deb5b9 Poul Sander 2022-01-15 13:55 17
f8deb5b9 Poul Sander 2022-01-15 13:55 18
TEST(unicode_test, is_utf8) { EXPECT_TRUE(fmt::detail::is_utf8()); }
f8deb5b9 Poul Sander 2022-01-15 13:55 19
f8deb5b9 Poul Sander 2022-01-15 13:55 20
TEST(unicode_test, legacy_locale) {
f8deb5b9 Poul Sander 2022-01-15 13:55 21
  auto loc = get_locale("ru_RU.CP1251", "Russian_Russia.1251");
f8deb5b9 Poul Sander 2022-01-15 13:55 22
  if (loc == std::locale::classic()) return;
f8deb5b9 Poul Sander 2022-01-15 13:55 23
f8deb5b9 Poul Sander 2022-01-15 13:55 24
  auto s = std::string();
f8deb5b9 Poul Sander 2022-01-15 13:55 25
  try {
f8deb5b9 Poul Sander 2022-01-15 13:55 26
    s = fmt::format(loc, "День недели: {:L}", fmt::weekday(1));
f8deb5b9 Poul Sander 2022-01-15 13:55 27
  } catch (const fmt::format_error& e) {
f8deb5b9 Poul Sander 2022-01-15 13:55 28
    // Formatting can fail due to an unsupported encoding.
f8deb5b9 Poul Sander 2022-01-15 13:55 29
    fmt::print("Format error: {}\n", e.what());
f8deb5b9 Poul Sander 2022-01-15 13:55 30
    return;
f8deb5b9 Poul Sander 2022-01-15 13:55 31
  }
f8deb5b9 Poul Sander 2022-01-15 13:55 32
f8deb5b9 Poul Sander 2022-01-15 13:55 33
#if !FMT_GCC_VERSION || FMT_GCC_VERSION >= 500
f8deb5b9 Poul Sander 2022-01-15 13:55 34
  auto&& os = std::ostringstream();
f8deb5b9 Poul Sander 2022-01-15 13:55 35
  os.imbue(loc);
f8deb5b9 Poul Sander 2022-01-15 13:55 36
  auto tm = std::tm();
f8deb5b9 Poul Sander 2022-01-15 13:55 37
  tm.tm_wday = 1;
f8deb5b9 Poul Sander 2022-01-15 13:55 38
  os << std::put_time(&tm, "%a");
f8deb5b9 Poul Sander 2022-01-15 13:55 39
  auto wd = os.str();
f8deb5b9 Poul Sander 2022-01-15 13:55 40
  if (wd == "??") {
f8deb5b9 Poul Sander 2022-01-15 13:55 41
    EXPECT_EQ(s, "День недели: ??");
f8deb5b9 Poul Sander 2022-01-15 13:55 42
    fmt::print("std::locale gives ?? as a weekday.\n");
f8deb5b9 Poul Sander 2022-01-15 13:55 43
    return;
f8deb5b9 Poul Sander 2022-01-15 13:55 44
  }
f8deb5b9 Poul Sander 2022-01-15 13:55 45
#endif
f8deb5b9 Poul Sander 2022-01-15 13:55 46
  EXPECT_THAT((std::vector<std::string>{"День недели: пн", "День недели: Пн"}),
f8deb5b9 Poul Sander 2022-01-15 13:55 47
              Contains(s));
f8deb5b9 Poul Sander 2022-01-15 13:55 48
}
1970-01-01 00:00 49