templates

package
v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 1, 2021 License: MIT Imports: 0 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var EnumCodecsTemplate = `` /* 3851-byte string literal not displayed */
View Source
var EnumCodecsTestTemplate = `{{- if not .OmitGeneratedNotice}}
// Code generated by go generate; DO NOT EDIT.
// This file was generated at
// {{ .Timestamp }}
// by go-enum
{{- end }}

package {{ .Package }}

import (
	"encoding/json"
	"fmt"
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
	"go.mongodb.org/mongo-driver/bson"
)

type fooEnumValue struct {
	EnumValue stringEnumValue ` + "`" + `json:"enum_value"` + "`" + `
}

type fooEnumValueOmitEmpty struct {
	EnumValue stringEnumValue ` + "`" + `json:"enum_value,omitempty"` + "`" + `
}

type fooEnumValuePtr struct {
	EnumValue *stringEnumValue ` + "`" + `json:"enum_value"` + "`" + `
}

type fooEnumValuePtrOmitEmpty struct {
	EnumValue *stringEnumValue ` + "`" + `json:"enum_value,omitempty"` + "`" + `
}

func TestEnumValue_MarshalJSON(t *testing.T) {
	t.Run("Marshal_AnnonStructField", func(t *testing.T) {
		c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }
		v := struct {
			A stringEnumValue ` + "`" + `json:"enum_value"` + "`" + `
		}{c}
		data, err := json.Marshal(&v)
		require.Nil(t, err)
		assert.EqualValues(t, fmt.Sprintf(` + "`" + `{"enum_value":"%s"}` + "`" + `, v.A.String()), string(data))
	})
	t.Run("Marshal_StructField", func(t *testing.T) {
		v := fooEnumValue{EnumValue: stringEnumValue{key: {{ .IndexKeyName }} }}
		data, err := json.Marshal(v)
		require.Nil(t, err)
		assert.EqualValues(t, fmt.Sprintf(` + "`" + `{"enum_value":"%s"}` + "`" + `, v.EnumValue.String()), string(data))
	})
	t.Run("Marshal_OmitEmptyStruct", func(t *testing.T) {
		// encoding/json ignores omitempty on struct zero values
		// https://github.com/golang/go/issues/11939
		v := fooEnumValueOmitEmpty{}
		data, err := json.Marshal(v)
		require.Nil(t, err)
		assert.EqualValues(t, ` + "`" + `{"enum_value":""}` + "`" + `, string(data))
	})
	t.Run("Marshal_StructFieldPtr", func(t *testing.T) {
		vPtr := fooEnumValuePtr{EnumValue: &stringEnumValue{key: {{ .IndexKeyName }} }}
		data, err := json.Marshal(vPtr)
		require.Nil(t, err)
		assert.EqualValues(t, ` + "`" + `{"enum_value":""}` + "`" + `, string(data))
	})
	t.Run("Marshal_StructFieldPtr", func(t *testing.T) {
		c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }
		vPtr := fooEnumValuePtr{EnumValue: &c}
		data, err := json.Marshal(vPtr)
		require.Nil(t, err)
		assert.EqualValues(t, fmt.Sprintf(` + "`" + `{"enum_value":"%s"}` + "`" + `, vPtr.EnumValue.String()), string(data))
	})
	t.Run("Marshal_StructFieldNilPtr", func(t *testing.T) {
		vPtr := fooEnumValuePtr{}
		data, err := json.Marshal(vPtr)
		require.Nil(t, err)
		assert.EqualValues(t, ` + "`" + `{"enum_value":null}` + "`" + `, string(data))
	})
	t.Run("Marshal_OmitEmptyStructPtr", func(t *testing.T) {
		vPtr := fooEnumValuePtrOmitEmpty{}
		data, err := json.Marshal(vPtr)
		require.Nil(t, err)
		assert.EqualValues(t, ` + "`" + `{}` + "`" + `, string(data))
	})
}

func TestEnumValue_UnmarshalJSON(t *testing.T) {
	t.Run("Unmarshal_InvalidJSON", func(t *testing.T) {
		data := ` + "`" + `{"enum_value":"PA` + "`" + `
rawData := []byte(data)

c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }
v := struct {
A stringEnumValue ` + "`" + `json:"enum_value"` + "`" + `
}{c}
// Invalid JSON structures fail on json.Unmarshal
err := json.Unmarshal(rawData, &v)
require.NotNil(t, err)
})
t.Run("Unmarshal_InvalidValue", func(t *testing.T) {
	data := ` + "`" + `{"enum_value":"{{ .TestCase.InvalidValue }}"}` + "`" + `
	rawData := []byte(data)

	c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }
	v := struct {
		A stringEnumValue ` + "`" + `json:"enum_value"` + "`" + `
	}{c}
	err := json.Unmarshal(rawData, &v)
	require.NotNil(t, err)
})
t.Run("Unmarshal_InvalidValueJSON", func(t *testing.T) {
	data := ` + "`" + `{"enum_value":123}` + "`" + `
	rawData := []byte(data)

	c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }
	v := struct {
		A stringEnumValue ` + "`" + `json:"enum_value"` + "`" + `
	}{c}
	// Invalid field values but whithin a valid JSON are caught on UnmarshalJSON
	err := json.Unmarshal(rawData, &v)
	require.NotNil(t, err)
})
t.Run("Unmarshal_AnnonStructField", func(t *testing.T) {
	data := ` + "`" + `{"enum_value":"{{ .TestCase.Value }}"}` + "`" + `
	rawData := []byte(data)

	c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }
	v := struct {
		A stringEnumValue ` + "`" + `json:"enum_value"` + "`" + `
	}{c}
	err := json.Unmarshal(rawData, &v)
	require.Nil(t, err)
	assert.EqualValues(t, "{{ .TestCase.Value }}", v.A.String())
})
t.Run("Unmarshal_StructField", func(t *testing.T) {
	data := ` + "`" + `{"enum_value":"{{ .TestCase.Value }}"}` + "`" + `
	rawData := []byte(data)

	v := fooEnumValue{EnumValue: stringEnumValue{key: {{ .IndexKeyName }} }}
	err := json.Unmarshal(rawData, &v)
	require.Nil(t, err)
	assert.EqualValues(t, "{{ .TestCase.Value }}", v.EnumValue.String())
})
t.Run("Unmarshal_OmitEmptyStruct", func(t *testing.T) {
	data := ` + "`" + `{"enum_value":null}` + "`" + `
	rawData := []byte(data)

	v := fooEnumValueOmitEmpty{}
	err := json.Unmarshal(rawData, &v)
	require.NoError(t, err)
})
t.Run("Unmarshal_StructFieldPtr", func(t *testing.T) {
	data := ` + "`" + `{"enum_value":"{{ .TestCase.Value }}"}` + "`" + `
	rawData := []byte(data)

	vPtr := fooEnumValuePtr{EnumValue: &stringEnumValue{key: {{ .IndexKeyName }} }}
	err := json.Unmarshal(rawData, &vPtr)
	require.Nil(t, err)
	assert.EqualValues(t, "{{ .TestCase.Value }}", vPtr.EnumValue.String())
})
t.Run("Unmarshal_StructFieldNilPtr", func(t *testing.T) {
	data := ` + "`" + `{"enum_value":null}` + "`" + `
	rawData := []byte(data)

	vPtr := fooEnumValuePtr{}
	err := json.Unmarshal(rawData, &vPtr)
	require.Nil(t, err)
	assert.Nil(t, vPtr.EnumValue)
})
t.Run("Unmarshal_TableUnmatch", func(t *testing.T) {
	data := ` + "`" + `{"enum_value":"PPP"}` + "`" + `
	rawData := []byte(data)

	v := fooEnumValue{}
	err := json.Unmarshal(rawData, &v)
	require.NotNil(t, err)
})
}

func TestEnumValue_TextCodec(t *testing.T) {
	t.Run("MarshalText_Valid", func(t *testing.T) {
		c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }

		data, err := c.MarshalText()
		require.Nil(t, err)
		require.True(t, len(data) > 0)
	})
	t.Run("UnmarshalText_Valid", func(t *testing.T) {
		c := &stringEnumValue{key: {{ .IndexKeyName }} }
		err := c.UnmarshalText([]byte("{{ .TestCase.Value }}"))
		require.Nil(t, err)
		require.EqualValues(t, {{ .TestCase.Name }}().String(), c.value)
	})
	t.Run("UnmarshalText_Invalid", func(t *testing.T) {
		c := &stringEnumValue{key: {{ .IndexKeyName }} }
		err := c.UnmarshalText([]byte(""))
		require.NoError(t, err)
		err = c.UnmarshalText([]byte("{{ .TestCase.InvalidValue }}"))
		require.NotNil(t, err)
	})
}

func TestEnumValue_Stringer(t *testing.T) {
	c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }
	require.EqualValues(t, c.value, c.String())
}

func TestEnumValue_DriverValues(t *testing.T) {
	t.Run("Scan_String", func(t *testing.T) {
		c := &stringEnumValue{key: {{ .IndexKeyName }} }
		require.Nil(t, c.Scan({{ .TestCase.Name }}().String()))
		require.EqualValues(t, {{ .TestCase.Name }}().String(), c.value)
	})
	t.Run("Scan_Bytes", func(t *testing.T) {
		c := &stringEnumValue{key: {{ .IndexKeyName }} }
		require.Nil(t, c.Scan([]byte({{ .TestCase.Name }}().String())))
		require.EqualValues(t, {{ .TestCase.Name }}().String(), c.value)
	})
	t.Run("Scan_Invalid", func(t *testing.T) {
		c := &stringEnumValue{key: {{ .IndexKeyName }} }
		require.NotNil(t, c.Scan(1))
	})
	t.Run("Scan_Invalid", func(t *testing.T) {
		c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }

		v, err := c.Value()
		assert.Nil(t, err)
		require.EqualValues(t, {{ .TestCase.Name }}().String(), fmt.Sprintf("%v", v))
	})
}

func TestEnumValue_BinaryCodec(t *testing.T) {
	t.Run("MarshalBinary_Valid", func(t *testing.T) {
		c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }

		data, err := c.MarshalBinary()
		require.Nil(t, err)
		assert.Len(t, data, {{ .TestCase.BinaryLen }})
	})
	t.Run("UnmarshalBinary_Valid", func(t *testing.T) {
		c := &stringEnumValue{key: {{ .IndexKeyName }} }
		err := c.UnmarshalBinary([]byte("{{ .TestCase.Value }}"))
		require.Nil(t, err)
		require.EqualValues(t, {{ .TestCase.Name }}().String(), c.value)
	})
	t.Run("UnmarshalText_Invalid", func(t *testing.T) {
		c := &stringEnumValue{key: {{ .IndexKeyName }} }
		err := c.UnmarshalBinary(nil)
		require.NoError(t, err)
		err = c.UnmarshalBinary([]byte("{{ .TestCase.InvalidValue }}"))
		require.NotNil(t, err)
	})
}

func TestEnumValue_GobCodec(t *testing.T) {
	t.Run("MarshalBinary_Valid", func(t *testing.T) {
		c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }

		data, err := c.GobEncode()
		require.Nil(t, err)
		assert.Len(t, data, {{ .TestCase.BinaryLen }})
	})
	t.Run("UnmarshalBinary_Valid", func(t *testing.T) {
		c := &stringEnumValue{key: {{ .IndexKeyName }} }
		err := c.GobDecode([]byte("{{ .TestCase.Value }}"))
		require.Nil(t, err)
		require.EqualValues(t, {{ .TestCase.Name }}().String(), c.value)
	})
	t.Run("UnmarshalText_Invalid", func(t *testing.T) {
		c := &stringEnumValue{key: {{ .IndexKeyName }} }
		err := c.GobDecode(nil)
		require.NoError(t, err)
		err = c.GobDecode([]byte("{{ .TestCase.InvalidValue }}"))
		require.NotNil(t, err)
	})
}

func TestEnumValue_MarshalBSON(t *testing.T) {
	t.Run("MarshalBSON_Valid", func(t *testing.T) {
		c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }

		data, err := c.MarshalBSON()
		require.Nil(t, err)
		assert.Len(t, data, {{ .TestCase.BSONLen }})
	})
}

func TestEnumValue_UnmarshalBSON(t *testing.T) {
	t.Run("UnmarshalBSON_Valid", func(t *testing.T) {
		c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }

		v1 := &fooEnumValue{EnumValue: c}
		rawData, err := bson.Marshal(v1)
		require.Nil(t, err)

		v2 := &fooEnumValue{EnumValue: c}
		err = bson.Unmarshal(rawData, &v2)
		require.Nil(t, err)
		assert.EqualValues(t, "{{ .TestCase.Value }}", v2.EnumValue.String())
	})
	t.Run("UnmarshalBSON_InvalidTable", func(t *testing.T) {
		c := stringEnumValue{ {{ .TestCase.Name }}().String(), {{ .IndexKeyName }} }
		ptr := &c
		ptr.value = "PPP"
		v1 := &fooEnumValue{EnumValue: c}
		rawData, err := bson.Marshal(v1)
		require.Nil(t, err)

		v2 := &fooEnumValue{}
		err = bson.Unmarshal(rawData, &v2)
		require.NotNil(t, err)
	})
}

`
View Source
var EnumImplTemplate = `` /* 2979-byte string literal not displayed */
View Source
var EnumImplTestTemplate = `{{- if not .OmitGeneratedNotice}}
// Code generated by go generate; DO NOT EDIT.
// This file was generated at
// {{ .Timestamp }}
// by go-enum
{{- end }}

package {{ .Package }}_test

import (
	"testing"
	"encoding/json"
	"fmt"

	"{{ .ImportPath }}"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
	"go.mongodb.org/mongo-driver/bson"
)

type foo{{ .StructName }} struct {
	TestValue {{ .Package }}.{{ .StructName }} ` + "`" + `json:"{{ .TestCase.Key }}"` + "`" + `
}

type foo{{ .StructName }}OmitEmpty struct {
	TestValue {{ .Package }}.{{ .StructName }} ` + "`" + `json:"{{ .TestCase.Key }},omitempty"` + "`" + `
}

type foo{{ .StructName }}Ptr struct {
	TestValue *{{ .Package }}.{{ .StructName }} ` + "`" + `json:"{{ .TestCase.Key }}"` + "`" + `
}

type foo{{ .StructName }}PtrOmitEmpty struct {
	TestValue *{{ .Package }}.{{ .StructName }} ` + "`" + `json:"{{ .TestCase.Key }},omitempty"` + "`" + `
}

func Test{{ .StructName }}_MarshalJSON(t *testing.T) {
	t.Run("Marshal_AnnonStructField", func(t *testing.T) {
		v := struct {
			A {{ .Package }}.{{ .StructName }} ` + "`" + `json:"{{ .TestCase.Key }}"` + "`" + `
		}{ {{ .Package }}.{{ .TestCase.Name }}()}
		data, err := json.Marshal(&v)
		require.Nil(t, err)
		assert.EqualValues(t, fmt.Sprintf(` + "`" + `{"{{ .TestCase.Key }}":"%s"}` + "`" + `, v.A.String()), string(data))
	})
	t.Run("Marshal_StructField", func(t *testing.T) {
		v := foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .StructName }}{}}
		data, err := json.Marshal(v)
		require.Nil(t, err)
		assert.EqualValues(t, fmt.Sprintf(` + "`" + `{"{{ .TestCase.Key }}":"%s"}` + "`" + `, v.TestValue.String()), string(data))
	})
	t.Run("Marshal_OmitEmptyStruct", func(t *testing.T) {
		// encoding/json ignores omitempty on struct zero values
		// https://github.com/golang/go/issues/11939
		v := foo{{ .StructName }}OmitEmpty{}
		data, err := json.Marshal(v)
		require.Nil(t, err)
		assert.EqualValues(t, ` + "`" + `{"{{ .TestCase.Key }}":""}` + "`" + `, string(data))
	})
	t.Run("Marshal_StructFieldEmptyPtr", func(t *testing.T) {
		vPtr := foo{{ .StructName }}Ptr{TestValue: &{{ .Package }}.{{ .StructName }}{}}
		data, err := json.Marshal(vPtr)
		require.Nil(t, err)
		assert.EqualValues(t, ` + "`" + `{"{{ .TestCase.Key }}":""}` + "`" + `, string(data))
	})
	t.Run("Marshal_StructFieldPtr", func(t *testing.T) {
		dt := {{ .Package }}.{{ .TestCase.Name }}
		val := dt() 
		vPtr := foo{{ .StructName }}Ptr{TestValue: &val}
		data, err := json.Marshal(vPtr)
		require.Nil(t, err)
		assert.EqualValues(t, fmt.Sprintf(` + "`" + `{"{{ .TestCase.Key }}":"%s"}` + "`" + `, vPtr.TestValue.String()), string(data))
	})
	t.Run("Marshal_StructFieldNilPtr", func(t *testing.T) {
		vPtr := foo{{ .StructName }}Ptr{}
		data, err := json.Marshal(vPtr)
		require.Nil(t, err)
		assert.EqualValues(t, ` + "`" + `{"{{ .TestCase.Key }}":null}` + "`" + `, string(data))
	})
	t.Run("Marshal_OmitEmptyStructPtr", func(t *testing.T) {
		vPtr := foo{{ .StructName }}PtrOmitEmpty{}
		data, err := json.Marshal(vPtr)
		require.Nil(t, err)
		assert.EqualValues(t, ` + "`" + `{}` + "`" + `, string(data))
	})
}

func Test{{ .StructName }}_UnmarshalJSON(t *testing.T) {
	t.Run("Unmarshal_InvalidValue", func(t *testing.T) {
		data := ` + "`" + `{"{{ .TestCase.Key }}":"{{ .TestCase.InvalidValue }}"}` + "`" + `
		rawData := []byte(data)

		v := struct {
			A {{ .Package }}.{{ .StructName }} ` + "`" + `json:"{{ .TestCase.Key }}"` + "`" + `
		}{ {{ .Package }}.{{ .TestCase.Name }}()}
		err := json.Unmarshal(rawData, &v)
		require.NotNil(t, err)
	})
	t.Run("Unmarshal_AnnonStructField", func(t *testing.T) {
		data := ` + "`" + `{"{{ .TestCase.Key }}":"{{ .TestCase.Value }}"}` + "`" + `
		rawData := []byte(data)

		v := struct {
			A {{ .Package }}.{{ .StructName }} ` + "`" + `json:"{{ .TestCase.Key }}"` + "`" + `
		}{ {{ .Package }}.{{ .TestCase.Name }}() }
		err := json.Unmarshal(rawData, &v)
		require.Nil(t, err)
		assert.EqualValues(t, "{{ .TestCase.Value }}", v.A.String())
	})
	t.Run("Unmarshal_StructField", func(t *testing.T) {
		data := ` + "`" + `{"{{ .TestCase.Key }}":"{{ .TestCase.Value }}"}` + "`" + `
		rawData := []byte(data)

		v := foo{{ .StructName }}{}
		err := json.Unmarshal(rawData, &v)
		require.Nil(t, err)
		assert.EqualValues(t, "{{ .TestCase.Value }}", v.TestValue.String())
	})
	t.Run("Unmarshal_OmitEmptyStruct", func(t *testing.T) {
		data := ` + "`" + `{"{{ .TestCase.Key }}":null}` + "`" + `
		rawData := []byte(data)

		v := foo{{ .StructName }}OmitEmpty{}
		err := json.Unmarshal(rawData, &v)
		require.NoError(t, err)
	})
	t.Run("Unmarshal_StructFieldPtr", func(t *testing.T) {
		data := ` + "`" + `{"{{ .TestCase.Key }}":"{{ .TestCase.Value }}"}` + "`" + `
		rawData := []byte(data)

		vPtr := foo{{ .StructName }}Ptr{}
		err := json.Unmarshal(rawData, &vPtr)
		require.Nil(t, err)
		assert.EqualValues(t, "{{ .TestCase.Value }}", vPtr.TestValue.String())
	})
	t.Run("Unmarshal_StructFieldNilPtr", func(t *testing.T) {
		data := ` + "`" + `{"{{ .TestCase.Key }}":null}` + "`" + `
		rawData := []byte(data)

		vPtr := foo{{ .StructName }}Ptr{}
		err := json.Unmarshal(rawData, &vPtr)
		require.Nil(t, err)
		assert.Nil(t, vPtr.TestValue)
	})
}

func Test{{ .StructName }}_EmptyValues(t *testing.T) {
	t.Run("StructField", func(t *testing.T) {
		v := foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .StructName }}{}}
		data, err := json.Marshal(v)
		require.NoError(t, err)
		assert.EqualValues(t, fmt.Sprintf(` + "`" + `{"{{ .TestCase.Key }}":"%s"}` + "`" + `, v.TestValue.String()), string(data))

		v2 := foo{{ .StructName }}{}
		err = json.Unmarshal(data, &v2)
		require.NoError(t, err)
		require.True(t, v2.TestValue.IsEmpty())

		v3 := foo{{ .StructName }}{}
		err = json.Unmarshal(data, &v3)
		require.NoError(t, err)
		require.True(t, v3.TestValue.IsEmpty())
	})
	t.Run("PtrField", func(t *testing.T) {
		v := foo{{ .StructName }}Ptr{TestValue: nil}
		data, err := json.Marshal(v)
		require.NoError(t, err)
		assert.EqualValues(t, fmt.Sprintf(` + "`" + `{"{{ .TestCase.Key }}":%s}` + "`" + `, "null"), string(data))

		v2 := foo{{ .StructName }}{}
		err = json.Unmarshal(data, &v2)
		require.NoError(t, err)
		require.True(t, v2.TestValue.IsEmpty())

		v3 := foo{{ .StructName }}{}
		err = json.Unmarshal(data, &v3)
		require.NoError(t, err)
		require.True(t, v3.TestValue.IsEmpty())
	})
}

func Test{{ .StructName }}_UndefinedValue(t *testing.T) {
	require.True(t, {{ .Package }}.{{ .StructName }}{}.IsUndefined())
}

func Test{{ .StructName }}_ForEach(t *testing.T) {
	j := 0
	{{ .Package }}.Enum{{ .StructName }}.ForEach(func(i int, enumValue {{ .Package }}.{{ .StructName }}) {
		j++
		value, found := {{ .Package }}.{{ .StructName }}FromValue(enumValue.String(), false)
		assert.True(t, found)
		assert.True(t, value == enumValue)

		assert.True(t, enumValue.Equals(value.String()))
		assert.True(t, enumValue.EqualsIgnoreCase(value.String()))
		assert.True(t, value.Equals(enumValue.String()))
		assert.True(t, value.EqualsIgnoreCase(enumValue.String()))
	})
	assert.EqualValues(t, {{ .Package }}.Enum{{ .StructName }}.Len(), j)
}

func Test{{ .StructName }}_TextCodec(t *testing.T) {
	t.Run("MarshalText_Valid", func(t *testing.T) {
		c :=foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }

		data, err := c.TestValue.MarshalText()
		require.Nil(t, err)
		require.True(t, len(data) > 0)
	})
	t.Run("UnmarshalText_Valid", func(t *testing.T) {
		c := &foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }
		err := c.TestValue.UnmarshalText([]byte("{{ .TestCase.Value }}"))
		require.Nil(t, err)
		require.EqualValues(t, {{ .Package }}.{{ .TestCase.Name }}().String(), c.TestValue.String())
	})
	t.Run("UnmarshalText_Invalid", func(t *testing.T) {
		c := &foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }
		err := c.TestValue.UnmarshalText([]byte(""))
		require.NoError(t, err)
		err = c.TestValue.UnmarshalText([]byte("{{ .TestCase.InvalidValue }}"))
		require.NotNil(t, err)
	})
}

func Test{{ .StructName }}_Stringer(t *testing.T) {
	c :=foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }
	require.EqualValues(t, "{{ .TestCase.Value }}", c.TestValue.String())
}

func Test{{ .StructName }}_DriverValues(t *testing.T) {
	t.Run("Scan_String", func(t *testing.T) {
		c := &foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }
		require.Nil(t, c.TestValue.Scan({{ .Package }}.{{ .TestCase.Name }}().String()))
		require.EqualValues(t, {{ .Package }}.{{ .TestCase.Name }}().String(), c.TestValue.String())
	})
	t.Run("Scan_Bytes", func(t *testing.T) {
		c := &foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }
		require.Nil(t, c.TestValue.Scan([]byte({{ .Package }}.{{ .TestCase.Name }}().String())))
		require.EqualValues(t, {{ .Package }}.{{ .TestCase.Name }}().String(), c.TestValue.String())
	})
	t.Run("Scan_Invalid", func(t *testing.T) {
		c := &foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }
		require.NotNil(t, c.TestValue.Scan(1))
	})
	t.Run("Scan_Invalid", func(t *testing.T) {
		c :=foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }

		v, err := c.TestValue.Value()
		assert.Nil(t, err)
		require.EqualValues(t, {{ .Package }}.{{ .TestCase.Name }}().String(), fmt.Sprintf("%v", v))
	})
}

func Test{{ .StructName }}_BinaryCodec(t *testing.T) {
	t.Run("MarshalBinary_Valid", func(t *testing.T) {
		c :=foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }

		data, err := c.TestValue.MarshalBinary()
		require.Nil(t, err)
		assert.Len(t, data, {{ .TestCase.BinaryLen }})
	})
	t.Run("UnmarshalBinary_Valid", func(t *testing.T) {
		c := &foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }
		err := c.TestValue.UnmarshalBinary([]byte("{{ .TestCase.Value }}"))
		require.Nil(t, err)
		require.EqualValues(t, {{ .Package }}.{{ .TestCase.Name }}().String(), c.TestValue.String())
	})
	t.Run("UnmarshalText_Invalid", func(t *testing.T) {
		c := &foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }
		err := c.TestValue.UnmarshalBinary(nil)
		require.NoError(t, err)
		err = c.TestValue.UnmarshalBinary([]byte("{{ .TestCase.InvalidValue }}"))
		require.NotNil(t, err)
	})
}

func Test{{ .StructName }}_GobCodec(t *testing.T) {
	t.Run("MarshalBinary_Valid", func(t *testing.T) {
		c :=foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }

		data, err := c.TestValue.GobEncode()
		require.Nil(t, err)
		assert.Len(t, data, {{ .TestCase.BinaryLen }})
	})
	t.Run("UnmarshalBinary_Valid", func(t *testing.T) {
		c := &foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }
		err := c.TestValue.GobDecode([]byte("{{ .TestCase.Value }}"))
		require.Nil(t, err)
		require.EqualValues(t, {{ .Package }}.{{ .TestCase.Name }}().String(), c.TestValue.String())
	})
	t.Run("UnmarshalText_Invalid", func(t *testing.T) {
		c := &foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }
		err := c.TestValue.GobDecode(nil)
		require.NoError(t, err)
		err = c.TestValue.GobDecode([]byte("{{ .TestCase.InvalidValue }}"))
		require.NotNil(t, err)
	})
}

func Test{{ .StructName }}_MarshalBSON(t *testing.T) {
	t.Run("MarshalBSON_Valid", func(t *testing.T) {
		c :=foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }

		data, err := c.TestValue.MarshalBSON()
		require.Nil(t, err)
		assert.Len(t, data, {{ .TestCase.BSONLen }})
	})
}

func Test{{ .StructName }}_UnmarshalBSON(t *testing.T) {
	t.Run("UnmarshalBSON_Valid", func(t *testing.T) {
		c :=foo{{ .StructName }}{TestValue: {{ .Package }}.{{ .TestCase.Name }}() }

		v1 := &c
		rawData, err := bson.Marshal(v1)
		require.Nil(t, err)

		v2 := &foo{{ .StructName }}{}
		err = bson.Unmarshal(rawData, &v2)
		require.Nil(t, err)
		assert.EqualValues(t, "{{ .TestCase.Value }}", v2.TestValue.String())
	})
}

`
View Source
var EnumTemplate = `` /* 1872-byte string literal not displayed */
View Source
var EnumTestTemplate = `` /* 1616-byte string literal not displayed */

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL