214 lines
6.2 KiB
C++
214 lines
6.2 KiB
C++
/*
|
|
* Copyright (C) 2017 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include "ih_util.h"
|
|
|
|
#include <android-base/file.h>
|
|
#include <gmock/gmock.h>
|
|
#include <gtest/gtest.h>
|
|
#include <string>
|
|
|
|
using namespace android::base;
|
|
using namespace std;
|
|
using ::testing::StrEq;
|
|
|
|
TEST(IhUtilTest, ParseHeader) {
|
|
header_t result, expected;
|
|
result = parseHeader(" \t \t\t ");
|
|
EXPECT_EQ(expected, result);
|
|
|
|
result = parseHeader(" \t 100 00\tOpQ \t wqrw");
|
|
expected = { "100", "00", "opq", "wqrw" };
|
|
EXPECT_EQ(expected, result);
|
|
|
|
result = parseHeader(" \t 100 00\toooh \t wTF", "\t");
|
|
expected = { "100 00", "oooh", "wtf" };
|
|
EXPECT_EQ(expected, result);
|
|
|
|
result = parseHeader("123,456,78_9", ",");
|
|
expected = { "123", "456", "78_9" };
|
|
EXPECT_EQ(expected, result);
|
|
}
|
|
|
|
TEST(IhUtilTest, ParseRecord) {
|
|
record_t result, expected;
|
|
result = parseRecord(" \t \t\t ");
|
|
EXPECT_EQ(expected, result);
|
|
|
|
result = parseRecord(" \t 100 00\toooh \t wqrw");
|
|
expected = { "100", "00", "oooh", "wqrw" };
|
|
EXPECT_EQ(expected, result);
|
|
|
|
result = parseRecord(" \t 100 00\toooh \t wqrw", "\t");
|
|
expected = { "100 00", "oooh", "wqrw" };
|
|
EXPECT_EQ(expected, result);
|
|
|
|
result = parseRecord("123,456,78_9", ",");
|
|
expected = { "123", "456", "78_9" };
|
|
EXPECT_EQ(expected, result);
|
|
|
|
result = parseRecord("", " ");
|
|
EXPECT_TRUE(result.empty());
|
|
}
|
|
|
|
TEST(IhUtilTest, ParseRecordByColumns) {
|
|
record_t result, expected;
|
|
std::vector<int> indices = { 3, 10 };
|
|
|
|
result = parseRecordByColumns("12345", indices);
|
|
expected = {};
|
|
EXPECT_EQ(expected, result);
|
|
|
|
result = parseRecordByColumns("abc \t2345 6789 ", indices);
|
|
expected = { "abc", "2345 6789" };
|
|
EXPECT_EQ(expected, result);
|
|
|
|
std::string extraColumn1 = "abc \t23456789 bob";
|
|
std::string emptyMidColm = "abc \t bob";
|
|
std::string longFirstClm = "abcdefgt\t6789 bob";
|
|
std::string lngFrstEmpty = "abcdefgt\t bob";
|
|
|
|
result = parseRecordByColumns(extraColumn1, indices);
|
|
expected = { "abc", "23456789 bob" };
|
|
EXPECT_EQ(expected, result);
|
|
|
|
// 2nd column should be treated as an empty entry.
|
|
result = parseRecordByColumns(emptyMidColm, indices);
|
|
expected = { "abc", "bob" };
|
|
EXPECT_EQ(expected, result);
|
|
|
|
result = parseRecordByColumns(longFirstClm, indices);
|
|
expected = { "abcdefgt", "6789 bob" };
|
|
EXPECT_EQ(expected, result);
|
|
|
|
result = parseRecordByColumns(lngFrstEmpty, indices);
|
|
expected = { "abcdefgt", "bob" };
|
|
EXPECT_EQ(expected, result);
|
|
}
|
|
|
|
TEST(IhUtilTest, stripPrefix) {
|
|
string data1 = "Swap: abc ";
|
|
EXPECT_TRUE(stripPrefix(&data1, "Swap:"));
|
|
EXPECT_THAT(data1, StrEq("abc"));
|
|
|
|
string data2 = "Swap: abc ";
|
|
EXPECT_FALSE(stripPrefix(&data2, "Total:"));
|
|
EXPECT_THAT(data2, StrEq("Swap: abc "));
|
|
|
|
string data3 = "Swap: abc ";
|
|
EXPECT_TRUE(stripPrefix(&data3, "Swa"));
|
|
EXPECT_THAT(data3, StrEq("p: abc"));
|
|
|
|
string data4 = "Swap: abc ";
|
|
EXPECT_FALSE(stripPrefix(&data4, "Swa", true));
|
|
EXPECT_THAT(data4, StrEq("Swap: abc "));
|
|
}
|
|
|
|
TEST(IhUtilTest, stripSuffix) {
|
|
string data1 = " 243%abc";
|
|
EXPECT_TRUE(stripSuffix(&data1, "abc"));
|
|
EXPECT_THAT(data1, StrEq("243%"));
|
|
|
|
string data2 = " 243%abc";
|
|
EXPECT_FALSE(stripSuffix(&data2, "Not right"));
|
|
EXPECT_THAT(data2, StrEq(" 243%abc"));
|
|
|
|
string data3 = " 243%abc";
|
|
EXPECT_TRUE(stripSuffix(&data3, "bc"));
|
|
EXPECT_THAT(data3, StrEq("243%a"));
|
|
|
|
string data4 = " 243%abc";
|
|
EXPECT_FALSE(stripSuffix(&data4, "bc", true));
|
|
EXPECT_THAT(data4, StrEq(" 243%abc"));
|
|
}
|
|
|
|
TEST(IhUtilTest, behead) {
|
|
string testcase1 = "81002 dropbox_file_copy (a)(b)";
|
|
EXPECT_THAT(behead(&testcase1, ' '), StrEq("81002"));
|
|
EXPECT_THAT(behead(&testcase1, ' '), StrEq("dropbox_file_copy"));
|
|
EXPECT_THAT(testcase1, "(a)(b)");
|
|
|
|
string testcase2 = "adbce,erwqr";
|
|
EXPECT_THAT(behead(&testcase2, ' '), StrEq("adbce,erwqr"));
|
|
EXPECT_THAT(testcase2, "");
|
|
|
|
string testcase3 = "first second";
|
|
EXPECT_THAT(behead(&testcase3, ' '), StrEq("first"));
|
|
EXPECT_THAT(behead(&testcase3, ' '), StrEq("second"));
|
|
EXPECT_THAT(testcase3, "");
|
|
}
|
|
|
|
TEST(IhUtilTest, Reader) {
|
|
TemporaryFile tf;
|
|
ASSERT_NE(tf.fd, -1);
|
|
ASSERT_TRUE(WriteStringToFile("test string\nsecond\nooo\n", tf.path));
|
|
|
|
Reader r(tf.fd);
|
|
string line;
|
|
ASSERT_TRUE(r.readLine(&line));
|
|
EXPECT_THAT(line, StrEq("test string"));
|
|
ASSERT_TRUE(r.readLine(&line));
|
|
EXPECT_THAT(line, StrEq("second"));
|
|
ASSERT_TRUE(r.readLine(&line));
|
|
EXPECT_THAT(line, StrEq("ooo"));
|
|
ASSERT_FALSE(r.readLine(&line));
|
|
ASSERT_TRUE(r.ok(&line));
|
|
}
|
|
|
|
TEST(IhUtilTest, ReaderEmpty) {
|
|
TemporaryFile tf;
|
|
ASSERT_NE(tf.fd, -1);
|
|
ASSERT_TRUE(WriteStringToFile("", tf.path));
|
|
|
|
Reader r(tf.fd);
|
|
string line;
|
|
ASSERT_FALSE(r.readLine(&line));
|
|
EXPECT_THAT(line, StrEq(""));
|
|
ASSERT_TRUE(r.ok(&line));
|
|
}
|
|
|
|
TEST(IhUtilTest, ReaderMultipleEmptyLines) {
|
|
TemporaryFile tf;
|
|
ASSERT_NE(tf.fd, -1);
|
|
ASSERT_TRUE(WriteStringToFile("\n\n", tf.path));
|
|
|
|
Reader r(tf.fd);
|
|
string line;
|
|
ASSERT_TRUE(r.readLine(&line));
|
|
EXPECT_THAT(line, StrEq(""));
|
|
ASSERT_TRUE(r.readLine(&line));
|
|
EXPECT_THAT(line, StrEq(""));
|
|
ASSERT_FALSE(r.readLine(&line));
|
|
EXPECT_THAT(line, StrEq(""));
|
|
ASSERT_TRUE(r.ok(&line));
|
|
}
|
|
|
|
TEST(IhUtilTest, ReaderFailedNegativeFd) {
|
|
Reader r(-123);
|
|
string line;
|
|
EXPECT_FALSE(r.readLine(&line));
|
|
EXPECT_FALSE(r.ok(&line));
|
|
EXPECT_THAT(line, StrEq("Invalid fd -123"));
|
|
}
|
|
|
|
TEST(IhUtilTest, ReaderFailedBadFd) {
|
|
Reader r(1231432);
|
|
string line;
|
|
EXPECT_FALSE(r.readLine(&line));
|
|
EXPECT_FALSE(r.ok(&line));
|
|
EXPECT_THAT(line, StrEq("Invalid fd 1231432"));
|
|
}
|