blob: ad7e39ec0368b09c0e719f6a49729f861a25f1f1 [file] [log] [blame]
Wyatt Heplere2dc6d12019-11-15 09:05:07 -08001// Copyright 2019 The Pigweed Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License"); you may not
Wyatt Hepler1a960942019-11-26 14:13:38 -08004// use this file except in compliance with the License. You may obtain a copy of
5// the License at
Wyatt Heplere2dc6d12019-11-15 09:05:07 -08006//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
Wyatt Hepler1a960942019-11-26 14:13:38 -080012// License for the specific language governing permissions and limitations under
13// the License.
Wyatt Heplere2dc6d12019-11-15 09:05:07 -080014
15#include "pw_string/format.h"
16
17#include <cstdarg>
18
19#include "gtest/gtest.h"
20#include "pw_span/span.h"
21
22namespace pw::string {
23namespace {
24
25TEST(Format, ValidFormatString_Succeeds) {
26 char buffer[32];
27 auto result = Format(buffer, "-_-");
28
29 EXPECT_EQ(Status::OK, result.status());
30 EXPECT_EQ(3u, result.size());
31 EXPECT_STREQ("-_-", buffer);
32}
33
34TEST(Format, ValidFormatStringAndArguments_Succeeds) {
35 char buffer[32];
36 auto result = Format(buffer, "%d4%s", 123, "5");
37
38 EXPECT_EQ(Status::OK, result.status());
39 EXPECT_EQ(5u, result.size());
40 EXPECT_STREQ("12345", buffer);
41}
42
Wyatt Heplere2dc6d12019-11-15 09:05:07 -080043TEST(Format, EmptyBuffer_ReturnsResourceExhausted) {
44 auto result = Format(span<char>(), "?");
45
46 EXPECT_EQ(Status::RESOURCE_EXHAUSTED, result.status());
47 EXPECT_EQ(0u, result.size());
48}
49
50TEST(Format, FormatLargerThanBuffer_ReturnsResourceExhausted) {
51 char buffer[5];
52 auto result = Format(buffer, "2big!");
53
54 EXPECT_EQ(Status::RESOURCE_EXHAUSTED, result.status());
55 EXPECT_EQ(4u, result.size());
56 EXPECT_STREQ("2big", buffer);
57}
58
59TEST(Format, ArgumentLargerThanBuffer_ReturnsResourceExhausted) {
60 char buffer[5];
Wyatt Hepler2596fe52020-01-23 17:40:10 -080061 auto result = Format(buffer, "%s", "2big!");
Wyatt Heplere2dc6d12019-11-15 09:05:07 -080062
63 EXPECT_EQ(Status::RESOURCE_EXHAUSTED, result.status());
64 EXPECT_EQ(4u, result.size());
65 EXPECT_STREQ("2big", buffer);
66}
67
68StatusWithSize CallFormatWithVaList(span<char> buffer, const char* fmt, ...) {
69 va_list args;
70 va_start(args, fmt);
71
Wyatt Hepler2596fe52020-01-23 17:40:10 -080072 StatusWithSize result = FormatVaList(buffer, fmt, args);
Wyatt Heplere2dc6d12019-11-15 09:05:07 -080073
74 va_end(args);
75 return result;
76}
77
78TEST(Format, CallFormatWithVaList_CallsCorrectFormatOverload) {
79 char buffer[8];
80 auto result = CallFormatWithVaList(buffer, "Yo%s", "?!");
81
82 EXPECT_EQ(Status::OK, result.status());
83 EXPECT_EQ(4u, result.size());
84 EXPECT_STREQ("Yo?!", buffer);
85}
86
87} // namespace
88} // namespace pw::string