| 39 | } |
| 40 | |
| 41 | func TestArrayDynSerializerRoundTrip(t *testing.T) { |
| 42 | f := NewFory(WithXlang(false), WithCompatible(false)) |
| 43 | |
| 44 | t.Run("array of interfaces with strings", func(t *testing.T) { |
| 45 | arr := [3]any{"hello", "world", "test"} |
| 46 | |
| 47 | bytes, err := f.Marshal(arr) |
| 48 | require.NoError(t, err) |
| 49 | |
| 50 | var result any |
| 51 | err = f.Unmarshal(bytes, &result) |
| 52 | require.NoError(t, err) |
| 53 | |
| 54 | // Result will be a slice, not an array |
| 55 | resultSlice, ok := result.([]any) |
| 56 | require.True(t, ok) |
| 57 | require.Equal(t, 3, len(resultSlice)) |
| 58 | require.Equal(t, arr[0], resultSlice[0]) |
| 59 | require.Equal(t, arr[1], resultSlice[1]) |
| 60 | require.Equal(t, arr[2], resultSlice[2]) |
| 61 | }) |
| 62 | |
| 63 | t.Run("array of interfaces with nil", func(t *testing.T) { |
| 64 | arr := [3]any{"hello", nil, "world"} |
| 65 | |
| 66 | bytes, err := f.Marshal(arr) |
| 67 | require.NoError(t, err) |
| 68 | |
| 69 | var result any |
| 70 | err = f.Unmarshal(bytes, &result) |
| 71 | require.NoError(t, err) |
| 72 | |
| 73 | resultSlice, ok := result.([]any) |
| 74 | require.True(t, ok) |
| 75 | require.Equal(t, 3, len(resultSlice)) |
| 76 | require.Equal(t, arr[0], resultSlice[0]) |
| 77 | require.Nil(t, resultSlice[1]) |
| 78 | require.Equal(t, arr[2], resultSlice[2]) |
| 79 | }) |
| 80 | |
| 81 | t.Run("array of interfaces with mixed types", func(t *testing.T) { |
| 82 | arr := [4]any{"string", int32(42), true, float64(3.14)} |
| 83 | |
| 84 | bytes, err := f.Marshal(arr) |
| 85 | require.NoError(t, err) |
| 86 | |
| 87 | var result any |
| 88 | err = f.Unmarshal(bytes, &result) |
| 89 | require.NoError(t, err) |
| 90 | |
| 91 | resultSlice, ok := result.([]any) |
| 92 | require.True(t, ok) |
| 93 | require.Equal(t, 4, len(resultSlice)) |
| 94 | require.Equal(t, arr[0], resultSlice[0]) |
| 95 | require.Equal(t, arr[1], resultSlice[1]) |
| 96 | require.Equal(t, arr[2], resultSlice[2]) |
| 97 | require.Equal(t, arr[3], resultSlice[3]) |
| 98 | }) |