[Lldb-commits] [lldb] r251681 - Added real editline tests.
Zachary Turner via lldb-commits
lldb-commits at lists.llvm.org
Thu Oct 29 23:26:22 PDT 2015
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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20151030/93a8bef8/attachment-0001.html>
More information about the lldb-commits
mailing list