| 40 | ) |
| 41 | |
| 42 | func TestEncodeValue(t *testing.T) { |
| 43 | avn := func(s string) dyn2Types.AttributeValue { return &dyn2Types.AttributeValueMemberN{Value: s} } |
| 44 | avl := func(avs ...dyn2Types.AttributeValue) dyn2Types.AttributeValue { |
| 45 | return &dyn2Types.AttributeValueMemberL{Value: avs} |
| 46 | } |
| 47 | |
| 48 | var seven int32 = 7 |
| 49 | var nullptr *int |
| 50 | |
| 51 | for _, test := range []struct { |
| 52 | in any |
| 53 | want dyn2Types.AttributeValue |
| 54 | }{ |
| 55 | // null |
| 56 | {nil, nullValue}, |
| 57 | {nullptr, nullValue}, |
| 58 | // number |
| 59 | {0, avn("0")}, |
| 60 | {uint64(999), avn("999")}, |
| 61 | {3.5, avn("3.5")}, |
| 62 | {seven, avn("7")}, |
| 63 | {&seven, avn("7")}, |
| 64 | // string |
| 65 | {"", nullValue}, |
| 66 | {"x", &dyn2Types.AttributeValueMemberS{Value: "x"}}, |
| 67 | {"abc123", &dyn2Types.AttributeValueMemberS{Value: "abc123"}}, |
| 68 | {"abc 123", &dyn2Types.AttributeValueMemberS{Value: "abc 123"}}, |
| 69 | // bool |
| 70 | {true, &dyn2Types.AttributeValueMemberBOOL{Value: true}}, |
| 71 | {false, &dyn2Types.AttributeValueMemberBOOL{Value: false}}, |
| 72 | // list |
| 73 | {[]int(nil), nullValue}, |
| 74 | {[]int{}, &dyn2Types.AttributeValueMemberL{Value: []dyn2Types.AttributeValue{}}}, |
| 75 | {[]int{1, 2}, avl(avn("1"), avn("2"))}, |
| 76 | {[...]int{1, 2}, avl(avn("1"), avn("2"))}, |
| 77 | {[]any{nil, false}, avl(nullValue, &dyn2Types.AttributeValueMemberBOOL{Value: false})}, |
| 78 | // map |
| 79 | {map[string]int(nil), nullValue}, |
| 80 | {map[string]int{}, &dyn2Types.AttributeValueMemberM{Value: map[string]dyn2Types.AttributeValue{}}}, |
| 81 | { |
| 82 | map[string]int{"a": 1, "b": 2}, |
| 83 | &dyn2Types.AttributeValueMemberM{Value: map[string]dyn2Types.AttributeValue{ |
| 84 | "a": avn("1"), |
| 85 | "b": avn("2"), |
| 86 | }}, |
| 87 | }, |
| 88 | } { |
| 89 | var e encoder |
| 90 | if err := driver.Encode(reflect.ValueOf(test.in), &e); err != nil { |
| 91 | t.Fatal(err) |
| 92 | } |
| 93 | got := e.av |
| 94 | if !cmp.Equal(got, test.want, compareIgnoreAttributeUnexported) { |
| 95 | t.Errorf("%#v: got %#v, want %#v", test.in, got, test.want) |
| 96 | } |
| 97 | } |
| 98 | } |
| 99 | |