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

Quelle  bp_test.go   Sprache: unbekannt

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

// Copyright (C) 2020 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 (
 "testing"

 "android/soong/android"

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

func propertySetFixture() interface{} {
 set := newPropertySet()
 set.AddProperty("x", "taxi")
 set.AddPropertyWithTag("y", 1729, "tag_y")
 subset := set.AddPropertySet("sub")
 subset.AddPropertyWithTag("x", "taxi", "tag_x")
 subset.AddProperty("y", 1729)
 return set
}

func intPtr(i int) *int { return &i }

type propertyStruct struct {
 X     *string
 Y     *int
 Unset *bool
 Sub   struct {
  X     *string
  Y     *int
  Unset *bool
 }
}

func propertyStructFixture() interface{} {
 str := &propertyStruct{}
 str.X = proptools.StringPtr("taxi")
 str.Y = intPtr(1729)
 str.Sub.X = proptools.StringPtr("taxi")
 str.Sub.Y = intPtr(1729)
 return str
}

func checkPropertySetFixture(t *testing.T, val interface{}, hasTags bool) {
 set := val.(*bpPropertySet)
 android.AssertDeepEquals(t, "wrong x value", "taxi", set.getValue("x"))
 android.AssertDeepEquals(t, "wrong y value", 1729, set.getValue("y"))

 subset := set.getValue("sub").(*bpPropertySet)
 android.AssertDeepEquals(t, "wrong sub.x value", "taxi", subset.getValue("x"))
 android.AssertDeepEquals(t, "wrong sub.y value", 1729, subset.getValue("y"))

 if hasTags {
  android.AssertDeepEquals(t, "wrong y tag", "tag_y", set.getTag("y"))
  android.AssertDeepEquals(t, "wrong sub.x tag", "tag_x", subset.getTag("x"))
 } else {
  android.AssertDeepEquals(t, "wrong y tag", nil, set.getTag("y"))
  android.AssertDeepEquals(t, "wrong sub.x tag", nil, subset.getTag("x"))
 }
}

func TestAddPropertySimple(t *testing.T) {
 t.Parallel()
 set := newPropertySet()
 for name, val := range map[string]interface{}{
  "x":   "taxi",
  "y":   1729,
  "t":   true,
  "f":   false,
  "arr": []string{"a", "b", "c"},
 } {
  set.AddProperty(name, val)
  android.AssertDeepEquals(t, "wrong value", val, set.getValue(name))
 }
 android.AssertPanicMessageContains(t, "adding x again should panic", `Property "x" already exists in property set`,
  func() { set.AddProperty("x", "taxi") })
 android.AssertPanicMessageContains(t, "adding arr again should panic", `Property "arr" already exists in property set`,
  func() { set.AddProperty("arr", []string{"d"}) })
}

func TestAddPropertySubset(t *testing.T) {
 t.Parallel()
 getFixtureMap := map[string]func() interface{}{
  "property set":    propertySetFixture,
  "property struct": propertyStructFixture,
 }

 t.Run("add new subset", func(t *testing.T) {
  t.Parallel()
  for name, getFixture := range getFixtureMap {
   t.Run(name, func(t *testing.T) {
    t.Parallel()
    set := propertySetFixture().(*bpPropertySet)
    set.AddProperty("new", getFixture())
    checkPropertySetFixture(t, set, true)
    checkPropertySetFixture(t, set.getValue("new"), name == "property set")
   })
  }
 })

 t.Run("merge existing subset", func(t *testing.T) {
  t.Parallel()
  for name, getFixture := range getFixtureMap {
   t.Run(name, func(t *testing.T) {
    t.Parallel()
    set := newPropertySet()
    subset := set.AddPropertySet("sub")
    subset.AddProperty("flag", false)
    subset.AddPropertySet("sub")
    set.AddProperty("sub", getFixture())
    merged := set.getValue("sub").(*bpPropertySet)
    android.AssertDeepEquals(t, "wrong flag value", false, merged.getValue("flag"))
    checkPropertySetFixture(t, merged, name == "property set")
   })
  }
 })

 t.Run("add conflicting subset", func(t *testing.T) {
  t.Parallel()
  set := propertySetFixture().(*bpPropertySet)
  android.AssertPanicMessageContains(t, "adding x again should panic", `Property "x" already exists in property set`,
   func() { set.AddProperty("x", propertySetFixture()) })
 })

 t.Run("add non-pointer struct", func(t *testing.T) {
  t.Parallel()
  set := propertySetFixture().(*bpPropertySet)
  str := propertyStructFixture().(*propertyStruct)
  android.AssertPanicMessageContains(t, "adding a non-pointer struct should panic", "Value is a struct, not a pointer to one:",
   func() { set.AddProperty("new", *str) })
 })
}

func TestAddPropertySetNew(t *testing.T) {
 t.Parallel()
 set := newPropertySet()
 subset := set.AddPropertySet("sub")
 subset.AddProperty("new", "d^^b")
 android.AssertDeepEquals(t, "wrong sub.new value", "d^^b", set.getValue("sub").(*bpPropertySet).getValue("new"))
}

func TestAddPropertySetExisting(t *testing.T) {
 t.Parallel()
 set := propertySetFixture().(*bpPropertySet)
 subset := set.AddPropertySet("sub")
 subset.AddProperty("new", "d^^b")
 android.AssertDeepEquals(t, "wrong sub.new value", "d^^b", set.getValue("sub").(*bpPropertySet).getValue("new"))
}

type removeFredTransformation struct {
 identityTransformation
}

func (t removeFredTransformation) transformProperty(name string, value interface{}, tag android.BpPropertyTag) (interface{}, android.BpPropertyTag) {
 if name == "fred" {
  return nil, nil
 }
 return value, tag
}

func (t removeFredTransformation) transformPropertySetBeforeContents(name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag) {
 if name == "fred" {
  return nil, nil
 }
 return propertySet, tag
}

func (t removeFredTransformation) transformPropertySetAfterContents(name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag) {
 if len(propertySet.properties) == 0 {
  return nil, nil
 }
 return propertySet, tag
}

func TestTransformRemoveProperty(t *testing.T) {
 t.Parallel()
 set := newPropertySet()
 set.AddProperty("name", "name")
 set.AddProperty("fred", "12")

 set.transformContents(removeFredTransformation{})

 contents := &generatedContents{}
 outputPropertySet(contents, set)
 android.AssertTrimmedStringEquals(t, "removing property failed", "name: \"name\",\n", contents.content.String())
}

func TestTransformRemovePropertySet(t *testing.T) {
 t.Parallel()
 set := newPropertySet()
 set.AddProperty("name", "name")
 set.AddPropertySet("fred")

 set.transformContents(removeFredTransformation{})

 contents := &generatedContents{}
 outputPropertySet(contents, set)
 android.AssertTrimmedStringEquals(t, "removing property set failed", "name: \"name\",\n", contents.content.String())
}

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