Add test to verify lto mutators

Test: go test lto_test
Change-Id: I37577ae1836eaf73fa17c76ebdd5801c0fd7f098
diff --git a/cc/lto_test.go b/cc/lto_test.go
new file mode 100644
index 0000000..b52f2b6
--- /dev/null
+++ b/cc/lto_test.go
@@ -0,0 +1,90 @@
+// 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 cc
+
+import (
+	"android/soong/android"
+	"strings"
+	"testing"
+
+	"github.com/google/blueprint"
+)
+
+func TestThinLtoDeps(t *testing.T) {
+	bp := `
+	cc_library {
+		name: "lto_enabled",
+		srcs: ["src.c"],
+		static_libs: ["foo"],
+		shared_libs: ["bar"],
+		lto: {
+			thin: true,
+		}
+	}
+	cc_library {
+		name: "foo",
+		static_libs: ["baz"],
+	}
+	cc_library {
+		name: "bar",
+		static_libs: ["qux"],
+	}
+	cc_library {
+		name: "baz",
+	}
+	cc_library {
+		name: "qux",
+	}
+`
+
+	result := android.GroupFixturePreparers(
+		prepareForCcTest,
+	).RunTestWithBp(t, bp)
+
+	libLto := result.ModuleForTests("lto_enabled", "android_arm64_armv8-a_shared").Module()
+	libFoo := result.ModuleForTests("foo", "android_arm64_armv8-a_static_lto-thin").Module()
+	libBaz := result.ModuleForTests("baz", "android_arm64_armv8-a_static_lto-thin").Module()
+
+	hasDep := func(m android.Module, wantDep android.Module) bool {
+		var found bool
+		result.VisitDirectDeps(m, func(dep blueprint.Module) {
+			if dep == wantDep {
+				found = true
+			}
+		})
+		return found
+	}
+
+	if !hasDep(libLto, libFoo) {
+		t.Errorf("'lto_enabled' missing dependency on thin lto variant of 'foo'")
+	}
+
+	if !hasDep(libFoo, libBaz) {
+		t.Errorf("'lto_enabled' missing dependency on thin lto variant of transitive dep 'baz'")
+	}
+
+	barVariants := result.ModuleVariantsForTests("bar")
+	for _, v := range barVariants {
+		if strings.Contains(v, "lto-thin") {
+			t.Errorf("Expected variants for 'bar' to not contain 'lto-thin', but found %q", v)
+		}
+	}
+	quxVariants := result.ModuleVariantsForTests("qux")
+	for _, v := range quxVariants {
+		if strings.Contains(v, "lto-thin") {
+			t.Errorf("Expected variants for 'qux' to not contain 'lto-thin', but found %q", v)
+		}
+	}
+}