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: Unknown

 

Spracherkennung für: .go vermutete Sprache: Abap {ABAP[65] Cobol[56] CS[54]} [Methode: maximale Elemente, drei 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.1 Sekunden  (vorverarbeitet am  2026-11-04) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.