// Copyright 2021 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 (
	"android/soong/android"
	"android/soong/cc"
	"testing"
)

func runSoongConfigModuleTypeTest(t *testing.T, tc bp2buildTestCase) {
	t.Helper()
	runBp2BuildTestCase(t, registerSoongConfigModuleTypes, tc)
}

func registerSoongConfigModuleTypes(ctx android.RegistrationContext) {
	cc.RegisterCCBuildComponents(ctx)

	ctx.RegisterModuleType("soong_config_module_type_import", android.SoongConfigModuleTypeImportFactory)
	ctx.RegisterModuleType("soong_config_module_type", android.SoongConfigModuleTypeFactory)
	ctx.RegisterModuleType("soong_config_string_variable", android.SoongConfigStringVariableDummyFactory)
	ctx.RegisterModuleType("soong_config_bool_variable", android.SoongConfigBoolVariableDummyFactory)

	ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
}

func TestSoongConfigModuleType(t *testing.T) {
	bp := `
soong_config_module_type {
	name: "custom_cc_library_static",
	module_type: "cc_library_static",
	config_namespace: "acme",
	bool_variables: ["feature1"],
	properties: ["cflags"],
}

custom_cc_library_static {
	name: "foo",
	bazel_module: { bp2build_available: true },
	soong_config_variables: {
		feature1: {
			conditions_default: {
				cflags: ["-DDEFAULT1"],
			},
			cflags: ["-DFEATURE1"],
		},
	},
}
`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - soong_config_module_type is supported in bp2build",
		moduleTypeUnderTest:        "cc_library_static",
		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
		blueprint:                  bp,
		expectedBazelTargets: []string{`cc_library_static(
    name = "foo",
    copts = select({
        "//build/bazel/product_variables:acme__feature1": ["-DFEATURE1"],
        "//conditions:default": ["-DDEFAULT1"],
    }),
    local_includes = ["."],
)`}})
}

func TestSoongConfigModuleTypeImport(t *testing.T) {
	configBp := `
soong_config_module_type {
	name: "custom_cc_library_static",
	module_type: "cc_library_static",
	config_namespace: "acme",
	bool_variables: ["feature1"],
	properties: ["cflags"],
}
`
	bp := `
soong_config_module_type_import {
	from: "foo/bar/SoongConfig.bp",
	module_types: ["custom_cc_library_static"],
}

custom_cc_library_static {
	name: "foo",
	bazel_module: { bp2build_available: true },
	soong_config_variables: {
		feature1: {
			conditions_default: {
				cflags: ["-DDEFAULT1"],
			},
			cflags: ["-DFEATURE1"],
		},
	},
}
`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - soong_config_module_type_import is supported in bp2build",
		moduleTypeUnderTest:        "cc_library_static",
		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
		filesystem: map[string]string{
			"foo/bar/SoongConfig.bp": configBp,
		},
		blueprint: bp,
		expectedBazelTargets: []string{`cc_library_static(
    name = "foo",
    copts = select({
        "//build/bazel/product_variables:acme__feature1": ["-DFEATURE1"],
        "//conditions:default": ["-DDEFAULT1"],
    }),
    local_includes = ["."],
)`}})
}

func TestSoongConfigModuleType_StringVar(t *testing.T) {
	bp := `
soong_config_string_variable {
	name: "board",
	values: ["soc_a", "soc_b", "soc_c"],
}

soong_config_module_type {
	name: "custom_cc_library_static",
	module_type: "cc_library_static",
	config_namespace: "acme",
	variables: ["board"],
	properties: ["cflags"],
}

custom_cc_library_static {
	name: "foo",
	bazel_module: { bp2build_available: true },
	soong_config_variables: {
		board: {
			soc_a: {
				cflags: ["-DSOC_A"],
			},
			soc_b: {
				cflags: ["-DSOC_B"],
			},
			soc_c: {},
			conditions_default: {
				cflags: ["-DSOC_DEFAULT"]
			},
		},
	},
}
`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - generates selects for string vars",
		moduleTypeUnderTest:        "cc_library_static",
		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
		blueprint:                  bp,
		expectedBazelTargets: []string{`cc_library_static(
    name = "foo",
    copts = select({
        "//build/bazel/product_variables:acme__board__soc_a": ["-DSOC_A"],
        "//build/bazel/product_variables:acme__board__soc_b": ["-DSOC_B"],
        "//conditions:default": ["-DSOC_DEFAULT"],
    }),
    local_includes = ["."],
)`}})
}

func TestSoongConfigModuleType_StringAndBoolVar(t *testing.T) {
	bp := `
soong_config_bool_variable {
	name: "feature1",
}

soong_config_bool_variable {
	name: "feature2",
}

soong_config_string_variable {
	name: "board",
	values: ["soc_a", "soc_b", "soc_c"],
}

soong_config_module_type {
	name: "custom_cc_library_static",
	module_type: "cc_library_static",
	config_namespace: "acme",
	variables: ["feature1", "feature2", "board"],
	properties: ["cflags"],
}

custom_cc_library_static {
	name: "foo",
	bazel_module: { bp2build_available: true },
	soong_config_variables: {
		feature1: {
			conditions_default: {
				cflags: ["-DDEFAULT1"],
			},
			cflags: ["-DFEATURE1"],
		},
		feature2: {
			cflags: ["-DFEATURE2"],
			conditions_default: {
				cflags: ["-DDEFAULT2"],
			},
		},
		board: {
			soc_a: {
				cflags: ["-DSOC_A"],
			},
			soc_b: {
				cflags: ["-DSOC_B"],
			},
			soc_c: {},
			conditions_default: {
				cflags: ["-DSOC_DEFAULT"]
			},
		},
	},
}`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - generates selects for multiple variable types",
		moduleTypeUnderTest:        "cc_library_static",
		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
		blueprint:                  bp,
		expectedBazelTargets: []string{`cc_library_static(
    name = "foo",
    copts = select({
        "//build/bazel/product_variables:acme__board__soc_a": ["-DSOC_A"],
        "//build/bazel/product_variables:acme__board__soc_b": ["-DSOC_B"],
        "//conditions:default": ["-DSOC_DEFAULT"],
    }) + select({
        "//build/bazel/product_variables:acme__feature1": ["-DFEATURE1"],
        "//conditions:default": ["-DDEFAULT1"],
    }) + select({
        "//build/bazel/product_variables:acme__feature2": ["-DFEATURE2"],
        "//conditions:default": ["-DDEFAULT2"],
    }),
    local_includes = ["."],
)`}})
}

func TestSoongConfigModuleType_StringVar_LabelListDeps(t *testing.T) {
	bp := `
soong_config_string_variable {
	name: "board",
	values: ["soc_a", "soc_b", "soc_c"],
}

soong_config_module_type {
	name: "custom_cc_library_static",
	module_type: "cc_library_static",
	config_namespace: "acme",
	variables: ["board"],
	properties: ["cflags", "static_libs"],
}

custom_cc_library_static {
	name: "foo",
	bazel_module: { bp2build_available: true },
	soong_config_variables: {
		board: {
			soc_a: {
				cflags: ["-DSOC_A"],
				static_libs: ["soc_a_dep"],
			},
			soc_b: {
				cflags: ["-DSOC_B"],
				static_libs: ["soc_b_dep"],
			},
			soc_c: {},
			conditions_default: {
				cflags: ["-DSOC_DEFAULT"],
				static_libs: ["soc_default_static_dep"],
			},
		},
	},
}`

	otherDeps := `
cc_library_static { name: "soc_a_dep", bazel_module: { bp2build_available: false } }
cc_library_static { name: "soc_b_dep", bazel_module: { bp2build_available: false } }
cc_library_static { name: "soc_default_static_dep", bazel_module: { bp2build_available: false } }
`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - generates selects for label list attributes",
		moduleTypeUnderTest:        "cc_library_static",
		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
		blueprint:                  bp,
		filesystem: map[string]string{
			"foo/bar/Android.bp": otherDeps,
		},
		expectedBazelTargets: []string{`cc_library_static(
    name = "foo",
    copts = select({
        "//build/bazel/product_variables:acme__board__soc_a": ["-DSOC_A"],
        "//build/bazel/product_variables:acme__board__soc_b": ["-DSOC_B"],
        "//conditions:default": ["-DSOC_DEFAULT"],
    }),
    implementation_deps = select({
        "//build/bazel/product_variables:acme__board__soc_a": ["//foo/bar:soc_a_dep"],
        "//build/bazel/product_variables:acme__board__soc_b": ["//foo/bar:soc_b_dep"],
        "//conditions:default": ["//foo/bar:soc_default_static_dep"],
    }),
    local_includes = ["."],
)`}})
}

