blob: dca4cc1897c012bc534f66b6b13b90f55a009318 [file] [log] [blame]
David Brazdil136f2942019-09-23 14:11:03 +01001/*
2 * Copyright 2019 The Hafnium Authors.
3 *
Andrew Walbrane959ec12020-06-17 15:01:09 +01004 * 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.
David Brazdil136f2942019-09-23 14:11:03 +01007 */
8
9#include <gmock/gmock.h>
10
11extern "C" {
12#include "hf/string.h"
13}
14
15namespace
16{
17TEST(string, valid)
18{
19 struct string str;
David Brazdilb856be62020-03-25 10:14:55 +000020 struct memiter it;
David Brazdil136f2942019-09-23 14:11:03 +010021 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
David Brazdilb856be62020-03-25 10:14:55 +000027 memiter_init(&it, data, sizeof(data));
28 ASSERT_EQ(string_init(&str, &it), STRING_SUCCESS);
David Brazdil136f2942019-09-23 14:11:03 +010029 ASSERT_FALSE(string_is_empty(&str));
30 ASSERT_STRNE(string_data(&str), "");
31 ASSERT_STREQ(string_data(&str), "test");
32}
33
34TEST(string, data_zero_size)
35{
36 struct string str;
David Brazdilb856be62020-03-25 10:14:55 +000037 struct memiter it;
David Brazdil136f2942019-09-23 14:11:03 +010038 constexpr const char data[] = "test";
39
David Brazdilb856be62020-03-25 10:14:55 +000040 memiter_init(&it, data, 0);
41 ASSERT_EQ(string_init(&str, &it), STRING_ERROR_INVALID_INPUT);
David Brazdil136f2942019-09-23 14:11:03 +010042}
43
44TEST(string, data_no_null_terminator)
45{
46 struct string str;
David Brazdilb856be62020-03-25 10:14:55 +000047 struct memiter it;
David Brazdil136f2942019-09-23 14:11:03 +010048 constexpr const char data[] = {'t', 'e', 's', 't'};
49
David Brazdilb856be62020-03-25 10:14:55 +000050 memiter_init(&it, data, sizeof(data));
51 ASSERT_EQ(string_init(&str, &it), STRING_ERROR_INVALID_INPUT);
David Brazdil136f2942019-09-23 14:11:03 +010052}
53
54TEST(string, data_two_null_terminators)
55{
56 struct string str;
David Brazdilb856be62020-03-25 10:14:55 +000057 struct memiter it;
David Brazdil136f2942019-09-23 14:11:03 +010058 constexpr const char data[] = {'\0', 't', 'e', 's', 't', '\0'};
59
David Brazdilb856be62020-03-25 10:14:55 +000060 memiter_init(&it, data, sizeof(data));
61 ASSERT_EQ(string_init(&str, &it), STRING_ERROR_INVALID_INPUT);
David Brazdil136f2942019-09-23 14:11:03 +010062}
63
64} /* namespace */