| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
1 |
// Formatting library for C++ - test utilities |
| 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 "util.h" |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
9 |
|
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
10 |
#include <cstring> |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
11 |
|
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
12 |
const char* const file_content = "Don't panic!"; |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
13 |
|
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
14 |
fmt::buffered_file open_buffered_file(FILE** fp) { |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
15 |
#if FMT_USE_FCNTL |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
16 |
fmt::file read_end, write_end; |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
17 |
fmt::file::pipe(read_end, write_end); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
18 |
write_end.write(file_content, std::strlen(file_content)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
19 |
write_end.close(); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
20 |
fmt::buffered_file f = read_end.fdopen("r"); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
21 |
if (fp) *fp = f.get(); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
22 |
#else |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
23 |
fmt::buffered_file f("test-file", "w"); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
24 |
fputs(file_content, f.get()); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
25 |
if (fp) *fp = f.get(); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
26 |
#endif |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
27 |
return f; |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
28 |
} |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
29 |
|
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
30 |
std::locale do_get_locale(const char* name) { |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
31 |
try { |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
32 |
return std::locale(name); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
33 |
} catch (const std::runtime_error&) { |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
34 |
} |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
35 |
return std::locale::classic(); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
36 |
} |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
37 |
|
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
38 |
std::locale get_locale(const char* name, const char* alt_name) { |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
39 |
auto loc = do_get_locale(name); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
40 |
if (loc == std::locale::classic() && alt_name) { |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
41 |
loc = do_get_locale(alt_name); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
42 |
} |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
43 |
if (loc == std::locale::classic()) |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
44 |
fmt::print(stderr, "{} locale is missing.\n", name); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
45 |
return loc; |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
46 |
} |
|
|
1970-01-01 00:00 |
47 |
|