• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 runCcPrebuiltObjectTestCase(t *testing.T, testCase Bp2buildTestCase) {
24	t.Helper()
25	description := fmt.Sprintf("cc_prebuilt_object: %s", testCase.Description)
26	testCase.ModuleTypeUnderTest = "cc_prebuilt_object"
27	testCase.ModuleTypeUnderTestFactory = cc.PrebuiltObjectFactory
28	testCase.Description = description
29	t.Run(description, func(t *testing.T) {
30		t.Helper()
31		RunBp2BuildTestCaseSimple(t, testCase)
32	})
33}
34
35func TestPrebuiltObject(t *testing.T) {
36	runCcPrebuiltObjectTestCase(t,
37		Bp2buildTestCase{
38			Description: "simple",
39			Filesystem: map[string]string{
40				"obj.o": "",
41			},
42			Blueprint: `
43cc_prebuilt_object {
44	name: "objtest",
45	srcs: ["obj.o"],
46	bazel_module: { bp2build_available: true },
47}`,
48			ExpectedBazelTargets: []string{
49				MakeBazelTarget("cc_prebuilt_object", "objtest", AttrNameToString{
50					"src": `"obj.o"`,
51				})},
52		})
53}
54
55func TestPrebuiltObjectWithArchVariance(t *testing.T) {
56	runCcPrebuiltObjectTestCase(t,
57		Bp2buildTestCase{
58			Description: "with arch variance",
59			Filesystem: map[string]string{
60				"obja.o": "",
61				"objb.o": "",
62			},
63			Blueprint: `
64cc_prebuilt_object {
65	name: "objtest",
66	arch: {
67		arm64: { srcs: ["obja.o"], },
68		arm: { srcs: ["objb.o"], },
69	},
70	bazel_module: { bp2build_available: true },
71}`, ExpectedBazelTargets: []string{
72				MakeBazelTarget("cc_prebuilt_object", "objtest", AttrNameToString{
73					"src": `select({
74        "//build/bazel/platforms/arch:arm": "objb.o",
75        "//build/bazel/platforms/arch:arm64": "obja.o",
76        "//conditions:default": None,
77    })`,
78				}),
79			},
80		})
81}
82
83func TestPrebuiltObjectMultipleSrcsFails(t *testing.T) {
84	runCcPrebuiltObjectTestCase(t,
85		Bp2buildTestCase{
86			Description: "fails because multiple sources",
87			Filesystem: map[string]string{
88				"obja": "",
89				"objb": "",
90			},
91			Blueprint: `
92cc_prebuilt_object {
93	name: "objtest",
94	srcs: ["obja.o", "objb.o"],
95	bazel_module: { bp2build_available: true },
96}`,
97			ExpectedErr: fmt.Errorf("Expected at most one source file"),
98		})
99}
100
101// TODO: nosrcs test
102