104 lines
2.3 KiB
104 lines
2.3 KiB
// Copyright 2018 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "platform/impl/scoped_pipe.h"
|
|
|
|
#include <vector>
|
|
|
|
#include "gmock/gmock.h"
|
|
#include "gtest/gtest.h"
|
|
#include "util/osp_logging.h"
|
|
|
|
namespace openscreen {
|
|
namespace {
|
|
|
|
using ::testing::ElementsAre;
|
|
|
|
std::vector<int>* g_freed_values = nullptr;
|
|
|
|
struct IntTraits {
|
|
using PipeType = int;
|
|
static constexpr int kInvalidValue = -1;
|
|
|
|
static void Close(int fd) { g_freed_values->push_back(fd); }
|
|
};
|
|
|
|
constexpr int IntTraits::kInvalidValue;
|
|
|
|
class ScopedPipeTest : public ::testing::Test {
|
|
protected:
|
|
void SetUp() override {
|
|
OSP_DCHECK(!g_freed_values);
|
|
g_freed_values = new std::vector<int>();
|
|
}
|
|
|
|
void TearDown() override {
|
|
delete g_freed_values;
|
|
g_freed_values = nullptr;
|
|
}
|
|
};
|
|
|
|
} // namespace
|
|
|
|
TEST_F(ScopedPipeTest, Close) {
|
|
{ ScopedPipe<IntTraits> x; }
|
|
ASSERT_TRUE(g_freed_values->empty());
|
|
|
|
{ ScopedPipe<IntTraits> x(3); }
|
|
EXPECT_THAT(*g_freed_values, ElementsAre(3));
|
|
g_freed_values->clear();
|
|
|
|
{
|
|
ScopedPipe<IntTraits> x(3);
|
|
EXPECT_EQ(3, x.release());
|
|
|
|
ScopedPipe<IntTraits> y;
|
|
EXPECT_EQ(IntTraits::kInvalidValue, y.release());
|
|
}
|
|
ASSERT_TRUE(g_freed_values->empty());
|
|
|
|
{
|
|
ScopedPipe<IntTraits> x(3);
|
|
ScopedPipe<IntTraits> y(std::move(x));
|
|
EXPECT_EQ(IntTraits::kInvalidValue, x.get());
|
|
EXPECT_EQ(3, y.get());
|
|
EXPECT_TRUE(g_freed_values->empty());
|
|
}
|
|
EXPECT_THAT(*g_freed_values, ElementsAre(3));
|
|
g_freed_values->clear();
|
|
|
|
{
|
|
ScopedPipe<IntTraits> x(3);
|
|
ScopedPipe<IntTraits> y(4);
|
|
y = std::move(x);
|
|
EXPECT_EQ(IntTraits::kInvalidValue, x.get());
|
|
EXPECT_EQ(3, y.get());
|
|
EXPECT_EQ(1u, g_freed_values->size());
|
|
EXPECT_EQ(4, g_freed_values->front());
|
|
}
|
|
EXPECT_THAT(*g_freed_values, ElementsAre(4, 3));
|
|
g_freed_values->clear();
|
|
}
|
|
|
|
TEST_F(ScopedPipeTest, Comparisons) {
|
|
std::vector<int> g_freed_values;
|
|
ScopedPipe<IntTraits> x;
|
|
ScopedPipe<IntTraits> y;
|
|
EXPECT_FALSE(x);
|
|
EXPECT_EQ(x, y);
|
|
|
|
x = ScopedPipe<IntTraits>(3);
|
|
EXPECT_TRUE(x);
|
|
EXPECT_NE(x, y);
|
|
|
|
y = ScopedPipe<IntTraits>(4);
|
|
EXPECT_TRUE(y);
|
|
EXPECT_NE(x, y);
|
|
|
|
y = ScopedPipe<IntTraits>(3);
|
|
EXPECT_EQ(x, y);
|
|
}
|
|
|
|
} // namespace openscreen
|