Improve handling of custom arguments

This commit is contained in:
Victor Zverovich
2017-12-02 09:44:48 -08:00
parent e0243000de
commit 10e70a06c9
5 changed files with 46 additions and 64 deletions

View File

@@ -590,18 +590,17 @@ TEST(UtilTest, PointerArg) {
TEST(UtilTest, CustomArg) {
::Test test;
typedef MockVisitor<fmt::internal::custom_value<char>> Visitor;
testing::StrictMock<Visitor> visitor;
EXPECT_CALL(visitor, visit(_)).WillOnce(
testing::Invoke([&](fmt::internal::custom_value<char> custom) {
EXPECT_EQ(&test, custom.value);
using handle = typename fmt::basic_arg<fmt::context>::handle;
using visitor = MockVisitor<handle>;
testing::StrictMock<visitor> v;
EXPECT_CALL(v, visit(_)).WillOnce(testing::Invoke([&](handle h) {
fmt::memory_buffer buffer;
fmt::context ctx("", fmt::args());
custom.format(buffer, &test, &ctx);
h.format(buffer, ctx);
EXPECT_EQ("test", std::string(buffer.data(), buffer.size()));
return Visitor::Result();
return visitor::Result();
}));
fmt::visit(visitor, make_arg<fmt::context>(test));
fmt::visit(v, make_arg<fmt::context>(test));
}
TEST(ArgVisitorTest, VisitInvalidArg) {