49 lines
1.6 KiB
Go
49 lines
1.6 KiB
Go
// Copyright (C) MongoDB, Inc. 2017-present.
|
|
//
|
|
// 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
|
|
|
|
package bsoncodec
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"go.mongodb.org/mongo-driver/bson/bsonoptions"
|
|
"go.mongodb.org/mongo-driver/bson/bsonrw/bsonrwtest"
|
|
"go.mongodb.org/mongo-driver/bson/bsontype"
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
"go.mongodb.org/mongo-driver/internal/testutil/assert"
|
|
)
|
|
|
|
func TestStringCodec(t *testing.T) {
|
|
t.Run("ObjectIDAsHex", func(t *testing.T) {
|
|
oid := primitive.NewObjectID()
|
|
byteArray := [12]byte(oid)
|
|
reader := &bsonrwtest.ValueReaderWriter{BSONType: bsontype.ObjectID, Return: oid}
|
|
testCases := []struct {
|
|
name string
|
|
opts *bsonoptions.StringCodecOptions
|
|
hex bool
|
|
result string
|
|
}{
|
|
{"default", bsonoptions.StringCodec(), true, oid.Hex()},
|
|
{"true", bsonoptions.StringCodec().SetDecodeObjectIDAsHex(true), true, oid.Hex()},
|
|
{"false", bsonoptions.StringCodec().SetDecodeObjectIDAsHex(false), false, string(byteArray[:])},
|
|
}
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
stringCodec := NewStringCodec(tc.opts)
|
|
|
|
actual := reflect.New(reflect.TypeOf("")).Elem()
|
|
err := stringCodec.DecodeValue(DecodeContext{}, reader, actual)
|
|
assert.Nil(t, err, "StringCodec.DecodeValue error: %v", err)
|
|
|
|
actualString := actual.Interface().(string)
|
|
assert.Equal(t, tc.result, actualString, "Expected string %v, got %v", tc.result, actualString)
|
|
})
|
|
}
|
|
})
|
|
}
|