* wip: parse coins * review changes * update tests * update tests * Use ValueOfString * fix tests * fix coin tests * FIXES * Add empty coins test case * fix tests * fix tests * review changes * fix tests * fix tests * revert format.go * revert `format.go` * review changes * fix tests & review changes * review changes * review changes * review changes * review changes * review changes * review changes * proposal shorter code * review changes * conflicts * review changes * wip * ParseRepeated for coins * Revert listpb * remove duplicate case * revert some more Co-authored-by: Amaury M <1293565+amaurym@users.noreply.github.com> Co-authored-by: Marko <marbar3778@yahoo.com>
61 lines
1.9 KiB
Go
61 lines
1.9 KiB
Go
package valuerenderer_test
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"google.golang.org/protobuf/reflect/protoreflect"
|
|
|
|
"cosmossdk.io/tx/textual/internal/testpb"
|
|
"cosmossdk.io/tx/textual/valuerenderer"
|
|
)
|
|
|
|
func TestDispatcher(t *testing.T) {
|
|
testcases := []struct {
|
|
name string
|
|
expErr bool
|
|
expValueRenderer valuerenderer.ValueRenderer
|
|
}{
|
|
{"UINT32", false, valuerenderer.NewIntValueRenderer(fieldDescriptorFromName("UINT32"))},
|
|
{"UINT64", false, valuerenderer.NewIntValueRenderer(fieldDescriptorFromName("UINT64"))},
|
|
{"SDKINT", false, valuerenderer.NewIntValueRenderer(fieldDescriptorFromName("SDKINT"))},
|
|
{"SDKDEC", false, valuerenderer.NewDecValueRenderer()},
|
|
{"BYTES", false, valuerenderer.NewBytesValueRenderer()},
|
|
{"TIMESTAMP", false, valuerenderer.NewTimestampValueRenderer()},
|
|
{"DURATION", false, valuerenderer.NewDurationValueRenderer()},
|
|
{"COIN", false, valuerenderer.NewCoinsValueRenderer(nil)},
|
|
{"COINS", false, valuerenderer.NewCoinsValueRenderer(nil)},
|
|
{"ENUM", false, valuerenderer.NewEnumValueRenderer(fieldDescriptorFromName("ENUM"))},
|
|
{"ANY", false, valuerenderer.NewAnyValueRenderer(nil)},
|
|
{"FLOAT", true, nil},
|
|
}
|
|
|
|
for _, tc := range testcases {
|
|
tc := tc
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
textual := valuerenderer.NewTextual(nil)
|
|
rend, err := textual.GetFieldValueRenderer(fieldDescriptorFromName(tc.name))
|
|
|
|
if tc.expErr {
|
|
require.Error(t, err)
|
|
} else {
|
|
require.NoError(t, err)
|
|
require.IsType(t, tc.expValueRenderer, rend)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// fieldDescriptorFromName is like GetADR050ValueRenderer, but taking a Go type
|
|
// as input instead of a protoreflect.FieldDescriptor.
|
|
func fieldDescriptorFromName(name string) protoreflect.FieldDescriptor {
|
|
a := (&testpb.A{}).ProtoReflect().Descriptor().Fields()
|
|
fd := a.ByName(protoreflect.Name(name))
|
|
if fd == nil {
|
|
panic(fmt.Errorf("no field descriptor for %s", name))
|
|
}
|
|
|
|
return fd
|
|
}
|