Detect empty apex in ConfiguredJarList
Previously, ConfiguredJarList would accept an empty apex name, e.g. ":jar" which makes no sense as every apex has to have a non-empty name. This change makes an empty apex invalid. In order to improve the test coverage of the TestConfiguredJarList test this change also changes the implementation of CreateTestConfiguredJarList([]string) to marshal the supplied strings into a json list and then unmarshal into a ConfiguredJarList which more closely matches how it is used at runtime. Bug: 178361284 Test: m nothing Change-Id: I7dfec6b4cc1923aa99746e976da0393922ef0791
This commit is contained in:
parent
53b2427fc9
commit
9c3ac96f1f
3 changed files with 38 additions and 10 deletions
|
@ -1624,21 +1624,33 @@ func splitListOfPairsIntoPairOfLists(list []string) ([]string, []string, error)
|
||||||
func splitConfiguredJarPair(str string) (string, string, error) {
|
func splitConfiguredJarPair(str string) (string, string, error) {
|
||||||
pair := strings.SplitN(str, ":", 2)
|
pair := strings.SplitN(str, ":", 2)
|
||||||
if len(pair) == 2 {
|
if len(pair) == 2 {
|
||||||
return pair[0], pair[1], nil
|
apex := pair[0]
|
||||||
|
jar := pair[1]
|
||||||
|
if apex == "" {
|
||||||
|
return apex, jar, fmt.Errorf("invalid apex '%s' in <apex>:<jar> pair '%s', expected format: <apex>:<jar>", apex, str)
|
||||||
|
}
|
||||||
|
return apex, jar, nil
|
||||||
} else {
|
} else {
|
||||||
return "error-apex", "error-jar", fmt.Errorf("malformed (apex, jar) pair: '%s', expected format: <apex>:<jar>", str)
|
return "error-apex", "error-jar", fmt.Errorf("malformed (apex, jar) pair: '%s', expected format: <apex>:<jar>", str)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateTestConfiguredJarList is a function to create ConfiguredJarList for
|
// CreateTestConfiguredJarList is a function to create ConfiguredJarList for tests.
|
||||||
// tests.
|
|
||||||
func CreateTestConfiguredJarList(list []string) ConfiguredJarList {
|
func CreateTestConfiguredJarList(list []string) ConfiguredJarList {
|
||||||
apexes, jars, err := splitListOfPairsIntoPairOfLists(list)
|
// Create the ConfiguredJarList in as similar way as it is created at runtime by marshalling to
|
||||||
|
// a json list of strings and then unmarshalling into a ConfiguredJarList instance.
|
||||||
|
b, err := json.Marshal(list)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return ConfiguredJarList{apexes, jars}
|
var jarList ConfiguredJarList
|
||||||
|
err = json.Unmarshal(b, &jarList)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return jarList
|
||||||
}
|
}
|
||||||
|
|
||||||
// EmptyConfiguredJarList returns an empty jar list.
|
// EmptyConfiguredJarList returns an empty jar list.
|
||||||
|
|
|
@ -100,6 +100,22 @@ func TestConfiguredJarList(t *testing.T) {
|
||||||
assertStringEquals(t, "apex1:jarA", list1.String())
|
assertStringEquals(t, "apex1:jarA", list1.String())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("create invalid - missing apex", func(t *testing.T) {
|
||||||
|
defer func() {
|
||||||
|
err := recover().(error)
|
||||||
|
assertStringEquals(t, "malformed (apex, jar) pair: 'jarA', expected format: <apex>:<jar>", err.Error())
|
||||||
|
}()
|
||||||
|
CreateTestConfiguredJarList([]string{"jarA"})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("create invalid - empty apex", func(t *testing.T) {
|
||||||
|
defer func() {
|
||||||
|
err := recover().(error)
|
||||||
|
assertStringEquals(t, "invalid apex '' in <apex>:<jar> pair ':jarA', expected format: <apex>:<jar>", err.Error())
|
||||||
|
}()
|
||||||
|
CreateTestConfiguredJarList([]string{":jarA"})
|
||||||
|
})
|
||||||
|
|
||||||
list2 := list1.Append("apex2", "jarB")
|
list2 := list1.Append("apex2", "jarB")
|
||||||
t.Run("append", func(t *testing.T) {
|
t.Run("append", func(t *testing.T) {
|
||||||
assertStringEquals(t, "apex1:jarA,apex2:jarB", list2.String())
|
assertStringEquals(t, "apex1:jarA,apex2:jarB", list2.String())
|
||||||
|
|
|
@ -65,7 +65,7 @@ func TestHiddenAPISingleton(t *testing.T) {
|
||||||
srcs: ["a.java"],
|
srcs: ["a.java"],
|
||||||
compile_dex: true,
|
compile_dex: true,
|
||||||
}
|
}
|
||||||
`, []string{":foo"}, nil)
|
`, []string{"platform:foo"}, nil)
|
||||||
|
|
||||||
hiddenAPI := ctx.SingletonForTests("hiddenapi")
|
hiddenAPI := ctx.SingletonForTests("hiddenapi")
|
||||||
hiddenapiRule := hiddenAPI.Rule("hiddenapi")
|
hiddenapiRule := hiddenAPI.Rule("hiddenapi")
|
||||||
|
@ -82,7 +82,7 @@ func TestHiddenAPISingletonWithPrebuilt(t *testing.T) {
|
||||||
jars: ["a.jar"],
|
jars: ["a.jar"],
|
||||||
compile_dex: true,
|
compile_dex: true,
|
||||||
}
|
}
|
||||||
`, []string{":foo"}, nil)
|
`, []string{"platform:foo"}, nil)
|
||||||
|
|
||||||
hiddenAPI := ctx.SingletonForTests("hiddenapi")
|
hiddenAPI := ctx.SingletonForTests("hiddenapi")
|
||||||
hiddenapiRule := hiddenAPI.Rule("hiddenapi")
|
hiddenapiRule := hiddenAPI.Rule("hiddenapi")
|
||||||
|
@ -106,7 +106,7 @@ func TestHiddenAPISingletonWithPrebuiltUseSource(t *testing.T) {
|
||||||
compile_dex: true,
|
compile_dex: true,
|
||||||
prefer: false,
|
prefer: false,
|
||||||
}
|
}
|
||||||
`, []string{":foo"}, nil)
|
`, []string{"platform:foo"}, nil)
|
||||||
|
|
||||||
hiddenAPI := ctx.SingletonForTests("hiddenapi")
|
hiddenAPI := ctx.SingletonForTests("hiddenapi")
|
||||||
hiddenapiRule := hiddenAPI.Rule("hiddenapi")
|
hiddenapiRule := hiddenAPI.Rule("hiddenapi")
|
||||||
|
@ -135,7 +135,7 @@ func TestHiddenAPISingletonWithPrebuiltOverrideSource(t *testing.T) {
|
||||||
compile_dex: true,
|
compile_dex: true,
|
||||||
prefer: true,
|
prefer: true,
|
||||||
}
|
}
|
||||||
`, []string{":foo"}, nil)
|
`, []string{"platform:foo"}, nil)
|
||||||
|
|
||||||
hiddenAPI := ctx.SingletonForTests("hiddenapi")
|
hiddenAPI := ctx.SingletonForTests("hiddenapi")
|
||||||
hiddenapiRule := hiddenAPI.Rule("hiddenapi")
|
hiddenapiRule := hiddenAPI.Rule("hiddenapi")
|
||||||
|
@ -236,7 +236,7 @@ func TestHiddenAPISingletonWithPrebuiltCsvFile(t *testing.T) {
|
||||||
jars: ["a.jar"],
|
jars: ["a.jar"],
|
||||||
compile_dex: true,
|
compile_dex: true,
|
||||||
}
|
}
|
||||||
`, []string{":foo"}, &prebuiltHiddenApiDir)
|
`, []string{"platform:foo"}, &prebuiltHiddenApiDir)
|
||||||
|
|
||||||
expectedCpInput := prebuiltHiddenApiDir + "/hiddenapi-flags.csv"
|
expectedCpInput := prebuiltHiddenApiDir + "/hiddenapi-flags.csv"
|
||||||
expectedCpOutput := buildDir + "/hiddenapi/hiddenapi-flags.csv"
|
expectedCpOutput := buildDir + "/hiddenapi/hiddenapi-flags.csv"
|
||||||
|
|
Loading…
Reference in a new issue