1 /* Copyright 2018 The Chromium OS Authors. All rights reserved.
2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file.
4 *
5 * Test util.[ch] module code using gtest.
6 */
7
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <string.h>
11 #include <sys/stat.h>
12 #include <unistd.h>
13
14 #include <gtest/gtest.h>
15
16 #include "util.h"
17
18 // Sanity check for the strip func.
TEST(strip,basic)19 TEST(strip, basic) {
20 char str[] = " foo\t";
21 ASSERT_EQ("foo", std::string(strip(str)));
22 }
23
24 // Make sure we don't crash with various "null"-like inputs.
TEST(tokenize,null_stringp)25 TEST(tokenize, null_stringp) {
26 ASSERT_EQ(nullptr, tokenize(nullptr, nullptr));
27 ASSERT_EQ(nullptr, tokenize(nullptr, ""));
28 ASSERT_EQ(nullptr, tokenize(nullptr, ","));
29
30 char *p = nullptr;
31 ASSERT_EQ(nullptr, tokenize(&p, nullptr));
32 }
33
34 // Make sure we don't crash with various "null"-like inputs.
TEST(tokenize,null_delim)35 TEST(tokenize, null_delim) {
36 char str[] = "a,b,c";
37 char *p = str;
38 ASSERT_EQ(str, tokenize(&p, nullptr));
39 ASSERT_EQ(nullptr, p);
40 ASSERT_EQ(str, std::string("a,b,c"));
41
42 p = str;
43 ASSERT_EQ(str, tokenize(&p, ""));
44 ASSERT_EQ(nullptr, p);
45 ASSERT_EQ(str, std::string("a,b,c"));
46 }
47
48 // Sanity check for the tokenize func.
TEST(tokenize,basic)49 TEST(tokenize, basic) {
50 char str[] = "a,b,c";
51 char *p = str;
52 ASSERT_EQ("a", std::string(tokenize(&p, ",")));
53 ASSERT_EQ("b", std::string(tokenize(&p, ",")));
54 ASSERT_EQ("c", std::string(tokenize(&p, ",")));
55 ASSERT_EQ(nullptr, p);
56 ASSERT_EQ(nullptr, tokenize(&p, ","));
57 }
58
59 // Check edge case with an empty string.
TEST(tokenize,empty_string)60 TEST(tokenize, empty_string) {
61 char str[] = "";
62 char *p = str;
63 ASSERT_EQ("", std::string(tokenize(&p, ",")));
64 ASSERT_EQ(nullptr, p);
65 ASSERT_EQ(nullptr, tokenize(&p, ","));
66 }
67
68 // Check behavior with empty tokens at the start/middle/end.
TEST(tokenize,empty_tokens)69 TEST(tokenize, empty_tokens) {
70 char str[] = ",,a,b,,,c,,";
71 char *p = str;
72 ASSERT_EQ("", std::string(tokenize(&p, ",")));
73 ASSERT_EQ("", std::string(tokenize(&p, ",")));
74 ASSERT_EQ("a", std::string(tokenize(&p, ",")));
75 ASSERT_EQ("b", std::string(tokenize(&p, ",")));
76 ASSERT_EQ("", std::string(tokenize(&p, ",")));
77 ASSERT_EQ("", std::string(tokenize(&p, ",")));
78 ASSERT_EQ("c", std::string(tokenize(&p, ",")));
79 ASSERT_EQ("", std::string(tokenize(&p, ",")));
80 ASSERT_EQ("", std::string(tokenize(&p, ",")));
81 ASSERT_EQ(nullptr, p);
82 ASSERT_EQ(nullptr, tokenize(&p, ","));
83 }
84