1package android 2 3import ( 4 "testing" 5) 6 7var packageTests = []struct { 8 name string 9 fs map[string][]byte 10 expectedErrors []string 11}{ 12 // Package default_visibility handling is tested in visibility_test.go 13 { 14 name: "package must not accept visibility and name properties", 15 fs: map[string][]byte{ 16 "top/Blueprints": []byte(` 17 package { 18 name: "package", 19 visibility: ["//visibility:private"], 20 }`), 21 }, 22 expectedErrors: []string{ 23 `top/Blueprints:3:10: unrecognized property "name"`, 24 `top/Blueprints:4:16: unrecognized property "visibility"`, 25 }, 26 }, 27 { 28 name: "multiple packages in separate directories", 29 fs: map[string][]byte{ 30 "top/Blueprints": []byte(` 31 package { 32 }`), 33 "other/Blueprints": []byte(` 34 package { 35 }`), 36 "other/nested/Blueprints": []byte(` 37 package { 38 }`), 39 }, 40 }, 41 { 42 name: "package must not be specified more than once per package", 43 fs: map[string][]byte{ 44 "top/Blueprints": []byte(` 45 package { 46 default_visibility: ["//visibility:private"], 47 } 48 49 package { 50 }`), 51 }, 52 expectedErrors: []string{ 53 `module "//top" already defined`, 54 }, 55 }, 56} 57 58func TestPackage(t *testing.T) { 59 for _, test := range packageTests { 60 t.Run(test.name, func(t *testing.T) { 61 _, errs := testPackage(test.fs) 62 63 expectedErrors := test.expectedErrors 64 if expectedErrors == nil { 65 FailIfErrored(t, errs) 66 } else { 67 for _, expectedError := range expectedErrors { 68 FailIfNoMatchingErrors(t, expectedError, errs) 69 } 70 if len(errs) > len(expectedErrors) { 71 t.Errorf("additional errors found, expected %d, found %d", len(expectedErrors), len(errs)) 72 for i, expectedError := range expectedErrors { 73 t.Errorf("expectedErrors[%d] = %s", i, expectedError) 74 } 75 for i, err := range errs { 76 t.Errorf("errs[%d] = %s", i, err) 77 } 78 } 79 } 80 }) 81 } 82} 83 84func testPackage(fs map[string][]byte) (*TestContext, []error) { 85 86 // Create a new config per test as visibility information is stored in the config. 87 config := TestArchConfig(buildDir, nil, "", fs) 88 89 ctx := NewTestArchContext() 90 RegisterPackageBuildComponents(ctx) 91 ctx.Register(config) 92 93 _, errs := ctx.ParseBlueprintsFiles(".") 94 if len(errs) > 0 { 95 return ctx, errs 96 } 97 98 _, errs = ctx.PrepareBuildActions(config) 99 return ctx, errs 100} 101