ee93440ac1
Added ValueRoundTripTest to pgxtest Removed pgtype/testutil pgtype tests now run with all (applicable) query modes. This gives better coverage than before and revealed several bugs which are also fixed in this commit.
93 lines
3.9 KiB
Plaintext
93 lines
3.9 KiB
Plaintext
package pgtype_test
|
|
|
|
import (
|
|
"math"
|
|
"testing"
|
|
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
<% [2, 4, 8].each do |pg_byte_size| %>
|
|
<% pg_bit_size = pg_byte_size * 8 %>
|
|
func TestInt<%= pg_byte_size %>Codec(t *testing.T) {
|
|
pgxtest.RunValueRoundTripTests(context.Background(), t, defaultConnTestRunner, nil, "int<%= pg_byte_size %>", []pgxtest.ValueRoundTripTest{
|
|
{int8(1), new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(1))},
|
|
{int16(1), new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(1))},
|
|
{int32(1), new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(1))},
|
|
{int64(1), new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(1))},
|
|
{uint8(1), new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(1))},
|
|
{uint16(1), new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(1))},
|
|
{uint32(1), new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(1))},
|
|
{uint64(1), new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(1))},
|
|
{int(1), new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(1))},
|
|
{uint(1), new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(1))},
|
|
{pgtype.Int<%= pg_byte_size %>{Int: 1, Valid: true}, new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(1))},
|
|
{int32(-1), new(pgtype.Int<%= pg_byte_size %>), isExpectedEq(pgtype.Int<%= pg_byte_size %>{Int: -1, Valid: true})},
|
|
{1, new(int8), isExpectedEq(int8(1))},
|
|
{1, new(int16), isExpectedEq(int16(1))},
|
|
{1, new(int32), isExpectedEq(int32(1))},
|
|
{1, new(int64), isExpectedEq(int64(1))},
|
|
{1, new(uint8), isExpectedEq(uint8(1))},
|
|
{1, new(uint16), isExpectedEq(uint16(1))},
|
|
{1, new(uint32), isExpectedEq(uint32(1))},
|
|
{1, new(uint64), isExpectedEq(uint64(1))},
|
|
{1, new(int), isExpectedEq(int(1))},
|
|
{1, new(uint), isExpectedEq(uint(1))},
|
|
{-1, new(int8), isExpectedEq(int8(-1))},
|
|
{-1, new(int16), isExpectedEq(int16(-1))},
|
|
{-1, new(int32), isExpectedEq(int32(-1))},
|
|
{-1, new(int64), isExpectedEq(int64(-1))},
|
|
{-1, new(int), isExpectedEq(int(-1))},
|
|
{math.MinInt<%= pg_bit_size %>, new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(math.MinInt<%= pg_bit_size %>))},
|
|
{-1, new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(-1))},
|
|
{0, new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(0))},
|
|
{1, new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(1))},
|
|
{math.MaxInt<%= pg_bit_size %>, new(int<%= pg_bit_size %>), isExpectedEq(int<%= pg_bit_size %>(math.MaxInt<%= pg_bit_size %>))},
|
|
{1, new(pgtype.Int<%= pg_byte_size %>), isExpectedEq(pgtype.Int<%= pg_byte_size %>{Int: 1, Valid: true})},
|
|
{pgtype.Int<%= pg_byte_size %>{}, new(pgtype.Int<%= pg_byte_size %>), isExpectedEq(pgtype.Int<%= pg_byte_size %>{})},
|
|
{nil, new(*int<%= pg_bit_size %>), isExpectedEq((*int<%= pg_bit_size %>)(nil))},
|
|
})
|
|
}
|
|
|
|
func TestInt<%= pg_byte_size %>MarshalJSON(t *testing.T) {
|
|
successfulTests := []struct {
|
|
source pgtype.Int<%= pg_byte_size %>
|
|
result string
|
|
}{
|
|
{source: pgtype.Int<%= pg_byte_size %>{Int: 0}, result: "null"},
|
|
{source: pgtype.Int<%= pg_byte_size %>{Int: 1, Valid: true}, result: "1"},
|
|
}
|
|
for i, tt := range successfulTests {
|
|
r, err := tt.source.MarshalJSON()
|
|
if err != nil {
|
|
t.Errorf("%d: %v", i, err)
|
|
}
|
|
|
|
if string(r) != tt.result {
|
|
t.Errorf("%d: expected %v to convert to %v, but it was %v", i, tt.source, tt.result, string(r))
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestInt<%= pg_byte_size %>UnmarshalJSON(t *testing.T) {
|
|
successfulTests := []struct {
|
|
source string
|
|
result pgtype.Int<%= pg_byte_size %>
|
|
}{
|
|
{source: "null", result: pgtype.Int<%= pg_byte_size %>{Int: 0}},
|
|
{source: "1", result: pgtype.Int<%= pg_byte_size %>{Int: 1, Valid: true}},
|
|
}
|
|
for i, tt := range successfulTests {
|
|
var r pgtype.Int<%= pg_byte_size %>
|
|
err := r.UnmarshalJSON([]byte(tt.source))
|
|
if err != nil {
|
|
t.Errorf("%d: %v", i, err)
|
|
}
|
|
|
|
if r != tt.result {
|
|
t.Errorf("%d: expected %v to convert to %v, but it was %v", i, tt.source, tt.result, r)
|
|
}
|
|
}
|
|
}
|
|
<% end %>
|