Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Android/build/build/soong/java/   (Android Betriebssystem Version 17©)  Datei vom 26.5.2026 mit Größe 7 kB image not shown  

Quelle  system_modules_test.go   Sprache: unbekannt

 
Spracherkennung für: .go vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

// 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 (
 "fmt"
 "path/filepath"
 "testing"

 "android/soong/android"
)

func getModuleHeaderJarsAsRelativeToTopPaths(result *android.TestResult, moduleNames ...string) []string {
 paths := []string{}
 for _, moduleName := range moduleNames {
  module := result.Module(moduleName, "android_common")
  info, _ := android.OtherModuleProvider(result, module, JavaInfoProvider)
  paths = append(paths, info.HeaderJars.RelativeToTop().Strings()...)
 }
 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) {
 t.Parallel()
 result := android.GroupFixturePreparers(prepareForJavaTest, addSourceSystemModules).RunTest(t)

 // check the existence of the source module
 sourceSystemModules := result.ModuleForTests(t, "system-modules", "android_common")
 sourceInputs := sourceSystemModules.Rule("jarsTosystemModules").Inputs

 // The expected paths are the header jars from the source input modules.
 expectedSourcePaths := getModuleHeaderJarsAsRelativeToTopPaths(result, "system-module1", "system-module2")
 android.AssertArrayString(t, "source system modules inputs", expectedSourcePaths, sourceInputs.RelativeToTop().Strings())

 // Check for the zip output
 zipRule := sourceSystemModules.Rule("zip_system_module")
 expectedZipPath := filepath.Join("out/soong", ".intermediates/source/system-modules/android_common", "system-modules.zip")
 android.AssertStringEquals(t, "zip output file", expectedZipPath, zipRule.Output.String())

 // Check that the zip file is registered as an output with the correct tag
 zipOutputs := sourceSystemModules.OutputFiles(result.TestContext, t, ".zip")
 if len(zipOutputs) != 1 {
  t.Fatalf("expected exactly one output with tag '.zip', got %d", len(zipOutputs))
 }
 android.AssertStringEquals(t, "tagged zip output file", expectedZipPath, zipOutputs[0].String())
}

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) {
 t.Parallel()
 result := android.GroupFixturePreparers(prepareForJavaTest, addPrebuiltSystemModules).RunTest(t)

 // check the existence of the renamed prebuilt module
 prebuiltSystemModules := result.ModuleForTests(t, "system-modules", "android_common")
 prebuiltInputs := prebuiltSystemModules.Rule("jarsTosystemModules").Inputs

 // The expected paths are the header jars from the renamed prebuilt input modules.
 expectedPrebuiltPaths := getModuleHeaderJarsAsRelativeToTopPaths(result, "system-module1", "system-module2")
 android.AssertArrayString(t, "renamed prebuilt system modules inputs", expectedPrebuiltPaths, prebuiltInputs.RelativeToTop().Strings())

 // Check for the zip output
 zipRule := prebuiltSystemModules.Rule("zip_system_module")
 expectedZipPath := filepath.Join("out/soong", ".intermediates/prebuilts/system-modules/android_common", "system-modules.zip")
 android.AssertStringEquals(t, "zip output file", expectedZipPath, zipRule.Output.String())

 // Check that the zip file is registered as an output with the correct tag
 zipOutputs := prebuiltSystemModules.OutputFiles(result.TestContext, t, ".zip")
 if len(zipOutputs) != 1 {
  t.Fatalf("expected exactly one output with tag '.zip', got %d", len(zipOutputs))
 }
 android.AssertStringEquals(t, "tagged zip output file", expectedZipPath, zipOutputs[0].String())
}

func TestJavaSystemModulesMixSourceAndPrebuilt(t *testing.T) {
 t.Parallel()
 result := android.GroupFixturePreparers(
  prepareForJavaTest,
  addSourceSystemModules,
  addPrebuiltSystemModules,
 ).RunTest(t)

 // check the existence of the source module
 sourceSystemModules := result.ModuleForTests(t, "system-modules", "android_common")
 sourceInputs := sourceSystemModules.Rule("jarsTosystemModules").Inputs

 // The expected paths are the header jars from the source input modules.
 expectedSourcePaths := getModuleHeaderJarsAsRelativeToTopPaths(result, "system-module1", "system-module2")
 android.AssertArrayString(t, "source system modules inputs", expectedSourcePaths, sourceInputs.RelativeToTop().Strings())

 // check the existence of the renamed prebuilt module
 prebuiltSystemModules := result.ModuleForTests(t, "prebuilt_system-modules", "android_common")
 prebuiltInputs := prebuiltSystemModules.Rule("jarsTosystemModules").Inputs

 // The expected paths are the header jars from the renamed prebuilt input modules.
 expectedPrebuiltPaths := getModuleHeaderJarsAsRelativeToTopPaths(result, "prebuilt_system-module1", "prebuilt_system-module2")
 android.AssertArrayString(t, "prebuilt system modules inputs", expectedPrebuiltPaths, prebuiltInputs.RelativeToTop().Strings())
}

func TestMultipleSystemModulesPrebuilts(t *testing.T) {
 t.Parallel()
 bp := `
  // an rdep
  java_library {
   name: "foo",
   sdk_version: "none",
   system_modules: "my_system_modules",
  }

  // multiple variations of java_system_modules
  // source
  java_system_modules {
   name: "my_system_modules",
   libs: ["bar"],
  }
  java_library {
   name: "bar",
   srcs: ["bar.java"],
  }
  // prebuilt "v1"
  java_system_modules_import {
   name: "my_system_modules.v1",
   source_module_name: "my_system_modules",
   libs: ["bar.v1"],
  }
  java_import {
   name: "bar.v1",
   source_module_name: "bar",
   jars: ["bar.v1.jar"],
  }
  // prebuilt "v2"
  java_system_modules_import {
   name: "my_system_modules.v2",
   source_module_name: "my_system_modules",
   libs: ["bar.v2"],
  }
  java_import {
   name: "bar.v2",
   source_module_name: "bar",
   jars: ["bar.v2.jar"],
  }

  // selectors
  apex_contributions {
   name: "myapex_contributions",
   contents: ["%v"],
  }
 `
 testCases := []struct {
  desc                   string
  selectedDependencyName string
 }{
  {
   desc:                   "Source system_modules is selected using apex_contributions",
   selectedDependencyName: "my_system_modules",
  },
  {
   desc:                   "Prebuilt system_modules v1 is selected using apex_contributions",
   selectedDependencyName: "prebuilt_my_system_modules.v1",
  },
  {
   desc:                   "Prebuilt system_modules v2 is selected using apex_contributions",
   selectedDependencyName: "prebuilt_my_system_modules.v2",
  },
 }

 for _, tc := range testCases {
  res := android.GroupFixturePreparers(
   prepareForJavaTest,
   android.PrepareForTestWithBuildFlag("RELEASE_APEX_CONTRIBUTIONS_ADSERVICES", "myapex_contributions"),
  ).RunTestWithBp(t, fmt.Sprintf(bp, tc.selectedDependencyName))

  // check that rdep gets the correct variation of system_modules
  hasDep := CheckModuleHasDependency(t, res.TestContext, "foo", "android_common", tc.selectedDependencyName)
  android.AssertBoolEquals(t, fmt.Sprintf("expected dependency from foo to %s\n", tc.selectedDependencyName), true, hasDep)
 }
}

[Dauer der Verarbeitung: 0.21 Sekunden, vorverarbeitet 2026-06-28]