cosmos-sdk/tx/textual/valuerenderer/valuerenderer_test.go
atheeshp 9d12a5fce3
feat: implement parse method for Int,Dec,Coin (#13696)
* 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>
2022-12-02 14:26:25 +01:00

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
}