platform_build_soong/java/system_modules_test.go
Paul Duffin c52bea9555 Improve system modules tests
The previous approach of looking for substrings in the command that
matched the base name of the jar could not differentiate between
whether the jar was a prebuilt or a source as they both have the same
base name.

The tests also did not cover the case when there was both prebuilts
and source modules.

This change:
1. Checks that the inputs to the command come from the appropriate
   module.
2. Adds a mixed test.
3. Deduped the source and prebuilt module definitions.

The new test reveals the buggy behavior which will be fixed in a follow
up change.

Bug: 182402568
Test: m nothing
Change-Id: I384ecca097cbe3560e7589c23fb99c176a42fd9b
2021-03-11 09:39:18 +00:00

113 lines
4.2 KiB
Go

// 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 java
import (
"testing"
"android/soong/android"
)
func normalizedPathsToHeaderJars(result *android.TestResult, moduleNames ...string) []string {
paths := []string{}
for _, moduleName := range moduleNames {
module := result.Module(moduleName, "android_common")
info := result.ModuleProvider(module, JavaInfoProvider).(JavaInfo)
paths = append(paths, result.NormalizePathsForTesting(info.HeaderJars)...)
}
return paths
}
var addSourceSystemModules = android.FixtureAddTextFile("source/Android.bp", `
java_system_modules {
name: "system-modules",
libs: ["system-module1", "system-module2"],
}
java_library {
name: "system-module1",
srcs: ["a.java"],
sdk_version: "none",
system_modules: "none",
}
java_library {
name: "system-module2",
srcs: ["b.java"],
sdk_version: "none",
system_modules: "none",
}
`)
func TestJavaSystemModules(t *testing.T) {
result := javaFixtureFactory.RunTest(t, addSourceSystemModules)
// check the existence of the source module
sourceSystemModules := result.ModuleForTests("system-modules", "android_common")
sourceInputs := sourceSystemModules.Rule("jarsTosystemModules").Inputs
// The expected paths are the header jars from the source input modules.
expectedSourcePaths := normalizedPathsToHeaderJars(result, "system-module1", "system-module2")
result.AssertArrayString("source system modules inputs", expectedSourcePaths, result.NormalizePathsForTesting(sourceInputs))
}
var addPrebuiltSystemModules = android.FixtureAddTextFile("prebuilts/Android.bp", `
java_system_modules_import {
name: "system-modules",
libs: ["system-module1", "system-module2"],
}
java_import {
name: "system-module1",
jars: ["a.jar"],
}
java_import {
name: "system-module2",
jars: ["b.jar"],
}
`)
func TestJavaSystemModulesImport(t *testing.T) {
result := javaFixtureFactory.RunTest(t, addPrebuiltSystemModules)
// check the existence of the renamed prebuilt module
prebuiltSystemModules := result.ModuleForTests("system-modules", "android_common")
prebuiltInputs := prebuiltSystemModules.Rule("jarsTosystemModules").Inputs
// The expected paths are the header jars from the renamed prebuilt input modules.
expectedPrebuiltPaths := normalizedPathsToHeaderJars(result, "system-module1", "system-module2")
result.AssertArrayString("renamed prebuilt system modules inputs", expectedPrebuiltPaths, result.NormalizePathsForTesting(prebuiltInputs))
}
func TestJavaSystemModulesMixSourceAndPrebuilt(t *testing.T) {
result := javaFixtureFactory.RunTest(t,
addSourceSystemModules,
addPrebuiltSystemModules,
)
// check the existence of the source module
sourceSystemModules := result.ModuleForTests("system-modules", "android_common")
sourceInputs := sourceSystemModules.Rule("jarsTosystemModules").Inputs
// The expected paths are the header jars from the source input modules.
expectedSourcePaths := normalizedPathsToHeaderJars(result, "system-module1", "system-module2")
result.AssertArrayString("source system modules inputs", expectedSourcePaths, result.NormalizePathsForTesting(sourceInputs))
// check the existence of the renamed prebuilt module
prebuiltSystemModules := result.ModuleForTests("prebuilt_system-modules", "android_common")
prebuiltInputs := prebuiltSystemModules.Rule("jarsTosystemModules").Inputs
// The expected paths are the header jars from the renamed prebuilt input modules.
// TODO(b/182402568) - these should be depending on the prebuilts
expectedPrebuiltPaths := normalizedPathsToHeaderJars(result, "system-module1", "system-module2")
result.AssertArrayString("prebuilt system modules inputs", expectedPrebuiltPaths, result.NormalizePathsForTesting(prebuiltInputs))
}