cosmos-sdk/depinject/internal/codegen/value_test.go
Aaron Craelius 954a6a153f
feat(depinject): codegen part 2 types and values (#12616)
## Description

Ref #12556 

This PR continues with basic codegen infrastructure for depinject, this time adding the ability to generate `ast.Expr`'s for `reflect.Type` and `reflect.Value`.



---

### Author Checklist

*All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.*

I have...

- [ ] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title
- [ ] added `!` to the type prefix if API or client breaking change
- [ ] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#pr-targeting))
- [ ] provided a link to the relevant issue or specification
- [ ] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/main/docs/building-modules)
- [ ] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#testing)
- [ ] added a changelog entry to `CHANGELOG.md`
- [ ] included comments for [documenting Go code](https://blog.golang.org/godoc)
- [ ] updated the relevant documentation or specification
- [ ] reviewed "Files changed" and left comments if necessary
- [ ] confirmed all CI checks have passed

### Reviewers Checklist

*All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.*

I have...

- [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title
- [ ] confirmed `!` in the type prefix if API or client breaking change
- [ ] confirmed all author checklist items have been addressed 
- [ ] reviewed state machine logic
- [ ] reviewed API design and naming
- [ ] reviewed documentation is accurate
- [ ] reviewed tests and test coverage
- [ ] manually tested (if applicable)
2022-08-01 13:57:37 +00:00

71 lines
1.7 KiB
Go

package codegen
import (
"go/ast"
"reflect"
"testing"
"gotest.tools/v3/assert"
)
func TestValueExpr(t *testing.T) {
// bool
expectValueExpr(t, true, `true`)
expectValueExpr(t, false, `false`)
// uints
expectValueExpr(t, uint(0), `0`)
expectValueExpr(t, uint8(1), `1`)
expectValueExpr(t, uint16(2), `2`)
expectValueExpr(t, uint32(3), `3`)
expectValueExpr(t, uint64(12345678), `12345678`)
// ints
expectValueExpr(t, 0, `0`)
expectValueExpr(t, int8(-1), `-1`)
expectValueExpr(t, int16(-2), `-2`)
expectValueExpr(t, int32(-3), `-3`)
expectValueExpr(t, int64(-12345678), `-12345678`)
// floats
expectValueExpr(t, float32(0.0), `0e+00`)
expectValueExpr(t, float64(1.32e-9), `1.32e-09`)
// complex
expectValueExpr(t, complex64(1+2i), `(1e+00+2e+00i)`)
expectValueExpr(t, complex128(1.32e-9+-3.03i), `(1.32e-09-3.03e+00i)`)
// array
expectValueExpr(t, [3]uint32{1, 4, 9}, `[3]uint32{1, 4, 9}`)
// slice
expectValueExpr(t, []uint32{1, 4, 9}, `[]uint32{1, 4, 9}`)
// map
expectValueExpr(t, map[string]int{"a": 1}, `map[string]int{"a": 1}`)
// struct
expectValueExpr(t, AStruct{Foo: 2}, `codegen.AStruct{Foo: 2}`)
expectValueExpr(t, AStruct{}, `codegen.AStruct{}`) // empty default fields
// struct pointer
expectValueExpr(t, &AStruct{Foo: 2}, `&codegen.AStruct{Foo: 2}`)
var nilStruct *AStruct
expectValueExpr(t, nilStruct, `nil`)
// struct wrapper
expectValueExpr(t, &AStructWrapper{Foo: 2}, `&codegen.AStructWrapper{Foo: 2}`)
// string
expectValueExpr(t, "abc", `"abc"`)
}
func expectValueExpr(t *testing.T, value interface{}, expected string) {
t.Helper()
g, err := NewFileGen(&ast.File{}, "")
assert.NilError(t, err)
e, err := g.ValueExpr(reflect.ValueOf(value))
assert.NilError(t, err)
expectExpr(t, e, expected)
}