Add prebuilt_visibility property
Some mainline modules provide an `sdk` and one or more set of module_exports. When the snapshots are unpacked into separate prebuilts directories (one per snapshot) then any dependencies from a member of one snapshot to a member of another may require the latter to have additional visibility rules. Previously, these rules had to be added to each source module. This change allows additional visibility rules to be specified on the sdk/module_exports that are added to all the prebuilts in its snapshot. Bug: 155921753 Bug: 168301990 Test: m nothing Change-Id: Ia3eacb5749981f04770ae9872a8013e43c5c6ef1
This commit is contained in:
@@ -1270,3 +1270,49 @@ func newMockParentFactory() Module {
|
||||
})
|
||||
return m
|
||||
}
|
||||
|
||||
func testVisibilityRuleSet(t *testing.T, rules, extra, expected []string) {
|
||||
t.Helper()
|
||||
set := &visibilityRuleSet{rules}
|
||||
err := set.Widen(extra)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
actual := set.Strings()
|
||||
if !reflect.DeepEqual(actual, expected) {
|
||||
t.Errorf("mismatching rules after extend: expected %#v, actual %#v", expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVisibilityRuleSet(t *testing.T) {
|
||||
t.Run("extend empty", func(t *testing.T) {
|
||||
testVisibilityRuleSet(t, nil, []string{"//foo"}, []string{"//foo"})
|
||||
})
|
||||
t.Run("extend", func(t *testing.T) {
|
||||
testVisibilityRuleSet(t, []string{"//foo"}, []string{"//bar"}, []string{"//bar", "//foo"})
|
||||
})
|
||||
t.Run("extend duplicate", func(t *testing.T) {
|
||||
testVisibilityRuleSet(t, []string{"//foo"}, []string{"//bar", "//foo"}, []string{"//bar", "//foo"})
|
||||
})
|
||||
t.Run("extend public", func(t *testing.T) {
|
||||
testVisibilityRuleSet(t, []string{"//visibility:public"}, []string{"//foo"}, []string{"//visibility:public"})
|
||||
})
|
||||
t.Run("extend private", func(t *testing.T) {
|
||||
testVisibilityRuleSet(t, []string{"//visibility:private"}, []string{"//foo"}, []string{"//foo"})
|
||||
})
|
||||
t.Run("extend with public", func(t *testing.T) {
|
||||
testVisibilityRuleSet(t, []string{"//foo"}, []string{"//visibility:public"}, []string{"//visibility:public"})
|
||||
})
|
||||
t.Run("extend with private", func(t *testing.T) {
|
||||
t.Helper()
|
||||
set := &visibilityRuleSet{[]string{"//foo"}}
|
||||
err := set.Widen([]string{"//visibility:private"})
|
||||
expectedError := `"//visibility:private" does not widen the visibility`
|
||||
if err == nil {
|
||||
t.Errorf("missing error")
|
||||
} else if err.Error() != expectedError {
|
||||
t.Errorf("expected error %q found error %q", expectedError, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user