91 lines
2.9 KiB
C++
91 lines
2.9 KiB
C++
/* 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 <gtest/gtest.h>
|
|
#include <my_global.h>
|
|
#include <my_sys.h>
|
|
|
|
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 <x> <y>",
|
|
"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");
|
|
|
|
}
|
|
|
|
}
|