base: CommandLine::RemoveSwitch should also remove from argv
CommandLine::RemoveSwitch should also remove the switch from argv_.
Bug: 964068
Test: base_unittests --gtest_filter=*CommandLine*
Change-Id: If44106642c8089b83eb897e09c98ab8cf88fa24b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1653929
Commit-Queue: Pavol Marko <[email protected]>
Reviewed-by: Daniel Cheng <[email protected]>
Cr-Commit-Position: refs/heads/master@{#669073}
diff --git a/base/command_line_unittest.cc b/base/command_line_unittest.cc
index 26a045b..d4194fc 100644
--- a/base/command_line_unittest.cc
+++ b/base/command_line_unittest.cc
@@ -13,6 +13,7 @@
#include "base/strings/strcat.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace base {
@@ -441,9 +442,9 @@
}
TEST(CommandLineTest, RemoveSwitch) {
- std::string switch1 = "switch1";
- std::string switch2 = "switch2";
- std::string value2 = "value";
+ const std::string switch1 = "switch1";
+ const std::string switch2 = "switch2";
+ const std::string value2 = "value";
CommandLine cl(FilePath(FILE_PATH_LITERAL("Program")));
@@ -453,12 +454,90 @@
EXPECT_TRUE(cl.HasSwitch(switch1));
EXPECT_TRUE(cl.HasSwitch(switch2));
EXPECT_EQ(value2, cl.GetSwitchValueASCII(switch2));
+ EXPECT_THAT(cl.argv(),
+ testing::ElementsAre(FILE_PATH_LITERAL("Program"),
+ FILE_PATH_LITERAL("--switch1"),
+ FILE_PATH_LITERAL("--switch2=value")));
cl.RemoveSwitch(switch1);
EXPECT_FALSE(cl.HasSwitch(switch1));
EXPECT_TRUE(cl.HasSwitch(switch2));
EXPECT_EQ(value2, cl.GetSwitchValueASCII(switch2));
+ EXPECT_THAT(cl.argv(),
+ testing::ElementsAre(FILE_PATH_LITERAL("Program"),
+ FILE_PATH_LITERAL("--switch2=value")));
+}
+
+TEST(CommandLineTest, RemoveSwitchWithValue) {
+ const std::string switch1 = "switch1";
+ const std::string switch2 = "switch2";
+ const std::string value2 = "value";
+
+ CommandLine cl(FilePath(FILE_PATH_LITERAL("Program")));
+
+ cl.AppendSwitch(switch1);
+ cl.AppendSwitchASCII(switch2, value2);
+
+ EXPECT_TRUE(cl.HasSwitch(switch1));
+ EXPECT_TRUE(cl.HasSwitch(switch2));
+ EXPECT_EQ(value2, cl.GetSwitchValueASCII(switch2));
+ EXPECT_THAT(cl.argv(),
+ testing::ElementsAre(FILE_PATH_LITERAL("Program"),
+ FILE_PATH_LITERAL("--switch1"),
+ FILE_PATH_LITERAL("--switch2=value")));
+
+ cl.RemoveSwitch(switch2);
+
+ EXPECT_TRUE(cl.HasSwitch(switch1));
+ EXPECT_FALSE(cl.HasSwitch(switch2));
+ EXPECT_THAT(cl.argv(), testing::ElementsAre(FILE_PATH_LITERAL("Program"),
+ FILE_PATH_LITERAL("--switch1")));
+}
+
+TEST(CommandLineTest, AppendAndRemoveSwitchWithDefaultPrefix) {
+ CommandLine cl(FilePath(FILE_PATH_LITERAL("Program")));
+
+ cl.AppendSwitch("foo");
+ EXPECT_THAT(cl.argv(), testing::ElementsAre(FILE_PATH_LITERAL("Program"),
+ FILE_PATH_LITERAL("--foo")));
+ EXPECT_EQ(0u, cl.GetArgs().size());
+
+ cl.RemoveSwitch("foo");
+ EXPECT_THAT(cl.argv(), testing::ElementsAre(FILE_PATH_LITERAL("Program")));
+ EXPECT_EQ(0u, cl.GetArgs().size());
+}
+
+TEST(CommandLineTest, AppendAndRemoveSwitchWithAlternativePrefix) {
+ CommandLine cl(FilePath(FILE_PATH_LITERAL("Program")));
+
+ cl.AppendSwitch("-foo");
+ EXPECT_THAT(cl.argv(), testing::ElementsAre(FILE_PATH_LITERAL("Program"),
+ FILE_PATH_LITERAL("-foo")));
+ EXPECT_EQ(0u, cl.GetArgs().size());
+
+ cl.RemoveSwitch("foo");
+ EXPECT_THAT(cl.argv(), testing::ElementsAre(FILE_PATH_LITERAL("Program")));
+ EXPECT_EQ(0u, cl.GetArgs().size());
+}
+
+TEST(CommandLineTest, AppendAndRemoveSwitchPreservesOtherSwitchesAndArgs) {
+ CommandLine cl(FilePath(FILE_PATH_LITERAL("Program")));
+
+ cl.AppendSwitch("foo");
+ cl.AppendSwitch("bar");
+ cl.AppendArg("arg");
+ EXPECT_THAT(cl.argv(), testing::ElementsAre(FILE_PATH_LITERAL("Program"),
+ FILE_PATH_LITERAL("--foo"),
+ FILE_PATH_LITERAL("--bar"),
+ FILE_PATH_LITERAL("arg")));
+ EXPECT_THAT(cl.GetArgs(), testing::ElementsAre(FILE_PATH_LITERAL("arg")));
+
+ cl.RemoveSwitch("foo");
+ EXPECT_THAT(cl.argv(), testing::ElementsAre(FILE_PATH_LITERAL("Program"),
+ FILE_PATH_LITERAL("--bar"),
+ FILE_PATH_LITERAL("arg")));
+ EXPECT_THAT(cl.GetArgs(), testing::ElementsAre(FILE_PATH_LITERAL("arg")));
}
TEST(CommandLineTest, MultipleSameSwitch) {