mirror of https://github.com/gnss-sdr/gnss-sdr
126 lines
3.6 KiB
C++
126 lines
3.6 KiB
C++
// SPDX-FileCopyrightText: 2017 Google Inc.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
#include "filesystem_for_testing.h"
|
|
#include "gtest/gtest.h"
|
|
#include "internal/stack_line_reader.h"
|
|
|
|
namespace cpu_features
|
|
{
|
|
bool operator==(const StringView& a, const StringView& b)
|
|
{
|
|
return CpuFeatures_StringView_IsEquals(a, b);
|
|
}
|
|
|
|
namespace
|
|
{
|
|
std::string ToString(StringView view) { return {view.ptr, view.size}; }
|
|
|
|
TEST(StackLineReaderTest, Empty)
|
|
{
|
|
auto& fs = GetEmptyFilesystem();
|
|
auto* file = fs.CreateFile("/proc/cpuinfo", "");
|
|
StackLineReader reader;
|
|
StackLineReader_Initialize(&reader, file->GetFileDescriptor());
|
|
{
|
|
const auto result = StackLineReader_NextLine(&reader);
|
|
EXPECT_TRUE(result.eof);
|
|
EXPECT_TRUE(result.full_line);
|
|
EXPECT_EQ(result.line, str(""));
|
|
}
|
|
}
|
|
|
|
TEST(StackLineReaderTest, ManySmallLines)
|
|
{
|
|
auto& fs = GetEmptyFilesystem();
|
|
auto* file = fs.CreateFile("/proc/cpuinfo", "a\nb\nc");
|
|
|
|
StackLineReader reader;
|
|
StackLineReader_Initialize(&reader, file->GetFileDescriptor());
|
|
{
|
|
const auto result = StackLineReader_NextLine(&reader);
|
|
EXPECT_FALSE(result.eof);
|
|
EXPECT_TRUE(result.full_line);
|
|
EXPECT_EQ(result.line, str("a"));
|
|
}
|
|
{
|
|
const auto result = StackLineReader_NextLine(&reader);
|
|
EXPECT_FALSE(result.eof);
|
|
EXPECT_TRUE(result.full_line);
|
|
EXPECT_EQ(result.line, str("b"));
|
|
}
|
|
{
|
|
const auto result = StackLineReader_NextLine(&reader);
|
|
EXPECT_TRUE(result.eof);
|
|
EXPECT_TRUE(result.full_line);
|
|
EXPECT_EQ(result.line, str("c"));
|
|
}
|
|
}
|
|
|
|
TEST(StackLineReaderTest, TruncatedLine)
|
|
{
|
|
auto& fs = GetEmptyFilesystem();
|
|
auto* file = fs.CreateFile("/proc/cpuinfo", R"(First
|
|
Second
|
|
More than 16 characters, this will be truncated.
|
|
last)");
|
|
|
|
StackLineReader reader;
|
|
StackLineReader_Initialize(&reader, file->GetFileDescriptor());
|
|
{
|
|
const auto result = StackLineReader_NextLine(&reader);
|
|
EXPECT_FALSE(result.eof);
|
|
EXPECT_TRUE(result.full_line);
|
|
EXPECT_EQ(result.line, str("First"));
|
|
}
|
|
{
|
|
const auto result = StackLineReader_NextLine(&reader);
|
|
EXPECT_FALSE(result.eof);
|
|
EXPECT_TRUE(result.full_line);
|
|
EXPECT_EQ(result.line, str("Second"));
|
|
}
|
|
{
|
|
const auto result = StackLineReader_NextLine(&reader);
|
|
EXPECT_FALSE(result.eof);
|
|
EXPECT_FALSE(result.full_line);
|
|
EXPECT_EQ(result.line, str("More than 16 cha"));
|
|
}
|
|
{
|
|
const auto result = StackLineReader_NextLine(&reader);
|
|
EXPECT_TRUE(result.eof);
|
|
EXPECT_TRUE(result.full_line);
|
|
EXPECT_EQ(result.line, str("last"));
|
|
}
|
|
}
|
|
|
|
TEST(StackLineReaderTest, TruncatedLines)
|
|
{
|
|
auto& fs = GetEmptyFilesystem();
|
|
auto* file = fs.CreateFile("/proc/cpuinfo", R"(More than 16 characters
|
|
Another line that is too long)");
|
|
|
|
StackLineReader reader;
|
|
StackLineReader_Initialize(&reader, file->GetFileDescriptor());
|
|
{
|
|
const auto result = StackLineReader_NextLine(&reader);
|
|
EXPECT_FALSE(result.eof);
|
|
EXPECT_FALSE(result.full_line);
|
|
EXPECT_EQ(result.line, str("More than 16 cha"));
|
|
}
|
|
{
|
|
const auto result = StackLineReader_NextLine(&reader);
|
|
EXPECT_FALSE(result.eof);
|
|
EXPECT_FALSE(result.full_line);
|
|
EXPECT_EQ(result.line, str("Another line tha"));
|
|
}
|
|
{
|
|
const auto result = StackLineReader_NextLine(&reader);
|
|
EXPECT_TRUE(result.eof);
|
|
EXPECT_TRUE(result.full_line);
|
|
EXPECT_EQ(result.line, str(""));
|
|
}
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace cpu_features
|