| package java |
| |
| import ( |
| "strings" |
| "testing" |
| |
| "android/soong/android" |
| soongTesting "android/soong/testing" |
| "android/soong/testing/code_metadata_internal_proto" |
| |
| "google.golang.org/protobuf/proto" |
| ) |
| |
| func TestCodeMetadata(t *testing.T) { |
| bp := `code_metadata { |
| name: "module-name", |
| teamId: "12345", |
| code: [ |
| "foo", |
| ] |
| } |
| |
| java_sdk_library { |
| name: "foo", |
| srcs: ["a.java"], |
| }` |
| result := runCodeMetadataTest(t, android.FixtureExpectsNoErrors, bp) |
| |
| module := result.ModuleForTests("module-name", "") |
| |
| // Check that the provider has the right contents |
| data, _ := android.SingletonModuleProvider(result, module.Module(), soongTesting.CodeMetadataProviderKey) |
| if !strings.HasSuffix( |
| data.IntermediatePath.String(), "/intermediateCodeMetadata.pb", |
| ) { |
| t.Errorf( |
| "Missing intermediates path in provider: %s", |
| data.IntermediatePath.String(), |
| ) |
| } |
| |
| metadata := android.ContentFromFileRuleForTests(t, result.TestContext, |
| module.Output(data.IntermediatePath.String())) |
| |
| metadataList := make([]*code_metadata_internal_proto.CodeMetadataInternal_TargetOwnership, 0, 2) |
| teamId := "12345" |
| bpFilePath := "Android.bp" |
| targetName := "foo" |
| srcFile := []string{"a.java"} |
| expectedMetadataProto := code_metadata_internal_proto.CodeMetadataInternal_TargetOwnership{ |
| TrendyTeamId: &teamId, |
| TargetName: &targetName, |
| Path: &bpFilePath, |
| SourceFiles: srcFile, |
| } |
| metadataList = append(metadataList, &expectedMetadataProto) |
| |
| CodeMetadataMetadata := code_metadata_internal_proto.CodeMetadataInternal{TargetOwnershipList: metadataList} |
| protoData, _ := proto.Marshal(&CodeMetadataMetadata) |
| expectedMetadata := string(protoData) |
| |
| if metadata != expectedMetadata { |
| t.Errorf( |
| "Retrieved metadata: %s is not equal to expectedMetadata: %s", metadata, |
| expectedMetadata, |
| ) |
| } |
| |
| // Tests for all_test_spec singleton. |
| singleton := result.SingletonForTests("all_code_metadata") |
| rule := singleton.Rule("all_code_metadata_rule") |
| prebuiltOs := result.Config.PrebuiltOS() |
| expectedCmd := "out/soong/host/" + prebuiltOs + "/bin/metadata -rule code_metadata -inputFile out/soong/all_code_metadata_paths.rsp -outputFile out/soong/ownership/all_code_metadata.pb" |
| expectedOutputFile := "out/soong/ownership/all_code_metadata.pb" |
| expectedInputFile := "out/soong/.intermediates/module-name/intermediateCodeMetadata.pb" |
| if !strings.Contains( |
| strings.TrimSpace(rule.Output.String()), |
| expectedOutputFile, |
| ) { |
| t.Errorf( |
| "Retrieved singletonOutputFile: %s is not equal to expectedSingletonOutputFile: %s", |
| rule.Output.String(), expectedOutputFile, |
| ) |
| } |
| |
| if !strings.Contains( |
| strings.TrimSpace(rule.Inputs[0].String()), |
| expectedInputFile, |
| ) { |
| t.Errorf( |
| "Retrieved singletonInputFile: %s is not equal to expectedSingletonInputFile: %s", |
| rule.Inputs[0].String(), expectedInputFile, |
| ) |
| } |
| |
| if !strings.Contains( |
| strings.TrimSpace(rule.RuleParams.Command), |
| expectedCmd, |
| ) { |
| t.Errorf( |
| "Retrieved cmd: %s doesn't contain expectedCmd: %s", |
| rule.RuleParams.Command, expectedCmd, |
| ) |
| } |
| } |
| func runCodeMetadataTest( |
| t *testing.T, errorHandler android.FixtureErrorHandler, bp string, |
| ) *android.TestResult { |
| return android.GroupFixturePreparers( |
| soongTesting.PrepareForTestWithTestingBuildComponents, prepareForJavaTest, |
| PrepareForTestWithJavaSdkLibraryFiles, FixtureWithLastReleaseApis("foo"), |
| ). |
| ExtendWithErrorHandler(errorHandler). |
| RunTestWithBp(t, bp) |
| } |