aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar lpino <lpino@google.com>2017-08-10 16:25:54 +0200
committerGravatar Marcel Hlopko <hlopko@google.com>2017-08-11 12:55:58 +0200
commit4ed3db6517c7e13f46924fb832c0d65b70c95cde (patch)
treeb8c37fff1de2fdaf7f89d958a891cfc05077449c /src
parentdb55b5a9f6d56535a909bd777b7f803a99d9dbd9 (diff)
Polish blaze_util.cc
PiperOrigin-RevId: 164850909
Diffstat (limited to 'src')
-rw-r--r--src/main/cpp/blaze_util.cc18
-rw-r--r--src/main/cpp/blaze_util.h13
-rw-r--r--src/test/cpp/blaze_util_test.cc43
3 files changed, 70 insertions, 4 deletions
diff --git a/src/main/cpp/blaze_util.cc b/src/main/cpp/blaze_util.cc
index a5268e646b..0fb78986af 100644
--- a/src/main/cpp/blaze_util.cc
+++ b/src/main/cpp/blaze_util.cc
@@ -103,10 +103,15 @@ const char* SearchUnaryOption(const vector<string>& args,
return GetUnaryOption(args[i].c_str(), NULL, key);
}
-bool SearchNullaryOption(const vector<string>& args, const char *key) {
+static bool SearchNullaryOption(const vector<string>& args,
+ const char *key,
+ const bool include_positional_params) {
for (vector<string>::size_type i = 0; i < args.size(); i++) {
if (args[i] == "--") {
- return false;
+ if (!include_positional_params) {
+ return false;
+ }
+ continue;
}
if (GetNullaryOption(args[i].c_str(), key)) {
return true;
@@ -115,6 +120,15 @@ bool SearchNullaryOption(const vector<string>& args, const char *key) {
return false;
}
+bool SearchNullaryOption(const vector<string>& args, const char *key) {
+ return SearchNullaryOption(args, key, false);
+}
+
+bool SearchNullaryOptionEverywhere(const vector<string>& args,
+ const char *key) {
+ return SearchNullaryOption(args, key, true);
+}
+
bool VerboseLogging() { return !GetEnv("VERBOSE_BLAZE_CLIENT").empty(); }
// Read the Jvm version from a file descriptor. The read fd
diff --git a/src/main/cpp/blaze_util.h b/src/main/cpp/blaze_util.h
index 7c85d82dbf..0df70e67df 100644
--- a/src/main/cpp/blaze_util.h
+++ b/src/main/cpp/blaze_util.h
@@ -57,12 +57,21 @@ bool GetNullaryOption(const char *arg, const char *key);
const char* SearchUnaryOption(const std::vector<std::string>& args,
const char* key);
-// Searches for 'key' in 'args' using GetNullaryOption. Arguments found after
-// '--' are omitted from the search.
+// Searches for 'key' in 'args' using GetNullaryOption.
+// Unlike SearchNullaryOptionEverywhere, arguments found after '--' are omitted
+// from the search.
// Returns true iff key is a flag in args.
bool SearchNullaryOption(const std::vector<std::string>& args,
const char* key);
+// Searches for 'key' in 'args' using GetNullaryOption.
+// Unlike SearchNullaryOption, arguments found after '--' are included in the
+// search.
+// Returns true iff key is a flag in args.
+bool SearchNullaryOptionEverywhere(const std::vector<std::string>& args,
+ const char* key);
+
+
// Enable messages mostly of interest to developers.
bool VerboseLogging();
diff --git a/src/test/cpp/blaze_util_test.cc b/src/test/cpp/blaze_util_test.cc
index 6f9b44fd14..a799d997a1 100644
--- a/src/test/cpp/blaze_util_test.cc
+++ b/src/test/cpp/blaze_util_test.cc
@@ -202,6 +202,49 @@ TEST_F(BlazeUtilTest, TestSearchNullarySucceedsWithEqualsAndDashDash) {
{"bazel", "build", ":target", "--", "--flag=value"}, "--flag"));
}
+TEST_F(BlazeUtilTest, TestSearchNullaryEverywhereEmptyCase) {
+ ASSERT_FALSE(SearchNullaryOptionEverywhere({}, "--flag"));
+}
+
+TEST_F(BlazeUtilTest, TestSearchNullaryEverywhereForEmpty) {
+ ASSERT_FALSE(SearchNullaryOptionEverywhere(
+ {"bazel", "build", ":target", "--"}, ""));
+}
+
+TEST_F(BlazeUtilTest, TestSearchNullaryEverywhereForFlagNotPresent) {
+ ASSERT_FALSE(SearchNullaryOptionEverywhere(
+ {"bazel", "build", ":target", "--"}, "--flag"));
+}
+
+TEST_F(BlazeUtilTest, TestSearchNullaryEverywhereStartupOption) {
+ ASSERT_TRUE(SearchNullaryOptionEverywhere(
+ {"bazel", "--flag", "build", ":target", "--"}, "--flag"));
+}
+
+TEST_F(BlazeUtilTest, TestSearchNullaryEverywhereStartupOptionWithEquals) {
+ ASSERT_DEATH(SearchNullaryOptionEverywhere(
+ {"bazel", "--flag=value", "build", ":target", "--"}, "--flag"),
+ "In argument '--flag=value': option "
+ "'--flag' does not take a value");
+}
+
+TEST_F(BlazeUtilTest, TestSearchNullaryEverywhereCommandOption) {
+ ASSERT_TRUE(SearchNullaryOptionEverywhere(
+ {"bazel", "build", ":target", "--flag"}, "--flag"));
+}
+
+TEST_F(BlazeUtilTest, TestSearchNullaryEverywhereReadsAfterPositionalParams) {
+ ASSERT_TRUE(SearchNullaryOptionEverywhere(
+ {"bazel", "build", ":target", "--", "--flag"}, "--flag"));
+}
+
+TEST_F(BlazeUtilTest, TestSearchNullaryEverywhereFailsAfterPositionalParams) {
+ ASSERT_DEATH(SearchNullaryOptionEverywhere(
+ {"bazel", "build", ":target", "--", "--flag=value"}, "--flag"),
+ "In argument '--flag=value': option "
+ "'--flag' does not take a value");
+}
+
TEST_F(BlazeUtilTest, TestSearchUnaryForEmpty) {
ASSERT_STREQ(nullptr, SearchUnaryOption({"bazel", "build", ":target"}, ""));
}