288 lines
6.9 KiB
Go
288 lines
6.9 KiB
Go
|
// Copyright (C) 2021 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 sdk
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"path/filepath"
|
||
|
"testing"
|
||
|
|
||
|
"android/soong/android"
|
||
|
"android/soong/java"
|
||
|
"github.com/google/blueprint"
|
||
|
)
|
||
|
|
||
|
type fakeMemberTrait struct {
|
||
|
android.SdkMemberTraitBase
|
||
|
}
|
||
|
|
||
|
type fakeMemberType struct {
|
||
|
android.SdkMemberTypeBase
|
||
|
}
|
||
|
|
||
|
func (t *fakeMemberType) AddDependencies(ctx android.SdkDependencyContext, dependencyTag blueprint.DependencyTag, names []string) {
|
||
|
for _, name := range names {
|
||
|
ctx.AddVariationDependencies(nil, dependencyTag, name)
|
||
|
|
||
|
if ctx.RequiresTrait(name, extraTrait) {
|
||
|
ctx.AddVariationDependencies(nil, dependencyTag, name+"_extra")
|
||
|
}
|
||
|
if ctx.RequiresTrait(name, specialTrait) {
|
||
|
ctx.AddVariationDependencies(nil, dependencyTag, name+"_special")
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (t *fakeMemberType) IsInstance(module android.Module) bool {
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
func (t *fakeMemberType) AddPrebuiltModule(ctx android.SdkMemberContext, member android.SdkMember) android.BpModule {
|
||
|
moduleType := "java_import"
|
||
|
if ctx.RequiresTrait(extraTrait) {
|
||
|
moduleType = "java_test_import"
|
||
|
}
|
||
|
return ctx.SnapshotBuilder().AddPrebuiltModule(member, moduleType)
|
||
|
}
|
||
|
|
||
|
func (t *fakeMemberType) CreateVariantPropertiesStruct() android.SdkMemberProperties {
|
||
|
return &fakeMemberTypeProperties{}
|
||
|
}
|
||
|
|
||
|
type fakeMemberTypeProperties struct {
|
||
|
android.SdkMemberPropertiesBase
|
||
|
|
||
|
path android.Path
|
||
|
}
|
||
|
|
||
|
func (t *fakeMemberTypeProperties) PopulateFromVariant(ctx android.SdkMemberContext, variant android.Module) {
|
||
|
headerJars := variant.(java.ApexDependency).HeaderJars()
|
||
|
if len(headerJars) != 1 {
|
||
|
panic(fmt.Errorf("there must be only one header jar from %q", variant.Name()))
|
||
|
}
|
||
|
|
||
|
t.path = headerJars[0]
|
||
|
}
|
||
|
|
||
|
func (t *fakeMemberTypeProperties) AddToPropertySet(ctx android.SdkMemberContext, propertySet android.BpPropertySet) {
|
||
|
if t.path != nil {
|
||
|
relative := filepath.Join("javalibs", t.path.Base())
|
||
|
ctx.SnapshotBuilder().CopyToSnapshot(t.path, relative)
|
||
|
propertySet.AddProperty("jars", []string{relative})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var (
|
||
|
extraTrait = &fakeMemberTrait{
|
||
|
SdkMemberTraitBase: android.SdkMemberTraitBase{
|
||
|
PropertyName: "extra",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
specialTrait = &fakeMemberTrait{
|
||
|
SdkMemberTraitBase: android.SdkMemberTraitBase{
|
||
|
PropertyName: "special",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
fakeType = &fakeMemberType{
|
||
|
SdkMemberTypeBase: android.SdkMemberTypeBase{
|
||
|
PropertyName: "fake_members",
|
||
|
SupportsSdk: true,
|
||
|
Traits: []android.SdkMemberTrait{
|
||
|
extraTrait,
|
||
|
specialTrait,
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
android.RegisterSdkMemberTrait(extraTrait)
|
||
|
android.RegisterSdkMemberTrait(specialTrait)
|
||
|
android.RegisterSdkMemberType(fakeType)
|
||
|
}
|
||
|
|
||
|
func TestBasicTrait_WithoutTrait(t *testing.T) {
|
||
|
result := android.GroupFixturePreparers(
|
||
|
prepareForSdkTestWithJava,
|
||
|
android.FixtureWithRootAndroidBp(`
|
||
|
sdk {
|
||
|
name: "mysdk",
|
||
|
fake_members: ["myjavalib"],
|
||
|
}
|
||
|
|
||
|
java_library {
|
||
|
name: "myjavalib",
|
||
|
srcs: ["Test.java"],
|
||
|
system_modules: "none",
|
||
|
sdk_version: "none",
|
||
|
}
|
||
|
`),
|
||
|
).RunTest(t)
|
||
|
|
||
|
CheckSnapshot(t, result, "mysdk", "",
|
||
|
checkUnversionedAndroidBpContents(`
|
||
|
// This is auto-generated. DO NOT EDIT.
|
||
|
|
||
|
java_import {
|
||
|
name: "myjavalib",
|
||
|
prefer: false,
|
||
|
visibility: ["//visibility:public"],
|
||
|
apex_available: ["//apex_available:platform"],
|
||
|
jars: ["javalibs/myjavalib.jar"],
|
||
|
}
|
||
|
`),
|
||
|
checkVersionedAndroidBpContents(`
|
||
|
// This is auto-generated. DO NOT EDIT.
|
||
|
|
||
|
java_import {
|
||
|
name: "mysdk_myjavalib@current",
|
||
|
sdk_member_name: "myjavalib",
|
||
|
visibility: ["//visibility:public"],
|
||
|
apex_available: ["//apex_available:platform"],
|
||
|
jars: ["javalibs/myjavalib.jar"],
|
||
|
}
|
||
|
|
||
|
sdk_snapshot {
|
||
|
name: "mysdk@current",
|
||
|
visibility: ["//visibility:public"],
|
||
|
fake_members: ["mysdk_myjavalib@current"],
|
||
|
}
|
||
|
`),
|
||
|
)
|
||
|
}
|
||
|
|
||
|
func TestBasicTrait_MultipleTraits(t *testing.T) {
|
||
|
result := android.GroupFixturePreparers(
|
||
|
prepareForSdkTestWithJava,
|
||
|
android.FixtureWithRootAndroidBp(`
|
||
|
sdk {
|
||
|
name: "mysdk",
|
||
|
fake_members: ["myjavalib", "anotherjavalib"],
|
||
|
traits: {
|
||
|
extra: ["myjavalib"],
|
||
|
special: ["myjavalib", "anotherjavalib"],
|
||
|
},
|
||
|
}
|
||
|
|
||
|
java_library {
|
||
|
name: "myjavalib",
|
||
|
srcs: ["Test.java"],
|
||
|
system_modules: "none",
|
||
|
sdk_version: "none",
|
||
|
}
|
||
|
|
||
|
java_library {
|
||
|
name: "myjavalib_extra",
|
||
|
srcs: ["Test.java"],
|
||
|
system_modules: "none",
|
||
|
sdk_version: "none",
|
||
|
}
|
||
|
|
||
|
java_library {
|
||
|
name: "myjavalib_special",
|
||
|
srcs: ["Test.java"],
|
||
|
system_modules: "none",
|
||
|
sdk_version: "none",
|
||
|
}
|
||
|
|
||
|
java_library {
|
||
|
name: "anotherjavalib",
|
||
|
srcs: ["Test.java"],
|
||
|
system_modules: "none",
|
||
|
sdk_version: "none",
|
||
|
}
|
||
|
|
||
|
java_library {
|
||
|
name: "anotherjavalib_special",
|
||
|
srcs: ["Test.java"],
|
||
|
system_modules: "none",
|
||
|
sdk_version: "none",
|
||
|
}
|
||
|
`),
|
||
|
).RunTest(t)
|
||
|
|
||
|
CheckSnapshot(t, result, "mysdk", "",
|
||
|
checkUnversionedAndroidBpContents(`
|
||
|
// This is auto-generated. DO NOT EDIT.
|
||
|
|
||
|
java_test_import {
|
||
|
name: "myjavalib",
|
||
|
prefer: false,
|
||
|
visibility: ["//visibility:public"],
|
||
|
apex_available: ["//apex_available:platform"],
|
||
|
jars: ["javalibs/myjavalib.jar"],
|
||
|
}
|
||
|
|
||
|
java_import {
|
||
|
name: "myjavalib_extra",
|
||
|
prefer: false,
|
||
|
visibility: ["//visibility:public"],
|
||
|
apex_available: ["//apex_available:platform"],
|
||
|
jars: ["javalibs/myjavalib_extra.jar"],
|
||
|
}
|
||
|
|
||
|
java_import {
|
||
|
name: "myjavalib_special",
|
||
|
prefer: false,
|
||
|
visibility: ["//visibility:public"],
|
||
|
apex_available: ["//apex_available:platform"],
|
||
|
jars: ["javalibs/myjavalib_special.jar"],
|
||
|
}
|
||
|
|
||
|
java_import {
|
||
|
name: "anotherjavalib",
|
||
|
prefer: false,
|
||
|
visibility: ["//visibility:public"],
|
||
|
apex_available: ["//apex_available:platform"],
|
||
|
jars: ["javalibs/anotherjavalib.jar"],
|
||
|
}
|
||
|
|
||
|
java_import {
|
||
|
name: "anotherjavalib_special",
|
||
|
prefer: false,
|
||
|
visibility: ["//visibility:public"],
|
||
|
apex_available: ["//apex_available:platform"],
|
||
|
jars: ["javalibs/anotherjavalib_special.jar"],
|
||
|
}
|
||
|
`),
|
||
|
)
|
||
|
}
|
||
|
|
||
|
func TestTraitUnsupportedByMemberType(t *testing.T) {
|
||
|
android.GroupFixturePreparers(
|
||
|
prepareForSdkTestWithJava,
|
||
|
android.FixtureWithRootAndroidBp(`
|
||
|
sdk {
|
||
|
name: "mysdk",
|
||
|
java_header_libs: ["myjavalib"],
|
||
|
traits: {
|
||
|
extra: ["myjavalib"],
|
||
|
},
|
||
|
}
|
||
|
|
||
|
java_library {
|
||
|
name: "myjavalib",
|
||
|
srcs: ["Test.java"],
|
||
|
system_modules: "none",
|
||
|
sdk_version: "none",
|
||
|
}
|
||
|
`),
|
||
|
).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
|
||
|
`\Qsdk member "myjavalib" has traits [extra] that are unsupported by its member type "java_header_libs"\E`)).
|
||
|
RunTest(t)
|
||
|
}
|