...

Source file src/github.com/jackc/pgtype/point_test.go

Documentation: github.com/jackc/pgtype

     1  package pgtype_test
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/jackc/pgtype"
     8  	"github.com/jackc/pgtype/testutil"
     9  )
    10  
    11  func TestPointTranscode(t *testing.T) {
    12  	testutil.TestSuccessfulTranscode(t, "point", []interface{}{
    13  		&pgtype.Point{P: pgtype.Vec2{1.234, 5.6789012345}, Status: pgtype.Present},
    14  		&pgtype.Point{P: pgtype.Vec2{-1.234, -5.6789}, Status: pgtype.Present},
    15  		&pgtype.Point{Status: pgtype.Null},
    16  	})
    17  }
    18  
    19  func TestPoint_Set(t *testing.T) {
    20  	tests := []struct {
    21  		name    string
    22  		arg     interface{}
    23  		status  pgtype.Status
    24  		wantErr bool
    25  	}{
    26  		{
    27  			name:    "first",
    28  			arg:     "(12312.123123,123123.123123)",
    29  			status:  pgtype.Present,
    30  			wantErr: false,
    31  		},
    32  		{
    33  			name:    "second",
    34  			arg:     "(1231s2.123123,123123.123123)",
    35  			status:  pgtype.Undefined,
    36  			wantErr: true,
    37  		},
    38  		{
    39  			name:    "third",
    40  			arg:     []byte("(122.123123,123.123123)"),
    41  			status:  pgtype.Present,
    42  			wantErr: false,
    43  		},
    44  		{
    45  			name:    "third",
    46  			arg:     nil,
    47  			status:  pgtype.Null,
    48  			wantErr: false,
    49  		},
    50  	}
    51  	for _, tt := range tests {
    52  		t.Run(tt.name, func(t *testing.T) {
    53  			dst := &pgtype.Point{}
    54  			if err := dst.Set(tt.arg); (err != nil) != tt.wantErr {
    55  				t.Errorf("Set() error = %v, wantErr %v", err, tt.wantErr)
    56  			}
    57  			if dst.Status != tt.status {
    58  				t.Errorf("Expected status: %v; got: %v", tt.status, dst.Status)
    59  			}
    60  		})
    61  	}
    62  }
    63  
    64  func TestPoint_MarshalJSON(t *testing.T) {
    65  	tests := []struct {
    66  		name    string
    67  		point   pgtype.Point
    68  		want    []byte
    69  		wantErr bool
    70  	}{
    71  		{
    72  			name: "first",
    73  			point: pgtype.Point{
    74  				P:      pgtype.Vec2{},
    75  				Status: pgtype.Undefined,
    76  			},
    77  			want:    nil,
    78  			wantErr: true,
    79  		},
    80  		{
    81  			name: "second",
    82  			point: pgtype.Point{
    83  				P:      pgtype.Vec2{X: 12.245, Y: 432.12},
    84  				Status: pgtype.Present,
    85  			},
    86  			want:    []byte(`"(12.245,432.12)"`),
    87  			wantErr: false,
    88  		},
    89  		{
    90  			name: "third",
    91  			point: pgtype.Point{
    92  				P:      pgtype.Vec2{},
    93  				Status: pgtype.Null,
    94  			},
    95  			want:    []byte("null"),
    96  			wantErr: false,
    97  		},
    98  	}
    99  	for _, tt := range tests {
   100  		t.Run(tt.name, func(t *testing.T) {
   101  			got, err := tt.point.MarshalJSON()
   102  			if (err != nil) != tt.wantErr {
   103  				t.Errorf("MarshalJSON() error = %v, wantErr %v", err, tt.wantErr)
   104  				return
   105  			}
   106  			if !reflect.DeepEqual(got, tt.want) {
   107  				t.Errorf("MarshalJSON() got = %v, want %v", got, tt.want)
   108  			}
   109  		})
   110  	}
   111  }
   112  
   113  func TestPoint_UnmarshalJSON(t *testing.T) {
   114  	tests := []struct {
   115  		name    string
   116  		status  pgtype.Status
   117  		arg     []byte
   118  		wantErr bool
   119  	}{
   120  		{
   121  			name:    "first",
   122  			status:  pgtype.Present,
   123  			arg:     []byte(`"(123.123,54.12)"`),
   124  			wantErr: false,
   125  		},
   126  		{
   127  			name:    "second",
   128  			status:  pgtype.Undefined,
   129  			arg:     []byte(`"(123.123,54.1sad2)"`),
   130  			wantErr: true,
   131  		},
   132  		{
   133  			name:    "third",
   134  			status:  pgtype.Null,
   135  			arg:     []byte("null"),
   136  			wantErr: false,
   137  		},
   138  	}
   139  	for _, tt := range tests {
   140  		t.Run(tt.name, func(t *testing.T) {
   141  			dst := &pgtype.Point{}
   142  			if err := dst.UnmarshalJSON(tt.arg); (err != nil) != tt.wantErr {
   143  				t.Errorf("UnmarshalJSON() error = %v, wantErr %v", err, tt.wantErr)
   144  			}
   145  			if dst.Status != tt.status {
   146  				t.Errorf("Status mismatch: %v != %v", dst.Status, tt.status)
   147  			}
   148  		})
   149  	}
   150  }
   151  

View as plain text