func TestSoongConfigModuleType_Defaults_SingleNamespace(t *testing.T) {
	bp := `
soong_config_module_type {
	name: "vendor_foo_cc_defaults",
	module_type: "cc_defaults",
	config_namespace: "vendor_foo",
	bool_variables: ["feature"],
	properties: ["cflags", "cppflags"],
}

vendor_foo_cc_defaults {
	name: "foo_defaults_1",
	soong_config_variables: {
		feature: {
			cflags: ["-cflag_feature_1"],
			conditions_default: {
				cflags: ["-cflag_default_1"],
			},
		},
	},
}

vendor_foo_cc_defaults {
	name: "foo_defaults_2",
	defaults: ["foo_defaults_1"],
	soong_config_variables: {
		feature: {
			cflags: ["-cflag_feature_2"],
			conditions_default: {
				cflags: ["-cflag_default_2"],
			},
		},
	},
}

cc_library_static {
	name: "lib",
	defaults: ["foo_defaults_2"],
	bazel_module: { bp2build_available: true },
}
`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - defaults with a single namespace",
		moduleTypeUnderTest:        "cc_library_static",
		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
		blueprint:                  bp,
		expectedBazelTargets: []string{`cc_library_static(
    name = "lib",
    copts = select({
        "//build/bazel/product_variables:vendor_foo__feature": [
            "-cflag_feature_2",
            "-cflag_feature_1",
        ],
        "//conditions:default": [
            "-cflag_default_2",
            "-cflag_default_1",
        ],
    }),
    local_includes = ["."],
)`}})
}

func TestSoongConfigModuleType_MultipleDefaults_SingleNamespace(t *testing.T) {
	bp := `
soong_config_module_type {
	name: "foo_cc_defaults",
	module_type: "cc_defaults",
	config_namespace: "acme",
	bool_variables: ["feature"],
	properties: ["cflags"],
}

soong_config_module_type {
	name: "bar_cc_defaults",
	module_type: "cc_defaults",
	config_namespace: "acme",
	bool_variables: ["feature"],
	properties: ["cflags", "asflags"],
}

foo_cc_defaults {
	name: "foo_defaults",
	soong_config_variables: {
		feature: {
			cflags: ["-cflag_foo"],
			conditions_default: {
				cflags: ["-cflag_default_foo"],
			},
		},
	},
}

bar_cc_defaults {
	name: "bar_defaults",
	srcs: ["file.S"],
	soong_config_variables: {
		feature: {
			cflags: ["-cflag_bar"],
			asflags: ["-asflag_bar"],
			conditions_default: {
				asflags: ["-asflag_default_bar"],
				cflags: ["-cflag_default_bar"],
			},
		},
	},
}

cc_library_static {
	name: "lib",
	defaults: ["foo_defaults", "bar_defaults"],
	bazel_module: { bp2build_available: true },
}

cc_library_static {
	name: "lib2",
	defaults: ["bar_defaults", "foo_defaults"],
	bazel_module: { bp2build_available: true },
}
`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - multiple defaults with a single namespace",
		moduleTypeUnderTest:        "cc_library_static",
		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
		blueprint:                  bp,
		expectedBazelTargets: []string{`cc_library_static(
    name = "lib",
    asflags = select({
        "//build/bazel/product_variables:acme__feature": ["-asflag_bar"],
        "//conditions:default": ["-asflag_default_bar"],
    }),
    copts = select({
        "//build/bazel/product_variables:acme__feature": [
            "-cflag_foo",
            "-cflag_bar",
        ],
        "//conditions:default": [
            "-cflag_default_foo",
            "-cflag_default_bar",
        ],
    }),
    local_includes = ["."],
    srcs_as = ["file.S"],
)`,
			`cc_library_static(
    name = "lib2",
    asflags = select({
        "//build/bazel/product_variables:acme__feature": ["-asflag_bar"],
        "//conditions:default": ["-asflag_default_bar"],
    }),
    copts = select({
        "//build/bazel/product_variables:acme__feature": [
            "-cflag_bar",
            "-cflag_foo",
        ],
        "//conditions:default": [
            "-cflag_default_bar",
            "-cflag_default_foo",
        ],
    }),
    local_includes = ["."],
    srcs_as = ["file.S"],
)`}})
}

