diff options
author | 2020-08-03 14:33:06 +0000 | |
---|---|---|
committer | 2020-08-03 14:33:06 +0000 | |
commit | 061da546b983eb767bad15e67af1174fb0bcf31c (patch) | |
tree | 83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/unittests/Signals/UnixSignalsTest.cpp | |
parent | Import LLVM 10.0.0 release including clang, lld and lldb. (diff) | |
download | wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip |
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom
tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/unittests/Signals/UnixSignalsTest.cpp')
-rw-r--r-- | gnu/llvm/lldb/unittests/Signals/UnixSignalsTest.cpp | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/unittests/Signals/UnixSignalsTest.cpp b/gnu/llvm/lldb/unittests/Signals/UnixSignalsTest.cpp new file mode 100644 index 00000000000..709b100c291 --- /dev/null +++ b/gnu/llvm/lldb/unittests/Signals/UnixSignalsTest.cpp @@ -0,0 +1,139 @@ +//===-- UnixSignalsTest.cpp -------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +#include <string> + +#include "gtest/gtest.h" + +#include "lldb/Target/UnixSignals.h" +#include "llvm/Support/FormatVariadic.h" + +using namespace lldb; +using namespace lldb_private; +using llvm::None; + +class TestSignals : public UnixSignals { +public: + TestSignals() { + m_signals.clear(); + AddSignal(2, "SIG2", false, true, true, "DESC2"); + AddSignal(4, "SIG4", true, false, true, "DESC4"); + AddSignal(8, "SIG8", true, true, true, "DESC8"); + AddSignal(16, "SIG16", true, false, false, "DESC16"); + } +}; + +void ExpectEqArrays(llvm::ArrayRef<int32_t> expected, + llvm::ArrayRef<int32_t> observed, const char *file, + int line) { + std::string location = llvm::formatv("{0}:{1}", file, line); + ASSERT_EQ(expected.size(), observed.size()) << location; + + for (size_t i = 0; i < observed.size(); ++i) { + ASSERT_EQ(expected[i], observed[i]) + << "array index: " << i << "location:" << location; + } +} + +#define EXPECT_EQ_ARRAYS(expected, observed) \ + ExpectEqArrays((expected), (observed), __FILE__, __LINE__); + +TEST(UnixSignalsTest, Iteration) { + TestSignals signals; + + EXPECT_EQ(4, signals.GetNumSignals()); + EXPECT_EQ(2, signals.GetFirstSignalNumber()); + EXPECT_EQ(4, signals.GetNextSignalNumber(2)); + EXPECT_EQ(8, signals.GetNextSignalNumber(4)); + EXPECT_EQ(16, signals.GetNextSignalNumber(8)); + EXPECT_EQ(LLDB_INVALID_SIGNAL_NUMBER, signals.GetNextSignalNumber(16)); +} + +TEST(UnixSignalsTest, GetInfo) { + TestSignals signals; + + bool should_suppress = false, should_stop = false, should_notify = false; + int32_t signo = 4; + std::string name = + signals.GetSignalInfo(signo, should_suppress, should_stop, should_notify); + EXPECT_EQ("SIG4", name); + EXPECT_EQ(true, should_suppress); + EXPECT_EQ(false, should_stop); + EXPECT_EQ(true, should_notify); + + EXPECT_EQ(true, signals.GetShouldSuppress(signo)); + EXPECT_EQ(false, signals.GetShouldStop(signo)); + EXPECT_EQ(true, signals.GetShouldNotify(signo)); + EXPECT_EQ(name, signals.GetSignalAsCString(signo)); +} + +TEST(UnixSignalsTest, VersionChange) { + TestSignals signals; + + int32_t signo = 8; + uint64_t ver = signals.GetVersion(); + EXPECT_GT(ver, 0ull); + EXPECT_EQ(true, signals.GetShouldSuppress(signo)); + EXPECT_EQ(true, signals.GetShouldStop(signo)); + EXPECT_EQ(true, signals.GetShouldNotify(signo)); + + EXPECT_EQ(signals.GetVersion(), ver); + + signals.SetShouldSuppress(signo, false); + EXPECT_LT(ver, signals.GetVersion()); + ver = signals.GetVersion(); + + signals.SetShouldStop(signo, true); + EXPECT_LT(ver, signals.GetVersion()); + ver = signals.GetVersion(); + + signals.SetShouldNotify(signo, false); + EXPECT_LT(ver, signals.GetVersion()); + ver = signals.GetVersion(); + + EXPECT_EQ(false, signals.GetShouldSuppress(signo)); + EXPECT_EQ(true, signals.GetShouldStop(signo)); + EXPECT_EQ(false, signals.GetShouldNotify(signo)); + + EXPECT_EQ(ver, signals.GetVersion()); +} + +TEST(UnixSignalsTest, GetFilteredSignals) { + TestSignals signals; + + auto all_signals = signals.GetFilteredSignals(None, None, None); + std::vector<int32_t> expected = {2, 4, 8, 16}; + EXPECT_EQ_ARRAYS(expected, all_signals); + + auto supressed = signals.GetFilteredSignals(true, None, None); + expected = {4, 8, 16}; + EXPECT_EQ_ARRAYS(expected, supressed); + + auto not_supressed = signals.GetFilteredSignals(false, None, None); + expected = {2}; + EXPECT_EQ_ARRAYS(expected, not_supressed); + + auto stopped = signals.GetFilteredSignals(None, true, None); + expected = {2, 8}; + EXPECT_EQ_ARRAYS(expected, stopped); + + auto not_stopped = signals.GetFilteredSignals(None, false, None); + expected = {4, 16}; + EXPECT_EQ_ARRAYS(expected, not_stopped); + + auto notified = signals.GetFilteredSignals(None, None, true); + expected = {2, 4, 8}; + EXPECT_EQ_ARRAYS(expected, notified); + + auto not_notified = signals.GetFilteredSignals(None, None, false); + expected = {16}; + EXPECT_EQ_ARRAYS(expected, not_notified); + + auto signal4 = signals.GetFilteredSignals(true, false, true); + expected = {4}; + EXPECT_EQ_ARRAYS(expected, signal4); +} |