package java

import (
	"strings"
	"testing"

	"android/soong/android"
	soongTesting "android/soong/testing"
	"android/soong/testing/test_spec_proto"
	"google.golang.org/protobuf/proto"
)

func TestTestSpec(t *testing.T) {
	bp := `test_spec {
		name: "module-name",
		teamId: "12345",
		tests: [
			"java-test-module-name-one",
			"java-test-module-name-two"
		]
	}

	java_test {
		name: "java-test-module-name-one",
	}

	java_test {
		name: "java-test-module-name-two",
	}`
	result := runTest(t, android.FixtureExpectsNoErrors, bp)

	module := result.ModuleForTests(
		"module-name", "",
	).Module().(*soongTesting.TestSpecModule)

	// Check that the provider has the right contents
	data := result.ModuleProvider(
		module, soongTesting.TestSpecProviderKey,
	).(soongTesting.TestSpecProviderData)
	if !strings.HasSuffix(
		data.IntermediatePath.String(), "/intermediateTestSpecMetadata.pb",
	) {
		t.Errorf(
			"Missing intermediates path in provider: %s",
			data.IntermediatePath.String(),
		)
	}

	buildParamsSlice := module.BuildParamsForTests()
	var metadata = ""
	for _, params := range buildParamsSlice {
		if params.Rule.String() == "android/soong/android.writeFile" {
			metadata = params.Args["content"]
		}
	}

	metadataList := make([]*test_spec_proto.TestSpec_OwnershipMetadata, 0, 2)
	teamId := "12345"
	bpFilePath := "Android.bp"
	targetNames := []string{
		"java-test-module-name-one", "java-test-module-name-two",
	}

	for _, test := range targetNames {
		targetName := test
		metadata := test_spec_proto.TestSpec_OwnershipMetadata{
			TrendyTeamId: &teamId,
			TargetName:   &targetName,
			Path:         &bpFilePath,
		}
		metadataList = append(metadataList, &metadata)
	}
	testSpecMetadata := test_spec_proto.TestSpec{OwnershipMetadataList: metadataList}
	protoData, _ := proto.Marshal(&testSpecMetadata)
	rawData := string(protoData)
	formattedData := strings.ReplaceAll(rawData, "\n", "\\n")
	expectedMetadata := "'" + formattedData + "\\n'"

	if metadata != expectedMetadata {
		t.Errorf(
			"Retrieved metadata: %s is not equal to expectedMetadata: %s", metadata,
			expectedMetadata,
		)
	}

	// Tests for all_test_spec singleton.
	singleton := result.SingletonForTests("all_test_specs")
	rule := singleton.Rule("all_test_specs_rule")
	prebuiltOs := result.Config.PrebuiltOS()
	expectedCmd := "out/soong/host/" + prebuiltOs + "/bin/metadata -rule test_spec -inputFile out/soong/all_test_spec_paths.rsp -outputFile out/soong/ownership/all_test_specs.pb"
	expectedOutputFile := "out/soong/ownership/all_test_specs.pb"
	expectedInputFile := "out/soong/.intermediates/module-name/intermediateTestSpecMetadata.pb"
	if !strings.Contains(
		strings.TrimSpace(rule.Output.String()),
		expectedOutputFile,
	) {
		t.Errorf(
			"Retrieved singletonOutputFile: %s is not equal to expectedSingletonOutputFile: %s",
			rule.Output.String(), expectedOutputFile,
		)
	}

	if !strings.Contains(
		strings.TrimSpace(rule.Inputs[0].String()),
		expectedInputFile,
	) {
		t.Errorf(
			"Retrieved singletonInputFile: %s is not equal to expectedSingletonInputFile: %s",
			rule.Inputs[0].String(), expectedInputFile,
		)
	}

	if !strings.Contains(
		strings.TrimSpace(rule.RuleParams.Command),
		expectedCmd,
	) {
		t.Errorf(
			"Retrieved cmd: %s is not equal to expectedCmd: %s",
			rule.RuleParams.Command, expectedCmd,
		)
	}
}

func runTest(
	t *testing.T, errorHandler android.FixtureErrorHandler, bp string,
) *android.TestResult {
	return android.GroupFixturePreparers(
		soongTesting.PrepareForTestWithTestSpecBuildComponents,
		PrepareForIntegrationTestWithJava,
	).
		ExtendWithErrorHandler(errorHandler).
		RunTestWithBp(t, bp)
}
