1*333d2b36SAndroid Build Coastguard Workerpackage android 2*333d2b36SAndroid Build Coastguard Worker 3*333d2b36SAndroid Build Coastguard Workerimport ( 4*333d2b36SAndroid Build Coastguard Worker "reflect" 5*333d2b36SAndroid Build Coastguard Worker "testing" 6*333d2b36SAndroid Build Coastguard Worker 7*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint" 8*333d2b36SAndroid Build Coastguard Worker) 9*333d2b36SAndroid Build Coastguard Worker 10*333d2b36SAndroid Build Coastguard Workervar visibilityTests = []struct { 11*333d2b36SAndroid Build Coastguard Worker name string 12*333d2b36SAndroid Build Coastguard Worker fs MockFS 13*333d2b36SAndroid Build Coastguard Worker expectedErrors []string 14*333d2b36SAndroid Build Coastguard Worker effectiveVisibility map[qualifiedModuleName][]string 15*333d2b36SAndroid Build Coastguard Worker}{ 16*333d2b36SAndroid Build Coastguard Worker { 17*333d2b36SAndroid Build Coastguard Worker name: "invalid visibility: empty list", 18*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 19*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 20*333d2b36SAndroid Build Coastguard Worker mock_library { 21*333d2b36SAndroid Build Coastguard Worker name: "libexample", 22*333d2b36SAndroid Build Coastguard Worker visibility: [], 23*333d2b36SAndroid Build Coastguard Worker }`), 24*333d2b36SAndroid Build Coastguard Worker }, 25*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{`visibility: must contain at least one visibility rule`}, 26*333d2b36SAndroid Build Coastguard Worker }, 27*333d2b36SAndroid Build Coastguard Worker { 28*333d2b36SAndroid Build Coastguard Worker name: "invalid visibility: empty rule", 29*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 30*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 31*333d2b36SAndroid Build Coastguard Worker mock_library { 32*333d2b36SAndroid Build Coastguard Worker name: "libexample", 33*333d2b36SAndroid Build Coastguard Worker visibility: [""], 34*333d2b36SAndroid Build Coastguard Worker }`), 35*333d2b36SAndroid Build Coastguard Worker }, 36*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{`visibility: invalid visibility pattern ""`}, 37*333d2b36SAndroid Build Coastguard Worker }, 38*333d2b36SAndroid Build Coastguard Worker { 39*333d2b36SAndroid Build Coastguard Worker name: "invalid visibility: unqualified", 40*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 41*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 42*333d2b36SAndroid Build Coastguard Worker mock_library { 43*333d2b36SAndroid Build Coastguard Worker name: "libexample", 44*333d2b36SAndroid Build Coastguard Worker visibility: ["target"], 45*333d2b36SAndroid Build Coastguard Worker }`), 46*333d2b36SAndroid Build Coastguard Worker }, 47*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{`visibility: invalid visibility pattern "target"`}, 48*333d2b36SAndroid Build Coastguard Worker }, 49*333d2b36SAndroid Build Coastguard Worker { 50*333d2b36SAndroid Build Coastguard Worker name: "invalid visibility: empty namespace", 51*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 52*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 53*333d2b36SAndroid Build Coastguard Worker mock_library { 54*333d2b36SAndroid Build Coastguard Worker name: "libexample", 55*333d2b36SAndroid Build Coastguard Worker visibility: ["//"], 56*333d2b36SAndroid Build Coastguard Worker }`), 57*333d2b36SAndroid Build Coastguard Worker }, 58*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{`visibility: invalid visibility pattern "//"`}, 59*333d2b36SAndroid Build Coastguard Worker }, 60*333d2b36SAndroid Build Coastguard Worker { 61*333d2b36SAndroid Build Coastguard Worker name: "invalid visibility: empty module", 62*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 63*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 64*333d2b36SAndroid Build Coastguard Worker mock_library { 65*333d2b36SAndroid Build Coastguard Worker name: "libexample", 66*333d2b36SAndroid Build Coastguard Worker visibility: [":"], 67*333d2b36SAndroid Build Coastguard Worker }`), 68*333d2b36SAndroid Build Coastguard Worker }, 69*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{`visibility: invalid visibility pattern ":"`}, 70*333d2b36SAndroid Build Coastguard Worker }, 71*333d2b36SAndroid Build Coastguard Worker { 72*333d2b36SAndroid Build Coastguard Worker name: "invalid visibility: empty namespace and module", 73*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 74*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 75*333d2b36SAndroid Build Coastguard Worker mock_library { 76*333d2b36SAndroid Build Coastguard Worker name: "libexample", 77*333d2b36SAndroid Build Coastguard Worker visibility: ["//:"], 78*333d2b36SAndroid Build Coastguard Worker }`), 79*333d2b36SAndroid Build Coastguard Worker }, 80*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{`visibility: invalid visibility pattern "//:"`}, 81*333d2b36SAndroid Build Coastguard Worker }, 82*333d2b36SAndroid Build Coastguard Worker { 83*333d2b36SAndroid Build Coastguard Worker name: "//visibility:unknown", 84*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 85*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 86*333d2b36SAndroid Build Coastguard Worker mock_library { 87*333d2b36SAndroid Build Coastguard Worker name: "libexample", 88*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:unknown"], 89*333d2b36SAndroid Build Coastguard Worker }`), 90*333d2b36SAndroid Build Coastguard Worker }, 91*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{`unrecognized visibility rule "//visibility:unknown"`}, 92*333d2b36SAndroid Build Coastguard Worker }, 93*333d2b36SAndroid Build Coastguard Worker { 94*333d2b36SAndroid Build Coastguard Worker name: "//visibility:xxx mixed", 95*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 96*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 97*333d2b36SAndroid Build Coastguard Worker mock_library { 98*333d2b36SAndroid Build Coastguard Worker name: "libexample", 99*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public", "//namespace"], 100*333d2b36SAndroid Build Coastguard Worker } 101*333d2b36SAndroid Build Coastguard Worker 102*333d2b36SAndroid Build Coastguard Worker mock_library { 103*333d2b36SAndroid Build Coastguard Worker name: "libother", 104*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private", "//namespace"], 105*333d2b36SAndroid Build Coastguard Worker }`), 106*333d2b36SAndroid Build Coastguard Worker }, 107*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 108*333d2b36SAndroid Build Coastguard Worker `module "libother": visibility: cannot mix "//visibility:private"` + 109*333d2b36SAndroid Build Coastguard Worker ` with any other visibility rules`, 110*333d2b36SAndroid Build Coastguard Worker `module "libexample": visibility: cannot mix "//visibility:public"` + 111*333d2b36SAndroid Build Coastguard Worker ` with any other visibility rules`, 112*333d2b36SAndroid Build Coastguard Worker }, 113*333d2b36SAndroid Build Coastguard Worker }, 114*333d2b36SAndroid Build Coastguard Worker { 115*333d2b36SAndroid Build Coastguard Worker name: "//visibility:legacy_public", 116*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 117*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 118*333d2b36SAndroid Build Coastguard Worker mock_library { 119*333d2b36SAndroid Build Coastguard Worker name: "libexample", 120*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:legacy_public"], 121*333d2b36SAndroid Build Coastguard Worker }`), 122*333d2b36SAndroid Build Coastguard Worker }, 123*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 124*333d2b36SAndroid Build Coastguard Worker `module "libexample": visibility: //visibility:legacy_public must` + 125*333d2b36SAndroid Build Coastguard Worker ` not be used`, 126*333d2b36SAndroid Build Coastguard Worker }, 127*333d2b36SAndroid Build Coastguard Worker }, 128*333d2b36SAndroid Build Coastguard Worker { 129*333d2b36SAndroid Build Coastguard Worker // Verify that //visibility:public will allow the module to be referenced from anywhere, e.g. 130*333d2b36SAndroid Build Coastguard Worker // the current directory, a nested directory and a directory in a separate tree. 131*333d2b36SAndroid Build Coastguard Worker name: "//visibility:public", 132*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 133*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 134*333d2b36SAndroid Build Coastguard Worker mock_library { 135*333d2b36SAndroid Build Coastguard Worker name: "libexample", 136*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 137*333d2b36SAndroid Build Coastguard Worker } 138*333d2b36SAndroid Build Coastguard Worker 139*333d2b36SAndroid Build Coastguard Worker mock_library { 140*333d2b36SAndroid Build Coastguard Worker name: "libsamepackage", 141*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 142*333d2b36SAndroid Build Coastguard Worker } 143*333d2b36SAndroid Build Coastguard Worker 144*333d2b36SAndroid Build Coastguard Worker gen_notice { 145*333d2b36SAndroid Build Coastguard Worker name: "libexample-notice", 146*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 147*333d2b36SAndroid Build Coastguard Worker }`), 148*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 149*333d2b36SAndroid Build Coastguard Worker mock_library { 150*333d2b36SAndroid Build Coastguard Worker name: "libnested", 151*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 152*333d2b36SAndroid Build Coastguard Worker } 153*333d2b36SAndroid Build Coastguard Worker 154*333d2b36SAndroid Build Coastguard Worker gen_notice { 155*333d2b36SAndroid Build Coastguard Worker name: "nested-notice", 156*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 157*333d2b36SAndroid Build Coastguard Worker }`), 158*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 159*333d2b36SAndroid Build Coastguard Worker mock_library { 160*333d2b36SAndroid Build Coastguard Worker name: "libother", 161*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 162*333d2b36SAndroid Build Coastguard Worker } 163*333d2b36SAndroid Build Coastguard Worker 164*333d2b36SAndroid Build Coastguard Worker gen_notice { 165*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 166*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 167*333d2b36SAndroid Build Coastguard Worker }`), 168*333d2b36SAndroid Build Coastguard Worker }, 169*333d2b36SAndroid Build Coastguard Worker }, 170*333d2b36SAndroid Build Coastguard Worker { 171*333d2b36SAndroid Build Coastguard Worker // Verify that //visibility:private allows the module to be referenced from the current 172*333d2b36SAndroid Build Coastguard Worker // directory only. 173*333d2b36SAndroid Build Coastguard Worker name: "//visibility:private", 174*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 175*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 176*333d2b36SAndroid Build Coastguard Worker mock_library { 177*333d2b36SAndroid Build Coastguard Worker name: "libexample", 178*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 179*333d2b36SAndroid Build Coastguard Worker } 180*333d2b36SAndroid Build Coastguard Worker 181*333d2b36SAndroid Build Coastguard Worker mock_library { 182*333d2b36SAndroid Build Coastguard Worker name: "libsamepackage", 183*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 184*333d2b36SAndroid Build Coastguard Worker }`), 185*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 186*333d2b36SAndroid Build Coastguard Worker mock_library { 187*333d2b36SAndroid Build Coastguard Worker name: "libnested", 188*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 189*333d2b36SAndroid Build Coastguard Worker }`), 190*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 191*333d2b36SAndroid Build Coastguard Worker mock_library { 192*333d2b36SAndroid Build Coastguard Worker name: "libother", 193*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 194*333d2b36SAndroid Build Coastguard Worker }`), 195*333d2b36SAndroid Build Coastguard Worker }, 196*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 197*333d2b36SAndroid Build Coastguard Worker `module "libnested" variant "android_common": depends on //top:libexample which is not` + 198*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 199*333d2b36SAndroid Build Coastguard Worker `module "libother" variant "android_common": depends on //top:libexample which is not` + 200*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 201*333d2b36SAndroid Build Coastguard Worker }, 202*333d2b36SAndroid Build Coastguard Worker }, 203*333d2b36SAndroid Build Coastguard Worker { 204*333d2b36SAndroid Build Coastguard Worker // Verify that //visibility:private allows the module to be referenced from the current 205*333d2b36SAndroid Build Coastguard Worker // directory only. 206*333d2b36SAndroid Build Coastguard Worker name: "//visibility:private (notices)", 207*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 208*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 209*333d2b36SAndroid Build Coastguard Worker mock_library { 210*333d2b36SAndroid Build Coastguard Worker name: "libexample", 211*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 212*333d2b36SAndroid Build Coastguard Worker } 213*333d2b36SAndroid Build Coastguard Worker 214*333d2b36SAndroid Build Coastguard Worker mock_library { 215*333d2b36SAndroid Build Coastguard Worker name: "libsamepackage", 216*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 217*333d2b36SAndroid Build Coastguard Worker } 218*333d2b36SAndroid Build Coastguard Worker 219*333d2b36SAndroid Build Coastguard Worker gen_notice { 220*333d2b36SAndroid Build Coastguard Worker name: "libexample-notice", 221*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 222*333d2b36SAndroid Build Coastguard Worker }`), 223*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 224*333d2b36SAndroid Build Coastguard Worker gen_notice { 225*333d2b36SAndroid Build Coastguard Worker name: "nested-notice", 226*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 227*333d2b36SAndroid Build Coastguard Worker }`), 228*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 229*333d2b36SAndroid Build Coastguard Worker gen_notice { 230*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 231*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 232*333d2b36SAndroid Build Coastguard Worker }`), 233*333d2b36SAndroid Build Coastguard Worker }, 234*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 235*333d2b36SAndroid Build Coastguard Worker `module "nested-notice" references "//top:libexample" which is not visible to this` + 236*333d2b36SAndroid Build Coastguard Worker ` module\nYou may need to add "//top/nested" to its visibility`, 237*333d2b36SAndroid Build Coastguard Worker `module "other-notice" references "//top:libexample" which is not visible to this module\n` + 238*333d2b36SAndroid Build Coastguard Worker `You may need to add "//other" to its visibility`, 239*333d2b36SAndroid Build Coastguard Worker }, 240*333d2b36SAndroid Build Coastguard Worker }, 241*333d2b36SAndroid Build Coastguard Worker { 242*333d2b36SAndroid Build Coastguard Worker // Verify that :__pkg__ allows the module to be referenced from the current directory only. 243*333d2b36SAndroid Build Coastguard Worker name: ":__pkg__", 244*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 245*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 246*333d2b36SAndroid Build Coastguard Worker mock_library { 247*333d2b36SAndroid Build Coastguard Worker name: "libexample", 248*333d2b36SAndroid Build Coastguard Worker visibility: [":__pkg__"], 249*333d2b36SAndroid Build Coastguard Worker } 250*333d2b36SAndroid Build Coastguard Worker 251*333d2b36SAndroid Build Coastguard Worker mock_library { 252*333d2b36SAndroid Build Coastguard Worker name: "libsamepackage", 253*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 254*333d2b36SAndroid Build Coastguard Worker }`), 255*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 256*333d2b36SAndroid Build Coastguard Worker mock_library { 257*333d2b36SAndroid Build Coastguard Worker name: "libnested", 258*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 259*333d2b36SAndroid Build Coastguard Worker }`), 260*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 261*333d2b36SAndroid Build Coastguard Worker mock_library { 262*333d2b36SAndroid Build Coastguard Worker name: "libother", 263*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 264*333d2b36SAndroid Build Coastguard Worker }`), 265*333d2b36SAndroid Build Coastguard Worker }, 266*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 267*333d2b36SAndroid Build Coastguard Worker `module "libnested" variant "android_common": depends on //top:libexample which is not` + 268*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 269*333d2b36SAndroid Build Coastguard Worker `module "libother" variant "android_common": depends on //top:libexample which is not` + 270*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 271*333d2b36SAndroid Build Coastguard Worker }, 272*333d2b36SAndroid Build Coastguard Worker }, 273*333d2b36SAndroid Build Coastguard Worker { 274*333d2b36SAndroid Build Coastguard Worker // Verify that :__pkg__ allows the module to be referenced from the current directory only. 275*333d2b36SAndroid Build Coastguard Worker name: ":__pkg__ (notices)", 276*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 277*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 278*333d2b36SAndroid Build Coastguard Worker mock_library { 279*333d2b36SAndroid Build Coastguard Worker name: "libexample", 280*333d2b36SAndroid Build Coastguard Worker visibility: [":__pkg__"], 281*333d2b36SAndroid Build Coastguard Worker } 282*333d2b36SAndroid Build Coastguard Worker 283*333d2b36SAndroid Build Coastguard Worker gen_notice { 284*333d2b36SAndroid Build Coastguard Worker name: "libexample-notice", 285*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 286*333d2b36SAndroid Build Coastguard Worker }`), 287*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 288*333d2b36SAndroid Build Coastguard Worker gen_notice { 289*333d2b36SAndroid Build Coastguard Worker name: "nested-notice", 290*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 291*333d2b36SAndroid Build Coastguard Worker }`), 292*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 293*333d2b36SAndroid Build Coastguard Worker gen_notice { 294*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 295*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 296*333d2b36SAndroid Build Coastguard Worker }`), 297*333d2b36SAndroid Build Coastguard Worker }, 298*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 299*333d2b36SAndroid Build Coastguard Worker `module "nested-notice" references "//top:libexample" which is not visible to this module`, 300*333d2b36SAndroid Build Coastguard Worker `module "other-notice" references "//top:libexample" which is not visible to this module`, 301*333d2b36SAndroid Build Coastguard Worker }, 302*333d2b36SAndroid Build Coastguard Worker }, 303*333d2b36SAndroid Build Coastguard Worker { 304*333d2b36SAndroid Build Coastguard Worker // Verify that //top/nested allows the module to be referenced from the current directory and 305*333d2b36SAndroid Build Coastguard Worker // the top/nested directory only, not a subdirectory of top/nested and not peak directory. 306*333d2b36SAndroid Build Coastguard Worker name: "//top/nested", 307*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 308*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 309*333d2b36SAndroid Build Coastguard Worker mock_library { 310*333d2b36SAndroid Build Coastguard Worker name: "libexample", 311*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested"], 312*333d2b36SAndroid Build Coastguard Worker } 313*333d2b36SAndroid Build Coastguard Worker 314*333d2b36SAndroid Build Coastguard Worker mock_library { 315*333d2b36SAndroid Build Coastguard Worker name: "libsamepackage", 316*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 317*333d2b36SAndroid Build Coastguard Worker }`), 318*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 319*333d2b36SAndroid Build Coastguard Worker mock_library { 320*333d2b36SAndroid Build Coastguard Worker name: "libnested", 321*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 322*333d2b36SAndroid Build Coastguard Worker }`), 323*333d2b36SAndroid Build Coastguard Worker "top/nested/again/Android.bp": []byte(` 324*333d2b36SAndroid Build Coastguard Worker mock_library { 325*333d2b36SAndroid Build Coastguard Worker name: "libnestedagain", 326*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 327*333d2b36SAndroid Build Coastguard Worker }`), 328*333d2b36SAndroid Build Coastguard Worker "peak/Android.bp": []byte(` 329*333d2b36SAndroid Build Coastguard Worker mock_library { 330*333d2b36SAndroid Build Coastguard Worker name: "libother", 331*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 332*333d2b36SAndroid Build Coastguard Worker }`), 333*333d2b36SAndroid Build Coastguard Worker }, 334*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 335*333d2b36SAndroid Build Coastguard Worker `module "libother" variant "android_common": depends on //top:libexample which is not` + 336*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 337*333d2b36SAndroid Build Coastguard Worker `module "libnestedagain" variant "android_common": depends on //top:libexample which is not` + 338*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 339*333d2b36SAndroid Build Coastguard Worker }, 340*333d2b36SAndroid Build Coastguard Worker }, 341*333d2b36SAndroid Build Coastguard Worker { 342*333d2b36SAndroid Build Coastguard Worker // Verify that //top/nested allows the module to be referenced from the current directory and 343*333d2b36SAndroid Build Coastguard Worker // the top/nested directory only, not a subdirectory of top/nested and not peak directory. 344*333d2b36SAndroid Build Coastguard Worker name: "//top/nested (notices)", 345*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 346*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 347*333d2b36SAndroid Build Coastguard Worker mock_library { 348*333d2b36SAndroid Build Coastguard Worker name: "libexample", 349*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested"], 350*333d2b36SAndroid Build Coastguard Worker } 351*333d2b36SAndroid Build Coastguard Worker 352*333d2b36SAndroid Build Coastguard Worker gen_notice { 353*333d2b36SAndroid Build Coastguard Worker name: "libexample-notice", 354*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 355*333d2b36SAndroid Build Coastguard Worker }`), 356*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 357*333d2b36SAndroid Build Coastguard Worker gen_notice { 358*333d2b36SAndroid Build Coastguard Worker name: "nested-notice", 359*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 360*333d2b36SAndroid Build Coastguard Worker }`), 361*333d2b36SAndroid Build Coastguard Worker "top/nested/again/Android.bp": []byte(` 362*333d2b36SAndroid Build Coastguard Worker gen_notice { 363*333d2b36SAndroid Build Coastguard Worker name: "nestedagain-notice", 364*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 365*333d2b36SAndroid Build Coastguard Worker }`), 366*333d2b36SAndroid Build Coastguard Worker "peak/Android.bp": []byte(` 367*333d2b36SAndroid Build Coastguard Worker gen_notice { 368*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 369*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 370*333d2b36SAndroid Build Coastguard Worker }`), 371*333d2b36SAndroid Build Coastguard Worker }, 372*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 373*333d2b36SAndroid Build Coastguard Worker `module "other-notice" references "//top:libexample" which is not visible to this module`, 374*333d2b36SAndroid Build Coastguard Worker `module "nestedagain-notice" references "//top:libexample" which is not visible to this module`, 375*333d2b36SAndroid Build Coastguard Worker }, 376*333d2b36SAndroid Build Coastguard Worker }, 377*333d2b36SAndroid Build Coastguard Worker { 378*333d2b36SAndroid Build Coastguard Worker // Verify that :__subpackages__ allows the module to be referenced from the current directory 379*333d2b36SAndroid Build Coastguard Worker // and sub directories but nowhere else. 380*333d2b36SAndroid Build Coastguard Worker name: ":__subpackages__", 381*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 382*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 383*333d2b36SAndroid Build Coastguard Worker mock_library { 384*333d2b36SAndroid Build Coastguard Worker name: "libexample", 385*333d2b36SAndroid Build Coastguard Worker visibility: [":__subpackages__"], 386*333d2b36SAndroid Build Coastguard Worker } 387*333d2b36SAndroid Build Coastguard Worker 388*333d2b36SAndroid Build Coastguard Worker mock_library { 389*333d2b36SAndroid Build Coastguard Worker name: "libsamepackage", 390*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 391*333d2b36SAndroid Build Coastguard Worker }`), 392*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 393*333d2b36SAndroid Build Coastguard Worker mock_library { 394*333d2b36SAndroid Build Coastguard Worker name: "libnested", 395*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 396*333d2b36SAndroid Build Coastguard Worker }`), 397*333d2b36SAndroid Build Coastguard Worker "peak/other/Android.bp": []byte(` 398*333d2b36SAndroid Build Coastguard Worker mock_library { 399*333d2b36SAndroid Build Coastguard Worker name: "libother", 400*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 401*333d2b36SAndroid Build Coastguard Worker }`), 402*333d2b36SAndroid Build Coastguard Worker }, 403*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 404*333d2b36SAndroid Build Coastguard Worker `module "libother" variant "android_common": depends on //top:libexample which is not` + 405*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 406*333d2b36SAndroid Build Coastguard Worker }, 407*333d2b36SAndroid Build Coastguard Worker }, 408*333d2b36SAndroid Build Coastguard Worker { 409*333d2b36SAndroid Build Coastguard Worker // Verify that :__subpackages__ allows the module to be referenced from the current directory 410*333d2b36SAndroid Build Coastguard Worker // and sub directories but nowhere else. 411*333d2b36SAndroid Build Coastguard Worker name: ":__subpackages__ (notices)", 412*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 413*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 414*333d2b36SAndroid Build Coastguard Worker mock_library { 415*333d2b36SAndroid Build Coastguard Worker name: "libexample", 416*333d2b36SAndroid Build Coastguard Worker visibility: [":__subpackages__"], 417*333d2b36SAndroid Build Coastguard Worker } 418*333d2b36SAndroid Build Coastguard Worker 419*333d2b36SAndroid Build Coastguard Worker gen_notice { 420*333d2b36SAndroid Build Coastguard Worker name: "libexample-notice", 421*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 422*333d2b36SAndroid Build Coastguard Worker }`), 423*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 424*333d2b36SAndroid Build Coastguard Worker gen_notice { 425*333d2b36SAndroid Build Coastguard Worker name: "nested-notice", 426*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 427*333d2b36SAndroid Build Coastguard Worker }`), 428*333d2b36SAndroid Build Coastguard Worker "peak/other/Android.bp": []byte(` 429*333d2b36SAndroid Build Coastguard Worker gen_notice { 430*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 431*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 432*333d2b36SAndroid Build Coastguard Worker }`), 433*333d2b36SAndroid Build Coastguard Worker }, 434*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 435*333d2b36SAndroid Build Coastguard Worker `module "other-notice" references "//top:libexample" which is not visible to this module`, 436*333d2b36SAndroid Build Coastguard Worker }, 437*333d2b36SAndroid Build Coastguard Worker }, 438*333d2b36SAndroid Build Coastguard Worker { 439*333d2b36SAndroid Build Coastguard Worker // Verify that //top/nested:__subpackages__ allows the module to be referenced from the current 440*333d2b36SAndroid Build Coastguard Worker // directory and sub directories but nowhere else. 441*333d2b36SAndroid Build Coastguard Worker name: "//top/nested:__subpackages__", 442*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 443*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 444*333d2b36SAndroid Build Coastguard Worker mock_library { 445*333d2b36SAndroid Build Coastguard Worker name: "libexample", 446*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested:__subpackages__", "//other"], 447*333d2b36SAndroid Build Coastguard Worker } 448*333d2b36SAndroid Build Coastguard Worker 449*333d2b36SAndroid Build Coastguard Worker mock_library { 450*333d2b36SAndroid Build Coastguard Worker name: "libsamepackage", 451*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 452*333d2b36SAndroid Build Coastguard Worker }`), 453*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 454*333d2b36SAndroid Build Coastguard Worker mock_library { 455*333d2b36SAndroid Build Coastguard Worker name: "libnested", 456*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 457*333d2b36SAndroid Build Coastguard Worker }`), 458*333d2b36SAndroid Build Coastguard Worker "top/other/Android.bp": []byte(` 459*333d2b36SAndroid Build Coastguard Worker mock_library { 460*333d2b36SAndroid Build Coastguard Worker name: "libother", 461*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 462*333d2b36SAndroid Build Coastguard Worker }`), 463*333d2b36SAndroid Build Coastguard Worker }, 464*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 465*333d2b36SAndroid Build Coastguard Worker `module "libother" variant "android_common": depends on //top:libexample which is not` + 466*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 467*333d2b36SAndroid Build Coastguard Worker }, 468*333d2b36SAndroid Build Coastguard Worker }, 469*333d2b36SAndroid Build Coastguard Worker { 470*333d2b36SAndroid Build Coastguard Worker // Verify that //top/nested:__subpackages__ allows the module to be referenced from the current 471*333d2b36SAndroid Build Coastguard Worker // directory and sub directories but nowhere else. 472*333d2b36SAndroid Build Coastguard Worker name: "//top/nested:__subpackages__ (notices)", 473*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 474*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 475*333d2b36SAndroid Build Coastguard Worker mock_library { 476*333d2b36SAndroid Build Coastguard Worker name: "libexample", 477*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested:__subpackages__", "//other"], 478*333d2b36SAndroid Build Coastguard Worker } 479*333d2b36SAndroid Build Coastguard Worker 480*333d2b36SAndroid Build Coastguard Worker gen_notice { 481*333d2b36SAndroid Build Coastguard Worker name: "libexample-notice", 482*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 483*333d2b36SAndroid Build Coastguard Worker }`), 484*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 485*333d2b36SAndroid Build Coastguard Worker gen_notice { 486*333d2b36SAndroid Build Coastguard Worker name: "nested-notice", 487*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 488*333d2b36SAndroid Build Coastguard Worker }`), 489*333d2b36SAndroid Build Coastguard Worker "top/other/Android.bp": []byte(` 490*333d2b36SAndroid Build Coastguard Worker gen_notice { 491*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 492*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 493*333d2b36SAndroid Build Coastguard Worker }`), 494*333d2b36SAndroid Build Coastguard Worker }, 495*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 496*333d2b36SAndroid Build Coastguard Worker `module "other-notice" references "//top:libexample" which is not visible to this module`, 497*333d2b36SAndroid Build Coastguard Worker }, 498*333d2b36SAndroid Build Coastguard Worker }, 499*333d2b36SAndroid Build Coastguard Worker { 500*333d2b36SAndroid Build Coastguard Worker // Verify that ["//top/nested", "//peak:__subpackages"] allows the module to be referenced from 501*333d2b36SAndroid Build Coastguard Worker // the current directory, top/nested and peak and all its subpackages. 502*333d2b36SAndroid Build Coastguard Worker name: `["//top/nested", "//peak:__subpackages__"]`, 503*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 504*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 505*333d2b36SAndroid Build Coastguard Worker mock_library { 506*333d2b36SAndroid Build Coastguard Worker name: "libexample", 507*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested", "//peak:__subpackages__"], 508*333d2b36SAndroid Build Coastguard Worker } 509*333d2b36SAndroid Build Coastguard Worker 510*333d2b36SAndroid Build Coastguard Worker mock_library { 511*333d2b36SAndroid Build Coastguard Worker name: "libsamepackage", 512*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 513*333d2b36SAndroid Build Coastguard Worker }`), 514*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 515*333d2b36SAndroid Build Coastguard Worker mock_library { 516*333d2b36SAndroid Build Coastguard Worker name: "libnested", 517*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 518*333d2b36SAndroid Build Coastguard Worker }`), 519*333d2b36SAndroid Build Coastguard Worker "peak/other/Android.bp": []byte(` 520*333d2b36SAndroid Build Coastguard Worker mock_library { 521*333d2b36SAndroid Build Coastguard Worker name: "libother", 522*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 523*333d2b36SAndroid Build Coastguard Worker }`), 524*333d2b36SAndroid Build Coastguard Worker }, 525*333d2b36SAndroid Build Coastguard Worker }, 526*333d2b36SAndroid Build Coastguard Worker { 527*333d2b36SAndroid Build Coastguard Worker // Verify that ["//top/nested", "//peak:__subpackages"] allows the module to be referenced from 528*333d2b36SAndroid Build Coastguard Worker // the current directory, top/nested and peak and all its subpackages. 529*333d2b36SAndroid Build Coastguard Worker name: `["//top/nested", "//peak:__subpackages__ (notices)"]`, 530*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 531*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 532*333d2b36SAndroid Build Coastguard Worker mock_library { 533*333d2b36SAndroid Build Coastguard Worker name: "libexample", 534*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested", "//peak:__subpackages__"], 535*333d2b36SAndroid Build Coastguard Worker } 536*333d2b36SAndroid Build Coastguard Worker 537*333d2b36SAndroid Build Coastguard Worker gen_notice { 538*333d2b36SAndroid Build Coastguard Worker name: "libexample-notice", 539*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 540*333d2b36SAndroid Build Coastguard Worker }`), 541*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 542*333d2b36SAndroid Build Coastguard Worker gen_notice { 543*333d2b36SAndroid Build Coastguard Worker name: "nested-notice", 544*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 545*333d2b36SAndroid Build Coastguard Worker }`), 546*333d2b36SAndroid Build Coastguard Worker "peak/other/Android.bp": []byte(` 547*333d2b36SAndroid Build Coastguard Worker gen_notice { 548*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 549*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 550*333d2b36SAndroid Build Coastguard Worker }`), 551*333d2b36SAndroid Build Coastguard Worker }, 552*333d2b36SAndroid Build Coastguard Worker }, 553*333d2b36SAndroid Build Coastguard Worker { 554*333d2b36SAndroid Build Coastguard Worker // Verify that //vendor... cannot be used outside vendor apart from //vendor:__subpackages__ 555*333d2b36SAndroid Build Coastguard Worker name: `//vendor`, 556*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 557*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 558*333d2b36SAndroid Build Coastguard Worker mock_library { 559*333d2b36SAndroid Build Coastguard Worker name: "libexample", 560*333d2b36SAndroid Build Coastguard Worker visibility: ["//vendor:__subpackages__"], 561*333d2b36SAndroid Build Coastguard Worker } 562*333d2b36SAndroid Build Coastguard Worker 563*333d2b36SAndroid Build Coastguard Worker mock_library { 564*333d2b36SAndroid Build Coastguard Worker name: "libsamepackage", 565*333d2b36SAndroid Build Coastguard Worker visibility: ["//vendor/apps/AcmeSettings"], 566*333d2b36SAndroid Build Coastguard Worker }`), 567*333d2b36SAndroid Build Coastguard Worker "vendor/Android.bp": []byte(` 568*333d2b36SAndroid Build Coastguard Worker mock_library { 569*333d2b36SAndroid Build Coastguard Worker name: "libvendorexample", 570*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 571*333d2b36SAndroid Build Coastguard Worker visibility: ["//vendor/nested"], 572*333d2b36SAndroid Build Coastguard Worker }`), 573*333d2b36SAndroid Build Coastguard Worker "vendor/nested/Android.bp": []byte(` 574*333d2b36SAndroid Build Coastguard Worker mock_library { 575*333d2b36SAndroid Build Coastguard Worker name: "libvendornested", 576*333d2b36SAndroid Build Coastguard Worker deps: ["libexample", "libvendorexample"], 577*333d2b36SAndroid Build Coastguard Worker }`), 578*333d2b36SAndroid Build Coastguard Worker }, 579*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 580*333d2b36SAndroid Build Coastguard Worker `module "libsamepackage": visibility: "//vendor/apps/AcmeSettings"` + 581*333d2b36SAndroid Build Coastguard Worker ` is not allowed. Packages outside //vendor cannot make themselves visible to specific` + 582*333d2b36SAndroid Build Coastguard Worker ` targets within //vendor, they can only use //vendor:__subpackages__.`, 583*333d2b36SAndroid Build Coastguard Worker }, 584*333d2b36SAndroid Build Coastguard Worker }, 585*333d2b36SAndroid Build Coastguard Worker 586*333d2b36SAndroid Build Coastguard Worker // Defaults propagation tests 587*333d2b36SAndroid Build Coastguard Worker { 588*333d2b36SAndroid Build Coastguard Worker // Check that visibility is the union of the defaults modules. 589*333d2b36SAndroid Build Coastguard Worker name: "defaults union, basic", 590*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 591*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 592*333d2b36SAndroid Build Coastguard Worker mock_defaults { 593*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 594*333d2b36SAndroid Build Coastguard Worker visibility: ["//other"], 595*333d2b36SAndroid Build Coastguard Worker } 596*333d2b36SAndroid Build Coastguard Worker mock_library { 597*333d2b36SAndroid Build Coastguard Worker name: "libexample", 598*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested"], 599*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 600*333d2b36SAndroid Build Coastguard Worker } 601*333d2b36SAndroid Build Coastguard Worker mock_library { 602*333d2b36SAndroid Build Coastguard Worker name: "libsamepackage", 603*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 604*333d2b36SAndroid Build Coastguard Worker }`), 605*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 606*333d2b36SAndroid Build Coastguard Worker mock_library { 607*333d2b36SAndroid Build Coastguard Worker name: "libnested", 608*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 609*333d2b36SAndroid Build Coastguard Worker }`), 610*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 611*333d2b36SAndroid Build Coastguard Worker mock_library { 612*333d2b36SAndroid Build Coastguard Worker name: "libother", 613*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 614*333d2b36SAndroid Build Coastguard Worker }`), 615*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 616*333d2b36SAndroid Build Coastguard Worker mock_library { 617*333d2b36SAndroid Build Coastguard Worker name: "liboutsider", 618*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 619*333d2b36SAndroid Build Coastguard Worker }`), 620*333d2b36SAndroid Build Coastguard Worker }, 621*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 622*333d2b36SAndroid Build Coastguard Worker `module "liboutsider" variant "android_common": depends on //top:libexample which is not` + 623*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 624*333d2b36SAndroid Build Coastguard Worker }, 625*333d2b36SAndroid Build Coastguard Worker }, 626*333d2b36SAndroid Build Coastguard Worker { 627*333d2b36SAndroid Build Coastguard Worker // Check that visibility is the union of the defaults modules. 628*333d2b36SAndroid Build Coastguard Worker name: "defaults union, basic (notices)", 629*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 630*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 631*333d2b36SAndroid Build Coastguard Worker mock_defaults { 632*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 633*333d2b36SAndroid Build Coastguard Worker visibility: ["//other"], 634*333d2b36SAndroid Build Coastguard Worker } 635*333d2b36SAndroid Build Coastguard Worker mock_library { 636*333d2b36SAndroid Build Coastguard Worker name: "libexample", 637*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested"], 638*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 639*333d2b36SAndroid Build Coastguard Worker } 640*333d2b36SAndroid Build Coastguard Worker 641*333d2b36SAndroid Build Coastguard Worker gen_notice { 642*333d2b36SAndroid Build Coastguard Worker name: "libexample-notice", 643*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 644*333d2b36SAndroid Build Coastguard Worker }`), 645*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 646*333d2b36SAndroid Build Coastguard Worker gen_notice { 647*333d2b36SAndroid Build Coastguard Worker name: "nested-notice", 648*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 649*333d2b36SAndroid Build Coastguard Worker }`), 650*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 651*333d2b36SAndroid Build Coastguard Worker gen_notice { 652*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 653*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 654*333d2b36SAndroid Build Coastguard Worker }`), 655*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 656*333d2b36SAndroid Build Coastguard Worker gen_notice { 657*333d2b36SAndroid Build Coastguard Worker name: "outsider-notice", 658*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 659*333d2b36SAndroid Build Coastguard Worker }`), 660*333d2b36SAndroid Build Coastguard Worker }, 661*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 662*333d2b36SAndroid Build Coastguard Worker `module "outsider-notice" references "//top:libexample" which is not visible to this module`, 663*333d2b36SAndroid Build Coastguard Worker }, 664*333d2b36SAndroid Build Coastguard Worker }, 665*333d2b36SAndroid Build Coastguard Worker { 666*333d2b36SAndroid Build Coastguard Worker name: "defaults union, multiple defaults", 667*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 668*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 669*333d2b36SAndroid Build Coastguard Worker mock_defaults { 670*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_1", 671*333d2b36SAndroid Build Coastguard Worker visibility: ["//other"], 672*333d2b36SAndroid Build Coastguard Worker } 673*333d2b36SAndroid Build Coastguard Worker mock_defaults { 674*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_2", 675*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested"], 676*333d2b36SAndroid Build Coastguard Worker } 677*333d2b36SAndroid Build Coastguard Worker mock_library { 678*333d2b36SAndroid Build Coastguard Worker name: "libexample", 679*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults_1", "libexample_defaults_2"], 680*333d2b36SAndroid Build Coastguard Worker } 681*333d2b36SAndroid Build Coastguard Worker mock_library { 682*333d2b36SAndroid Build Coastguard Worker name: "libsamepackage", 683*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 684*333d2b36SAndroid Build Coastguard Worker }`), 685*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 686*333d2b36SAndroid Build Coastguard Worker mock_library { 687*333d2b36SAndroid Build Coastguard Worker name: "libnested", 688*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 689*333d2b36SAndroid Build Coastguard Worker }`), 690*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 691*333d2b36SAndroid Build Coastguard Worker mock_library { 692*333d2b36SAndroid Build Coastguard Worker name: "libother", 693*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 694*333d2b36SAndroid Build Coastguard Worker }`), 695*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 696*333d2b36SAndroid Build Coastguard Worker mock_library { 697*333d2b36SAndroid Build Coastguard Worker name: "liboutsider", 698*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 699*333d2b36SAndroid Build Coastguard Worker }`), 700*333d2b36SAndroid Build Coastguard Worker }, 701*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 702*333d2b36SAndroid Build Coastguard Worker `module "liboutsider" variant "android_common": depends on //top:libexample which is not` + 703*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 704*333d2b36SAndroid Build Coastguard Worker }, 705*333d2b36SAndroid Build Coastguard Worker }, 706*333d2b36SAndroid Build Coastguard Worker { 707*333d2b36SAndroid Build Coastguard Worker name: "defaults union, multiple defaults (notices)", 708*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 709*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 710*333d2b36SAndroid Build Coastguard Worker mock_defaults { 711*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_1", 712*333d2b36SAndroid Build Coastguard Worker visibility: ["//other"], 713*333d2b36SAndroid Build Coastguard Worker } 714*333d2b36SAndroid Build Coastguard Worker mock_defaults { 715*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_2", 716*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested"], 717*333d2b36SAndroid Build Coastguard Worker } 718*333d2b36SAndroid Build Coastguard Worker mock_library { 719*333d2b36SAndroid Build Coastguard Worker name: "libexample", 720*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults_1", "libexample_defaults_2"], 721*333d2b36SAndroid Build Coastguard Worker } 722*333d2b36SAndroid Build Coastguard Worker 723*333d2b36SAndroid Build Coastguard Worker gen_notice { 724*333d2b36SAndroid Build Coastguard Worker name: "libexample-notice", 725*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 726*333d2b36SAndroid Build Coastguard Worker }`), 727*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 728*333d2b36SAndroid Build Coastguard Worker gen_notice { 729*333d2b36SAndroid Build Coastguard Worker name: "nested-notice", 730*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 731*333d2b36SAndroid Build Coastguard Worker }`), 732*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 733*333d2b36SAndroid Build Coastguard Worker gen_notice { 734*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 735*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 736*333d2b36SAndroid Build Coastguard Worker }`), 737*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 738*333d2b36SAndroid Build Coastguard Worker gen_notice { 739*333d2b36SAndroid Build Coastguard Worker name: "outsider-notice", 740*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 741*333d2b36SAndroid Build Coastguard Worker }`), 742*333d2b36SAndroid Build Coastguard Worker }, 743*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 744*333d2b36SAndroid Build Coastguard Worker `module "outsider-notice" references "//top:libexample" which is not visible to this module`, 745*333d2b36SAndroid Build Coastguard Worker }, 746*333d2b36SAndroid Build Coastguard Worker }, 747*333d2b36SAndroid Build Coastguard Worker { 748*333d2b36SAndroid Build Coastguard Worker name: "//visibility:public mixed with other in defaults", 749*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 750*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 751*333d2b36SAndroid Build Coastguard Worker mock_defaults { 752*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 753*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public", "//namespace"], 754*333d2b36SAndroid Build Coastguard Worker } 755*333d2b36SAndroid Build Coastguard Worker mock_library { 756*333d2b36SAndroid Build Coastguard Worker name: "libexample", 757*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 758*333d2b36SAndroid Build Coastguard Worker }`), 759*333d2b36SAndroid Build Coastguard Worker }, 760*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 761*333d2b36SAndroid Build Coastguard Worker `module "libexample_defaults": visibility: cannot mix "//visibility:public"` + 762*333d2b36SAndroid Build Coastguard Worker ` with any other visibility rules`, 763*333d2b36SAndroid Build Coastguard Worker }, 764*333d2b36SAndroid Build Coastguard Worker }, 765*333d2b36SAndroid Build Coastguard Worker { 766*333d2b36SAndroid Build Coastguard Worker name: "//visibility:public overriding defaults", 767*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 768*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 769*333d2b36SAndroid Build Coastguard Worker mock_defaults { 770*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 771*333d2b36SAndroid Build Coastguard Worker visibility: ["//namespace"], 772*333d2b36SAndroid Build Coastguard Worker } 773*333d2b36SAndroid Build Coastguard Worker mock_library { 774*333d2b36SAndroid Build Coastguard Worker name: "libexample", 775*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 776*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 777*333d2b36SAndroid Build Coastguard Worker }`), 778*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 779*333d2b36SAndroid Build Coastguard Worker mock_library { 780*333d2b36SAndroid Build Coastguard Worker name: "liboutsider", 781*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 782*333d2b36SAndroid Build Coastguard Worker }`), 783*333d2b36SAndroid Build Coastguard Worker }, 784*333d2b36SAndroid Build Coastguard Worker effectiveVisibility: map[qualifiedModuleName][]string{ 785*333d2b36SAndroid Build Coastguard Worker qualifiedModuleName{pkg: "top", name: "libexample"}: {"//visibility:public"}, 786*333d2b36SAndroid Build Coastguard Worker }, 787*333d2b36SAndroid Build Coastguard Worker }, 788*333d2b36SAndroid Build Coastguard Worker { 789*333d2b36SAndroid Build Coastguard Worker name: "//visibility:public overriding defaults (notices)", 790*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 791*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 792*333d2b36SAndroid Build Coastguard Worker mock_defaults { 793*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 794*333d2b36SAndroid Build Coastguard Worker visibility: ["//namespace"], 795*333d2b36SAndroid Build Coastguard Worker } 796*333d2b36SAndroid Build Coastguard Worker mock_library { 797*333d2b36SAndroid Build Coastguard Worker name: "libexample", 798*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 799*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 800*333d2b36SAndroid Build Coastguard Worker }`), 801*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 802*333d2b36SAndroid Build Coastguard Worker gen_notice { 803*333d2b36SAndroid Build Coastguard Worker name: "outsider-notice", 804*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 805*333d2b36SAndroid Build Coastguard Worker }`), 806*333d2b36SAndroid Build Coastguard Worker }, 807*333d2b36SAndroid Build Coastguard Worker effectiveVisibility: map[qualifiedModuleName][]string{ 808*333d2b36SAndroid Build Coastguard Worker qualifiedModuleName{pkg: "top", name: "libexample"}: {"//visibility:public"}, 809*333d2b36SAndroid Build Coastguard Worker }, 810*333d2b36SAndroid Build Coastguard Worker }, 811*333d2b36SAndroid Build Coastguard Worker { 812*333d2b36SAndroid Build Coastguard Worker name: "//visibility:public mixed with other from different defaults 1", 813*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 814*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 815*333d2b36SAndroid Build Coastguard Worker mock_defaults { 816*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_1", 817*333d2b36SAndroid Build Coastguard Worker visibility: ["//namespace"], 818*333d2b36SAndroid Build Coastguard Worker } 819*333d2b36SAndroid Build Coastguard Worker mock_defaults { 820*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_2", 821*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 822*333d2b36SAndroid Build Coastguard Worker } 823*333d2b36SAndroid Build Coastguard Worker mock_library { 824*333d2b36SAndroid Build Coastguard Worker name: "libexample", 825*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults_1", "libexample_defaults_2"], 826*333d2b36SAndroid Build Coastguard Worker }`), 827*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 828*333d2b36SAndroid Build Coastguard Worker mock_library { 829*333d2b36SAndroid Build Coastguard Worker name: "liboutsider", 830*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 831*333d2b36SAndroid Build Coastguard Worker }`), 832*333d2b36SAndroid Build Coastguard Worker }, 833*333d2b36SAndroid Build Coastguard Worker }, 834*333d2b36SAndroid Build Coastguard Worker { 835*333d2b36SAndroid Build Coastguard Worker name: "//visibility:public mixed with other from different defaults 1", 836*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 837*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 838*333d2b36SAndroid Build Coastguard Worker mock_defaults { 839*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_1", 840*333d2b36SAndroid Build Coastguard Worker visibility: ["//namespace"], 841*333d2b36SAndroid Build Coastguard Worker } 842*333d2b36SAndroid Build Coastguard Worker mock_defaults { 843*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_2", 844*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 845*333d2b36SAndroid Build Coastguard Worker } 846*333d2b36SAndroid Build Coastguard Worker mock_library { 847*333d2b36SAndroid Build Coastguard Worker name: "libexample", 848*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults_1", "libexample_defaults_2"], 849*333d2b36SAndroid Build Coastguard Worker } 850*333d2b36SAndroid Build Coastguard Worker 851*333d2b36SAndroid Build Coastguard Worker gen_notice { 852*333d2b36SAndroid Build Coastguard Worker name: "libexample-notice", 853*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 854*333d2b36SAndroid Build Coastguard Worker }`), 855*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 856*333d2b36SAndroid Build Coastguard Worker gen_notice { 857*333d2b36SAndroid Build Coastguard Worker name: "outsider-notice", 858*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 859*333d2b36SAndroid Build Coastguard Worker }`), 860*333d2b36SAndroid Build Coastguard Worker }, 861*333d2b36SAndroid Build Coastguard Worker }, 862*333d2b36SAndroid Build Coastguard Worker { 863*333d2b36SAndroid Build Coastguard Worker name: "//visibility:public mixed with other from different defaults 2", 864*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 865*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 866*333d2b36SAndroid Build Coastguard Worker mock_defaults { 867*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_1", 868*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 869*333d2b36SAndroid Build Coastguard Worker } 870*333d2b36SAndroid Build Coastguard Worker mock_defaults { 871*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_2", 872*333d2b36SAndroid Build Coastguard Worker visibility: ["//namespace"], 873*333d2b36SAndroid Build Coastguard Worker } 874*333d2b36SAndroid Build Coastguard Worker mock_library { 875*333d2b36SAndroid Build Coastguard Worker name: "libexample", 876*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults_1", "libexample_defaults_2"], 877*333d2b36SAndroid Build Coastguard Worker }`), 878*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 879*333d2b36SAndroid Build Coastguard Worker mock_library { 880*333d2b36SAndroid Build Coastguard Worker name: "liboutsider", 881*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 882*333d2b36SAndroid Build Coastguard Worker }`), 883*333d2b36SAndroid Build Coastguard Worker }, 884*333d2b36SAndroid Build Coastguard Worker }, 885*333d2b36SAndroid Build Coastguard Worker { 886*333d2b36SAndroid Build Coastguard Worker name: "//visibility:public mixed with other from different defaults 2 (notices)", 887*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 888*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 889*333d2b36SAndroid Build Coastguard Worker mock_defaults { 890*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_1", 891*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 892*333d2b36SAndroid Build Coastguard Worker } 893*333d2b36SAndroid Build Coastguard Worker mock_defaults { 894*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_2", 895*333d2b36SAndroid Build Coastguard Worker visibility: ["//namespace"], 896*333d2b36SAndroid Build Coastguard Worker } 897*333d2b36SAndroid Build Coastguard Worker mock_library { 898*333d2b36SAndroid Build Coastguard Worker name: "libexample", 899*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults_1", "libexample_defaults_2"], 900*333d2b36SAndroid Build Coastguard Worker }`), 901*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 902*333d2b36SAndroid Build Coastguard Worker gen_notice { 903*333d2b36SAndroid Build Coastguard Worker name: "outsider-notice", 904*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 905*333d2b36SAndroid Build Coastguard Worker }`), 906*333d2b36SAndroid Build Coastguard Worker }, 907*333d2b36SAndroid Build Coastguard Worker }, 908*333d2b36SAndroid Build Coastguard Worker { 909*333d2b36SAndroid Build Coastguard Worker name: "//visibility:private in defaults", 910*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 911*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 912*333d2b36SAndroid Build Coastguard Worker mock_defaults { 913*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 914*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 915*333d2b36SAndroid Build Coastguard Worker } 916*333d2b36SAndroid Build Coastguard Worker mock_library { 917*333d2b36SAndroid Build Coastguard Worker name: "libexample", 918*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 919*333d2b36SAndroid Build Coastguard Worker } 920*333d2b36SAndroid Build Coastguard Worker mock_library { 921*333d2b36SAndroid Build Coastguard Worker name: "libsamepackage", 922*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 923*333d2b36SAndroid Build Coastguard Worker }`), 924*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 925*333d2b36SAndroid Build Coastguard Worker mock_library { 926*333d2b36SAndroid Build Coastguard Worker name: "libnested", 927*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 928*333d2b36SAndroid Build Coastguard Worker }`), 929*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 930*333d2b36SAndroid Build Coastguard Worker mock_library { 931*333d2b36SAndroid Build Coastguard Worker name: "libother", 932*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 933*333d2b36SAndroid Build Coastguard Worker }`), 934*333d2b36SAndroid Build Coastguard Worker }, 935*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 936*333d2b36SAndroid Build Coastguard Worker `module "libnested" variant "android_common": depends on //top:libexample which is not` + 937*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 938*333d2b36SAndroid Build Coastguard Worker `module "libother" variant "android_common": depends on //top:libexample which is not` + 939*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 940*333d2b36SAndroid Build Coastguard Worker }, 941*333d2b36SAndroid Build Coastguard Worker }, 942*333d2b36SAndroid Build Coastguard Worker { 943*333d2b36SAndroid Build Coastguard Worker name: "//visibility:private in defaults (notices)", 944*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 945*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 946*333d2b36SAndroid Build Coastguard Worker mock_defaults { 947*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 948*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 949*333d2b36SAndroid Build Coastguard Worker } 950*333d2b36SAndroid Build Coastguard Worker mock_library { 951*333d2b36SAndroid Build Coastguard Worker name: "libexample", 952*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 953*333d2b36SAndroid Build Coastguard Worker } 954*333d2b36SAndroid Build Coastguard Worker 955*333d2b36SAndroid Build Coastguard Worker gen_notice { 956*333d2b36SAndroid Build Coastguard Worker name: "libexample-notice", 957*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 958*333d2b36SAndroid Build Coastguard Worker }`), 959*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 960*333d2b36SAndroid Build Coastguard Worker gen_notice { 961*333d2b36SAndroid Build Coastguard Worker name: "nested-notice", 962*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 963*333d2b36SAndroid Build Coastguard Worker }`), 964*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 965*333d2b36SAndroid Build Coastguard Worker gen_notice { 966*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 967*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 968*333d2b36SAndroid Build Coastguard Worker }`), 969*333d2b36SAndroid Build Coastguard Worker }, 970*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 971*333d2b36SAndroid Build Coastguard Worker `module "nested-notice" references "//top:libexample" which is not visible to this module`, 972*333d2b36SAndroid Build Coastguard Worker `module "other-notice" references "//top:libexample" which is not visible to this module`, 973*333d2b36SAndroid Build Coastguard Worker }, 974*333d2b36SAndroid Build Coastguard Worker }, 975*333d2b36SAndroid Build Coastguard Worker { 976*333d2b36SAndroid Build Coastguard Worker name: "//visibility:private mixed with other in defaults", 977*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 978*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 979*333d2b36SAndroid Build Coastguard Worker mock_defaults { 980*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 981*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private", "//namespace"], 982*333d2b36SAndroid Build Coastguard Worker } 983*333d2b36SAndroid Build Coastguard Worker mock_library { 984*333d2b36SAndroid Build Coastguard Worker name: "libexample", 985*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 986*333d2b36SAndroid Build Coastguard Worker }`), 987*333d2b36SAndroid Build Coastguard Worker }, 988*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 989*333d2b36SAndroid Build Coastguard Worker `module "libexample_defaults": visibility: cannot mix "//visibility:private"` + 990*333d2b36SAndroid Build Coastguard Worker ` with any other visibility rules`, 991*333d2b36SAndroid Build Coastguard Worker }, 992*333d2b36SAndroid Build Coastguard Worker }, 993*333d2b36SAndroid Build Coastguard Worker { 994*333d2b36SAndroid Build Coastguard Worker name: "//visibility:private overriding defaults", 995*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 996*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 997*333d2b36SAndroid Build Coastguard Worker mock_defaults { 998*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 999*333d2b36SAndroid Build Coastguard Worker visibility: ["//namespace"], 1000*333d2b36SAndroid Build Coastguard Worker } 1001*333d2b36SAndroid Build Coastguard Worker mock_library { 1002*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1003*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1004*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1005*333d2b36SAndroid Build Coastguard Worker }`), 1006*333d2b36SAndroid Build Coastguard Worker }, 1007*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1008*333d2b36SAndroid Build Coastguard Worker `module "libexample": visibility: cannot mix "//visibility:private"` + 1009*333d2b36SAndroid Build Coastguard Worker ` with any other visibility rules`, 1010*333d2b36SAndroid Build Coastguard Worker }, 1011*333d2b36SAndroid Build Coastguard Worker }, 1012*333d2b36SAndroid Build Coastguard Worker { 1013*333d2b36SAndroid Build Coastguard Worker name: "//visibility:private in defaults overridden", 1014*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1015*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1016*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1017*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 1018*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1019*333d2b36SAndroid Build Coastguard Worker } 1020*333d2b36SAndroid Build Coastguard Worker mock_library { 1021*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1022*333d2b36SAndroid Build Coastguard Worker visibility: ["//namespace"], 1023*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1024*333d2b36SAndroid Build Coastguard Worker }`), 1025*333d2b36SAndroid Build Coastguard Worker }, 1026*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1027*333d2b36SAndroid Build Coastguard Worker `module "libexample": visibility: cannot mix "//visibility:private"` + 1028*333d2b36SAndroid Build Coastguard Worker ` with any other visibility rules`, 1029*333d2b36SAndroid Build Coastguard Worker }, 1030*333d2b36SAndroid Build Coastguard Worker }, 1031*333d2b36SAndroid Build Coastguard Worker { 1032*333d2b36SAndroid Build Coastguard Worker name: "//visibility:private override //visibility:public", 1033*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1034*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1035*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1036*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 1037*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 1038*333d2b36SAndroid Build Coastguard Worker } 1039*333d2b36SAndroid Build Coastguard Worker mock_library { 1040*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1041*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1042*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1043*333d2b36SAndroid Build Coastguard Worker }`), 1044*333d2b36SAndroid Build Coastguard Worker }, 1045*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1046*333d2b36SAndroid Build Coastguard Worker `module "libexample": visibility: cannot mix "//visibility:private" with any other visibility rules`, 1047*333d2b36SAndroid Build Coastguard Worker }, 1048*333d2b36SAndroid Build Coastguard Worker }, 1049*333d2b36SAndroid Build Coastguard Worker { 1050*333d2b36SAndroid Build Coastguard Worker name: "//visibility:public override //visibility:private", 1051*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1052*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1053*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1054*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 1055*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1056*333d2b36SAndroid Build Coastguard Worker } 1057*333d2b36SAndroid Build Coastguard Worker mock_library { 1058*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1059*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 1060*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1061*333d2b36SAndroid Build Coastguard Worker }`), 1062*333d2b36SAndroid Build Coastguard Worker }, 1063*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1064*333d2b36SAndroid Build Coastguard Worker `module "libexample": visibility: cannot mix "//visibility:private" with any other visibility rules`, 1065*333d2b36SAndroid Build Coastguard Worker }, 1066*333d2b36SAndroid Build Coastguard Worker }, 1067*333d2b36SAndroid Build Coastguard Worker { 1068*333d2b36SAndroid Build Coastguard Worker name: "//visibility:override must be first in the list", 1069*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1070*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1071*333d2b36SAndroid Build Coastguard Worker mock_library { 1072*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1073*333d2b36SAndroid Build Coastguard Worker visibility: ["//other", "//visibility:override", "//namespace"], 1074*333d2b36SAndroid Build Coastguard Worker }`), 1075*333d2b36SAndroid Build Coastguard Worker }, 1076*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1077*333d2b36SAndroid Build Coastguard Worker `module "libexample": visibility: "//visibility:override" may only be used at the start of the visibility rules`, 1078*333d2b36SAndroid Build Coastguard Worker }, 1079*333d2b36SAndroid Build Coastguard Worker }, 1080*333d2b36SAndroid Build Coastguard Worker { 1081*333d2b36SAndroid Build Coastguard Worker name: "//visibility:override discards //visibility:private", 1082*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1083*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1084*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1085*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 1086*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1087*333d2b36SAndroid Build Coastguard Worker } 1088*333d2b36SAndroid Build Coastguard Worker mock_library { 1089*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1090*333d2b36SAndroid Build Coastguard Worker // Make this visibility to //other but not //visibility:private 1091*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:override", "//other"], 1092*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1093*333d2b36SAndroid Build Coastguard Worker }`), 1094*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 1095*333d2b36SAndroid Build Coastguard Worker mock_library { 1096*333d2b36SAndroid Build Coastguard Worker name: "libother", 1097*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1098*333d2b36SAndroid Build Coastguard Worker }`), 1099*333d2b36SAndroid Build Coastguard Worker }, 1100*333d2b36SAndroid Build Coastguard Worker }, 1101*333d2b36SAndroid Build Coastguard Worker { 1102*333d2b36SAndroid Build Coastguard Worker name: "//visibility:override discards //visibility:private (notices)", 1103*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1104*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1105*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1106*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 1107*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1108*333d2b36SAndroid Build Coastguard Worker } 1109*333d2b36SAndroid Build Coastguard Worker mock_library { 1110*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1111*333d2b36SAndroid Build Coastguard Worker // Make this visibility to //other but not //visibility:private 1112*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:override", "//other"], 1113*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1114*333d2b36SAndroid Build Coastguard Worker }`), 1115*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 1116*333d2b36SAndroid Build Coastguard Worker gen_notice { 1117*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 1118*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1119*333d2b36SAndroid Build Coastguard Worker }`), 1120*333d2b36SAndroid Build Coastguard Worker }, 1121*333d2b36SAndroid Build Coastguard Worker }, 1122*333d2b36SAndroid Build Coastguard Worker { 1123*333d2b36SAndroid Build Coastguard Worker name: "//visibility:override discards //visibility:public", 1124*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1125*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1126*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1127*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 1128*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 1129*333d2b36SAndroid Build Coastguard Worker } 1130*333d2b36SAndroid Build Coastguard Worker mock_library { 1131*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1132*333d2b36SAndroid Build Coastguard Worker // Make this visibility to //other but not //visibility:public 1133*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:override", "//other"], 1134*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1135*333d2b36SAndroid Build Coastguard Worker }`), 1136*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 1137*333d2b36SAndroid Build Coastguard Worker mock_library { 1138*333d2b36SAndroid Build Coastguard Worker name: "libother", 1139*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1140*333d2b36SAndroid Build Coastguard Worker }`), 1141*333d2b36SAndroid Build Coastguard Worker "namespace/Android.bp": []byte(` 1142*333d2b36SAndroid Build Coastguard Worker mock_library { 1143*333d2b36SAndroid Build Coastguard Worker name: "libnamespace", 1144*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1145*333d2b36SAndroid Build Coastguard Worker }`), 1146*333d2b36SAndroid Build Coastguard Worker }, 1147*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1148*333d2b36SAndroid Build Coastguard Worker `module "libnamespace" variant "android_common": depends on //top:libexample which is not visible to this module\nYou may need to add "//namespace" to its visibility`, 1149*333d2b36SAndroid Build Coastguard Worker }, 1150*333d2b36SAndroid Build Coastguard Worker }, 1151*333d2b36SAndroid Build Coastguard Worker { 1152*333d2b36SAndroid Build Coastguard Worker name: "//visibility:override discards //visibility:public (notices)", 1153*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1154*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1155*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1156*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 1157*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 1158*333d2b36SAndroid Build Coastguard Worker } 1159*333d2b36SAndroid Build Coastguard Worker mock_library { 1160*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1161*333d2b36SAndroid Build Coastguard Worker // Make this visibility to //other but not //visibility:public 1162*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:override", "//other"], 1163*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1164*333d2b36SAndroid Build Coastguard Worker }`), 1165*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 1166*333d2b36SAndroid Build Coastguard Worker gen_notice { 1167*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 1168*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1169*333d2b36SAndroid Build Coastguard Worker }`), 1170*333d2b36SAndroid Build Coastguard Worker "namespace/Android.bp": []byte(` 1171*333d2b36SAndroid Build Coastguard Worker gen_notice { 1172*333d2b36SAndroid Build Coastguard Worker name: "namespace-notice", 1173*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1174*333d2b36SAndroid Build Coastguard Worker }`), 1175*333d2b36SAndroid Build Coastguard Worker }, 1176*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1177*333d2b36SAndroid Build Coastguard Worker `module "namespace-notice" references "//top:libexample" which is not visible to this module\nYou may need to add "//namespace" to its visibility`, 1178*333d2b36SAndroid Build Coastguard Worker }, 1179*333d2b36SAndroid Build Coastguard Worker }, 1180*333d2b36SAndroid Build Coastguard Worker { 1181*333d2b36SAndroid Build Coastguard Worker name: "//visibility:override discards defaults supplied rules", 1182*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1183*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1184*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1185*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 1186*333d2b36SAndroid Build Coastguard Worker visibility: ["//namespace"], 1187*333d2b36SAndroid Build Coastguard Worker } 1188*333d2b36SAndroid Build Coastguard Worker mock_library { 1189*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1190*333d2b36SAndroid Build Coastguard Worker // Make this visibility to //other but not //namespace 1191*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:override", "//other"], 1192*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1193*333d2b36SAndroid Build Coastguard Worker }`), 1194*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 1195*333d2b36SAndroid Build Coastguard Worker mock_library { 1196*333d2b36SAndroid Build Coastguard Worker name: "libother", 1197*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1198*333d2b36SAndroid Build Coastguard Worker }`), 1199*333d2b36SAndroid Build Coastguard Worker "namespace/Android.bp": []byte(` 1200*333d2b36SAndroid Build Coastguard Worker mock_library { 1201*333d2b36SAndroid Build Coastguard Worker name: "libnamespace", 1202*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1203*333d2b36SAndroid Build Coastguard Worker }`), 1204*333d2b36SAndroid Build Coastguard Worker }, 1205*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1206*333d2b36SAndroid Build Coastguard Worker `module "libnamespace" variant "android_common": depends on //top:libexample which is not visible to this module\nYou may need to add "//namespace" to its visibility`, 1207*333d2b36SAndroid Build Coastguard Worker }, 1208*333d2b36SAndroid Build Coastguard Worker }, 1209*333d2b36SAndroid Build Coastguard Worker { 1210*333d2b36SAndroid Build Coastguard Worker name: "//visibility:override discards defaults supplied rules (notices)", 1211*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1212*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1213*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1214*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 1215*333d2b36SAndroid Build Coastguard Worker visibility: ["//namespace"], 1216*333d2b36SAndroid Build Coastguard Worker } 1217*333d2b36SAndroid Build Coastguard Worker mock_library { 1218*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1219*333d2b36SAndroid Build Coastguard Worker // Make this visibility to //other but not //namespace 1220*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:override", "//other"], 1221*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1222*333d2b36SAndroid Build Coastguard Worker }`), 1223*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 1224*333d2b36SAndroid Build Coastguard Worker gen_notice { 1225*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 1226*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1227*333d2b36SAndroid Build Coastguard Worker }`), 1228*333d2b36SAndroid Build Coastguard Worker "namespace/Android.bp": []byte(` 1229*333d2b36SAndroid Build Coastguard Worker gen_notice { 1230*333d2b36SAndroid Build Coastguard Worker name: "namespace-notice", 1231*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1232*333d2b36SAndroid Build Coastguard Worker }`), 1233*333d2b36SAndroid Build Coastguard Worker }, 1234*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1235*333d2b36SAndroid Build Coastguard Worker `module "namespace-notice" references "//top:libexample" which is not visible to this module\nYou may need to add "//namespace" to its visibility`, 1236*333d2b36SAndroid Build Coastguard Worker }, 1237*333d2b36SAndroid Build Coastguard Worker }, 1238*333d2b36SAndroid Build Coastguard Worker { 1239*333d2b36SAndroid Build Coastguard Worker name: "//visibility:override can override //visibility:public with //visibility:private", 1240*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1241*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1242*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1243*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 1244*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 1245*333d2b36SAndroid Build Coastguard Worker } 1246*333d2b36SAndroid Build Coastguard Worker mock_library { 1247*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1248*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:override", "//visibility:private"], 1249*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1250*333d2b36SAndroid Build Coastguard Worker }`), 1251*333d2b36SAndroid Build Coastguard Worker "namespace/Android.bp": []byte(` 1252*333d2b36SAndroid Build Coastguard Worker mock_library { 1253*333d2b36SAndroid Build Coastguard Worker name: "libnamespace", 1254*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1255*333d2b36SAndroid Build Coastguard Worker }`), 1256*333d2b36SAndroid Build Coastguard Worker }, 1257*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1258*333d2b36SAndroid Build Coastguard Worker `module "libnamespace" variant "android_common": depends on //top:libexample which is not visible to this module`, 1259*333d2b36SAndroid Build Coastguard Worker }, 1260*333d2b36SAndroid Build Coastguard Worker }, 1261*333d2b36SAndroid Build Coastguard Worker { 1262*333d2b36SAndroid Build Coastguard Worker name: "//visibility:override can override //visibility:public with //visibility:private (notices)", 1263*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1264*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1265*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1266*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 1267*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 1268*333d2b36SAndroid Build Coastguard Worker } 1269*333d2b36SAndroid Build Coastguard Worker mock_library { 1270*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1271*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:override", "//visibility:private"], 1272*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1273*333d2b36SAndroid Build Coastguard Worker }`), 1274*333d2b36SAndroid Build Coastguard Worker "namespace/Android.bp": []byte(` 1275*333d2b36SAndroid Build Coastguard Worker gen_notice { 1276*333d2b36SAndroid Build Coastguard Worker name: "namespace-notice", 1277*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1278*333d2b36SAndroid Build Coastguard Worker }`), 1279*333d2b36SAndroid Build Coastguard Worker }, 1280*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1281*333d2b36SAndroid Build Coastguard Worker `module "namespace-notice" references "//top:libexample" which is not visible to this module`, 1282*333d2b36SAndroid Build Coastguard Worker }, 1283*333d2b36SAndroid Build Coastguard Worker }, 1284*333d2b36SAndroid Build Coastguard Worker { 1285*333d2b36SAndroid Build Coastguard Worker name: "//visibility:override can override //visibility:private with //visibility:public", 1286*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1287*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1288*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1289*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 1290*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1291*333d2b36SAndroid Build Coastguard Worker } 1292*333d2b36SAndroid Build Coastguard Worker mock_library { 1293*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1294*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:override", "//visibility:public"], 1295*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1296*333d2b36SAndroid Build Coastguard Worker }`), 1297*333d2b36SAndroid Build Coastguard Worker "namespace/Android.bp": []byte(` 1298*333d2b36SAndroid Build Coastguard Worker mock_library { 1299*333d2b36SAndroid Build Coastguard Worker name: "libnamespace", 1300*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1301*333d2b36SAndroid Build Coastguard Worker }`), 1302*333d2b36SAndroid Build Coastguard Worker }, 1303*333d2b36SAndroid Build Coastguard Worker }, 1304*333d2b36SAndroid Build Coastguard Worker { 1305*333d2b36SAndroid Build Coastguard Worker name: "//visibility:override can override //visibility:private with //visibility:public (notices)", 1306*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1307*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1308*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1309*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults", 1310*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1311*333d2b36SAndroid Build Coastguard Worker } 1312*333d2b36SAndroid Build Coastguard Worker mock_library { 1313*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1314*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:override", "//visibility:public"], 1315*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults"], 1316*333d2b36SAndroid Build Coastguard Worker }`), 1317*333d2b36SAndroid Build Coastguard Worker "namespace/Android.bp": []byte(` 1318*333d2b36SAndroid Build Coastguard Worker gen_notice { 1319*333d2b36SAndroid Build Coastguard Worker name: "namespace-notice", 1320*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1321*333d2b36SAndroid Build Coastguard Worker }`), 1322*333d2b36SAndroid Build Coastguard Worker }, 1323*333d2b36SAndroid Build Coastguard Worker }, 1324*333d2b36SAndroid Build Coastguard Worker { 1325*333d2b36SAndroid Build Coastguard Worker name: "//visibility:private mixed with itself", 1326*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1327*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1328*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1329*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_1", 1330*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1331*333d2b36SAndroid Build Coastguard Worker } 1332*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1333*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_2", 1334*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1335*333d2b36SAndroid Build Coastguard Worker } 1336*333d2b36SAndroid Build Coastguard Worker mock_library { 1337*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1338*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1339*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults_1", "libexample_defaults_2"], 1340*333d2b36SAndroid Build Coastguard Worker }`), 1341*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1342*333d2b36SAndroid Build Coastguard Worker mock_library { 1343*333d2b36SAndroid Build Coastguard Worker name: "liboutsider", 1344*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1345*333d2b36SAndroid Build Coastguard Worker }`), 1346*333d2b36SAndroid Build Coastguard Worker }, 1347*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1348*333d2b36SAndroid Build Coastguard Worker `module "liboutsider" variant "android_common": depends on //top:libexample which is not` + 1349*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 1350*333d2b36SAndroid Build Coastguard Worker }, 1351*333d2b36SAndroid Build Coastguard Worker }, 1352*333d2b36SAndroid Build Coastguard Worker { 1353*333d2b36SAndroid Build Coastguard Worker name: "//visibility:private mixed with itself (notices)", 1354*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1355*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1356*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1357*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_1", 1358*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1359*333d2b36SAndroid Build Coastguard Worker } 1360*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1361*333d2b36SAndroid Build Coastguard Worker name: "libexample_defaults_2", 1362*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1363*333d2b36SAndroid Build Coastguard Worker } 1364*333d2b36SAndroid Build Coastguard Worker mock_library { 1365*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1366*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1367*333d2b36SAndroid Build Coastguard Worker defaults: ["libexample_defaults_1", "libexample_defaults_2"], 1368*333d2b36SAndroid Build Coastguard Worker }`), 1369*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1370*333d2b36SAndroid Build Coastguard Worker gen_notice { 1371*333d2b36SAndroid Build Coastguard Worker name: "outsider-notice", 1372*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1373*333d2b36SAndroid Build Coastguard Worker }`), 1374*333d2b36SAndroid Build Coastguard Worker }, 1375*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1376*333d2b36SAndroid Build Coastguard Worker `module "outsider-notice" references "//top:libexample" which is not visible to this module`, 1377*333d2b36SAndroid Build Coastguard Worker }, 1378*333d2b36SAndroid Build Coastguard Worker }, 1379*333d2b36SAndroid Build Coastguard Worker 1380*333d2b36SAndroid Build Coastguard Worker // Defaults module's defaults_visibility tests 1381*333d2b36SAndroid Build Coastguard Worker { 1382*333d2b36SAndroid Build Coastguard Worker name: "defaults_visibility invalid", 1383*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1384*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1385*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1386*333d2b36SAndroid Build Coastguard Worker name: "top_defaults", 1387*333d2b36SAndroid Build Coastguard Worker defaults_visibility: ["//visibility:invalid"], 1388*333d2b36SAndroid Build Coastguard Worker }`), 1389*333d2b36SAndroid Build Coastguard Worker }, 1390*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1391*333d2b36SAndroid Build Coastguard Worker `defaults_visibility: unrecognized visibility rule "//visibility:invalid"`, 1392*333d2b36SAndroid Build Coastguard Worker }, 1393*333d2b36SAndroid Build Coastguard Worker }, 1394*333d2b36SAndroid Build Coastguard Worker { 1395*333d2b36SAndroid Build Coastguard Worker name: "defaults_visibility overrides package default", 1396*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1397*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1398*333d2b36SAndroid Build Coastguard Worker package { 1399*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//visibility:private"], 1400*333d2b36SAndroid Build Coastguard Worker } 1401*333d2b36SAndroid Build Coastguard Worker mock_defaults { 1402*333d2b36SAndroid Build Coastguard Worker name: "top_defaults", 1403*333d2b36SAndroid Build Coastguard Worker defaults_visibility: ["//visibility:public"], 1404*333d2b36SAndroid Build Coastguard Worker }`), 1405*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1406*333d2b36SAndroid Build Coastguard Worker mock_library { 1407*333d2b36SAndroid Build Coastguard Worker name: "liboutsider", 1408*333d2b36SAndroid Build Coastguard Worker defaults: ["top_defaults"], 1409*333d2b36SAndroid Build Coastguard Worker }`), 1410*333d2b36SAndroid Build Coastguard Worker }, 1411*333d2b36SAndroid Build Coastguard Worker }, 1412*333d2b36SAndroid Build Coastguard Worker 1413*333d2b36SAndroid Build Coastguard Worker // Package default_visibility tests 1414*333d2b36SAndroid Build Coastguard Worker { 1415*333d2b36SAndroid Build Coastguard Worker name: "package default_visibility property is checked", 1416*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1417*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1418*333d2b36SAndroid Build Coastguard Worker package { 1419*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//visibility:invalid"], 1420*333d2b36SAndroid Build Coastguard Worker }`), 1421*333d2b36SAndroid Build Coastguard Worker }, 1422*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{`default_visibility: unrecognized visibility rule "//visibility:invalid"`}, 1423*333d2b36SAndroid Build Coastguard Worker }, 1424*333d2b36SAndroid Build Coastguard Worker { 1425*333d2b36SAndroid Build Coastguard Worker // This test relies on the default visibility being legacy_public. 1426*333d2b36SAndroid Build Coastguard Worker name: "package default_visibility property used when no visibility specified", 1427*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1428*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1429*333d2b36SAndroid Build Coastguard Worker package { 1430*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//visibility:private"], 1431*333d2b36SAndroid Build Coastguard Worker } 1432*333d2b36SAndroid Build Coastguard Worker 1433*333d2b36SAndroid Build Coastguard Worker mock_library { 1434*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1435*333d2b36SAndroid Build Coastguard Worker }`), 1436*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1437*333d2b36SAndroid Build Coastguard Worker mock_library { 1438*333d2b36SAndroid Build Coastguard Worker name: "liboutsider", 1439*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1440*333d2b36SAndroid Build Coastguard Worker }`), 1441*333d2b36SAndroid Build Coastguard Worker }, 1442*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1443*333d2b36SAndroid Build Coastguard Worker `module "liboutsider" variant "android_common": depends on //top:libexample which is not` + 1444*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 1445*333d2b36SAndroid Build Coastguard Worker }, 1446*333d2b36SAndroid Build Coastguard Worker }, 1447*333d2b36SAndroid Build Coastguard Worker { 1448*333d2b36SAndroid Build Coastguard Worker // This test relies on the default visibility being legacy_public. 1449*333d2b36SAndroid Build Coastguard Worker name: "package default_visibility property used when no visibility specified (notices)", 1450*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1451*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1452*333d2b36SAndroid Build Coastguard Worker package { 1453*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//visibility:private"], 1454*333d2b36SAndroid Build Coastguard Worker } 1455*333d2b36SAndroid Build Coastguard Worker 1456*333d2b36SAndroid Build Coastguard Worker mock_library { 1457*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1458*333d2b36SAndroid Build Coastguard Worker }`), 1459*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1460*333d2b36SAndroid Build Coastguard Worker gen_notice { 1461*333d2b36SAndroid Build Coastguard Worker name: "outsider-notice", 1462*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1463*333d2b36SAndroid Build Coastguard Worker }`), 1464*333d2b36SAndroid Build Coastguard Worker }, 1465*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1466*333d2b36SAndroid Build Coastguard Worker `module "outsider-notice" references "//top:libexample" which is not visible to this module`, 1467*333d2b36SAndroid Build Coastguard Worker }, 1468*333d2b36SAndroid Build Coastguard Worker }, 1469*333d2b36SAndroid Build Coastguard Worker { 1470*333d2b36SAndroid Build Coastguard Worker name: "package default_visibility public does not override visibility private", 1471*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1472*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1473*333d2b36SAndroid Build Coastguard Worker package { 1474*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//visibility:public"], 1475*333d2b36SAndroid Build Coastguard Worker } 1476*333d2b36SAndroid Build Coastguard Worker 1477*333d2b36SAndroid Build Coastguard Worker mock_library { 1478*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1479*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1480*333d2b36SAndroid Build Coastguard Worker }`), 1481*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1482*333d2b36SAndroid Build Coastguard Worker mock_library { 1483*333d2b36SAndroid Build Coastguard Worker name: "liboutsider", 1484*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1485*333d2b36SAndroid Build Coastguard Worker }`), 1486*333d2b36SAndroid Build Coastguard Worker }, 1487*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1488*333d2b36SAndroid Build Coastguard Worker `module "liboutsider" variant "android_common": depends on //top:libexample which is not` + 1489*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 1490*333d2b36SAndroid Build Coastguard Worker }, 1491*333d2b36SAndroid Build Coastguard Worker }, 1492*333d2b36SAndroid Build Coastguard Worker { 1493*333d2b36SAndroid Build Coastguard Worker name: "package default_visibility public does not override visibility private (notices)", 1494*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1495*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1496*333d2b36SAndroid Build Coastguard Worker package { 1497*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//visibility:public"], 1498*333d2b36SAndroid Build Coastguard Worker } 1499*333d2b36SAndroid Build Coastguard Worker 1500*333d2b36SAndroid Build Coastguard Worker mock_library { 1501*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1502*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:private"], 1503*333d2b36SAndroid Build Coastguard Worker }`), 1504*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1505*333d2b36SAndroid Build Coastguard Worker gen_notice { 1506*333d2b36SAndroid Build Coastguard Worker name: "outsider-notice", 1507*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1508*333d2b36SAndroid Build Coastguard Worker }`), 1509*333d2b36SAndroid Build Coastguard Worker }, 1510*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1511*333d2b36SAndroid Build Coastguard Worker `module "outsider-notice" references "//top:libexample" which is not visible to this module`, 1512*333d2b36SAndroid Build Coastguard Worker }, 1513*333d2b36SAndroid Build Coastguard Worker }, 1514*333d2b36SAndroid Build Coastguard Worker { 1515*333d2b36SAndroid Build Coastguard Worker name: "package default_visibility private does not override visibility public", 1516*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1517*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1518*333d2b36SAndroid Build Coastguard Worker package { 1519*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//visibility:private"], 1520*333d2b36SAndroid Build Coastguard Worker } 1521*333d2b36SAndroid Build Coastguard Worker 1522*333d2b36SAndroid Build Coastguard Worker mock_library { 1523*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1524*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 1525*333d2b36SAndroid Build Coastguard Worker }`), 1526*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1527*333d2b36SAndroid Build Coastguard Worker mock_library { 1528*333d2b36SAndroid Build Coastguard Worker name: "liboutsider", 1529*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1530*333d2b36SAndroid Build Coastguard Worker }`), 1531*333d2b36SAndroid Build Coastguard Worker }, 1532*333d2b36SAndroid Build Coastguard Worker }, 1533*333d2b36SAndroid Build Coastguard Worker { 1534*333d2b36SAndroid Build Coastguard Worker name: "package default_visibility private does not override visibility public (notices)", 1535*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1536*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1537*333d2b36SAndroid Build Coastguard Worker package { 1538*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//visibility:private"], 1539*333d2b36SAndroid Build Coastguard Worker } 1540*333d2b36SAndroid Build Coastguard Worker 1541*333d2b36SAndroid Build Coastguard Worker mock_library { 1542*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1543*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:public"], 1544*333d2b36SAndroid Build Coastguard Worker }`), 1545*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1546*333d2b36SAndroid Build Coastguard Worker gen_notice { 1547*333d2b36SAndroid Build Coastguard Worker name: "outsider-notice", 1548*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1549*333d2b36SAndroid Build Coastguard Worker }`), 1550*333d2b36SAndroid Build Coastguard Worker }, 1551*333d2b36SAndroid Build Coastguard Worker }, 1552*333d2b36SAndroid Build Coastguard Worker { 1553*333d2b36SAndroid Build Coastguard Worker name: "package default_visibility :__subpackages__", 1554*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1555*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1556*333d2b36SAndroid Build Coastguard Worker package { 1557*333d2b36SAndroid Build Coastguard Worker default_visibility: [":__subpackages__"], 1558*333d2b36SAndroid Build Coastguard Worker } 1559*333d2b36SAndroid Build Coastguard Worker 1560*333d2b36SAndroid Build Coastguard Worker mock_library { 1561*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1562*333d2b36SAndroid Build Coastguard Worker }`), 1563*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 1564*333d2b36SAndroid Build Coastguard Worker mock_library { 1565*333d2b36SAndroid Build Coastguard Worker name: "libnested", 1566*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1567*333d2b36SAndroid Build Coastguard Worker }`), 1568*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1569*333d2b36SAndroid Build Coastguard Worker mock_library { 1570*333d2b36SAndroid Build Coastguard Worker name: "liboutsider", 1571*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1572*333d2b36SAndroid Build Coastguard Worker }`), 1573*333d2b36SAndroid Build Coastguard Worker }, 1574*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1575*333d2b36SAndroid Build Coastguard Worker `module "liboutsider" variant "android_common": depends on //top:libexample which is not` + 1576*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 1577*333d2b36SAndroid Build Coastguard Worker }, 1578*333d2b36SAndroid Build Coastguard Worker }, 1579*333d2b36SAndroid Build Coastguard Worker { 1580*333d2b36SAndroid Build Coastguard Worker name: "package default_visibility :__subpackages__ (notices)", 1581*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1582*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1583*333d2b36SAndroid Build Coastguard Worker package { 1584*333d2b36SAndroid Build Coastguard Worker default_visibility: [":__subpackages__"], 1585*333d2b36SAndroid Build Coastguard Worker } 1586*333d2b36SAndroid Build Coastguard Worker 1587*333d2b36SAndroid Build Coastguard Worker mock_library { 1588*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1589*333d2b36SAndroid Build Coastguard Worker }`), 1590*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 1591*333d2b36SAndroid Build Coastguard Worker gen_notice { 1592*333d2b36SAndroid Build Coastguard Worker name: "nested-notice", 1593*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1594*333d2b36SAndroid Build Coastguard Worker }`), 1595*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1596*333d2b36SAndroid Build Coastguard Worker gen_notice { 1597*333d2b36SAndroid Build Coastguard Worker name: "outsider-notice", 1598*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1599*333d2b36SAndroid Build Coastguard Worker }`), 1600*333d2b36SAndroid Build Coastguard Worker }, 1601*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1602*333d2b36SAndroid Build Coastguard Worker `module "outsider-notice" references "//top:libexample" which is not visible to this module`, 1603*333d2b36SAndroid Build Coastguard Worker }, 1604*333d2b36SAndroid Build Coastguard Worker }, 1605*333d2b36SAndroid Build Coastguard Worker { 1606*333d2b36SAndroid Build Coastguard Worker name: "package default_visibility inherited to subpackages", 1607*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1608*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1609*333d2b36SAndroid Build Coastguard Worker package { 1610*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//outsider"], 1611*333d2b36SAndroid Build Coastguard Worker } 1612*333d2b36SAndroid Build Coastguard Worker 1613*333d2b36SAndroid Build Coastguard Worker mock_library { 1614*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1615*333d2b36SAndroid Build Coastguard Worker visibility: [":__subpackages__"], 1616*333d2b36SAndroid Build Coastguard Worker }`), 1617*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 1618*333d2b36SAndroid Build Coastguard Worker mock_library { 1619*333d2b36SAndroid Build Coastguard Worker name: "libnested", 1620*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1621*333d2b36SAndroid Build Coastguard Worker }`), 1622*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1623*333d2b36SAndroid Build Coastguard Worker mock_library { 1624*333d2b36SAndroid Build Coastguard Worker name: "liboutsider", 1625*333d2b36SAndroid Build Coastguard Worker deps: ["libexample", "libnested"], 1626*333d2b36SAndroid Build Coastguard Worker }`), 1627*333d2b36SAndroid Build Coastguard Worker }, 1628*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1629*333d2b36SAndroid Build Coastguard Worker `module "liboutsider" variant "android_common": depends on //top:libexample which is not` + 1630*333d2b36SAndroid Build Coastguard Worker ` visible to this module`, 1631*333d2b36SAndroid Build Coastguard Worker }, 1632*333d2b36SAndroid Build Coastguard Worker }, 1633*333d2b36SAndroid Build Coastguard Worker { 1634*333d2b36SAndroid Build Coastguard Worker name: "package default_visibility inherited to subpackages (notices)", 1635*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1636*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1637*333d2b36SAndroid Build Coastguard Worker package { 1638*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//outsider"], 1639*333d2b36SAndroid Build Coastguard Worker } 1640*333d2b36SAndroid Build Coastguard Worker 1641*333d2b36SAndroid Build Coastguard Worker mock_library { 1642*333d2b36SAndroid Build Coastguard Worker name: "libexample", 1643*333d2b36SAndroid Build Coastguard Worker visibility: [":__subpackages__"], 1644*333d2b36SAndroid Build Coastguard Worker }`), 1645*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 1646*333d2b36SAndroid Build Coastguard Worker mock_library { 1647*333d2b36SAndroid Build Coastguard Worker name: "libnested", 1648*333d2b36SAndroid Build Coastguard Worker deps: ["libexample"], 1649*333d2b36SAndroid Build Coastguard Worker } 1650*333d2b36SAndroid Build Coastguard Worker 1651*333d2b36SAndroid Build Coastguard Worker gen_notice { 1652*333d2b36SAndroid Build Coastguard Worker name: "nested-notice", 1653*333d2b36SAndroid Build Coastguard Worker for: ["libexample"], 1654*333d2b36SAndroid Build Coastguard Worker }`), 1655*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1656*333d2b36SAndroid Build Coastguard Worker gen_notice { 1657*333d2b36SAndroid Build Coastguard Worker name: "outsider-notice", 1658*333d2b36SAndroid Build Coastguard Worker for: ["libexample", "libnested"], 1659*333d2b36SAndroid Build Coastguard Worker }`), 1660*333d2b36SAndroid Build Coastguard Worker }, 1661*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1662*333d2b36SAndroid Build Coastguard Worker `module "outsider-notice" references "//top:libexample" which is not visible to this module`, 1663*333d2b36SAndroid Build Coastguard Worker }, 1664*333d2b36SAndroid Build Coastguard Worker }, 1665*333d2b36SAndroid Build Coastguard Worker { 1666*333d2b36SAndroid Build Coastguard Worker name: "package default_visibility inherited to subpackages", 1667*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1668*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1669*333d2b36SAndroid Build Coastguard Worker package { 1670*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//visibility:private"], 1671*333d2b36SAndroid Build Coastguard Worker }`), 1672*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 1673*333d2b36SAndroid Build Coastguard Worker package { 1674*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//outsider"], 1675*333d2b36SAndroid Build Coastguard Worker } 1676*333d2b36SAndroid Build Coastguard Worker 1677*333d2b36SAndroid Build Coastguard Worker mock_library { 1678*333d2b36SAndroid Build Coastguard Worker name: "libnested", 1679*333d2b36SAndroid Build Coastguard Worker }`), 1680*333d2b36SAndroid Build Coastguard Worker "top/other/Android.bp": []byte(` 1681*333d2b36SAndroid Build Coastguard Worker mock_library { 1682*333d2b36SAndroid Build Coastguard Worker name: "libother", 1683*333d2b36SAndroid Build Coastguard Worker }`), 1684*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1685*333d2b36SAndroid Build Coastguard Worker mock_library { 1686*333d2b36SAndroid Build Coastguard Worker name: "liboutsider", 1687*333d2b36SAndroid Build Coastguard Worker deps: ["libother", "libnested"], 1688*333d2b36SAndroid Build Coastguard Worker }`), 1689*333d2b36SAndroid Build Coastguard Worker }, 1690*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1691*333d2b36SAndroid Build Coastguard Worker `module "liboutsider" variant "android_common": depends on //top/other:libother which is` + 1692*333d2b36SAndroid Build Coastguard Worker ` not visible to this module`, 1693*333d2b36SAndroid Build Coastguard Worker }, 1694*333d2b36SAndroid Build Coastguard Worker }, 1695*333d2b36SAndroid Build Coastguard Worker { 1696*333d2b36SAndroid Build Coastguard Worker name: "package default_visibility inherited to subpackages (notices)", 1697*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1698*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1699*333d2b36SAndroid Build Coastguard Worker package { 1700*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//visibility:private"], 1701*333d2b36SAndroid Build Coastguard Worker }`), 1702*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 1703*333d2b36SAndroid Build Coastguard Worker package { 1704*333d2b36SAndroid Build Coastguard Worker default_visibility: ["//outsider"], 1705*333d2b36SAndroid Build Coastguard Worker } 1706*333d2b36SAndroid Build Coastguard Worker 1707*333d2b36SAndroid Build Coastguard Worker mock_library { 1708*333d2b36SAndroid Build Coastguard Worker name: "libnested", 1709*333d2b36SAndroid Build Coastguard Worker }`), 1710*333d2b36SAndroid Build Coastguard Worker "top/other/Android.bp": []byte(` 1711*333d2b36SAndroid Build Coastguard Worker mock_library { 1712*333d2b36SAndroid Build Coastguard Worker name: "libother", 1713*333d2b36SAndroid Build Coastguard Worker } 1714*333d2b36SAndroid Build Coastguard Worker 1715*333d2b36SAndroid Build Coastguard Worker gen_notice { 1716*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 1717*333d2b36SAndroid Build Coastguard Worker for: ["libother"], 1718*333d2b36SAndroid Build Coastguard Worker }`), 1719*333d2b36SAndroid Build Coastguard Worker "outsider/Android.bp": []byte(` 1720*333d2b36SAndroid Build Coastguard Worker gen_notice { 1721*333d2b36SAndroid Build Coastguard Worker name: "outsider-notice", 1722*333d2b36SAndroid Build Coastguard Worker for: ["libother", "libnested"], 1723*333d2b36SAndroid Build Coastguard Worker }`), 1724*333d2b36SAndroid Build Coastguard Worker }, 1725*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1726*333d2b36SAndroid Build Coastguard Worker `module "outsider-notice" references "//top/other:libother" which is not visible to this` + 1727*333d2b36SAndroid Build Coastguard Worker ` module\nYou may need to add "//outsider" to its visibility`, 1728*333d2b36SAndroid Build Coastguard Worker }, 1729*333d2b36SAndroid Build Coastguard Worker }, 1730*333d2b36SAndroid Build Coastguard Worker { 1731*333d2b36SAndroid Build Coastguard Worker name: "verify that prebuilt dependencies are ignored for visibility reasons (not preferred)", 1732*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1733*333d2b36SAndroid Build Coastguard Worker "prebuilts/Android.bp": []byte(` 1734*333d2b36SAndroid Build Coastguard Worker prebuilt { 1735*333d2b36SAndroid Build Coastguard Worker name: "module", 1736*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/other"], 1737*333d2b36SAndroid Build Coastguard Worker }`), 1738*333d2b36SAndroid Build Coastguard Worker "top/sources/source_file": nil, 1739*333d2b36SAndroid Build Coastguard Worker "top/sources/Android.bp": []byte(` 1740*333d2b36SAndroid Build Coastguard Worker source { 1741*333d2b36SAndroid Build Coastguard Worker name: "module", 1742*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/other"], 1743*333d2b36SAndroid Build Coastguard Worker }`), 1744*333d2b36SAndroid Build Coastguard Worker "top/other/source_file": nil, 1745*333d2b36SAndroid Build Coastguard Worker "top/other/Android.bp": []byte(` 1746*333d2b36SAndroid Build Coastguard Worker source { 1747*333d2b36SAndroid Build Coastguard Worker name: "other", 1748*333d2b36SAndroid Build Coastguard Worker deps: [":module"], 1749*333d2b36SAndroid Build Coastguard Worker }`), 1750*333d2b36SAndroid Build Coastguard Worker }, 1751*333d2b36SAndroid Build Coastguard Worker }, 1752*333d2b36SAndroid Build Coastguard Worker { 1753*333d2b36SAndroid Build Coastguard Worker name: "verify that prebuilt dependencies are ignored for visibility reasons (not preferred) (notices)", 1754*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1755*333d2b36SAndroid Build Coastguard Worker "prebuilts/Android.bp": []byte(` 1756*333d2b36SAndroid Build Coastguard Worker prebuilt { 1757*333d2b36SAndroid Build Coastguard Worker name: "module", 1758*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/other"], 1759*333d2b36SAndroid Build Coastguard Worker }`), 1760*333d2b36SAndroid Build Coastguard Worker "top/sources/source_file": nil, 1761*333d2b36SAndroid Build Coastguard Worker "top/sources/Android.bp": []byte(` 1762*333d2b36SAndroid Build Coastguard Worker source { 1763*333d2b36SAndroid Build Coastguard Worker name: "module", 1764*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/other"], 1765*333d2b36SAndroid Build Coastguard Worker }`), 1766*333d2b36SAndroid Build Coastguard Worker "top/other/source_file": nil, 1767*333d2b36SAndroid Build Coastguard Worker "top/other/Android.bp": []byte(` 1768*333d2b36SAndroid Build Coastguard Worker gen_notice { 1769*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 1770*333d2b36SAndroid Build Coastguard Worker for: ["module"], 1771*333d2b36SAndroid Build Coastguard Worker }`), 1772*333d2b36SAndroid Build Coastguard Worker }, 1773*333d2b36SAndroid Build Coastguard Worker }, 1774*333d2b36SAndroid Build Coastguard Worker { 1775*333d2b36SAndroid Build Coastguard Worker name: "verify that prebuilt dependencies are ignored for visibility reasons (preferred)", 1776*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1777*333d2b36SAndroid Build Coastguard Worker "prebuilts/Android.bp": []byte(` 1778*333d2b36SAndroid Build Coastguard Worker prebuilt { 1779*333d2b36SAndroid Build Coastguard Worker name: "module", 1780*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/other"], 1781*333d2b36SAndroid Build Coastguard Worker prefer: true, 1782*333d2b36SAndroid Build Coastguard Worker }`), 1783*333d2b36SAndroid Build Coastguard Worker "top/sources/source_file": nil, 1784*333d2b36SAndroid Build Coastguard Worker "top/sources/Android.bp": []byte(` 1785*333d2b36SAndroid Build Coastguard Worker source { 1786*333d2b36SAndroid Build Coastguard Worker name: "module", 1787*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/other"], 1788*333d2b36SAndroid Build Coastguard Worker }`), 1789*333d2b36SAndroid Build Coastguard Worker "top/other/source_file": nil, 1790*333d2b36SAndroid Build Coastguard Worker "top/other/Android.bp": []byte(` 1791*333d2b36SAndroid Build Coastguard Worker source { 1792*333d2b36SAndroid Build Coastguard Worker name: "other", 1793*333d2b36SAndroid Build Coastguard Worker deps: [":module"], 1794*333d2b36SAndroid Build Coastguard Worker }`), 1795*333d2b36SAndroid Build Coastguard Worker }, 1796*333d2b36SAndroid Build Coastguard Worker }, 1797*333d2b36SAndroid Build Coastguard Worker { 1798*333d2b36SAndroid Build Coastguard Worker name: "verify that prebuilt dependencies are ignored for visibility reasons (preferred) (notices)", 1799*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1800*333d2b36SAndroid Build Coastguard Worker "prebuilts/Android.bp": []byte(` 1801*333d2b36SAndroid Build Coastguard Worker prebuilt { 1802*333d2b36SAndroid Build Coastguard Worker name: "module", 1803*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/other"], 1804*333d2b36SAndroid Build Coastguard Worker prefer: true, 1805*333d2b36SAndroid Build Coastguard Worker }`), 1806*333d2b36SAndroid Build Coastguard Worker "top/sources/source_file": nil, 1807*333d2b36SAndroid Build Coastguard Worker "top/sources/Android.bp": []byte(` 1808*333d2b36SAndroid Build Coastguard Worker source { 1809*333d2b36SAndroid Build Coastguard Worker name: "module", 1810*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/other"], 1811*333d2b36SAndroid Build Coastguard Worker }`), 1812*333d2b36SAndroid Build Coastguard Worker "top/other/source_file": nil, 1813*333d2b36SAndroid Build Coastguard Worker "top/other/Android.bp": []byte(` 1814*333d2b36SAndroid Build Coastguard Worker gen_notice { 1815*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 1816*333d2b36SAndroid Build Coastguard Worker for: ["module"], 1817*333d2b36SAndroid Build Coastguard Worker }`), 1818*333d2b36SAndroid Build Coastguard Worker }, 1819*333d2b36SAndroid Build Coastguard Worker }, 1820*333d2b36SAndroid Build Coastguard Worker { 1821*333d2b36SAndroid Build Coastguard Worker name: "ensure visibility properties are checked for correctness", 1822*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1823*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1824*333d2b36SAndroid Build Coastguard Worker mock_parent { 1825*333d2b36SAndroid Build Coastguard Worker name: "parent", 1826*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested"], 1827*333d2b36SAndroid Build Coastguard Worker child: { 1828*333d2b36SAndroid Build Coastguard Worker name: "libchild", 1829*333d2b36SAndroid Build Coastguard Worker visibility: ["top/other"], 1830*333d2b36SAndroid Build Coastguard Worker }, 1831*333d2b36SAndroid Build Coastguard Worker }`), 1832*333d2b36SAndroid Build Coastguard Worker }, 1833*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1834*333d2b36SAndroid Build Coastguard Worker `module "parent": child.visibility: invalid visibility pattern "top/other"`, 1835*333d2b36SAndroid Build Coastguard Worker }, 1836*333d2b36SAndroid Build Coastguard Worker }, 1837*333d2b36SAndroid Build Coastguard Worker { 1838*333d2b36SAndroid Build Coastguard Worker name: "invalid visibility added to child detected during gather phase", 1839*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1840*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1841*333d2b36SAndroid Build Coastguard Worker mock_parent { 1842*333d2b36SAndroid Build Coastguard Worker name: "parent", 1843*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested"], 1844*333d2b36SAndroid Build Coastguard Worker child: { 1845*333d2b36SAndroid Build Coastguard Worker name: "libchild", 1846*333d2b36SAndroid Build Coastguard Worker invalid_visibility: ["top/other"], 1847*333d2b36SAndroid Build Coastguard Worker }, 1848*333d2b36SAndroid Build Coastguard Worker }`), 1849*333d2b36SAndroid Build Coastguard Worker }, 1850*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 1851*333d2b36SAndroid Build Coastguard Worker // That this error is reported against the child not the parent shows it was 1852*333d2b36SAndroid Build Coastguard Worker // not being detected in the parent which is correct as invalid_visibility is 1853*333d2b36SAndroid Build Coastguard Worker // purposely not added to the list of visibility properties to check, and was 1854*333d2b36SAndroid Build Coastguard Worker // in fact detected in the child in the gather phase. Contrast this error message 1855*333d2b36SAndroid Build Coastguard Worker // with the preceding one. 1856*333d2b36SAndroid Build Coastguard Worker `module "libchild" \(created by module "parent"\): visibility: invalid visibility pattern "top/other"`, 1857*333d2b36SAndroid Build Coastguard Worker }, 1858*333d2b36SAndroid Build Coastguard Worker }, 1859*333d2b36SAndroid Build Coastguard Worker { 1860*333d2b36SAndroid Build Coastguard Worker name: "automatic visibility inheritance enabled", 1861*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1862*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1863*333d2b36SAndroid Build Coastguard Worker mock_parent { 1864*333d2b36SAndroid Build Coastguard Worker name: "parent", 1865*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested"], 1866*333d2b36SAndroid Build Coastguard Worker child: { 1867*333d2b36SAndroid Build Coastguard Worker name: "libchild", 1868*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/other"], 1869*333d2b36SAndroid Build Coastguard Worker }, 1870*333d2b36SAndroid Build Coastguard Worker }`), 1871*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 1872*333d2b36SAndroid Build Coastguard Worker mock_library { 1873*333d2b36SAndroid Build Coastguard Worker name: "libnested", 1874*333d2b36SAndroid Build Coastguard Worker deps: ["libchild"], 1875*333d2b36SAndroid Build Coastguard Worker }`), 1876*333d2b36SAndroid Build Coastguard Worker "top/other/Android.bp": []byte(` 1877*333d2b36SAndroid Build Coastguard Worker mock_library { 1878*333d2b36SAndroid Build Coastguard Worker name: "libother", 1879*333d2b36SAndroid Build Coastguard Worker deps: ["libchild"], 1880*333d2b36SAndroid Build Coastguard Worker }`), 1881*333d2b36SAndroid Build Coastguard Worker }, 1882*333d2b36SAndroid Build Coastguard Worker }, 1883*333d2b36SAndroid Build Coastguard Worker { 1884*333d2b36SAndroid Build Coastguard Worker name: "automatic visibility inheritance enabled (notices)", 1885*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1886*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1887*333d2b36SAndroid Build Coastguard Worker mock_parent { 1888*333d2b36SAndroid Build Coastguard Worker name: "parent", 1889*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/nested"], 1890*333d2b36SAndroid Build Coastguard Worker child: { 1891*333d2b36SAndroid Build Coastguard Worker name: "libchild", 1892*333d2b36SAndroid Build Coastguard Worker visibility: ["//top/other"], 1893*333d2b36SAndroid Build Coastguard Worker }, 1894*333d2b36SAndroid Build Coastguard Worker }`), 1895*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 1896*333d2b36SAndroid Build Coastguard Worker gen_notice { 1897*333d2b36SAndroid Build Coastguard Worker name: "nested-notice", 1898*333d2b36SAndroid Build Coastguard Worker for: ["libchild"], 1899*333d2b36SAndroid Build Coastguard Worker }`), 1900*333d2b36SAndroid Build Coastguard Worker "top/other/Android.bp": []byte(` 1901*333d2b36SAndroid Build Coastguard Worker gen_notice { 1902*333d2b36SAndroid Build Coastguard Worker name: "other-notice", 1903*333d2b36SAndroid Build Coastguard Worker for: ["libchild"], 1904*333d2b36SAndroid Build Coastguard Worker }`), 1905*333d2b36SAndroid Build Coastguard Worker }, 1906*333d2b36SAndroid Build Coastguard Worker }, 1907*333d2b36SAndroid Build Coastguard Worker { 1908*333d2b36SAndroid Build Coastguard Worker name: "any_system_partition visibility works", 1909*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1910*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1911*333d2b36SAndroid Build Coastguard Worker android_filesystem { 1912*333d2b36SAndroid Build Coastguard Worker name: "foo", 1913*333d2b36SAndroid Build Coastguard Worker deps: ["bar"], 1914*333d2b36SAndroid Build Coastguard Worker }`), 1915*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 1916*333d2b36SAndroid Build Coastguard Worker package(default_visibility=["//visibility:private"]) 1917*333d2b36SAndroid Build Coastguard Worker mock_library { 1918*333d2b36SAndroid Build Coastguard Worker name: "bar", 1919*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:any_system_partition"], 1920*333d2b36SAndroid Build Coastguard Worker }`), 1921*333d2b36SAndroid Build Coastguard Worker }, 1922*333d2b36SAndroid Build Coastguard Worker }, 1923*333d2b36SAndroid Build Coastguard Worker { 1924*333d2b36SAndroid Build Coastguard Worker name: "any_system_partition visibility works with the other visibility", 1925*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1926*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1927*333d2b36SAndroid Build Coastguard Worker android_filesystem { 1928*333d2b36SAndroid Build Coastguard Worker name: "foo", 1929*333d2b36SAndroid Build Coastguard Worker deps: ["bar"], 1930*333d2b36SAndroid Build Coastguard Worker }`), 1931*333d2b36SAndroid Build Coastguard Worker "top2/Android.bp": []byte(``), 1932*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 1933*333d2b36SAndroid Build Coastguard Worker package(default_visibility=["//visibility:private"]) 1934*333d2b36SAndroid Build Coastguard Worker mock_library { 1935*333d2b36SAndroid Build Coastguard Worker name: "bar", 1936*333d2b36SAndroid Build Coastguard Worker visibility: [ 1937*333d2b36SAndroid Build Coastguard Worker "//top2", 1938*333d2b36SAndroid Build Coastguard Worker "//visibility:any_system_partition" 1939*333d2b36SAndroid Build Coastguard Worker ], 1940*333d2b36SAndroid Build Coastguard Worker }`), 1941*333d2b36SAndroid Build Coastguard Worker }, 1942*333d2b36SAndroid Build Coastguard Worker }, 1943*333d2b36SAndroid Build Coastguard Worker { 1944*333d2b36SAndroid Build Coastguard Worker name: "any_system_partition visibility doesn't work for non-partitions", 1945*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1946*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1947*333d2b36SAndroid Build Coastguard Worker mock_library { 1948*333d2b36SAndroid Build Coastguard Worker name: "foo", 1949*333d2b36SAndroid Build Coastguard Worker deps: ["bar"], 1950*333d2b36SAndroid Build Coastguard Worker }`), 1951*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 1952*333d2b36SAndroid Build Coastguard Worker mock_library { 1953*333d2b36SAndroid Build Coastguard Worker name: "bar", 1954*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:any_system_partition"], 1955*333d2b36SAndroid Build Coastguard Worker }`), 1956*333d2b36SAndroid Build Coastguard Worker }, 1957*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{`module "foo" variant "android_common": depends on //top/nested:bar which is not visible to this module`}, 1958*333d2b36SAndroid Build Coastguard Worker }, 1959*333d2b36SAndroid Build Coastguard Worker { 1960*333d2b36SAndroid Build Coastguard Worker name: "any_system_partition visibility doesn't work for vendor partitions", 1961*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1962*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1963*333d2b36SAndroid Build Coastguard Worker android_filesystem { 1964*333d2b36SAndroid Build Coastguard Worker name: "foo", 1965*333d2b36SAndroid Build Coastguard Worker partition_type: "vendor", 1966*333d2b36SAndroid Build Coastguard Worker deps: ["bar"], 1967*333d2b36SAndroid Build Coastguard Worker }`), 1968*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 1969*333d2b36SAndroid Build Coastguard Worker package(default_visibility=["//visibility:private"]) 1970*333d2b36SAndroid Build Coastguard Worker mock_library { 1971*333d2b36SAndroid Build Coastguard Worker name: "bar", 1972*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:any_system_partition"], 1973*333d2b36SAndroid Build Coastguard Worker }`), 1974*333d2b36SAndroid Build Coastguard Worker }, 1975*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{`module "foo" variant "android_common": depends on //top/nested:bar which is not visible to this module`}, 1976*333d2b36SAndroid Build Coastguard Worker }, 1977*333d2b36SAndroid Build Coastguard Worker { 1978*333d2b36SAndroid Build Coastguard Worker name: "Vendor modules are visible to any vendor partition by default", 1979*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1980*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1981*333d2b36SAndroid Build Coastguard Worker android_filesystem { 1982*333d2b36SAndroid Build Coastguard Worker name: "foo", 1983*333d2b36SAndroid Build Coastguard Worker partition_type: "vendor", 1984*333d2b36SAndroid Build Coastguard Worker deps: ["bar"], 1985*333d2b36SAndroid Build Coastguard Worker }`), 1986*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 1987*333d2b36SAndroid Build Coastguard Worker package(default_visibility=["//visibility:private"]) 1988*333d2b36SAndroid Build Coastguard Worker mock_library { 1989*333d2b36SAndroid Build Coastguard Worker name: "bar", 1990*333d2b36SAndroid Build Coastguard Worker vendor: true, 1991*333d2b36SAndroid Build Coastguard Worker }`), 1992*333d2b36SAndroid Build Coastguard Worker }, 1993*333d2b36SAndroid Build Coastguard Worker }, 1994*333d2b36SAndroid Build Coastguard Worker { 1995*333d2b36SAndroid Build Coastguard Worker name: "Not visible to vendor partitions when using any_system_partiton, even if vendor: true", 1996*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 1997*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 1998*333d2b36SAndroid Build Coastguard Worker android_filesystem { 1999*333d2b36SAndroid Build Coastguard Worker name: "foo", 2000*333d2b36SAndroid Build Coastguard Worker partition_type: "vendor", 2001*333d2b36SAndroid Build Coastguard Worker deps: ["bar"], 2002*333d2b36SAndroid Build Coastguard Worker }`), 2003*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 2004*333d2b36SAndroid Build Coastguard Worker package(default_visibility=["//visibility:private"]) 2005*333d2b36SAndroid Build Coastguard Worker mock_library { 2006*333d2b36SAndroid Build Coastguard Worker name: "bar", 2007*333d2b36SAndroid Build Coastguard Worker vendor: true, 2008*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:any_system_partition"], 2009*333d2b36SAndroid Build Coastguard Worker }`), 2010*333d2b36SAndroid Build Coastguard Worker }, 2011*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{`module "foo" variant "android_common": depends on //top/nested:bar which is not visible to this module`}, 2012*333d2b36SAndroid Build Coastguard Worker }, 2013*333d2b36SAndroid Build Coastguard Worker { 2014*333d2b36SAndroid Build Coastguard Worker name: "unknown any_partition specs throw errors", 2015*333d2b36SAndroid Build Coastguard Worker fs: MockFS{ 2016*333d2b36SAndroid Build Coastguard Worker "top/nested/Android.bp": []byte(` 2017*333d2b36SAndroid Build Coastguard Worker package(default_visibility=["//visibility:private"]) 2018*333d2b36SAndroid Build Coastguard Worker mock_library { 2019*333d2b36SAndroid Build Coastguard Worker name: "bar", 2020*333d2b36SAndroid Build Coastguard Worker visibility: ["//visibility:any_unknown_partition"], 2021*333d2b36SAndroid Build Coastguard Worker }`), 2022*333d2b36SAndroid Build Coastguard Worker }, 2023*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{`unrecognized visibility rule "//visibility:any_unknown_partition"`}, 2024*333d2b36SAndroid Build Coastguard Worker }, 2025*333d2b36SAndroid Build Coastguard Worker} 2026*333d2b36SAndroid Build Coastguard Worker 2027*333d2b36SAndroid Build Coastguard Workerfunc TestVisibility(t *testing.T) { 2028*333d2b36SAndroid Build Coastguard Worker for _, test := range visibilityTests { 2029*333d2b36SAndroid Build Coastguard Worker t.Run(test.name, func(t *testing.T) { 2030*333d2b36SAndroid Build Coastguard Worker result := GroupFixturePreparers( 2031*333d2b36SAndroid Build Coastguard Worker // General preparers in alphabetical order as test infrastructure will enforce correct 2032*333d2b36SAndroid Build Coastguard Worker // registration order. 2033*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithArchMutator, 2034*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithDefaults, 2035*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithGenNotice, 2036*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithOverrides, 2037*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithPackageModule, 2038*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithPrebuilts, 2039*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithVisibility, 2040*333d2b36SAndroid Build Coastguard Worker 2041*333d2b36SAndroid Build Coastguard Worker // Additional test specific preparers. 2042*333d2b36SAndroid Build Coastguard Worker FixtureRegisterWithContext(func(ctx RegistrationContext) { 2043*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("mock_library", newMockLibraryModule) 2044*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("mock_parent", newMockParentFactory) 2045*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("mock_defaults", defaultsFactory) 2046*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("android_filesystem", newMockFilesystemModule) 2047*333d2b36SAndroid Build Coastguard Worker }), 2048*333d2b36SAndroid Build Coastguard Worker prepareForTestWithFakePrebuiltModules, 2049*333d2b36SAndroid Build Coastguard Worker // Add additional files to the mock filesystem 2050*333d2b36SAndroid Build Coastguard Worker test.fs.AddToFixture(), 2051*333d2b36SAndroid Build Coastguard Worker ). 2052*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern(test.expectedErrors)). 2053*333d2b36SAndroid Build Coastguard Worker RunTest(t) 2054*333d2b36SAndroid Build Coastguard Worker 2055*333d2b36SAndroid Build Coastguard Worker if test.effectiveVisibility != nil { 2056*333d2b36SAndroid Build Coastguard Worker checkEffectiveVisibility(t, result, test.effectiveVisibility) 2057*333d2b36SAndroid Build Coastguard Worker } 2058*333d2b36SAndroid Build Coastguard Worker }) 2059*333d2b36SAndroid Build Coastguard Worker } 2060*333d2b36SAndroid Build Coastguard Worker} 2061*333d2b36SAndroid Build Coastguard Worker 2062*333d2b36SAndroid Build Coastguard Workerfunc checkEffectiveVisibility(t *testing.T, result *TestResult, effectiveVisibility map[qualifiedModuleName][]string) { 2063*333d2b36SAndroid Build Coastguard Worker for moduleName, expectedRules := range effectiveVisibility { 2064*333d2b36SAndroid Build Coastguard Worker rule := effectiveVisibilityRules(result.Config, moduleName) 2065*333d2b36SAndroid Build Coastguard Worker stringRules := rule.Strings() 2066*333d2b36SAndroid Build Coastguard Worker AssertDeepEquals(t, "effective rules mismatch", expectedRules, stringRules) 2067*333d2b36SAndroid Build Coastguard Worker } 2068*333d2b36SAndroid Build Coastguard Worker} 2069*333d2b36SAndroid Build Coastguard Worker 2070*333d2b36SAndroid Build Coastguard Workertype mockLibraryProperties struct { 2071*333d2b36SAndroid Build Coastguard Worker Deps []string 2072*333d2b36SAndroid Build Coastguard Worker} 2073*333d2b36SAndroid Build Coastguard Worker 2074*333d2b36SAndroid Build Coastguard Workertype mockLibraryModule struct { 2075*333d2b36SAndroid Build Coastguard Worker ModuleBase 2076*333d2b36SAndroid Build Coastguard Worker DefaultableModuleBase 2077*333d2b36SAndroid Build Coastguard Worker properties mockLibraryProperties 2078*333d2b36SAndroid Build Coastguard Worker} 2079*333d2b36SAndroid Build Coastguard Worker 2080*333d2b36SAndroid Build Coastguard Workerfunc newMockLibraryModule() Module { 2081*333d2b36SAndroid Build Coastguard Worker m := &mockLibraryModule{} 2082*333d2b36SAndroid Build Coastguard Worker m.AddProperties(&m.properties) 2083*333d2b36SAndroid Build Coastguard Worker InitAndroidArchModule(m, HostAndDeviceSupported, MultilibCommon) 2084*333d2b36SAndroid Build Coastguard Worker InitDefaultableModule(m) 2085*333d2b36SAndroid Build Coastguard Worker return m 2086*333d2b36SAndroid Build Coastguard Worker} 2087*333d2b36SAndroid Build Coastguard Worker 2088*333d2b36SAndroid Build Coastguard Workertype dependencyTag struct { 2089*333d2b36SAndroid Build Coastguard Worker blueprint.BaseDependencyTag 2090*333d2b36SAndroid Build Coastguard Worker name string 2091*333d2b36SAndroid Build Coastguard Worker} 2092*333d2b36SAndroid Build Coastguard Worker 2093*333d2b36SAndroid Build Coastguard Workerfunc (j *mockLibraryModule) DepsMutator(ctx BottomUpMutatorContext) { 2094*333d2b36SAndroid Build Coastguard Worker ctx.AddVariationDependencies(nil, dependencyTag{name: "mockdeps"}, j.properties.Deps...) 2095*333d2b36SAndroid Build Coastguard Worker} 2096*333d2b36SAndroid Build Coastguard Worker 2097*333d2b36SAndroid Build Coastguard Workerfunc (p *mockLibraryModule) GenerateAndroidBuildActions(ModuleContext) { 2098*333d2b36SAndroid Build Coastguard Worker} 2099*333d2b36SAndroid Build Coastguard Worker 2100*333d2b36SAndroid Build Coastguard Workertype mockFilesystemModuleProperties struct { 2101*333d2b36SAndroid Build Coastguard Worker Partition_type *string 2102*333d2b36SAndroid Build Coastguard Worker Deps []string 2103*333d2b36SAndroid Build Coastguard Worker Is_auto_generated *bool 2104*333d2b36SAndroid Build Coastguard Worker} 2105*333d2b36SAndroid Build Coastguard Worker 2106*333d2b36SAndroid Build Coastguard Workertype mockFilesystemModule struct { 2107*333d2b36SAndroid Build Coastguard Worker ModuleBase 2108*333d2b36SAndroid Build Coastguard Worker properties mockFilesystemModuleProperties 2109*333d2b36SAndroid Build Coastguard Worker} 2110*333d2b36SAndroid Build Coastguard Worker 2111*333d2b36SAndroid Build Coastguard Workerfunc (j *mockFilesystemModule) DepsMutator(ctx BottomUpMutatorContext) { 2112*333d2b36SAndroid Build Coastguard Worker ctx.AddVariationDependencies(nil, dependencyTag{name: "mockdeps"}, j.properties.Deps...) 2113*333d2b36SAndroid Build Coastguard Worker} 2114*333d2b36SAndroid Build Coastguard Worker 2115*333d2b36SAndroid Build Coastguard Workerfunc (p *mockFilesystemModule) GenerateAndroidBuildActions(ModuleContext) { 2116*333d2b36SAndroid Build Coastguard Worker} 2117*333d2b36SAndroid Build Coastguard Worker 2118*333d2b36SAndroid Build Coastguard Workerfunc (p *mockFilesystemModule) PartitionType() string { 2119*333d2b36SAndroid Build Coastguard Worker if p.properties.Partition_type == nil { 2120*333d2b36SAndroid Build Coastguard Worker return "system" 2121*333d2b36SAndroid Build Coastguard Worker } 2122*333d2b36SAndroid Build Coastguard Worker return *p.properties.Partition_type 2123*333d2b36SAndroid Build Coastguard Worker} 2124*333d2b36SAndroid Build Coastguard Worker 2125*333d2b36SAndroid Build Coastguard Workerfunc newMockFilesystemModule() Module { 2126*333d2b36SAndroid Build Coastguard Worker m := &mockFilesystemModule{} 2127*333d2b36SAndroid Build Coastguard Worker m.AddProperties(&m.properties) 2128*333d2b36SAndroid Build Coastguard Worker InitAndroidArchModule(m, DeviceSupported, MultilibCommon) 2129*333d2b36SAndroid Build Coastguard Worker return m 2130*333d2b36SAndroid Build Coastguard Worker} 2131*333d2b36SAndroid Build Coastguard Worker 2132*333d2b36SAndroid Build Coastguard Workertype mockDefaults struct { 2133*333d2b36SAndroid Build Coastguard Worker ModuleBase 2134*333d2b36SAndroid Build Coastguard Worker DefaultsModuleBase 2135*333d2b36SAndroid Build Coastguard Worker} 2136*333d2b36SAndroid Build Coastguard Worker 2137*333d2b36SAndroid Build Coastguard Workerfunc defaultsFactory() Module { 2138*333d2b36SAndroid Build Coastguard Worker m := &mockDefaults{} 2139*333d2b36SAndroid Build Coastguard Worker InitDefaultsModule(m) 2140*333d2b36SAndroid Build Coastguard Worker return m 2141*333d2b36SAndroid Build Coastguard Worker} 2142*333d2b36SAndroid Build Coastguard Worker 2143*333d2b36SAndroid Build Coastguard Workertype mockParentProperties struct { 2144*333d2b36SAndroid Build Coastguard Worker Child struct { 2145*333d2b36SAndroid Build Coastguard Worker Name *string 2146*333d2b36SAndroid Build Coastguard Worker 2147*333d2b36SAndroid Build Coastguard Worker // Visibility to pass to the child module. 2148*333d2b36SAndroid Build Coastguard Worker Visibility []string 2149*333d2b36SAndroid Build Coastguard Worker 2150*333d2b36SAndroid Build Coastguard Worker // Purposely not validated visibility to pass to the child. 2151*333d2b36SAndroid Build Coastguard Worker Invalid_visibility []string 2152*333d2b36SAndroid Build Coastguard Worker } 2153*333d2b36SAndroid Build Coastguard Worker} 2154*333d2b36SAndroid Build Coastguard Worker 2155*333d2b36SAndroid Build Coastguard Workertype mockParent struct { 2156*333d2b36SAndroid Build Coastguard Worker ModuleBase 2157*333d2b36SAndroid Build Coastguard Worker DefaultableModuleBase 2158*333d2b36SAndroid Build Coastguard Worker properties mockParentProperties 2159*333d2b36SAndroid Build Coastguard Worker} 2160*333d2b36SAndroid Build Coastguard Worker 2161*333d2b36SAndroid Build Coastguard Workerfunc (p *mockParent) GenerateAndroidBuildActions(ModuleContext) { 2162*333d2b36SAndroid Build Coastguard Worker} 2163*333d2b36SAndroid Build Coastguard Worker 2164*333d2b36SAndroid Build Coastguard Workerfunc newMockParentFactory() Module { 2165*333d2b36SAndroid Build Coastguard Worker m := &mockParent{} 2166*333d2b36SAndroid Build Coastguard Worker m.AddProperties(&m.properties) 2167*333d2b36SAndroid Build Coastguard Worker InitAndroidArchModule(m, HostAndDeviceSupported, MultilibCommon) 2168*333d2b36SAndroid Build Coastguard Worker InitDefaultableModule(m) 2169*333d2b36SAndroid Build Coastguard Worker AddVisibilityProperty(m, "child.visibility", &m.properties.Child.Visibility) 2170*333d2b36SAndroid Build Coastguard Worker 2171*333d2b36SAndroid Build Coastguard Worker m.SetDefaultableHook(func(ctx DefaultableHookContext) { 2172*333d2b36SAndroid Build Coastguard Worker visibility := m.properties.Child.Visibility 2173*333d2b36SAndroid Build Coastguard Worker visibility = append(visibility, m.properties.Child.Invalid_visibility...) 2174*333d2b36SAndroid Build Coastguard Worker ctx.CreateModule(newMockLibraryModule, &struct { 2175*333d2b36SAndroid Build Coastguard Worker Name *string 2176*333d2b36SAndroid Build Coastguard Worker Visibility []string 2177*333d2b36SAndroid Build Coastguard Worker }{m.properties.Child.Name, visibility}) 2178*333d2b36SAndroid Build Coastguard Worker }) 2179*333d2b36SAndroid Build Coastguard Worker return m 2180*333d2b36SAndroid Build Coastguard Worker} 2181*333d2b36SAndroid Build Coastguard Worker 2182*333d2b36SAndroid Build Coastguard Workerfunc testVisibilityRuleSet(t *testing.T, rules, extra, expected []string) { 2183*333d2b36SAndroid Build Coastguard Worker t.Helper() 2184*333d2b36SAndroid Build Coastguard Worker set := &visibilityRuleSet{rules} 2185*333d2b36SAndroid Build Coastguard Worker err := set.Widen(extra) 2186*333d2b36SAndroid Build Coastguard Worker if err != nil { 2187*333d2b36SAndroid Build Coastguard Worker t.Error(err) 2188*333d2b36SAndroid Build Coastguard Worker return 2189*333d2b36SAndroid Build Coastguard Worker } 2190*333d2b36SAndroid Build Coastguard Worker actual := set.Strings() 2191*333d2b36SAndroid Build Coastguard Worker if !reflect.DeepEqual(actual, expected) { 2192*333d2b36SAndroid Build Coastguard Worker t.Errorf("mismatching rules after extend: expected %#v, actual %#v", expected, actual) 2193*333d2b36SAndroid Build Coastguard Worker } 2194*333d2b36SAndroid Build Coastguard Worker} 2195*333d2b36SAndroid Build Coastguard Worker 2196*333d2b36SAndroid Build Coastguard Workerfunc TestVisibilityRuleSet(t *testing.T) { 2197*333d2b36SAndroid Build Coastguard Worker t.Run("extend empty", func(t *testing.T) { 2198*333d2b36SAndroid Build Coastguard Worker testVisibilityRuleSet(t, nil, []string{"//foo"}, []string{"//foo"}) 2199*333d2b36SAndroid Build Coastguard Worker }) 2200*333d2b36SAndroid Build Coastguard Worker t.Run("extend", func(t *testing.T) { 2201*333d2b36SAndroid Build Coastguard Worker testVisibilityRuleSet(t, []string{"//foo"}, []string{"//bar"}, []string{"//bar", "//foo"}) 2202*333d2b36SAndroid Build Coastguard Worker }) 2203*333d2b36SAndroid Build Coastguard Worker t.Run("extend duplicate", func(t *testing.T) { 2204*333d2b36SAndroid Build Coastguard Worker testVisibilityRuleSet(t, []string{"//foo"}, []string{"//bar", "//foo"}, []string{"//bar", "//foo"}) 2205*333d2b36SAndroid Build Coastguard Worker }) 2206*333d2b36SAndroid Build Coastguard Worker t.Run("extend public", func(t *testing.T) { 2207*333d2b36SAndroid Build Coastguard Worker testVisibilityRuleSet(t, []string{"//visibility:public"}, []string{"//foo"}, []string{"//visibility:public"}) 2208*333d2b36SAndroid Build Coastguard Worker }) 2209*333d2b36SAndroid Build Coastguard Worker t.Run("extend private", func(t *testing.T) { 2210*333d2b36SAndroid Build Coastguard Worker testVisibilityRuleSet(t, []string{"//visibility:private"}, []string{"//foo"}, []string{"//foo"}) 2211*333d2b36SAndroid Build Coastguard Worker }) 2212*333d2b36SAndroid Build Coastguard Worker t.Run("extend with public", func(t *testing.T) { 2213*333d2b36SAndroid Build Coastguard Worker testVisibilityRuleSet(t, []string{"//foo"}, []string{"//visibility:public"}, []string{"//visibility:public"}) 2214*333d2b36SAndroid Build Coastguard Worker }) 2215*333d2b36SAndroid Build Coastguard Worker t.Run("extend with private", func(t *testing.T) { 2216*333d2b36SAndroid Build Coastguard Worker t.Helper() 2217*333d2b36SAndroid Build Coastguard Worker set := &visibilityRuleSet{[]string{"//foo"}} 2218*333d2b36SAndroid Build Coastguard Worker err := set.Widen([]string{"//visibility:private"}) 2219*333d2b36SAndroid Build Coastguard Worker expectedError := `"//visibility:private" does not widen the visibility` 2220*333d2b36SAndroid Build Coastguard Worker if err == nil { 2221*333d2b36SAndroid Build Coastguard Worker t.Errorf("missing error") 2222*333d2b36SAndroid Build Coastguard Worker } else if err.Error() != expectedError { 2223*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected error %q found error %q", expectedError, err) 2224*333d2b36SAndroid Build Coastguard Worker } 2225*333d2b36SAndroid Build Coastguard Worker }) 2226*333d2b36SAndroid Build Coastguard Worker} 2227