--- /dev/null
+// 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 wire
+
+import (
+ "reflect"
+ "testing"
+)
+
+func TestMarshalJSON(t *testing.T) {
+ tests := []struct {
+ name string
+ pt *Point
+ want string
+ }{
+ {
+ "PointInt64",
+ &Point{
+ Value: PointInt64Value{
+ Int64Value: 5,
+ },
+ },
+ `{"int64Value":5}`,
+ },
+ {
+ "PointDouble",
+ &Point{
+ Value: PointDoubleValue{
+ DoubleValue: 3.14,
+ },
+ },
+ `{"doubleValue":3.14}`,
+ },
+ {
+ "PointDistribution",
+ &Point{
+ Value: PointDistributionValue{
+ DistributionValue: &DistributionValue{
+ Count: 3,
+ Sum: 10,
+ Buckets: []*Bucket{
+ {
+ Count: 1,
+ },
+ {
+ Count: 2,
+ },
+ },
+ BucketOptions: &BucketOptionsExplicit{
+ Bounds: []float64{
+ 0, 5,
+ },
+ },
+ },
+ },
+ },
+ `{"distributionValue":{"count":3,"sum":10,"bucket_options":{"explicit":{"bounds":[0,5]}},"buckets":[{"count":1},{"count":2}]}}`,
+ },
+ {
+ "nil point",
+ nil,
+ `null`,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ buf, err := tt.pt.MarshalJSON()
+ if err != nil {
+ t.Fatalf("Got:\n%v\nWant:\n%v", err, nil)
+ }
+ got := string(buf)
+ if !reflect.DeepEqual(got, tt.want) {
+ t.Fatalf("Got:\n%s\nWant:\n%s", got, tt.want)
+ }
+ })
+ }
+}