func TestSoongConfigModuleType_Defaults_MultipleNamespaces(t *testing.T) {
	bp := `
soong_config_module_type {
	name: "vendor_foo_cc_defaults",
	module_type: "cc_defaults",
	config_namespace: "vendor_foo",
	bool_variables: ["feature"],
	properties: ["cflags"],
}

soong_config_module_type {
	name: "vendor_bar_cc_defaults",
	module_type: "cc_defaults",
	config_namespace: "vendor_bar",
	bool_variables: ["feature"],
	properties: ["cflags"],
}

soong_config_module_type {
	name: "vendor_qux_cc_defaults",
	module_type: "cc_defaults",
	config_namespace: "vendor_qux",
	bool_variables: ["feature"],
	properties: ["cflags"],
}

vendor_foo_cc_defaults {
	name: "foo_defaults",
	soong_config_variables: {
		feature: {
			cflags: ["-DVENDOR_FOO_FEATURE"],
			conditions_default: {
				cflags: ["-DVENDOR_FOO_DEFAULT"],
			},
		},
	},
}

vendor_bar_cc_defaults {
	name: "bar_defaults",
	soong_config_variables: {
		feature: {
			cflags: ["-DVENDOR_BAR_FEATURE"],
			conditions_default: {
				cflags: ["-DVENDOR_BAR_DEFAULT"],
			},
		},
	},
}

vendor_qux_cc_defaults {
	name: "qux_defaults",
	defaults: ["bar_defaults"],
	soong_config_variables: {
		feature: {
			cflags: ["-DVENDOR_QUX_FEATURE"],
			conditions_default: {
				cflags: ["-DVENDOR_QUX_DEFAULT"],
			},
		},
	},
}

cc_library_static {
	name: "lib",
	defaults: ["foo_defaults", "qux_defaults"],
	bazel_module: { bp2build_available: true },
}
`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - defaults with multiple namespaces",
		moduleTypeUnderTest:        "cc_library_static",
		moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
		blueprint:                  bp,
		expectedBazelTargets: []string{`cc_library_static(
    name = "lib",
    copts = select({
        "//build/bazel/product_variables:vendor_bar__feature": ["-DVENDOR_BAR_FEATURE"],
        "//conditions:default": ["-DVENDOR_BAR_DEFAULT"],
    }) + select({
        "//build/bazel/product_variables:vendor_foo__feature": ["-DVENDOR_FOO_FEATURE"],
        "//conditions:default": ["-DVENDOR_FOO_DEFAULT"],
    }) + select({
        "//build/bazel/product_variables:vendor_qux__feature": ["-DVENDOR_QUX_FEATURE"],
        "//conditions:default": ["-DVENDOR_QUX_DEFAULT"],
    }),
    local_includes = ["."],
)`}})
}

