mirror of
				https://github.com/fmtlib/fmt.git
				synced 2025-11-04 08:01:40 +01:00 
			
		
		
		
	* Fix unicode test * Add xchar support to chrono formatter * Replace strftime with std::time_put * Add std::locale support to std::tm formatter * Use predefined names and formats for C-locale * Performance improvement * Make locale-independent and C locale formats consistent among platforms
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Formatting library for C++ - Unicode tests
 | 
						|
//
 | 
						|
// Copyright (c) 2012 - present, Victor Zverovich
 | 
						|
// All rights reserved.
 | 
						|
//
 | 
						|
// For the license information refer to format.h.
 | 
						|
 | 
						|
#include <iomanip>
 | 
						|
#include <locale>
 | 
						|
#include <vector>
 | 
						|
 | 
						|
#include "fmt/chrono.h"
 | 
						|
#include "gmock/gmock.h"
 | 
						|
#include "util.h"  // get_locale
 | 
						|
 | 
						|
using testing::Contains;
 | 
						|
 | 
						|
TEST(unicode_test, is_utf8) { EXPECT_TRUE(fmt::detail::is_utf8()); }
 | 
						|
 | 
						|
TEST(unicode_test, legacy_locale) {
 | 
						|
  auto loc = get_locale("ru_RU.CP1251", "Russian_Russia.1251");
 | 
						|
  if (loc == std::locale::classic()) return;
 | 
						|
 | 
						|
  auto s = std::string();
 | 
						|
  try {
 | 
						|
    s = fmt::format(loc, "День недели: {:L}", fmt::weekday(1));
 | 
						|
  } catch (const fmt::format_error& e) {
 | 
						|
    // Formatting can fail due to an unsupported encoding.
 | 
						|
    fmt::print("Format error: {}\n", e.what());
 | 
						|
    return;
 | 
						|
  }
 | 
						|
 | 
						|
#if !FMT_GCC_VERSION || FMT_GCC_VERSION >= 500
 | 
						|
  auto&& os = std::ostringstream();
 | 
						|
  os.imbue(loc);
 | 
						|
  auto tm = std::tm();
 | 
						|
  tm.tm_wday = 1;
 | 
						|
  os << std::put_time(&tm, "%a");
 | 
						|
  auto wd = os.str();
 | 
						|
  if (wd == "??") {
 | 
						|
    EXPECT_EQ(s, "День недели: ??");
 | 
						|
    fmt::print("std::locale gives ?? as a weekday.\n");
 | 
						|
    return;
 | 
						|
  }
 | 
						|
#endif
 | 
						|
  EXPECT_THAT((std::vector<std::string>{"День недели: пн", "День недели: Пн"}),
 | 
						|
              Contains(s));
 | 
						|
}
 |