...
1 package encoding
2
3 import (
4 "testing"
5
6 "github.com/stretchr/testify/assert"
7 "github.com/stretchr/testify/require"
8 )
9
10 type decoder struct {
11 v map[string]any
12 }
13
14 func (d decoder) Decode(_ []byte, v map[string]any) error {
15 for key, value := range d.v {
16 v[key] = value
17 }
18
19 return nil
20 }
21
22 func TestDecoderRegistry_RegisterDecoder(t *testing.T) {
23 t.Run("OK", func(t *testing.T) {
24 registry := NewDecoderRegistry()
25
26 err := registry.RegisterDecoder("myformat", decoder{})
27 require.NoError(t, err)
28 })
29
30 t.Run("AlreadyRegistered", func(t *testing.T) {
31 registry := NewDecoderRegistry()
32
33 err := registry.RegisterDecoder("myformat", decoder{})
34 require.NoError(t, err)
35
36 err = registry.RegisterDecoder("myformat", decoder{})
37 assert.ErrorIs(t, err, ErrDecoderFormatAlreadyRegistered)
38 })
39 }
40
41 func TestDecoderRegistry_Decode(t *testing.T) {
42 t.Run("OK", func(t *testing.T) {
43 registry := NewDecoderRegistry()
44 decoder := decoder{
45 v: map[string]any{
46 "key": "value",
47 },
48 }
49
50 err := registry.RegisterDecoder("myformat", decoder)
51 require.NoError(t, err)
52
53 v := map[string]any{}
54
55 err = registry.Decode("myformat", []byte("key: value"), v)
56 require.NoError(t, err)
57
58 assert.Equal(t, decoder.v, v)
59 })
60
61 t.Run("DecoderNotFound", func(t *testing.T) {
62 registry := NewDecoderRegistry()
63
64 v := map[string]any{}
65
66 err := registry.Decode("myformat", nil, v)
67 assert.ErrorIs(t, err, ErrDecoderNotFound)
68 })
69 }
70
View as plain text