// Copyright 2022 Google Inc. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package bp2build import ( "fmt" "testing" "android/soong/cc" ) func TestNdkHeaderFilepaths(t *testing.T) { bpTemplate := ` ndk_headers { name: "foo", srcs: %v, exclude_srcs: %v, } ` testCases := []struct { desc string srcs string excludeSrcs string expectedHdrs string }{ { desc: "Single header file", srcs: `["foo.h"]`, excludeSrcs: `[]`, expectedHdrs: `["foo.h"]`, }, { desc: "Multiple header files", srcs: `["foo.h", "foo_other.h"]`, excludeSrcs: `[]`, expectedHdrs: `[ "foo.h", "foo_other.h", ]`, }, { desc: "Multiple header files with excludes", srcs: `["foo.h", "foo_other.h"]`, excludeSrcs: `["foo_other.h"]`, expectedHdrs: `["foo.h"]`, }, { desc: "Multiple header files via Soong-supported globs", srcs: `["*.h"]`, excludeSrcs: `[]`, expectedHdrs: `[ "foo.h", "foo_other.h", ]`, }, } for _, testCase := range testCases { fs := map[string]string{ "foo.h": "", "foo_other.h": "", } expectedApiContributionTargetName := "foo.contribution" expectedBazelTarget := MakeBazelTargetNoRestrictions( "cc_api_headers", expectedApiContributionTargetName, AttrNameToString{ "hdrs": testCase.expectedHdrs, }, ) RunBp2BuildTestCase(t, cc.RegisterNdkModuleTypes, Bp2buildTestCase{ Description: testCase.desc, Blueprint: fmt.Sprintf(bpTemplate, testCase.srcs, testCase.excludeSrcs), ExpectedBazelTargets: []string{expectedBazelTarget}, Filesystem: fs, }) } } func TestNdkHeaderIncludeDir(t *testing.T) { bpTemplate := ` ndk_headers { name: "foo", from: %v, to: "this/value/is/ignored", } ` testCases := []struct { desc string from string expectedIncludeDir string }{ { desc: "Empty `from` value", from: `""`, expectedIncludeDir: `""`, }, { desc: "Non-Empty `from` value", from: `"include"`, expectedIncludeDir: `"include"`, }, } for _, testCase := range testCases { expectedApiContributionTargetName := "foo.contribution" expectedBazelTarget := MakeBazelTargetNoRestrictions( "cc_api_headers", expectedApiContributionTargetName, AttrNameToString{ "include_dir": testCase.expectedIncludeDir, }, ) RunBp2BuildTestCase(t, cc.RegisterNdkModuleTypes, Bp2buildTestCase{ Description: testCase.desc, Blueprint: fmt.Sprintf(bpTemplate, testCase.from), ExpectedBazelTargets: []string{expectedBazelTarget}, }) } } func TestVersionedNdkHeaderFilepaths(t *testing.T) { bp := ` versioned_ndk_headers { name: "common_libc", from: "include" } ` fs := map[string]string{ "include/math.h": "", "include/stdio.h": "", "include/arm/arm.h": "", "include/x86/x86.h": "", } expectedApiContributionTargetName := "common_libc.contribution" expectedBazelTarget := MakeBazelTargetNoRestrictions( "cc_api_headers", expectedApiContributionTargetName, AttrNameToString{ "include_dir": `"include"`, "hdrs": `[ "include/math.h", "include/stdio.h", "include/arm/arm.h", "include/x86/x86.h", ]`, }, ) RunBp2BuildTestCase(t, cc.RegisterNdkModuleTypes, Bp2buildTestCase{ Blueprint: bp, Filesystem: fs, ExpectedBazelTargets: []string{expectedBazelTarget}, }) }