1// Copyright 2022 Google Inc. All rights reserved. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14package bp2build 15 16import ( 17 "fmt" 18 "testing" 19 20 "android/soong/cc" 21) 22 23func runCcPrebuiltBinaryTestCase(t *testing.T, testCase Bp2buildTestCase) { 24 t.Helper() 25 description := fmt.Sprintf("cc_prebuilt_binary: %s", testCase.Description) 26 testCase.ModuleTypeUnderTest = "cc_prebuilt_binary" 27 testCase.ModuleTypeUnderTestFactory = cc.PrebuiltBinaryFactory 28 testCase.Description = description 29 t.Run(description, func(t *testing.T) { 30 t.Helper() 31 RunBp2BuildTestCaseSimple(t, testCase) 32 }) 33} 34 35func TestPrebuiltBinary(t *testing.T) { 36 runCcPrebuiltBinaryTestCase(t, 37 Bp2buildTestCase{ 38 Description: "simple", 39 Filesystem: map[string]string{ 40 "bin": "", 41 }, 42 Blueprint: ` 43cc_prebuilt_binary { 44 name: "bintest", 45 srcs: ["bin"], 46 bazel_module: { bp2build_available: true }, 47}`, 48 ExpectedBazelTargets: []string{ 49 MakeBazelTarget("cc_prebuilt_binary", "bintest", AttrNameToString{ 50 "src": `"bin"`, 51 })}, 52 }) 53} 54 55func TestPrebuiltBinaryWithStrip(t *testing.T) { 56 runCcPrebuiltBinaryTestCase(t, 57 Bp2buildTestCase{ 58 Description: "with strip", 59 Filesystem: map[string]string{ 60 "bin": "", 61 }, 62 Blueprint: ` 63cc_prebuilt_binary { 64 name: "bintest", 65 srcs: ["bin"], 66 strip: { all: true }, 67 bazel_module: { bp2build_available: true }, 68}`, ExpectedBazelTargets: []string{ 69 MakeBazelTarget("cc_prebuilt_binary", "bintest", AttrNameToString{ 70 "src": `"bin"`, 71 "strip": `{ 72 "all": True, 73 }`, 74 }), 75 }, 76 }) 77} 78 79func TestPrebuiltBinaryWithArchVariance(t *testing.T) { 80 runCcPrebuiltBinaryTestCase(t, 81 Bp2buildTestCase{ 82 Description: "with arch variance", 83 Filesystem: map[string]string{ 84 "bina": "", 85 "binb": "", 86 }, 87 Blueprint: ` 88cc_prebuilt_binary { 89 name: "bintest", 90 arch: { 91 arm64: { srcs: ["bina"], }, 92 arm: { srcs: ["binb"], }, 93 }, 94 bazel_module: { bp2build_available: true }, 95}`, ExpectedBazelTargets: []string{ 96 MakeBazelTarget("cc_prebuilt_binary", "bintest", AttrNameToString{ 97 "src": `select({ 98 "//build/bazel/platforms/arch:arm": "binb", 99 "//build/bazel/platforms/arch:arm64": "bina", 100 "//conditions:default": None, 101 })`, 102 }), 103 }, 104 }) 105} 106 107func TestPrebuiltBinaryMultipleSrcsFails(t *testing.T) { 108 runCcPrebuiltBinaryTestCase(t, 109 Bp2buildTestCase{ 110 Description: "fails because multiple sources", 111 Filesystem: map[string]string{ 112 "bina": "", 113 "binb": "", 114 }, 115 Blueprint: ` 116cc_prebuilt_binary { 117 name: "bintest", 118 srcs: ["bina", "binb"], 119 bazel_module: { bp2build_available: true }, 120}`, 121 ExpectedErr: fmt.Errorf("Expected at most one source file"), 122 }) 123} 124 125// TODO: nosrcs test 126