#include #include #include #include #include #include SCENARIO("Formatting to a new string", "[format]") { GIVEN("a format string without any placeholders") { auto const & fmt = "This is a test"; WHEN("calling format with without any arguments.") { auto result = kstd::format(fmt); THEN("the result is the unmodified string") { REQUIRE(result == "This is a test"); } } WHEN("calling format with additional arguments") { auto result = kstd::format(fmt, 1, 2, 3); THEN("the result is the unmodified string") { REQUIRE(result == "This is a test"); } } } GIVEN("a format string with placeholders") { auto const & fmt = "Here are some placeholders: {} {} {}"; WHEN("calling format with the same number of arguments as there are placeholders") { auto result = kstd::format(fmt, 1, true, 'a'); THEN("the result is the formatted string") { REQUIRE(result == "Here are some placeholders: 1 true a"); } } WHEN("calling format with too many arguments") { auto result = kstd::format(fmt, 2, false, 'b', 4, 5, 6); THEN("the result is the formatted string") { REQUIRE(result == "Here are some placeholders: 2 false b"); } } } } SCENARIO("Formatting to an output iterator", "[format]") { auto buffer = std::ostringstream{}; GIVEN("a format string without any placeholders") { auto const & fmt = "This is a test"; WHEN("calling format with without any arguments.") { kstd::format_to(std::ostream_iterator{buffer}, fmt); THEN("the unmodified string is written to the iterator") { REQUIRE(buffer.str() == "This is a test"); } } WHEN("calling format with additional arguments") { kstd::format_to(std::ostream_iterator{buffer}, fmt, 1, 2, 3); THEN("the unmodified string is written to the iterator") { REQUIRE(buffer.str() == "This is a test"); } } } GIVEN("a format string with placeholders") { auto const & fmt = "Here are some placeholders: {} {} {}"; WHEN("calling format with the same number of arguments as there are placeholders") { kstd::format_to(std::ostream_iterator{buffer}, fmt, 1, true, -100); THEN("the formatted string is written to the iterator") { REQUIRE(buffer.str() == "Here are some placeholders: 1 true -100"); } } WHEN("calling format with too many arguments") { kstd::format_to(std::ostream_iterator{buffer}, fmt, 2, false, -200, 4, 5, 6); THEN("the formatted string is written to the iterator") { REQUIRE(buffer.str() == "Here are some placeholders: 2 false -200"); } } } }