Author: tfiala
Date: Thu Sep 22 11:00:01 2016
New Revision: 282171

URL: http://llvm.org/viewvc/llvm-project?rev=282171&view=rev
Log:
added environment variable-related Args gtests

Also fixed up a couple misbehaving functions.  It is perfectly
legal to have env vars with no values (i.e. the '=' and following
need not be present).

Modified:
    lldb/trunk/source/Interpreter/Args.cpp
    lldb/trunk/unittests/Interpreter/TestArgs.cpp

Modified: lldb/trunk/source/Interpreter/Args.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/Args.cpp?rev=282171&r1=282170&r2=282171&view=diff
==============================================================================
--- lldb/trunk/source/Interpreter/Args.cpp (original)
+++ lldb/trunk/source/Interpreter/Args.cpp Thu Sep 22 11:00:01 2016
@@ -976,13 +976,15 @@ void Args::LongestCommonPrefix(std::stri
 
 void Args::AddOrReplaceEnvironmentVariable(llvm::StringRef env_var_name,
                                            llvm::StringRef new_value) {
-  if (env_var_name.empty() || new_value.empty())
+  if (env_var_name.empty())
     return;
 
   // Build the new entry.
   std::string var_string(env_var_name);
-  var_string += "=";
-  var_string += new_value;
+  if (!new_value.empty()) {
+    var_string += "=";
+    var_string += new_value;
+  }
 
   size_t index = 0;
   if (ContainsEnvironmentVariable(env_var_name, &index)) {
@@ -1006,7 +1008,7 @@ bool Args::ContainsEnvironmentVariable(l
 
     llvm::StringRef name, value;
     std::tie(name, value) = arg_value.split('=');
-    if (name == env_var_name && !value.empty()) {
+    if (name == env_var_name) {
       if (argument_index)
         *argument_index = i;
       return true;

Modified: lldb/trunk/unittests/Interpreter/TestArgs.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Interpreter/TestArgs.cpp?rev=282171&r1=282170&r2=282171&view=diff
==============================================================================
--- lldb/trunk/unittests/Interpreter/TestArgs.cpp (original)
+++ lldb/trunk/unittests/Interpreter/TestArgs.cpp Thu Sep 22 11:00:01 2016
@@ -11,6 +11,9 @@
 
 #include "lldb/Interpreter/Args.h"
 
+#include <limits>
+#include <sstream>
+
 using namespace lldb_private;
 
 TEST(ArgsTest, TestSingleArg) {
@@ -153,3 +156,85 @@ TEST(ArgsTest, StringToScriptLanguage) {
 }
 
 TEST(ArgsTest, StringToVersion) {}
+
+// Environment Variable Tests
+
+class EnvVarFixture: public ::testing::Test {
+protected:
+
+    void SetUp() {
+        args.AppendArgument(llvm::StringRef("Arg1=foo"));
+        args.AppendArgument(llvm::StringRef("Arg2"));
+        args.AppendArgument(llvm::StringRef("Arg3=bar"));
+    }
+
+    size_t GetIndexForEnvVar(llvm::StringRef envvar_name) {
+        size_t argument_index = std::numeric_limits<size_t>::max();
+        EXPECT_TRUE(args.ContainsEnvironmentVariable(envvar_name,
+                                                     &argument_index));
+        EXPECT_LT(argument_index, args.GetArgumentCount());
+        return argument_index;
+    }
+
+    Args  args;
+};
+
+
+TEST_F(EnvVarFixture, TestContainsEnvironmentVariableNoValue) {
+    EXPECT_TRUE(args.ContainsEnvironmentVariable(llvm::StringRef("Arg2")));
+}
+
+TEST_F(EnvVarFixture, TestContainsEnvironmentVariableWithValue) {
+    EXPECT_TRUE(args.ContainsEnvironmentVariable(llvm::StringRef("Arg3")));
+}
+
+TEST_F(EnvVarFixture, TestContainsEnvironmentVariableNonExistentVariable) {
+    auto nonexistent_envvar = llvm::StringRef("ThisEnvVarShouldNotExist");
+    EXPECT_FALSE(args.ContainsEnvironmentVariable(nonexistent_envvar));
+}
+
+TEST_F(EnvVarFixture, TestReplaceEnvironmentVariableInitialNoValueWithNoValue) 
{
+    auto envvar_name = llvm::StringRef("Arg2");
+    auto argument_index = GetIndexForEnvVar(envvar_name);
+
+    args.AddOrReplaceEnvironmentVariable(envvar_name, llvm::StringRef(""));
+    EXPECT_TRUE(args.ContainsEnvironmentVariable(envvar_name));
+    EXPECT_EQ(envvar_name, args.GetArgumentAtIndex(argument_index));
+}
+
+TEST_F(EnvVarFixture, TestReplaceEnvironmentVariableInitialNoValueWithValue) {
+    auto envvar_name = llvm::StringRef("Arg2");
+    auto argument_index = GetIndexForEnvVar(envvar_name);
+
+    auto new_value = llvm::StringRef("NewValue");
+    args.AddOrReplaceEnvironmentVariable(envvar_name, new_value);
+    EXPECT_TRUE(args.ContainsEnvironmentVariable(envvar_name));
+
+    std::stringstream stream;
+    stream << envvar_name.str() << '=' << new_value.str();
+    EXPECT_EQ(llvm::StringRef(stream.str()),
+              args.GetArgumentAtIndex(argument_index));
+}
+
+TEST_F(EnvVarFixture, TestReplaceEnvironmentVariableInitialValueWithNoValue) {
+    auto envvar_name = llvm::StringRef("Arg1");
+    auto argument_index = GetIndexForEnvVar(envvar_name);
+
+    args.AddOrReplaceEnvironmentVariable(envvar_name, llvm::StringRef(""));
+    EXPECT_TRUE(args.ContainsEnvironmentVariable(envvar_name));
+    EXPECT_EQ(envvar_name, args.GetArgumentAtIndex(argument_index));
+}
+
+TEST_F(EnvVarFixture, TestReplaceEnvironmentVariableInitialValueWithValue) {
+    auto envvar_name = llvm::StringRef("Arg1");
+    auto argument_index = GetIndexForEnvVar(envvar_name);
+
+    auto new_value = llvm::StringRef("NewValue");
+    args.AddOrReplaceEnvironmentVariable(envvar_name, new_value);
+    EXPECT_TRUE(args.ContainsEnvironmentVariable(envvar_name));
+
+    std::stringstream stream;
+    stream << envvar_name.str() << '=' << new_value.str();
+    EXPECT_EQ(llvm::StringRef(stream.str()),
+              args.GetArgumentAtIndex(argument_index));
+}


_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to