func TestSoongConfigModuleType_Defaults(t *testing.T) {
	bp := `
soong_config_string_variable {
    name: "library_linking_strategy",
    values: [
        "prefer_static",
    ],
}

soong_config_module_type {
    name: "library_linking_strategy_cc_defaults",
    module_type: "cc_defaults",
    config_namespace: "ANDROID",
    variables: ["library_linking_strategy"],
    properties: [
        "shared_libs",
        "static_libs",
    ],
}

library_linking_strategy_cc_defaults {
    name: "library_linking_strategy_lib_a_defaults",
    soong_config_variables: {
        library_linking_strategy: {
            prefer_static: {
                static_libs: [
                    "lib_a",
                ],
            },
            conditions_default: {
                shared_libs: [
                    "lib_a",
                ],
            },
        },
    },
}

library_linking_strategy_cc_defaults {
    name: "library_linking_strategy_merged_defaults",
    defaults: ["library_linking_strategy_lib_a_defaults"],
    soong_config_variables: {
        library_linking_strategy: {
            prefer_static: {
                static_libs: [
                    "lib_b",
                ],
            },
            conditions_default: {
                shared_libs: [
                    "lib_b",
                ],
            },
        },
    },
}

cc_binary {
    name: "library_linking_strategy_sample_binary",
    srcs: ["library_linking_strategy.cc"],
    defaults: ["library_linking_strategy_merged_defaults"],
}`

	otherDeps := `
cc_library { name: "lib_a", bazel_module: { bp2build_available: false } }
cc_library { name: "lib_b", bazel_module: { bp2build_available: false } }
cc_library { name: "lib_default", bazel_module: { bp2build_available: false } }
`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - generates selects for library_linking_strategy",
		moduleTypeUnderTest:        "cc_binary",
		moduleTypeUnderTestFactory: cc.BinaryFactory,
		blueprint:                  bp,
		filesystem: map[string]string{
			"foo/bar/Android.bp": otherDeps,
		},
		expectedBazelTargets: []string{`cc_binary(
    name = "library_linking_strategy_sample_binary",
    deps = select({
        "//build/bazel/product_variables:android__library_linking_strategy__prefer_static": [
            "//foo/bar:lib_b_bp2build_cc_library_static",
            "//foo/bar:lib_a_bp2build_cc_library_static",
        ],
        "//conditions:default": [],
    }),
    dynamic_deps = select({
        "//build/bazel/product_variables:android__library_linking_strategy__prefer_static": [],
        "//conditions:default": [
            "//foo/bar:lib_b",
            "//foo/bar:lib_a",
        ],
    }),
    local_includes = ["."],
    srcs = ["library_linking_strategy.cc"],
)`}})
}

func TestSoongConfigModuleType_Defaults_Another(t *testing.T) {
	bp := `
soong_config_string_variable {
    name: "library_linking_strategy",
    values: [
        "prefer_static",
    ],
}

soong_config_module_type {
    name: "library_linking_strategy_cc_defaults",
    module_type: "cc_defaults",
    config_namespace: "ANDROID",
    variables: ["library_linking_strategy"],
    properties: [
        "shared_libs",
        "static_libs",
    ],
}

library_linking_strategy_cc_defaults {
    name: "library_linking_strategy_sample_defaults",
    soong_config_variables: {
        library_linking_strategy: {
            prefer_static: {
                static_libs: [
                    "lib_a",
                    "lib_b",
                ],
            },
            conditions_default: {
                shared_libs: [
                    "lib_a",
                    "lib_b",
                ],
            },
        },
    },
}

cc_binary {
    name: "library_linking_strategy_sample_binary",
    srcs: ["library_linking_strategy.cc"],
    defaults: ["library_linking_strategy_sample_defaults"],
}`

	otherDeps := `
cc_library { name: "lib_a", bazel_module: { bp2build_available: false } }
cc_library { name: "lib_b", bazel_module: { bp2build_available: false } }
`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - generates selects for library_linking_strategy",
		moduleTypeUnderTest:        "cc_binary",
		moduleTypeUnderTestFactory: cc.BinaryFactory,
		blueprint:                  bp,
		filesystem: map[string]string{
			"foo/bar/Android.bp": otherDeps,
		},
		expectedBazelTargets: []string{`cc_binary(
    name = "library_linking_strategy_sample_binary",
    deps = select({
        "//build/bazel/product_variables:android__library_linking_strategy__prefer_static": [
            "//foo/bar:lib_a_bp2build_cc_library_static",
            "//foo/bar:lib_b_bp2build_cc_library_static",
        ],
        "//conditions:default": [],
    }),
    dynamic_deps = select({
        "//build/bazel/product_variables:android__library_linking_strategy__prefer_static": [],
        "//conditions:default": [
            "//foo/bar:lib_a",
            "//foo/bar:lib_b",
        ],
    }),
    local_includes = ["."],
    srcs = ["library_linking_strategy.cc"],
)`}})
}

