Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  sdk_test.go   Sprache: unbekannt

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

// Copyright 2019 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 sdk

import (
 "log"
 "os"
 "runtime"
 "testing"

 "android/soong/android"
 "android/soong/java"

 "github.com/google/blueprint/proptools"
)

// Needed in an _test.go file in this package to ensure tests run correctly, particularly in IDE.
func TestMain(m *testing.M) {
 if runtime.GOOS != "linux" {
  // b/145598135 - Generating host snapshots for anything other than linux is not supported.
  log.Printf("Skipping as sdk snapshot generation is only supported on linux not %s", runtime.GOOS)
  os.Exit(0)
 }

 os.Exit(m.Run())
}

// Ensure that prebuilt modules have the same effective visibility as the source
// modules.
func TestSnapshotVisibility(t *testing.T) {
 t.Parallel()
 packageBp := `
  package {
   default_visibility: ["//other/foo"],
  }

  sdk {
   name: "mysdk",
   visibility: [
    "//other/foo",
    // This short form will be replaced with //package:__subpackages__ in the
    // generated sdk_snapshot.
    ":__subpackages__",
   ],
   java_header_libs: [
    "myjavalib",
    "mypublicjavalib",
    "mydefaultedjavalib",
    "myprivatejavalib",
   ],
  }

  java_library {
   name: "myjavalib",
   // Uses package default visibility
   srcs: ["Test.java"],
   system_modules: "none",
   sdk_version: "none",
  }

  java_defaults {
   name: "java-defaults",
   visibility: ["//other/bar"],
  }

  java_library {
   name: "mypublicjavalib",
   defaults: ["java-defaults"],
      visibility: ["//visibility:public"],
   srcs: ["Test.java"],
   system_modules: "none",
   sdk_version: "none",
  }

  java_defaults {
   name: "myjavadefaults",
   visibility: ["//other/bar"],
  }

  java_library {
   name: "mydefaultedjavalib",
   defaults: ["myjavadefaults"],
   srcs: ["Test.java"],
   system_modules: "none",
   sdk_version: "none",
  }

  java_library {
   name: "myprivatejavalib",
   srcs: ["Test.java"],
   visibility: ["//visibility:private"],
   system_modules: "none",
   sdk_version: "none",
  }
 `

 result := testSdkWithFs(t, ``,
  map[string][]byte{
   "package/Test.java":  nil,
   "package/Android.bp": []byte(packageBp),
  })

 CheckSnapshot(t, result, "mysdk", "package",
  checkAndroidBpContents(`
// This is auto-generated. DO NOT EDIT.

apex_contributions_defaults {
    name: "mysdk.contributions",
    contents: [
        "prebuilt_myjavalib",
        "prebuilt_mypublicjavalib",
        "prebuilt_mydefaultedjavalib",
        "prebuilt_myprivatejavalib",
    ],
}

java_import {
    name: "myjavalib",
    prefer: false,
    visibility: ["//visibility:public"],
    apex_available: ["//apex_available:platform"],
    jars: ["java/myjavalib.jar"],
}

java_import {
    name: "mypublicjavalib",
    prefer: false,
    visibility: ["//visibility:public"],
    apex_available: ["//apex_available:platform"],
    jars: ["java/mypublicjavalib.jar"],
}

java_import {
    name: "mydefaultedjavalib",
    prefer: false,
    visibility: ["//visibility:public"],
    apex_available: ["//apex_available:platform"],
    jars: ["java/mydefaultedjavalib.jar"],
}

java_import {
    name: "myprivatejavalib",
    prefer: false,
    visibility: ["//visibility:public"],
    apex_available: ["//apex_available:platform"],
    jars: ["java/myprivatejavalib.jar"],
}
`))
}

func TestSdkInstall(t *testing.T) {
 t.Parallel()
 sdk := `
  sdk {
   name: "mysdk",
  }
 `
 result := testSdkWithFs(t, sdk, nil)

 CheckSnapshot(t, result, "mysdk", "",
  checkAllOtherCopyRules(`
.intermediates/mysdk/common_os/mysdk-current.info -> mysdk-current.info
.intermediates/mysdk/common_os/mysdk-current.zip -> mysdk-current.zip
`))
}

type EmbeddedPropertiesStruct struct {
 S_Embedded_Common    string `android:"arch_variant"`
 S_Embedded_Different string `android:"arch_variant"`
}

