/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // First include (the generated) my_config.h, to get correct platform defines. #include "my_config.h" #include #include #include namespace my_b_vprintf_unittest { void test1(const char *res, const char *fmt, ...) { IO_CACHE info; va_list args; size_t len; init_io_cache(&info, -1, 0, WRITE_CACHE, 0 , 1 , MYF(0)); memset(info.write_buffer, 0, 64); /* RECORD_CACHE_SIZE is 64K */ va_start(args, fmt); len= my_b_vprintf(&info, fmt, args); va_end(args); EXPECT_EQ(len, strlen(res)); EXPECT_STREQ((char *)(info.write_buffer), res); end_io_cache(&info); } TEST(Mysys, Vprintf) { test1("Format specifier s works", "Format specifier s %s", "works"); test1("Format specifier b works", "Format specifier b %.5b", "works!!!"); test1("Format specifier b with * works", "Format specifier b with * %.*b", 5, "workss!!!"); test1("Format specifier c !", "Format specifier c %c", '!'); test1("Format specifier d 1", "Format specifier d %d", 1); test1("Format specifier u 2", "Format specifier u %u", 2); test1("Format specifier ld -3", "Format specifier ld %ld", -3L); test1("Format specifier lu 4", "Format specifier lu %lu", 4L); test1("Format specifier llu 5", "Format specifier llu %llu", 5LL); test1("Width is ignored for strings ", "Width is ignored for strings <%04s> <%5s>", "x", "y"); test1("Hello", "Hello"); test1("Hello int, 1", "Hello int, %d", 1); test1("Hello int, -1", "Hello int, %d", -1); test1("Hello string 'I am a string'", "Hello string '%s'", "I am a string"); test1("Hello hack hack 1", "Hello hack hack %d", 1); test1("Hello 1 hack 4", "Hello %d hack %d", 1, 4); test1("Hello 1 hack hack hack hack hack 4", "Hello %d hack hack hack hack hack %d", 1, 4); test1("Hello 'hack' hhhhhhhhhhhhhhh", "Hello '%s' hhhhhhhhhhhhhhh", "hack"); test1("Hello hhhhhhhhh 1 sssssssss", "Hello hhhhhhhhh %d sssssssss", 1); test1("Hello 1", "Hello %u", 1); test1("Hello 4294967295", "Hello %u", -1); test1("Hello TEST", "Hello %05s", "TEST"); } }