func TestSoongConfigModuleType_Defaults_UnusedProps(t *testing.T) {
	bp := `
soong_config_string_variable {
    name: "alphabet",
    values: [
        "a",
        "b",
        "c", // unused
    ],
}

soong_config_module_type {
    name: "alphabet_cc_defaults",
    module_type: "cc_defaults",
    config_namespace: "ANDROID",
    variables: ["alphabet"],
    properties: [
        "cflags", // unused
        "shared_libs",
        "static_libs",
    ],
}

alphabet_cc_defaults {
    name: "alphabet_sample_cc_defaults",
    soong_config_variables: {
        alphabet: {
            a: {
                shared_libs: [
                    "lib_a",
                ],
            },
            b: {
                shared_libs: [
                    "lib_b",
                ],
            },
            conditions_default: {
                static_libs: [
                    "lib_default",
                ],
            },
        },
    },
}

cc_binary {
    name: "alphabet_binary",
    srcs: ["main.cc"],
    defaults: ["alphabet_sample_cc_defaults"],
}`

	otherDeps := `
cc_library { name: "lib_a", bazel_module: { bp2build_available: false } }
cc_library { name: "lib_b", bazel_module: { bp2build_available: false } }
cc_library { name: "lib_default", bazel_module: { bp2build_available: false } }
`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - generates selects for library_linking_strategy",
		moduleTypeUnderTest:        "cc_binary",
		moduleTypeUnderTestFactory: cc.BinaryFactory,
		blueprint:                  bp,
		filesystem: map[string]string{
			"foo/bar/Android.bp": otherDeps,
		},
		expectedBazelTargets: []string{`cc_binary(
    name = "alphabet_binary",
    deps = select({
        "//build/bazel/product_variables:android__alphabet__a": [],
        "//build/bazel/product_variables:android__alphabet__b": [],
        "//conditions:default": ["//foo/bar:lib_default_bp2build_cc_library_static"],
    }),
    dynamic_deps = select({
        "//build/bazel/product_variables:android__alphabet__a": ["//foo/bar:lib_a"],
        "//build/bazel/product_variables:android__alphabet__b": ["//foo/bar:lib_b"],
        "//conditions:default": [],
    }),
    local_includes = ["."],
    srcs = ["main.cc"],
)`}})
}