type testPropertiesStruct struct {
 name          string
 private       string
 Public_Ignore string `sdk:"ignore"`
 Public_Keep   string `sdk:"keep"`
 S_Common      string
 S_Different   string `android:"arch_variant"`
 A_Common      []string
 A_Different   []string `android:"arch_variant"`
 F_Common      *bool
 F_Different   *bool `android:"arch_variant"`
 EmbeddedPropertiesStruct
}

func (p *testPropertiesStruct) optimizableProperties() interface{} {
 return p
}

func (p *testPropertiesStruct) String() string {
 return p.name
}

var _ propertiesContainer = (*testPropertiesStruct)(nil)

func TestCommonValueOptimization(t *testing.T) {
 common := &testPropertiesStruct{name: "common"}
 structs := []propertiesContainer{
  &testPropertiesStruct{
   name:          "struct-0",
   private:       "common",
   Public_Ignore: "common",
   Public_Keep:   "keep",
   S_Common:      "common",
   S_Different:   "upper",
   A_Common:      []string{"first", "second"},
   A_Different:   []string{"alpha", "beta"},
   F_Common:      proptools.BoolPtr(false),
   F_Different:   proptools.BoolPtr(false),
   EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
    S_Embedded_Common:    "embedded_common",
    S_Embedded_Different: "embedded_upper",
   },
  },
  &testPropertiesStruct{
   name:          "struct-1",
   private:       "common",
   Public_Ignore: "common",
   Public_Keep:   "keep",
   S_Common:      "common",
   S_Different:   "lower",
   A_Common:      []string{"first", "second"},
   A_Different:   []string{"alpha", "delta"},
   F_Common:      proptools.BoolPtr(false),
   F_Different:   proptools.BoolPtr(true),
   EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
    S_Embedded_Common:    "embedded_common",
    S_Embedded_Different: "embedded_lower",
   },
  },
 }

 extractor := newCommonValueExtractor(common)

 err := extractor.extractCommonProperties(common, structs)
 android.AssertDeepEquals(t, "unexpected error", nil, err)

 android.AssertDeepEquals(t, "common properties not correct",
  &testPropertiesStruct{
   name:          "common",
   private:       "",
   Public_Ignore: "",
   Public_Keep:   "keep",
   S_Common:      "common",
   S_Different:   "",
   A_Common:      []string{"first", "second"},
   A_Different:   []string(nil),
   F_Common:      proptools.BoolPtr(false),
   F_Different:   nil,
   EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
    S_Embedded_Common:    "embedded_common",
    S_Embedded_Different: "",
   },
  },
  common)

 android.AssertDeepEquals(t, "updated properties[0] not correct",
  &testPropertiesStruct{
   name:          "struct-0",
   private:       "common",
   Public_Ignore: "common",
   Public_Keep:   "keep",
   S_Common:      "",
   S_Different:   "upper",
   A_Common:      nil,
   A_Different:   []string{"alpha", "beta"},
   F_Common:      nil,
   F_Different:   proptools.BoolPtr(false),
   EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
    S_Embedded_Common:    "",
    S_Embedded_Different: "embedded_upper",
   },
  },
  structs[0])

 android.AssertDeepEquals(t, "updated properties[1] not correct",
  &testPropertiesStruct{
   name:          "struct-1",
   private:       "common",
   Public_Ignore: "common",
   Public_Keep:   "keep",
   S_Common:      "",
   S_Different:   "lower",
   A_Common:      nil,
   A_Different:   []string{"alpha", "delta"},
   F_Common:      nil,
   F_Different:   proptools.BoolPtr(true),
   EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
    S_Embedded_Common:    "",
    S_Embedded_Different: "embedded_lower",
   },
  },
  structs[1])
}

func TestCommonValueOptimization_InvalidArchSpecificVariants(t *testing.T) {
 common := &testPropertiesStruct{name: "common"}
 structs := []propertiesContainer{
  &testPropertiesStruct{
   name:     "struct-0",
   S_Common: "should-be-but-is-not-common0",
  },
  &testPropertiesStruct{
   name:     "struct-1",
   S_Common: "should-be-but-is-not-common1",
  },
 }

 extractor := newCommonValueExtractor(common)

 err := extractor.extractCommonProperties(common, structs)
 android.AssertErrorMessageEquals(t, "unexpected error", `field "S_Common" is not tagged as "arch_variant" but has arch specific properties:
    "struct-0" has value "should-be-but-is-not-common0"
    "struct-1" has value "should-be-but-is-not-common1"`, err)
}

