[Lldb-commits] [lldb] r251681 - Added real editline tests.
Todd Fiala via lldb-commits
lldb-commits at lists.llvm.org
Fri Oct 30 09:40:48 PDT 2015
> What are all these setenv lines for?
libedit requires a TERM to know how to deal with the screen. We can't talk
to libedit if it can't figure out what kind of terminal it is working with.
> Another option is to use TEST_F instead of TEST(), and then declare a
class with Setup() and TearDown() methods, and do the setenv() in the setup
method.
I am planning on doing that. I have another few tests I am writing. I
have a "reduce duplication" XP style phase that will eliminate that. Good
catch. I should have done it at my second test.
On Thu, Oct 29, 2015 at 11:26 PM, Zachary Turner <zturner at google.com> wrote:
>
>
> On Thu, Oct 29, 2015 at 7:57 PM Todd Fiala via lldb-commits <
> lldb-commits at lists.llvm.org> wrote:
>
>> Author: tfiala
>> Date: Thu Oct 29 21:54:52 2015
>> New Revision: 251681
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=251681&view=rev
>> Log:
>> Added real editline tests.
>>
>> These are two simple tests that make sure single line and
>> multiline content are processed and received by Editline.cpp.
>>
>> Fancier tests to come...
>>
>> Modified:
>> lldb/trunk/lldb.xcodeproj/project.pbxproj
>> lldb/trunk/lldb.xcodeproj/xcshareddata/xcschemes/lldb-gtest.xcscheme
>> lldb/trunk/source/Host/CMakeLists.txt
>> lldb/trunk/unittests/Editline/EditlineTest.cpp
>>
>> Modified: lldb/trunk/lldb.xcodeproj/project.pbxproj
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/project.pbxproj?rev=251681&r1=251680&r2=251681&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/lldb.xcodeproj/project.pbxproj (original)
>> +++ lldb/trunk/lldb.xcodeproj/project.pbxproj Thu Oct 29 21:54:52 2015
>> @@ -909,13 +909,6 @@
>> /* End PBXBuildFile section */
>>
>> /* Begin PBXContainerItemProxy section */
>> - 2326CF411BDD636100A5CEAC /* PBXContainerItemProxy */ = {
>> - isa = PBXContainerItemProxy;
>> - containerPortal = 08FB7793FE84155DC02AAC07 /*
>> Project object */;
>> - proxyType = 1;
>> - remoteGlobalIDString = 26680206115FD0ED008E1FE4;
>> - remoteInfo = LLDB;
>> - };
>> 235AFBC1199BC70700897A4B /* PBXContainerItemProxy */ = {
>> isa = PBXContainerItemProxy;
>> containerPortal = 08FB7793FE84155DC02AAC07 /*
>> Project object */;
>> @@ -937,6 +930,13 @@
>> remoteGlobalIDString = 456F67721AD46CE9002850C2;
>> remoteInfo = "debugserver-mini";
>> };
>> + 23AB8B6A1BDF513B008BF3B0 /* PBXContainerItemProxy */ = {
>> + isa = PBXContainerItemProxy;
>> + containerPortal = 08FB7793FE84155DC02AAC07 /*
>> Project object */;
>> + proxyType = 1;
>> + remoteGlobalIDString = 2689FFC913353D7A00698AC0;
>> + remoteInfo = "lldb-core";
>> + };
>> 262CFC7111A450CB00946C6C /* PBXContainerItemProxy */ = {
>> isa = PBXContainerItemProxy;
>> containerPortal = 265E9BE1115C2BAA00D0DCCB /*
>> debugserver.xcodeproj */;
>> @@ -5831,7 +5831,7 @@
>> buildRules = (
>> );
>> dependencies = (
>> - 2326CF421BDD636100A5CEAC /*
>> PBXTargetDependency */,
>> + 23AB8B6B1BDF513B008BF3B0 /*
>> PBXTargetDependency */,
>> );
>> name = "lldb-gtest";
>> productName = "lldb-gtest";
>> @@ -6965,11 +6965,6 @@
>> /* End PBXSourcesBuildPhase section */
>>
>> /* Begin PBXTargetDependency section */
>> - 2326CF421BDD636100A5CEAC /* PBXTargetDependency */ = {
>> - isa = PBXTargetDependency;
>> - target = 26680206115FD0ED008E1FE4 /* LLDB */;
>> - targetProxy = 2326CF411BDD636100A5CEAC /*
>> PBXContainerItemProxy */;
>> - };
>> 235AFBC2199BC70700897A4B /* PBXTargetDependency */ = {
>> isa = PBXTargetDependency;
>> target = 26F5C26910F3D9A4009D5894 /* lldb-tool */;
>> @@ -6980,6 +6975,11 @@
>> target = 235AFBB5199BC6AD00897A4B /* Linux */;
>> targetProxy = 235AFBC3199BC70B00897A4B /*
>> PBXContainerItemProxy */;
>> };
>> + 23AB8B6B1BDF513B008BF3B0 /* PBXTargetDependency */ = {
>> + isa = PBXTargetDependency;
>> + target = 2689FFC913353D7A00698AC0 /* lldb-core */;
>> + targetProxy = 23AB8B6A1BDF513B008BF3B0 /*
>> PBXContainerItemProxy */;
>> + };
>> 262CFC7211A450CB00946C6C /* PBXTargetDependency */ = {
>> isa = PBXTargetDependency;
>> name = debugserver;
>> @@ -7404,31 +7404,13 @@
>> 239504D81BDD451400963CEA /* Debug */ = {
>> isa = XCBuildConfiguration;
>> buildSettings = {
>> - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
>> - CLANG_ENABLE_MODULES = YES;
>> - CLANG_ENABLE_OBJC_ARC = YES;
>> - CLANG_WARN_DIRECT_OBJC_ISA_USAGE =
>> YES_ERROR;
>> - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
>> - CODE_SIGN_IDENTITY = "-";
>> - ENABLE_TESTABILITY = YES;
>> FRAMEWORK_SEARCH_PATHS = (
>> "$(inherited)",
>>
>> "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"",
>>
>> "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Frameworks",
>> );
>> - GCC_C_LANGUAGE_STANDARD = gnu99;
>> - GCC_DYNAMIC_NO_PIC = NO;
>> - GCC_NO_COMMON_BLOCKS = YES;
>> - GCC_PREPROCESSOR_DEFINITIONS = (
>> - "DEBUG=1",
>> - "$(inherited)",
>> - );
>> - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
>> - GCC_WARN_UNINITIALIZED_AUTOS =
>> YES_AGGRESSIVE;
>> LLDB_GTESTS_CFLAGS = "-I
>> $(LLVM_SOURCE_DIR)/utils/unittest/googletest/include -I
>> $(LLVM_SOURCE_DIR)/include -I $(LLVM_BUILD_DIR)/x86_64/include -I include
>> -I source -I $(PYTHON_FRAMEWORK_PATH)/Headers";
>> LLDB_GTESTS_LDFLAGS =
>> "$(LLVM_BUILD_DIR)/x86_64/$(LLVM_CONFIGURATION)/lib/libgtest.a -L
>> $(PYTHON_FRAMEWORK_PATH)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/lib
>> -l python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)";
>> - MACOSX_DEPLOYMENT_TARGET = 10.11;
>> - MTL_ENABLE_DEBUG_INFO = YES;
>> OTHER_CFLAGS = (
>> "-flimit-debug-info",
>> "-Wparentheses",
>> @@ -7453,38 +7435,19 @@
>> "$(LLDB_GTESTS_LDFLAGS)",
>> );
>> PRODUCT_NAME = "$(TARGET_NAME)";
>> - SDKROOT = macosx;
>> };
>> name = Debug;
>> };
>> 239504D91BDD451400963CEA /* DebugClang */ = {
>> isa = XCBuildConfiguration;
>> buildSettings = {
>> - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
>> - CLANG_ENABLE_MODULES = YES;
>> - CLANG_ENABLE_OBJC_ARC = YES;
>> - CLANG_WARN_DIRECT_OBJC_ISA_USAGE =
>> YES_ERROR;
>> - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
>> - CODE_SIGN_IDENTITY = "-";
>> - ENABLE_TESTABILITY = YES;
>> FRAMEWORK_SEARCH_PATHS = (
>> "$(inherited)",
>>
>> "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"",
>>
>> "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Frameworks",
>> );
>> - GCC_C_LANGUAGE_STANDARD = gnu99;
>> - GCC_DYNAMIC_NO_PIC = NO;
>> - GCC_NO_COMMON_BLOCKS = YES;
>> - GCC_PREPROCESSOR_DEFINITIONS = (
>> - "DEBUG=1",
>> - "$(inherited)",
>> - );
>> - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
>> - GCC_WARN_UNINITIALIZED_AUTOS =
>> YES_AGGRESSIVE;
>> LLDB_GTESTS_CFLAGS = "-I
>> $(LLVM_SOURCE_DIR)/utils/unittest/googletest/include -I
>> $(LLVM_SOURCE_DIR)/include -I $(LLVM_BUILD_DIR)/x86_64/include -I include
>> -I source -I $(PYTHON_FRAMEWORK_PATH)/Headers";
>> LLDB_GTESTS_LDFLAGS =
>> "$(LLVM_BUILD_DIR)/x86_64/$(LLVM_CONFIGURATION)/lib/libgtest.a -L
>> $(PYTHON_FRAMEWORK_PATH)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/lib
>> -l python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)";
>> - MACOSX_DEPLOYMENT_TARGET = 10.11;
>> - MTL_ENABLE_DEBUG_INFO = YES;
>> OTHER_CFLAGS = (
>> "-flimit-debug-info",
>> "-Wparentheses",
>> @@ -7509,34 +7472,19 @@
>> "$(LLDB_GTESTS_LDFLAGS)",
>> );
>> PRODUCT_NAME = "$(TARGET_NAME)";
>> - SDKROOT = macosx;
>> };
>> name = DebugClang;
>> };
>> 239504DA1BDD451400963CEA /* Release */ = {
>> isa = XCBuildConfiguration;
>> buildSettings = {
>> - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
>> - CLANG_ENABLE_MODULES = YES;
>> - CLANG_ENABLE_OBJC_ARC = YES;
>> - CLANG_WARN_DIRECT_OBJC_ISA_USAGE =
>> YES_ERROR;
>> - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
>> - CODE_SIGN_IDENTITY = "-";
>> - DEBUG_INFORMATION_FORMAT =
>> "dwarf-with-dsym";
>> - ENABLE_NS_ASSERTIONS = NO;
>> FRAMEWORK_SEARCH_PATHS = (
>> "$(inherited)",
>>
>> "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"",
>>
>> "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Frameworks",
>> );
>> - GCC_C_LANGUAGE_STANDARD = gnu99;
>> - GCC_NO_COMMON_BLOCKS = YES;
>> - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
>> - GCC_WARN_UNINITIALIZED_AUTOS =
>> YES_AGGRESSIVE;
>> LLDB_GTESTS_CFLAGS = "-I
>> $(LLVM_SOURCE_DIR)/utils/unittest/googletest/include -I
>> $(LLVM_SOURCE_DIR)/include -I $(LLVM_BUILD_DIR)/x86_64/include -I include
>> -I source -I $(PYTHON_FRAMEWORK_PATH)/Headers";
>> LLDB_GTESTS_LDFLAGS =
>> "$(LLVM_BUILD_DIR)/x86_64/$(LLVM_CONFIGURATION)/lib/libgtest.a -L
>> $(PYTHON_FRAMEWORK_PATH)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/lib
>> -l python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)";
>> - MACOSX_DEPLOYMENT_TARGET = 10.11;
>> - MTL_ENABLE_DEBUG_INFO = NO;
>> OTHER_CFLAGS = (
>> "-flimit-debug-info",
>> "-Wparentheses",
>> @@ -7561,34 +7509,19 @@
>> "$(LLDB_GTESTS_LDFLAGS)",
>> );
>> PRODUCT_NAME = "$(TARGET_NAME)";
>> - SDKROOT = macosx;
>> };
>> name = Release;
>> };
>> 239504DB1BDD451400963CEA /* BuildAndIntegration */ = {
>> isa = XCBuildConfiguration;
>> buildSettings = {
>> - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
>> - CLANG_ENABLE_MODULES = YES;
>> - CLANG_ENABLE_OBJC_ARC = YES;
>> - CLANG_WARN_DIRECT_OBJC_ISA_USAGE =
>> YES_ERROR;
>> - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
>> - CODE_SIGN_IDENTITY = "-";
>> - DEBUG_INFORMATION_FORMAT =
>> "dwarf-with-dsym";
>> - ENABLE_NS_ASSERTIONS = NO;
>> FRAMEWORK_SEARCH_PATHS = (
>> "$(inherited)",
>>
>> "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"",
>>
>> "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Frameworks",
>> );
>> - GCC_C_LANGUAGE_STANDARD = gnu99;
>> - GCC_NO_COMMON_BLOCKS = YES;
>> - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
>> - GCC_WARN_UNINITIALIZED_AUTOS =
>> YES_AGGRESSIVE;
>> LLDB_GTESTS_CFLAGS = "-I
>> $(LLVM_SOURCE_DIR)/utils/unittest/googletest/include -I
>> $(LLVM_SOURCE_DIR)/include -I $(LLVM_BUILD_DIR)/x86_64/include -I include
>> -I source -I $(PYTHON_FRAMEWORK_PATH)/Headers";
>> LLDB_GTESTS_LDFLAGS =
>> "$(LLVM_BUILD_DIR)/x86_64/$(LLVM_CONFIGURATION)/lib/libgtest.a -L
>> $(PYTHON_FRAMEWORK_PATH)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/lib
>> -l python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)";
>> - MACOSX_DEPLOYMENT_TARGET = 10.11;
>> - MTL_ENABLE_DEBUG_INFO = NO;
>> OTHER_CFLAGS = (
>> "-flimit-debug-info",
>> "-Wparentheses",
>> @@ -7613,7 +7546,6 @@
>> "$(LLDB_GTESTS_LDFLAGS)",
>> );
>> PRODUCT_NAME = "$(TARGET_NAME)";
>> - SDKROOT = macosx;
>> };
>> name = BuildAndIntegration;
>> };
>>
>> Modified:
>> lldb/trunk/lldb.xcodeproj/xcshareddata/xcschemes/lldb-gtest.xcscheme
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/xcshareddata/xcschemes/lldb-gtest.xcscheme?rev=251681&r1=251680&r2=251681&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/lldb.xcodeproj/xcshareddata/xcschemes/lldb-gtest.xcscheme
>> (original)
>> +++ lldb/trunk/lldb.xcodeproj/xcshareddata/xcschemes/lldb-gtest.xcscheme
>> Thu Oct 29 21:54:52 2015
>> @@ -42,7 +42,7 @@
>> </AdditionalOptions>
>> </TestAction>
>> <LaunchAction
>> - buildConfiguration = "DebugClang"
>> + buildConfiguration = "Debug"
>> selectedDebuggerIdentifier =
>> "Xcode.DebuggerFoundation.Debugger.LLDB"
>> selectedLauncherIdentifier =
>> "Xcode.DebuggerFoundation.Launcher.LLDB"
>> launchStyle = "0"
>>
>> Modified: lldb/trunk/source/Host/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/CMakeLists.txt?rev=251681&r1=251680&r2=251681&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/source/Host/CMakeLists.txt (original)
>> +++ lldb/trunk/source/Host/CMakeLists.txt Thu Oct 29 21:54:52 2015
>> @@ -170,6 +170,19 @@ if (${get_python_libdir})
>> endif()
>> endif()
>>
>> +if (${get_python_libdir})
>> + # Call a python script to gather the arch-specific libdir for
>> + # modules like the lldb module.
>> + execute_process(
>> + COMMAND ${PYTHON_EXECUTABLE}
>> ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/get_relative_lib_dir.py
>> + RESULT_VARIABLE get_libdir_status
>> + OUTPUT_VARIABLE relative_libdir
>> + )
>> + if (get_libdir_status EQUAL 0)
>> + add_definitions(-DLLDB_PYTHON_RELATIVE_LIBDIR="${relative_libdir}")
>> + endif()
>> +endif()
>> +
>> add_lldb_library(lldbHost ${HOST_SOURCES})
>>
>> if (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
>>
>> Modified: lldb/trunk/unittests/Editline/EditlineTest.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Editline/EditlineTest.cpp?rev=251681&r1=251680&r2=251681&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/unittests/Editline/EditlineTest.cpp (original)
>> +++ lldb/trunk/unittests/Editline/EditlineTest.cpp Thu Oct 29 21:54:52
>> 2015
>> @@ -7,9 +7,362 @@
>> //
>>
>> //===----------------------------------------------------------------------===//
>>
>> +#ifndef LLDB_DISABLE_LIBEDIT
>> +
>> +#define EDITLINE_TEST_DUMP_OUTPUT 0
>> +
>> +#include <stdio.h>
>> +#include <unistd.h>
>> +
>> +#include <memory>
>> +#include <thread>
>> +
>> #include "gtest/gtest.h"
>>
>> -TEST(EditlineTest, BasicTest)
>> +#include "lldb/Core/Error.h"
>> +#include "lldb/Core/StringList.h"
>> +#include "lldb/Host/Editline.h"
>> +#include "lldb/Host/Pipe.h"
>> +#include "lldb/Utility/PseudoTerminal.h"
>> +
>> +namespace
>> {
>> - EXPECT_TRUE(true);
>> + const size_t TIMEOUT_MILLIS = 5000;
>> }
>> +
>> +class FilePointer
>> +{
>> +public:
>> +
>> + FilePointer () = delete;
>> +
>> + FilePointer (const FilePointer&) = delete;
>> +
>> + FilePointer (FILE *file_p)
>> + : _file_p (file_p)
>> + {
>> + }
>> +
>> + ~FilePointer ()
>> + {
>> + if (_file_p != nullptr)
>> + {
>> + const int close_result = fclose (_file_p);
>> + EXPECT_EQ(0, close_result);
>> + }
>> + }
>> +
>> + operator FILE* ()
>> + {
>> + return _file_p;
>> + }
>> +
>> +private:
>> +
>> + FILE *_file_p;
>> +
>> +};
>> +
>> +/**
>> + Wraps an Editline class, providing a simple way to feed
>> + input (as if from the keyboard) and receive output from Editline.
>> + */
>> +class EditlineAdapter
>> +{
>> +public:
>> +
>> + EditlineAdapter ();
>> +
>> + void
>> + CloseInput ();
>> +
>> + bool
>> + IsValid () const
>> + {
>> + return _editline_sp.get () != nullptr;
>> + }
>> +
>> + lldb_private::Editline&
>> + GetEditline ()
>> + {
>> + return *_editline_sp;
>> + }
>> +
>> + bool
>> + SendLine (const std::string &line);
>> +
>> + bool
>> + SendLines (const std::vector<std::string> &lines);
>> +
>> + bool
>> + GetLine (std::string &line, bool &interrupted, size_t
>> timeout_millis);
>> +
>> + bool
>> + GetLines (lldb_private::StringList &lines, bool &interrupted, size_t
>> timeout_millis);
>> +
>> + void
>> + ConsumeAllOutput ();
>> +
>> +private:
>> +
>> + static bool
>> + IsInputComplete (
>> + lldb_private::Editline * editline,
>> + lldb_private::StringList & lines,
>> + void * baton);
>> +
>> + std::unique_ptr<lldb_private::Editline> _editline_sp;
>> +
>> + lldb_utility::PseudoTerminal _pty;
>> + int _pty_master_fd;
>> + int _pty_slave_fd;
>> +
>> + std::unique_ptr<FilePointer> _el_slave_file;
>> +};
>> +
>> +EditlineAdapter::EditlineAdapter () :
>> + _editline_sp (),
>> + _pty (),
>> + _pty_master_fd (-1),
>> + _pty_slave_fd (-1),
>> + _el_slave_file ()
>> +{
>> + lldb_private::Error error;
>> +
>> + // Open the first master pty available.
>> + char error_string[256];
>> + error_string[0] = '\0';
>> + if (!_pty.OpenFirstAvailableMaster (O_RDWR, error_string, sizeof
>> (error_string)))
>> + {
>> + fprintf(stderr, "failed to open first available master pty:
>> '%s'\n", error_string);
>> + return;
>> + }
>> +
>> + // Grab the master fd. This is a file descriptor we will:
>> + // (1) write to when we want to send input to editline.
>> + // (2) read from when we want to see what editline sends back.
>> + _pty_master_fd = _pty.GetMasterFileDescriptor();
>> +
>> + // Open the corresponding slave pty.
>> + if (!_pty.OpenSlave (O_RDWR, error_string, sizeof (error_string)))
>> + {
>> + fprintf(stderr, "failed to open slave pty: '%s'\n",
>> error_string);
>> + return;
>> + }
>> + _pty_slave_fd = _pty.GetSlaveFileDescriptor();
>> +
>> + _el_slave_file.reset (new FilePointer (fdopen (_pty_slave_fd,
>> "rw")));
>> + EXPECT_FALSE (nullptr == *_el_slave_file);
>> + if (*_el_slave_file == nullptr)
>> + return;
>> +
>> + // Create an Editline instance.
>> + _editline_sp.reset (new lldb_private::Editline("gtest editor",
>> *_el_slave_file, *_el_slave_file, *_el_slave_file, false));
>> + _editline_sp->SetPrompt ("> ");
>> +
>> + // Hookup our input complete callback.
>> + _editline_sp->SetIsInputCompleteCallback(IsInputComplete, this);
>> +}
>> +
>> +void
>> +EditlineAdapter::CloseInput ()
>> +{
>> + if (_el_slave_file != nullptr)
>> + _el_slave_file.reset (nullptr);
>> +}
>> +
>> +bool
>> +EditlineAdapter::SendLine (const std::string &line)
>> +{
>> + // Ensure we're valid before proceeding.
>> + if (!IsValid ())
>> + return false;
>> +
>> + // Write the line out to the pipe connected to editline's input.
>> + ssize_t input_bytes_written =
>> + ::write (_pty_master_fd,
>> + line.c_str(),
>> + line.length() * sizeof (std::string::value_type));
>> +
>> + const char *eoln = "\n";
>> + const size_t eoln_length = strlen(eoln);
>> + input_bytes_written =
>> + ::write (_pty_master_fd,
>> + eoln,
>> + eoln_length * sizeof (char));
>> +
>> + EXPECT_EQ (eoln_length * sizeof (char), input_bytes_written);
>> + return eoln_length * sizeof (char) == input_bytes_written;
>> +}
>> +
>> +bool
>> +EditlineAdapter::SendLines (const std::vector<std::string> &lines)
>> +{
>> + for (auto &line : lines)
>> + {
>> +#if EDITLINE_TEST_DUMP_OUTPUT
>> + printf ("<stdin> sending line \"%s\"\n", line.c_str());
>> +#endif
>> + if (!SendLine (line))
>> + return false;
>> + }
>> + return true;
>> +}
>> +
>> +// We ignore the timeout for now.
>> +bool
>> +EditlineAdapter::GetLine (std::string &line, bool &interrupted, size_t
>> /* timeout_millis */)
>> +{
>> + // Ensure we're valid before proceeding.
>> + if (!IsValid ())
>> + return false;
>> +
>> + _editline_sp->GetLine (line, interrupted);
>> + return true;
>> +}
>> +
>> +bool
>> +EditlineAdapter::GetLines (lldb_private::StringList &lines, bool
>> &interrupted, size_t /* timeout_millis */)
>> +{
>> + // Ensure we're valid before proceeding.
>> + if (!IsValid ())
>> + return false;
>> +
>> + _editline_sp->GetLines (1, lines, interrupted);
>> + return true;
>> +}
>> +
>> +bool
>> +EditlineAdapter::IsInputComplete (
>> + lldb_private::Editline * editline,
>> + lldb_private::StringList & lines,
>> + void * baton)
>> +{
>> + // We'll call ourselves complete if we've received a balanced set of
>> braces.
>> + int start_block_count = 0;
>> + int brace_balance = 0;
>> +
>> + for (size_t i = 0; i < lines.GetSize (); ++i)
>> + {
>> + for (auto ch : lines[i])
>> + {
>> + if (ch == '{')
>> + {
>> + ++start_block_count;
>> + ++brace_balance;
>> + }
>> + else if (ch == '}')
>> + --brace_balance;
>> + }
>> + }
>> +
>> + return (start_block_count > 0) && (brace_balance == 0);
>> +}
>> +
>> +void
>> +EditlineAdapter::ConsumeAllOutput ()
>> +{
>> + FilePointer output_file (fdopen (_pty_master_fd, "r"));
>> +
>> + int ch;
>> + while ((ch = fgetc(output_file)) != EOF)
>> + {
>> +#if EDITLINE_TEST_DUMP_OUTPUT
>> + char display_str[] = { 0, 0, 0 };
>> + switch (ch)
>> + {
>> + case '\t':
>> + display_str[0] = '\\';
>> + display_str[1] = 't';
>> + break;
>> + case '\n':
>> + display_str[0] = '\\';
>> + display_str[1] = 'n';
>> + break;
>> + case '\r':
>> + display_str[0] = '\\';
>> + display_str[1] = 'r';
>> + break;
>> + default:
>> + display_str[0] = ch;
>> + break;
>> + }
>> + printf ("<stdout> 0x%02x (%03d) (%s)\n", ch, ch, display_str);
>> + // putc(ch, stdout);
>> +#endif
>> + }
>> +}
>>
> This strikes me as a little odd. What's this for? Should a unittest
> really have debug printfs?
>
>
>> +
>> +TEST (EditlineTest, EditlineReceivesSingleLineText)
>> +{
>> + setenv ("TERM", "vt100", 1);
>>
> What are all these setenv lines for? Another option is to use TEST_F
> instead of TEST(), and then declare a class with Setup() and TearDown()
> methods, and do the setenv() in the setup method. Then this environment
> variable will be set in every test run. That said, it still feels a little
> dirty to have the test muck with environment variables. How does Editline
> use this?
>
--
-Todd
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20151030/eb917d78/attachment-0001.html>
More information about the lldb-commits
mailing list