func TestSoongConfigModuleType_ProductVariableConfigWithPlatformConfig(t *testing.T) {
	bp := `
soong_config_bool_variable {
    name: "special_build",
}

soong_config_module_type {
    name: "alphabet_cc_defaults",
    module_type: "cc_defaults",
    config_namespace: "alphabet_module",
    bool_variables: ["special_build"],
    properties: ["enabled"],
}

alphabet_cc_defaults {
    name: "alphabet_sample_cc_defaults",
    soong_config_variables: {
        special_build: {
            enabled: true,
        },
    },
}

cc_binary {
    name: "alphabet_binary",
    srcs: ["main.cc"],
    defaults: ["alphabet_sample_cc_defaults"],
    enabled: false,
    arch: {
        x86_64: {
            enabled: false,
        },
    },
    target: {
        darwin: {
            enabled: false,
        },
    },
}`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - generates selects for library_linking_strategy",
		moduleTypeUnderTest:        "cc_binary",
		moduleTypeUnderTestFactory: cc.BinaryFactory,
		blueprint:                  bp,
		filesystem:                 map[string]string{},
		expectedBazelTargets: []string{`cc_binary(
    name = "alphabet_binary",
    local_includes = ["."],
    srcs = ["main.cc"],
    target_compatible_with = ["//build/bazel/product_variables:alphabet_module__special_build"] + select({
        "//build/bazel/platforms/os_arch:android_x86_64": ["@platforms//:incompatible"],
        "//build/bazel/platforms/os_arch:darwin_arm64": ["@platforms//:incompatible"],
        "//build/bazel/platforms/os_arch:darwin_x86_64": ["@platforms//:incompatible"],
        "//build/bazel/platforms/os_arch:linux_bionic_x86_64": ["@platforms//:incompatible"],
        "//build/bazel/platforms/os_arch:linux_glibc_x86_64": ["@platforms//:incompatible"],
        "//build/bazel/platforms/os_arch:linux_musl_x86_64": ["@platforms//:incompatible"],
        "//build/bazel/platforms/os_arch:windows_x86_64": ["@platforms//:incompatible"],
        "//conditions:default": [],
    }),
)`}})
}

func TestSoongConfigModuleType_ProductVariableConfigOverridesEnable(t *testing.T) {
	bp := `
soong_config_bool_variable {
    name: "special_build",
}

soong_config_module_type {
    name: "alphabet_cc_defaults",
    module_type: "cc_defaults",
    config_namespace: "alphabet_module",
    bool_variables: ["special_build"],
    properties: ["enabled"],
}

alphabet_cc_defaults {
    name: "alphabet_sample_cc_defaults",
    soong_config_variables: {
        special_build: {
            enabled: true,
        },
    },
}

cc_binary {
    name: "alphabet_binary",
    srcs: ["main.cc"],
    defaults: ["alphabet_sample_cc_defaults"],
    enabled: false,
}`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - generates selects for library_linking_strategy",
		moduleTypeUnderTest:        "cc_binary",
		moduleTypeUnderTestFactory: cc.BinaryFactory,
		blueprint:                  bp,
		filesystem:                 map[string]string{},
		expectedBazelTargets: []string{`cc_binary(
    name = "alphabet_binary",
    local_includes = ["."],
    srcs = ["main.cc"],
    target_compatible_with = ["//build/bazel/product_variables:alphabet_module__special_build"],
)`}})
}

func TestSoongConfigModuleType_ProductVariableIgnoredIfEnabledByDefault(t *testing.T) {
	bp := `
soong_config_bool_variable {
    name: "special_build",
}

soong_config_module_type {
    name: "alphabet_cc_defaults",
    module_type: "cc_defaults",
    config_namespace: "alphabet_module",
    bool_variables: ["special_build"],
    properties: ["enabled"],
}

alphabet_cc_defaults {
    name: "alphabet_sample_cc_defaults",
    soong_config_variables: {
        special_build: {
            enabled: true,
        },
    },
}

cc_binary {
    name: "alphabet_binary",
    srcs: ["main.cc"],
    defaults: ["alphabet_sample_cc_defaults"],
}`

	runSoongConfigModuleTypeTest(t, bp2buildTestCase{
		description:                "soong config variables - generates selects for library_linking_strategy",
		moduleTypeUnderTest:        "cc_binary",
		moduleTypeUnderTestFactory: cc.BinaryFactory,
		blueprint:                  bp,
		filesystem:                 map[string]string{},
		expectedBazelTargets: []string{`cc_binary(
    name = "alphabet_binary",
    local_includes = ["."],
    srcs = ["main.cc"],
)`}})
}
