Loading tools/aapt2/cmd/Util.cpp +6 −3 Original line number Diff line number Diff line Loading @@ -137,22 +137,25 @@ bool ParseFeatureFlagsParameter(StringPiece arg, android::IDiagnostics* diag, diag->Error(android::DiagMessage() << "No name given for one or more flags in: " << arg); return false; } std::vector<std::string> name_parts = util::Split(flag_name, ':'); if (name_parts.size() > 2) { diag->Error(android::DiagMessage() << "Invalid feature flag and optional value '" << flag_and_value << "'. Must be in the format 'flag_name[:ro][=true|false]"); << "'. Must be in the format 'flag_name[:READ_ONLY|READ_WRITE][=true|false]"); return false; } flag_name = name_parts[0]; bool read_only = false; if (name_parts.size() == 2) { if (name_parts[1] == "ro") { if (name_parts[1] == "ro" || name_parts[1] == "READ_ONLY") { read_only = true; } else if (name_parts[1] == "READ_WRITE") { read_only = false; } else { diag->Error(android::DiagMessage() << "Invalid feature flag and optional value '" << flag_and_value << "'. Must be in the format 'flag_name[:ro][=true|false]"); << "'. Must be in the format 'flag_name[:READ_ONLY|READ_WRITE][=true|false]"); return false; } } Loading tools/aapt2/cmd/Util_test.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -383,7 +383,7 @@ TEST(UtilTest, ParseFeatureFlagsParameter_InvalidValue) { TEST(UtilTest, ParseFeatureFlagsParameter_DuplicateFlag) { auto diagnostics = test::ContextBuilder().Build()->GetDiagnostics(); FeatureFlagValues feature_flag_values; ASSERT_TRUE(ParseFeatureFlagsParameter("foo=true,bar=true,foo:ro=false", diagnostics, ASSERT_TRUE(ParseFeatureFlagsParameter("foo=true,bar:READ_WRITE=true,foo:ro=false", diagnostics, &feature_flag_values)); EXPECT_THAT( feature_flag_values, Loading @@ -394,11 +394,11 @@ TEST(UtilTest, ParseFeatureFlagsParameter_DuplicateFlag) { TEST(UtilTest, ParseFeatureFlagsParameter_Valid) { auto diagnostics = test::ContextBuilder().Build()->GetDiagnostics(); FeatureFlagValues feature_flag_values; ASSERT_TRUE(ParseFeatureFlagsParameter("foo= true, bar:ro =FALSE,baz=, quux", diagnostics, &feature_flag_values)); ASSERT_TRUE(ParseFeatureFlagsParameter("foo:READ_ONLY= true, bar:ro =FALSE,baz:READ_WRITE=, quux", diagnostics, &feature_flag_values)); EXPECT_THAT( feature_flag_values, UnorderedElementsAre(Pair("foo", FeatureFlagProperties{false, std::optional<bool>(true)}), UnorderedElementsAre(Pair("foo", FeatureFlagProperties{true, std::optional<bool>(true)}), Pair("bar", FeatureFlagProperties{true, std::optional<bool>(false)}), Pair("baz", FeatureFlagProperties{false, std::nullopt}), Pair("quux", FeatureFlagProperties{false, std::nullopt}))); Loading Loading
tools/aapt2/cmd/Util.cpp +6 −3 Original line number Diff line number Diff line Loading @@ -137,22 +137,25 @@ bool ParseFeatureFlagsParameter(StringPiece arg, android::IDiagnostics* diag, diag->Error(android::DiagMessage() << "No name given for one or more flags in: " << arg); return false; } std::vector<std::string> name_parts = util::Split(flag_name, ':'); if (name_parts.size() > 2) { diag->Error(android::DiagMessage() << "Invalid feature flag and optional value '" << flag_and_value << "'. Must be in the format 'flag_name[:ro][=true|false]"); << "'. Must be in the format 'flag_name[:READ_ONLY|READ_WRITE][=true|false]"); return false; } flag_name = name_parts[0]; bool read_only = false; if (name_parts.size() == 2) { if (name_parts[1] == "ro") { if (name_parts[1] == "ro" || name_parts[1] == "READ_ONLY") { read_only = true; } else if (name_parts[1] == "READ_WRITE") { read_only = false; } else { diag->Error(android::DiagMessage() << "Invalid feature flag and optional value '" << flag_and_value << "'. Must be in the format 'flag_name[:ro][=true|false]"); << "'. Must be in the format 'flag_name[:READ_ONLY|READ_WRITE][=true|false]"); return false; } } Loading
tools/aapt2/cmd/Util_test.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -383,7 +383,7 @@ TEST(UtilTest, ParseFeatureFlagsParameter_InvalidValue) { TEST(UtilTest, ParseFeatureFlagsParameter_DuplicateFlag) { auto diagnostics = test::ContextBuilder().Build()->GetDiagnostics(); FeatureFlagValues feature_flag_values; ASSERT_TRUE(ParseFeatureFlagsParameter("foo=true,bar=true,foo:ro=false", diagnostics, ASSERT_TRUE(ParseFeatureFlagsParameter("foo=true,bar:READ_WRITE=true,foo:ro=false", diagnostics, &feature_flag_values)); EXPECT_THAT( feature_flag_values, Loading @@ -394,11 +394,11 @@ TEST(UtilTest, ParseFeatureFlagsParameter_DuplicateFlag) { TEST(UtilTest, ParseFeatureFlagsParameter_Valid) { auto diagnostics = test::ContextBuilder().Build()->GetDiagnostics(); FeatureFlagValues feature_flag_values; ASSERT_TRUE(ParseFeatureFlagsParameter("foo= true, bar:ro =FALSE,baz=, quux", diagnostics, &feature_flag_values)); ASSERT_TRUE(ParseFeatureFlagsParameter("foo:READ_ONLY= true, bar:ro =FALSE,baz:READ_WRITE=, quux", diagnostics, &feature_flag_values)); EXPECT_THAT( feature_flag_values, UnorderedElementsAre(Pair("foo", FeatureFlagProperties{false, std::optional<bool>(true)}), UnorderedElementsAre(Pair("foo", FeatureFlagProperties{true, std::optional<bool>(true)}), Pair("bar", FeatureFlagProperties{true, std::optional<bool>(false)}), Pair("baz", FeatureFlagProperties{false, std::nullopt}), Pair("quux", FeatureFlagProperties{false, std::nullopt}))); Loading