blob: ecd07ce222f4911b373221bff2edb50d9ba788f6 [file] [log] [blame]
// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package event_test
import (
"fmt"
"testing"
"github.com/google/go-cmp/cmp"
"golang.org/x/exp/event"
"golang.org/x/exp/event/keys"
)
// TODO: test WithAll (which will currently break the aliasing check).
type testHandler struct{}
func (testHandler) Handle(*event.Event) {}
func TestClone(t *testing.T) {
var labels []event.Label
for i := 0; i < 5; i++ { // one greater than len(Builder.labels)
labels = append(labels, keys.Int(fmt.Sprintf("l%d", i)).Of(i))
}
check := func(b *event.Builder, want []event.Label) {
t.Helper()
if got := b.Event.Labels; !cmp.Equal(got, want, cmp.Comparer(valueEqual)) {
t.Fatalf("got %v, want %v", got, want)
}
}
e := event.NewExporter(testHandler{})
b1 := e.Builder()
b1.With(labels[0]).With(labels[1])
check(b1, labels[:2])
b2 := b1.Clone()
check(b1, labels[:2])
check(b2, labels[:2])
b2.With(labels[2])
check(b1, labels[:2])
check(b2, labels[:3])
// Force a new backing array for b.Event.Labels.
for i := 3; i < len(labels); i++ {
b2.With(labels[i])
}
check(b1, labels[:2])
check(b2, labels)
b2.Log("") // put b2 back in the pool.
b2 = e.Builder()
check(b1, labels[:2])
check(b2, []event.Label{})
b2.With(labels[3]).With(labels[4])
check(b1, labels[:2])
check(b2, labels[3:5])
}
func valueEqual(l1, l2 event.Value) bool {
return fmt.Sprint(l1) == fmt.Sprint(l2)
}