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