1 /*
2 * Copyright 2019 The Hafnium Authors.
3 *
4 * Use of this source code is governed by a BSD-style
5 * license that can be found in the LICENSE file or at
6 * https://opensource.org/licenses/BSD-3-Clause.
7 */
8
9 #include <gmock/gmock.h>
10
11 extern "C" {
12 #include "hf/string.h"
13 }
14
15 namespace
16 {
TEST(string,valid)17 TEST(string, valid)
18 {
19 struct string str;
20 struct memiter it;
21 constexpr const char data[] = "test";
22
23 string_init_empty(&str);
24 ASSERT_TRUE(string_is_empty(&str));
25 ASSERT_STREQ(string_data(&str), "");
26
27 memiter_init(&it, data, sizeof(data));
28 ASSERT_EQ(string_init(&str, &it), STRING_SUCCESS);
29 ASSERT_FALSE(string_is_empty(&str));
30 ASSERT_STRNE(string_data(&str), "");
31 ASSERT_STREQ(string_data(&str), "test");
32 }
33
TEST(string,data_zero_size)34 TEST(string, data_zero_size)
35 {
36 struct string str;
37 struct memiter it;
38 constexpr const char data[] = "test";
39
40 memiter_init(&it, data, 0);
41 ASSERT_EQ(string_init(&str, &it), STRING_ERROR_INVALID_INPUT);
42 }
43
TEST(string,data_no_null_terminator)44 TEST(string, data_no_null_terminator)
45 {
46 struct string str;
47 struct memiter it;
48 constexpr const char data[] = {'t', 'e', 's', 't'};
49
50 memiter_init(&it, data, sizeof(data));
51 ASSERT_EQ(string_init(&str, &it), STRING_ERROR_INVALID_INPUT);
52 }
53
TEST(string,data_two_null_terminators)54 TEST(string, data_two_null_terminators)
55 {
56 struct string str;
57 struct memiter it;
58 constexpr const char data[] = {'\0', 't', 'e', 's', 't', '\0'};
59
60 memiter_init(&it, data, sizeof(data));
61 ASSERT_EQ(string_init(&str, &it), STRING_ERROR_INVALID_INPUT);
62 }
63
64 } /* namespace */
65