Eine aufbereitete Darstellung der Quelle

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

Benutzer

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.24 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