// Copyright (C) 2023 The Android Open Source Project
//
// 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 api

import (
	"testing"

	"android/soong/android"
	"android/soong/bp2build"
)

func runCombinedApisTestCaseWithRegistrationCtxFunc(t *testing.T, tc bp2build.Bp2buildTestCase, registrationCtxFunc func(ctx android.RegistrationContext)) {
	t.Helper()
	(&tc).ModuleTypeUnderTest = "combined_apis"
	(&tc).ModuleTypeUnderTestFactory = combinedApisModuleFactory
	bp2build.RunBp2BuildTestCase(t, registrationCtxFunc, tc)
}

func runCombinedApisTestCase(t *testing.T, tc bp2build.Bp2buildTestCase) {
	t.Helper()
	runCombinedApisTestCaseWithRegistrationCtxFunc(t, tc, func(ctx android.RegistrationContext) {})
}

func TestCombinedApisGeneral(t *testing.T) {
	runCombinedApisTestCase(t, bp2build.Bp2buildTestCase{
		Description: "combined_apis, general case",
		Blueprint: `combined_apis {
    name: "foo",
    bootclasspath: ["bcp"],
    system_server_classpath: ["ssc"],
}
`,
		ExpectedBazelTargets: []string{
			bp2build.MakeBazelTargetNoRestrictions("merged_txts", "foo-current.txt", bp2build.AttrNameToString{
				"scope": `"public"`,
				"base":  `":non-updatable-current.txt__BP2BUILD__MISSING__DEP"`,
				"deps":  `[":bcp__BP2BUILD__MISSING__DEP"]`,
			}),
			bp2build.MakeBazelTargetNoRestrictions("merged_txts", "foo-system-current.txt", bp2build.AttrNameToString{
				"scope": `"system"`,
				"base":  `":non-updatable-system-current.txt__BP2BUILD__MISSING__DEP"`,
				"deps":  `[":bcp__BP2BUILD__MISSING__DEP"]`,
			}),
			bp2build.MakeBazelTargetNoRestrictions("merged_txts", "foo-module-lib-current.txt", bp2build.AttrNameToString{
				"scope": `"module-lib"`,
				"base":  `":non-updatable-module-lib-current.txt__BP2BUILD__MISSING__DEP"`,
				"deps":  `[":bcp__BP2BUILD__MISSING__DEP"]`,
			}),
			bp2build.MakeBazelTargetNoRestrictions("merged_txts", "foo-system-server-current.txt", bp2build.AttrNameToString{
				"scope": `"system-server"`,
				"base":  `":non-updatable-system-server-current.txt__BP2BUILD__MISSING__DEP"`,
				"deps":  `[":ssc__BP2BUILD__MISSING__DEP"]`,
			}),
		},
	})
}
