aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Paland <marco@paland.com>2018-06-24 13:11:04 +0200
committerMarco Paland <marco@paland.com>2018-06-24 13:11:04 +0200
commita07b5d4200c81b1c99ce459e341ff9a12ee7cdac (patch)
tree34d6cec0f2103de50b3f6163befdff40553ea9e8
parent810cb2b29053d84c38a4b8b7e40431137902d002 (diff)
downloadprintf-a07b5d4200c81b1c99ce459e341ff9a12ee7cdac.tar.gz
printf-a07b5d4200c81b1c99ce459e341ff9a12ee7cdac.tar.bz2
printf-a07b5d4200c81b1c99ce459e341ff9a12ee7cdac.zip
fix(test_suite): fix vsnprint() mocking
Using a structure as va_arg stack mock is too architecture dependent, using a regular va_list now instead.
-rw-r--r--test/test_suite.cpp31
1 files changed, 20 insertions, 11 deletions
diff --git a/test/test_suite.cpp b/test/test_suite.cpp
index 53482ab..3d7c10d 100644
--- a/test/test_suite.cpp
+++ b/test/test_suite.cpp
@@ -84,21 +84,30 @@ TEST_CASE("snprintf", "[]" ) {
}
-TEST_CASE("vsnprintf", "[]" ) {
- char buffer[100];
+static void vsnprintf_builder_1(char* buffer, ...)
+{
+ va_list args;
+ va_start(args, buffer);
+ test::vsnprintf(buffer, 100U, "%d", args);
+ va_end(args);
+}
- // mock argument list
- const struct tag_args {
- intptr_t a;
- intptr_t b;
- char* s;
- } args = { -1, -1000, "test" };
+static void vsnprintf_builder_3(char* buffer, ...)
+{
+ va_list args;
+ va_start(args, buffer);
+ test::vsnprintf(buffer, 100U, "%d %d %s", args);
+ va_end(args);
+}
- test::vsnprintf(buffer, 100U, "%d %d %s", (char*)&args);
- REQUIRE(!strcmp(buffer, "-1 -1000 test"));
+TEST_CASE("vsnprintf", "[]" ) {
+ char buffer[100];
- test::vsnprintf(buffer, 3U, "%d", (char*)&args);
+ vsnprintf_builder_1(buffer, -1);
REQUIRE(!strcmp(buffer, "-1"));
+
+ vsnprintf_builder_3(buffer, 3, -1000, "test");
+ REQUIRE(!strcmp(buffer, "3 -1000 test"));
}