Merge changes I7801fc7c,I7d407bd1 am: aa1491fd41
am: 22e64a35e2
am: a01f17a341
Change-Id: Ide92c900d84b9922feea1ce0df357a28d2039c7b
This commit is contained in:
commit
0173b4709f
5 changed files with 83 additions and 4 deletions
|
@ -70,7 +70,7 @@ func (once *OncePer) Get(key OnceKey) interface{} {
|
|||
panic(fmt.Errorf("Get() called before Once()"))
|
||||
}
|
||||
|
||||
return v
|
||||
return once.maybeWaitFor(key, v)
|
||||
}
|
||||
|
||||
// OnceStringSlice is the same as Once, but returns the value cast to a []string
|
||||
|
|
|
@ -16,6 +16,7 @@ package android
|
|||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestOncePer_Once(t *testing.T) {
|
||||
|
@ -34,6 +35,21 @@ func TestOncePer_Once(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestOncePer_Once_wait(t *testing.T) {
|
||||
once := OncePer{}
|
||||
key := NewOnceKey("key")
|
||||
|
||||
ch := make(chan bool)
|
||||
|
||||
go once.Once(key, func() interface{} { close(ch); time.Sleep(100 * time.Millisecond); return "foo" })
|
||||
<-ch
|
||||
a := once.Once(key, func() interface{} { return "bar" }).(string)
|
||||
|
||||
if a != "foo" {
|
||||
t.Errorf("expect %q, got %q", "foo", a)
|
||||
}
|
||||
}
|
||||
|
||||
func TestOncePer_Get(t *testing.T) {
|
||||
once := OncePer{}
|
||||
key := NewOnceKey("key")
|
||||
|
@ -65,6 +81,21 @@ func TestOncePer_Get_panic(t *testing.T) {
|
|||
once.Get(key)
|
||||
}
|
||||
|
||||
func TestOncePer_Get_wait(t *testing.T) {
|
||||
once := OncePer{}
|
||||
key := NewOnceKey("key")
|
||||
|
||||
ch := make(chan bool)
|
||||
|
||||
go once.Once(key, func() interface{} { close(ch); time.Sleep(100 * time.Millisecond); return "foo" })
|
||||
<-ch
|
||||
a := once.Get(key).(string)
|
||||
|
||||
if a != "foo" {
|
||||
t.Errorf("expect %q, got %q", "foo", a)
|
||||
}
|
||||
}
|
||||
|
||||
func TestOncePer_OnceStringSlice(t *testing.T) {
|
||||
once := OncePer{}
|
||||
key := NewOnceKey("key")
|
||||
|
|
|
@ -20,6 +20,11 @@ import (
|
|||
"strings"
|
||||
)
|
||||
|
||||
// CopyOf returns a new slice that has the same contents as s.
|
||||
func CopyOf(s []string) []string {
|
||||
return append([]string(nil), s...)
|
||||
}
|
||||
|
||||
func JoinWithPrefix(strs []string, prefix string) string {
|
||||
if len(strs) == 0 {
|
||||
return ""
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
package android
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
@ -359,3 +360,47 @@ func TestRemoveFromList(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func ExampleCopyOf() {
|
||||
a := []string{"1", "2", "3"}
|
||||
b := CopyOf(a)
|
||||
a[0] = "-1"
|
||||
fmt.Printf("a = %q\n", a)
|
||||
fmt.Printf("b = %q\n", b)
|
||||
|
||||
// Output:
|
||||
// a = ["-1" "2" "3"]
|
||||
// b = ["1" "2" "3"]
|
||||
}
|
||||
|
||||
func ExampleCopyOf_append() {
|
||||
a := make([]string, 1, 2)
|
||||
a[0] = "foo"
|
||||
|
||||
fmt.Println("Without CopyOf:")
|
||||
b := append(a, "bar")
|
||||
c := append(a, "baz")
|
||||
fmt.Printf("a = %q\n", a)
|
||||
fmt.Printf("b = %q\n", b)
|
||||
fmt.Printf("c = %q\n", c)
|
||||
|
||||
a = make([]string, 1, 2)
|
||||
a[0] = "foo"
|
||||
|
||||
fmt.Println("With CopyOf:")
|
||||
b = append(CopyOf(a), "bar")
|
||||
c = append(CopyOf(a), "baz")
|
||||
fmt.Printf("a = %q\n", a)
|
||||
fmt.Printf("b = %q\n", b)
|
||||
fmt.Printf("c = %q\n", c)
|
||||
|
||||
// Output:
|
||||
// Without CopyOf:
|
||||
// a = ["foo"]
|
||||
// b = ["foo" "baz"]
|
||||
// c = ["foo" "baz"]
|
||||
// With CopyOf:
|
||||
// a = ["foo"]
|
||||
// b = ["foo" "bar"]
|
||||
// c = ["foo" "baz"]
|
||||
}
|
||||
|
|
|
@ -578,9 +578,7 @@ func replace(l []string, from, to string) {
|
|||
}
|
||||
}
|
||||
|
||||
func copyOf(l []string) []string {
|
||||
return append([]string(nil), l...)
|
||||
}
|
||||
var copyOf = android.CopyOf
|
||||
|
||||
func anyHavePrefix(l []string, prefix string) bool {
|
||||
for _, x := range l {
|
||||
|
|
Loading…
Reference in a new issue