Add test for user-defined types formatting
This commit is contained in:
parent
d329abc7cb
commit
dc970f4b74
@ -108,6 +108,7 @@ add_fmt_test(printf-test)
|
|||||||
add_fmt_test(custom-formatter-test)
|
add_fmt_test(custom-formatter-test)
|
||||||
add_fmt_test(ranges-test)
|
add_fmt_test(ranges-test)
|
||||||
add_fmt_test(scan-test)
|
add_fmt_test(scan-test)
|
||||||
|
add_fmt_test(user-defined-type-test)
|
||||||
|
|
||||||
if (NOT MSVC_BUILD_STATIC)
|
if (NOT MSVC_BUILD_STATIC)
|
||||||
add_fmt_executable(posix-mock-test
|
add_fmt_executable(posix-mock-test
|
||||||
|
|||||||
43
test/user-defined-type-test.cc
Normal file
43
test/user-defined-type-test.cc
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#ifndef _CRT_SECURE_NO_WARNINGS
|
||||||
|
# define _CRT_SECURE_NO_WARNINGS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include "fmt/format.h"
|
||||||
|
#include "gtest-extra.h"
|
||||||
|
|
||||||
|
enum struct color { red, green, blue };
|
||||||
|
|
||||||
|
template <> struct fmt::formatter<color> {
|
||||||
|
constexpr auto parse(format_parse_context& ctx) {
|
||||||
|
auto it = ctx.begin();
|
||||||
|
if (it == ctx.end()) throw fmt::format_error("incomplete format string");
|
||||||
|
if (*it != '}') throw fmt::format_error("unknown format specs");
|
||||||
|
return it;
|
||||||
|
}
|
||||||
|
template <typename FormatContext> auto format(color c, FormatContext& ctx) {
|
||||||
|
static const char red_s[] = "red", green_s[] = "green", blue_s[] = "blue";
|
||||||
|
const char *begin_p, *end_p;
|
||||||
|
switch (c) {
|
||||||
|
case color::red:
|
||||||
|
begin_p = std::begin(red_s);
|
||||||
|
end_p = std::end(red_s);
|
||||||
|
break;
|
||||||
|
case color::green:
|
||||||
|
begin_p = std::begin(green_s);
|
||||||
|
end_p = std::end(green_s);
|
||||||
|
break;
|
||||||
|
case color::blue:
|
||||||
|
begin_p = std::begin(blue_s);
|
||||||
|
end_p = std::end(blue_s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return std::copy(begin_p, end_p - 1, ctx.out());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST(UserDefinedTypeTest, Format) {
|
||||||
|
EXPECT_EQ("red green blue",
|
||||||
|
fmt::format("{} {} {}", color::red, color::green, color::blue));
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user