diff options
Diffstat (limited to 'unittests/Editline/EditlineTest.cpp')
-rw-r--r-- | unittests/Editline/EditlineTest.cpp | 74 |
1 files changed, 39 insertions, 35 deletions
diff --git a/unittests/Editline/EditlineTest.cpp b/unittests/Editline/EditlineTest.cpp index d82ef4c17c77..e2552ffdd3b8 100644 --- a/unittests/Editline/EditlineTest.cpp +++ b/unittests/Editline/EditlineTest.cpp @@ -1,4 +1,4 @@ -//===-- EditlineTest.cpp -----------------------------------------*- C++ -*-===// +//===-- EditlineTest.cpp ----------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -191,8 +191,9 @@ EditlineAdapter::SendLine (const std::string &line) eoln, eoln_length * sizeof (char)); - EXPECT_EQ (eoln_length * sizeof (char), input_bytes_written); - return eoln_length * sizeof (char) == input_bytes_written; + EXPECT_NE(-1, input_bytes_written) << strerror(errno); + EXPECT_EQ (eoln_length * sizeof (char), size_t(input_bytes_written)); + return eoln_length * sizeof (char) == size_t(input_bytes_written); } bool @@ -293,49 +294,55 @@ EditlineAdapter::ConsumeAllOutput () } } -TEST (EditlineTest, EditlineReceivesSingleLineText) +class EditlineTestFixture : public ::testing::Test { - setenv ("TERM", "vt100", 1); +private: + EditlineAdapter _el_adapter; + std::shared_ptr<std::thread> _sp_output_thread; - // Create an editline. - EditlineAdapter el_adapter; - EXPECT_TRUE (el_adapter.IsValid ()); - if (!el_adapter.IsValid ()) - return; +public: + void SetUp() + { + // We need a TERM set properly for editline to work as expected. + setenv("TERM", "vt100", 1); + + // Validate the editline adapter. + EXPECT_TRUE(_el_adapter.IsValid()); + if (!_el_adapter.IsValid()) + return; + + // Dump output. + _sp_output_thread.reset(new std::thread([&] { _el_adapter.ConsumeAllOutput(); })); + } + + void TearDown() + { + _el_adapter.CloseInput(); + if (_sp_output_thread) + _sp_output_thread->join(); + } - // Dump output. - std::thread el_output_thread( [&] { el_adapter.ConsumeAllOutput (); }); + EditlineAdapter &GetEditlineAdapter() { return _el_adapter; } +}; +TEST_F(EditlineTestFixture, EditlineReceivesSingleLineText) +{ // Send it some text via our virtual keyboard. const std::string input_text ("Hello, world"); - EXPECT_TRUE (el_adapter.SendLine (input_text)); + EXPECT_TRUE(GetEditlineAdapter().SendLine(input_text)); // Verify editline sees what we put in. std::string el_reported_line; bool input_interrupted = false; - const bool received_line = el_adapter.GetLine (el_reported_line, input_interrupted, TIMEOUT_MILLIS); + const bool received_line = GetEditlineAdapter().GetLine(el_reported_line, input_interrupted, TIMEOUT_MILLIS); EXPECT_TRUE (received_line); EXPECT_FALSE (input_interrupted); EXPECT_EQ (input_text, el_reported_line); - - el_adapter.CloseInput(); - el_output_thread.join(); } -TEST (EditlineTest, EditlineReceivesMultiLineText) +TEST_F(EditlineTestFixture, EditlineReceivesMultiLineText) { - setenv ("TERM", "vt100", 1); - - // Create an editline. - EditlineAdapter el_adapter; - EXPECT_TRUE (el_adapter.IsValid ()); - if (!el_adapter.IsValid ()) - return; - - // Stick editline output/error dumpers on separate threads. - std::thread el_output_thread( [&] { el_adapter.ConsumeAllOutput (); }); - // Send it some text via our virtual keyboard. std::vector<std::string> input_lines; input_lines.push_back ("int foo()"); @@ -344,25 +351,22 @@ TEST (EditlineTest, EditlineReceivesMultiLineText) input_lines.push_back ("}"); input_lines.push_back (""); - EXPECT_TRUE (el_adapter.SendLines (input_lines)); + EXPECT_TRUE(GetEditlineAdapter().SendLines(input_lines)); // Verify editline sees what we put in. lldb_private::StringList el_reported_lines; bool input_interrupted = false; - EXPECT_TRUE (el_adapter.GetLines (el_reported_lines, input_interrupted, TIMEOUT_MILLIS)); + EXPECT_TRUE(GetEditlineAdapter().GetLines(el_reported_lines, input_interrupted, TIMEOUT_MILLIS)); EXPECT_FALSE (input_interrupted); // Without any auto indentation support, our output should directly match our input. EXPECT_EQ (input_lines.size (), el_reported_lines.GetSize ()); if (input_lines.size () == el_reported_lines.GetSize ()) { - for (auto i = 0; i < input_lines.size(); ++i) + for (size_t i = 0; i < input_lines.size(); ++i) EXPECT_EQ (input_lines[i], el_reported_lines[i]); } - - el_adapter.CloseInput(); - el_output_thread.join(); } #endif |