// Ensure that sdk snapshot related environment variables work correctly.
func TestSnapshot_EnvConfiguration(t *testing.T) {
 t.Parallel()
 bp := `
  sdk {
   name: "mysdk",
   java_header_libs: ["myjavalib"],
  }

  java_library {
   name: "myjavalib",
   srcs: ["Test.java"],
   system_modules: "none",
   sdk_version: "none",
   compile_dex: true,
   host_supported: true,
  }
 `
 preparer := android.GroupFixturePreparers(
  prepareForSdkTestWithJava,
  android.FixtureWithRootAndroidBp(bp),
 )

 checkZipFile := func(t *testing.T, result *android.TestResult, expected string) {
  zipRule := result.ModuleForTests(t, "mysdk", "common_os").Rule("SnapshotZipFiles")
  android.AssertStringEquals(t, "snapshot zip file", expected, zipRule.Output.String())
 }

 t.Run("no env variables", func(t *testing.T) {
  t.Parallel()
  result := preparer.RunTest(t)

  checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")

  CheckSnapshot(t, result, "mysdk", "",
   checkAndroidBpContents(`
// This is auto-generated. DO NOT EDIT.

apex_contributions_defaults {
    name: "mysdk.contributions",
    contents: ["prebuilt_myjavalib"],
}

java_import {
    name: "myjavalib",
    prefer: false,
    visibility: ["//visibility:public"],
    apex_available: ["//apex_available:platform"],
    jars: ["java/myjavalib.jar"],
}
   `),
  )
 })

 t.Run("SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE=S", func(t *testing.T) {
  t.Parallel()
  result := android.GroupFixturePreparers(
   prepareForSdkTestWithJava,
   java.PrepareForTestWithJavaDefaultModules,
   java.PrepareForTestWithJavaSdkLibraryFiles,
   java.FixtureWithLastReleaseApis("mysdklibrary"),
   android.FixtureWithRootAndroidBp(`
   sdk {
    name: "mysdk",
    bootclasspath_fragments: ["mybootclasspathfragment"],
   }

   bootclasspath_fragment {
    name: "mybootclasspathfragment",
    apex_available: ["myapex"],
    contents: ["mysdklibrary"],
    hidden_api: {
     split_packages: ["*"],
    },
   }

   java_sdk_library {
    name: "mysdklibrary",
    srcs: ["Test.java"],
    compile_dex: true,
    sdk_version: "S",
    public: {enabled: true},
    permitted_packages: ["mysdklibrary"],
   }
  `),
   android.FixtureMergeEnv(map[string]string{
    "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
   }),
   android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
  ).RunTest(t)

  CheckSnapshot(t, result, "mysdk", "",
   checkAndroidBpContents(`
// This is auto-generated. DO NOT EDIT.

apex_contributions_defaults {
    name: "mysdk.contributions",
    contents: ["prebuilt_mysdklibrary"],
}

prebuilt_bootclasspath_fragment {
    name: "mybootclasspathfragment",
    prefer: false,
    visibility: ["//visibility:public"],
    apex_available: ["myapex"],
    contents: ["mysdklibrary"],
    hidden_api: {
        annotation_flags: "hiddenapi/annotation-flags.csv",
        metadata: "hiddenapi/metadata.csv",
        index: "hiddenapi/index.csv",
        stub_flags: "hiddenapi/stub-flags.csv",
        all_flags: "hiddenapi/all-flags.csv",
    },
}

java_sdk_library_import {
    name: "mysdklibrary",
    prefer: false,
    visibility: ["//visibility:public"],
    apex_available: ["//apex_available:platform"],
    shared_library: true,
    compile_dex: true,
    permitted_packages: ["mysdklibrary"],
    public: {
        jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
        stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
        current_api: "sdk_library/public/mysdklibrary.txt",
        removed_api: "sdk_library/public/mysdklibrary-removed.txt",
        sdk_version: "current",
    },
}
`),

   checkAllCopyRules(`
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/stub-flags.csv -> hiddenapi/stub-flags.csv
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/all-flags.csv -> hiddenapi/all-flags.csv
.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
`),
  )
 })

 t.Run("test replacing exportable module", func(t *testing.T) {
  t.Parallel()
  result := android.GroupFixturePreparers(
   prepareForSdkTestWithJava,
   java.PrepareForTestWithJavaDefaultModules,
   java.PrepareForTestWithJavaSdkLibraryFiles,
   java.FixtureWithLastReleaseApis("mysdklibrary", "anothersdklibrary"),
   android.FixtureWithRootAndroidBp(`
   sdk {
    name: "mysdk",
    bootclasspath_fragments: ["mybootclasspathfragment"],
   }

   bootclasspath_fragment {
    name: "mybootclasspathfragment",
    apex_available: ["myapex"],
    contents: ["mysdklibrary"],
    hidden_api: {
     split_packages: ["*"],
    },
    core_platform_api: {
     stub_libs: [
      "anothersdklibrary.stubs.exportable",
     ],
    },
    api: {
     stub_libs: [
      "anothersdklibrary",
     ],
    },
   }

   java_sdk_library {
    name: "mysdklibrary",
    srcs: ["Test.java"],
    compile_dex: true,
    min_sdk_version: "S",
    public: {enabled: true},
    permitted_packages: ["mysdklibrary"],
   }

   java_sdk_library {
    name: "anothersdklibrary",
    srcs: ["Test.java"],
    compile_dex: true,
    min_sdk_version: "S",
    public: {enabled: true},
    system: {enabled: true},
    module_lib: {enabled: true},
   }
  `),
   android.FixtureMergeEnv(map[string]string{
    "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
   }),
   android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
    variables.Platform_version_active_codenames = []string{"UpsideDownCake", "Tiramisu", "S-V2"}
   }),
   android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
  ).RunTest(t)

  CheckSnapshot(t, result, "mysdk", "",
   checkAndroidBpContents(`
// This is auto-generated. DO NOT EDIT.

prebuilt_bootclasspath_fragment {
    name: "mybootclasspathfragment",
    prefer: false,
    visibility: ["//visibility:public"],
    apex_available: ["myapex"],
    contents: ["mysdklibrary"],
    api: {
        stub_libs: ["anothersdklibrary"],
    },
    core_platform_api: {
        stub_libs: ["anothersdklibrary.stubs"],
    },
    hidden_api: {
        annotation_flags: "hiddenapi/annotation-flags.csv",
        metadata: "hiddenapi/metadata.csv",
        index: "hiddenapi/index.csv",
        stub_flags: "hiddenapi/stub-flags.csv",
        all_flags: "hiddenapi/all-flags.csv",
    },
}

java_sdk_library_import {
    name: "mysdklibrary",
    prefer: false,
    visibility: ["//visibility:public"],
    apex_available: ["//apex_available:platform"],
    shared_library: true,
    compile_dex: true,
    permitted_packages: ["mysdklibrary"],
    public: {
        jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
        stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
        current_api: "sdk_library/public/mysdklibrary.txt",
        removed_api: "sdk_library/public/mysdklibrary-removed.txt",
        sdk_version: "current",
    },
}

java_sdk_library_import {
    name: "anothersdklibrary",
    prefer: false,
    visibility: ["//visibility:public"],
    apex_available: ["//apex_available:platform"],
    shared_library: true,
    compile_dex: true,
    public: {
        jars: ["sdk_library/public/anothersdklibrary-stubs.jar"],
        stub_srcs: ["sdk_library/public/anothersdklibrary_stub_sources"],
        current_api: "sdk_library/public/anothersdklibrary.txt",
        removed_api: "sdk_library/public/anothersdklibrary-removed.txt",
        sdk_version: "current",
    },
    system: {
        jars: ["sdk_library/system/anothersdklibrary-stubs.jar"],
        stub_srcs: ["sdk_library/system/anothersdklibrary_stub_sources"],
        current_api: "sdk_library/system/anothersdklibrary.txt",
        removed_api: "sdk_library/system/anothersdklibrary-removed.txt",
        sdk_version: "system_current",
    },
    module_lib: {
        jars: ["sdk_library/module-lib/anothersdklibrary-stubs.jar"],
        stub_srcs: ["sdk_library/module-lib/anothersdklibrary_stub_sources"],
        current_api: "sdk_library/module-lib/anothersdklibrary.txt",
        removed_api: "sdk_library/module-lib/anothersdklibrary-removed.txt",
        sdk_version: "module_current",
    },
}
`),
  )
 })

}

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

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik