github.com/jackc/pgx/v5@v5.5.5/pgtype/array_test.go (about) 1 package pgtype 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 func TestParseUntypedTextArray(t *testing.T) { 9 tests := []struct { 10 source string 11 result untypedTextArray 12 }{ 13 { 14 source: "{}", 15 result: untypedTextArray{ 16 Elements: []string{}, 17 Quoted: []bool{}, 18 Dimensions: []ArrayDimension{}, 19 }, 20 }, 21 { 22 source: "{1}", 23 result: untypedTextArray{ 24 Elements: []string{"1"}, 25 Quoted: []bool{false}, 26 Dimensions: []ArrayDimension{{Length: 1, LowerBound: 1}}, 27 }, 28 }, 29 { 30 source: "{a,b}", 31 result: untypedTextArray{ 32 Elements: []string{"a", "b"}, 33 Quoted: []bool{false, false}, 34 Dimensions: []ArrayDimension{{Length: 2, LowerBound: 1}}, 35 }, 36 }, 37 { 38 source: `{"NULL"}`, 39 result: untypedTextArray{ 40 Elements: []string{"NULL"}, 41 Quoted: []bool{true}, 42 Dimensions: []ArrayDimension{{Length: 1, LowerBound: 1}}, 43 }, 44 }, 45 { 46 source: `{""}`, 47 result: untypedTextArray{ 48 Elements: []string{""}, 49 Quoted: []bool{true}, 50 Dimensions: []ArrayDimension{{Length: 1, LowerBound: 1}}, 51 }, 52 }, 53 { 54 source: `{"He said, \"Hello.\""}`, 55 result: untypedTextArray{ 56 Elements: []string{`He said, "Hello."`}, 57 Quoted: []bool{true}, 58 Dimensions: []ArrayDimension{{Length: 1, LowerBound: 1}}, 59 }, 60 }, 61 { 62 source: "{{a,b},{c,d},{e,f}}", 63 result: untypedTextArray{ 64 Elements: []string{"a", "b", "c", "d", "e", "f"}, 65 Quoted: []bool{false, false, false, false, false, false}, 66 Dimensions: []ArrayDimension{{Length: 3, LowerBound: 1}, {Length: 2, LowerBound: 1}}, 67 }, 68 }, 69 { 70 source: "{{{a,b},{c,d},{e,f}},{{a,b},{c,d},{e,f}}}", 71 result: untypedTextArray{ 72 Elements: []string{"a", "b", "c", "d", "e", "f", "a", "b", "c", "d", "e", "f"}, 73 Quoted: []bool{false, false, false, false, false, false, false, false, false, false, false, false}, 74 Dimensions: []ArrayDimension{ 75 {Length: 2, LowerBound: 1}, 76 {Length: 3, LowerBound: 1}, 77 {Length: 2, LowerBound: 1}, 78 }, 79 }, 80 }, 81 { 82 source: "[4:4]={1}", 83 result: untypedTextArray{ 84 Elements: []string{"1"}, 85 Quoted: []bool{false}, 86 Dimensions: []ArrayDimension{{Length: 1, LowerBound: 4}}, 87 }, 88 }, 89 { 90 source: "[4:5][2:3]={{a,b},{c,d}}", 91 result: untypedTextArray{ 92 Elements: []string{"a", "b", "c", "d"}, 93 Quoted: []bool{false, false, false, false}, 94 Dimensions: []ArrayDimension{ 95 {Length: 2, LowerBound: 4}, 96 {Length: 2, LowerBound: 2}, 97 }, 98 }, 99 }, 100 { 101 source: "[-4:-2]={1,2,3}", 102 result: untypedTextArray{ 103 Elements: []string{"1", "2", "3"}, 104 Quoted: []bool{false, false, false}, 105 Dimensions: []ArrayDimension{{Length: 3, LowerBound: -4}}, 106 }, 107 }, 108 } 109 110 for i, tt := range tests { 111 r, err := parseUntypedTextArray(tt.source) 112 if err != nil { 113 t.Errorf("%d: %v", i, err) 114 continue 115 } 116 117 if !reflect.DeepEqual(*r, tt.result) { 118 t.Errorf("%d: expected %+v to be parsed to %+v, but it was %+v", i, tt.source, tt.result, *r) 119 } 120 } 121 }