1*b3127a2dSJohn Baldwin /*-
2*b3127a2dSJohn Baldwin * SPDX-License-Identifier: BSD-2-Clause
3*b3127a2dSJohn Baldwin *
4*b3127a2dSJohn Baldwin * Copyright (c) 2025 Chelsio Communications, Inc.
5*b3127a2dSJohn Baldwin * Written by: John Baldwin <jhb@FreeBSD.org>
6*b3127a2dSJohn Baldwin */
7*b3127a2dSJohn Baldwin
8*b3127a2dSJohn Baldwin #include <atf-c++.hpp>
9*b3127a2dSJohn Baldwin #include <stdarg.h>
10*b3127a2dSJohn Baldwin #include <stdio.h>
11*b3127a2dSJohn Baldwin
12*b3127a2dSJohn Baldwin #include <libutil++.hh>
13*b3127a2dSJohn Baldwin
14*b3127a2dSJohn Baldwin ATF_TEST_CASE_WITHOUT_HEAD(basic);
ATF_TEST_CASE_BODY(basic)15*b3127a2dSJohn Baldwin ATF_TEST_CASE_BODY(basic)
16*b3127a2dSJohn Baldwin {
17*b3127a2dSJohn Baldwin ATF_REQUIRE_EQ("foo", freebsd::stringf("foo"));
18*b3127a2dSJohn Baldwin ATF_REQUIRE_EQ("bar", freebsd::stringf("%s", "bar"));
19*b3127a2dSJohn Baldwin ATF_REQUIRE_EQ("42", freebsd::stringf("%u", 42));
20*b3127a2dSJohn Baldwin ATF_REQUIRE_EQ("0xdeadbeef", freebsd::stringf("%#x", 0xdeadbeef));
21*b3127a2dSJohn Baldwin ATF_REQUIRE_EQ("", freebsd::stringf(""));
22*b3127a2dSJohn Baldwin ATF_REQUIRE_EQ("this is a test", freebsd::stringf("this %s test",
23*b3127a2dSJohn Baldwin "is a"));
24*b3127a2dSJohn Baldwin }
25*b3127a2dSJohn Baldwin
26*b3127a2dSJohn Baldwin static std::string
stringv(const char * fmt,...)27*b3127a2dSJohn Baldwin stringv(const char *fmt, ...)
28*b3127a2dSJohn Baldwin {
29*b3127a2dSJohn Baldwin va_list ap;
30*b3127a2dSJohn Baldwin
31*b3127a2dSJohn Baldwin va_start(ap, fmt);
32*b3127a2dSJohn Baldwin std::string str = freebsd::stringf(fmt, ap);
33*b3127a2dSJohn Baldwin va_end(ap);
34*b3127a2dSJohn Baldwin return (str);
35*b3127a2dSJohn Baldwin }
36*b3127a2dSJohn Baldwin
37*b3127a2dSJohn Baldwin ATF_TEST_CASE_WITHOUT_HEAD(va_list);
ATF_TEST_CASE_BODY(va_list)38*b3127a2dSJohn Baldwin ATF_TEST_CASE_BODY(va_list)
39*b3127a2dSJohn Baldwin {
40*b3127a2dSJohn Baldwin ATF_REQUIRE_EQ("foo", stringv("foo"));
41*b3127a2dSJohn Baldwin ATF_REQUIRE_EQ("bar", stringv("%s", "bar"));
42*b3127a2dSJohn Baldwin ATF_REQUIRE_EQ("42", stringv("%u", 42));
43*b3127a2dSJohn Baldwin ATF_REQUIRE_EQ("0xdeadbeef", stringv("%#x", 0xdeadbeef));
44*b3127a2dSJohn Baldwin ATF_REQUIRE_EQ("", stringv(""));
45*b3127a2dSJohn Baldwin ATF_REQUIRE_EQ("this is a test", stringv("this %s test", "is a"));
46*b3127a2dSJohn Baldwin }
47*b3127a2dSJohn Baldwin
ATF_INIT_TEST_CASES(tcs)48*b3127a2dSJohn Baldwin ATF_INIT_TEST_CASES(tcs)
49*b3127a2dSJohn Baldwin {
50*b3127a2dSJohn Baldwin ATF_ADD_TEST_CASE(tcs, basic);
51*b3127a2dSJohn Baldwin ATF_ADD_TEST_CASE(tcs, va_list);
52*b3127a2dSJohn Baldwin }
53