github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/geo/encode_test.go (about) 1 // Copyright 2020 The Cockroach Authors. 2 // 3 // Use of this software is governed by the Business Source License 4 // included in the file licenses/BSL.txt. 5 // 6 // As of the Change Date specified in that file, in accordance with 7 // the Business Source License, use of this software will be governed 8 // by the Apache License, Version 2.0, included in the file 9 // licenses/APL.txt. 10 11 package geo 12 13 import ( 14 "testing" 15 16 "github.com/cockroachdb/cockroach/pkg/geo/geopb" 17 "github.com/stretchr/testify/require" 18 ) 19 20 func TestEWKBToWKT(t *testing.T) { 21 testCases := []struct { 22 ewkt geopb.EWKT 23 expected geopb.WKT 24 }{ 25 {"POINT(1.0 1.0)", "POINT (1 1)"}, 26 {"SRID=4;POINT(1.0 1.0)", "POINT (1 1)"}, 27 } 28 29 for _, tc := range testCases { 30 t.Run(string(tc.ewkt), func(t *testing.T) { 31 so, err := parseEWKT(tc.ewkt, geopb.DefaultGeometrySRID, DefaultSRIDIsHint) 32 require.NoError(t, err) 33 encoded, err := EWKBToWKT(so.EWKB) 34 require.NoError(t, err) 35 require.Equal(t, tc.expected, encoded) 36 }) 37 } 38 } 39 40 func TestEWKBToEWKT(t *testing.T) { 41 testCases := []struct { 42 ewkt geopb.EWKT 43 expected geopb.EWKT 44 }{ 45 {"POINT(1.0 1.0)", "POINT (1 1)"}, 46 {"SRID=4;POINT(1.0 1.0)", "SRID=4;POINT (1 1)"}, 47 } 48 49 for _, tc := range testCases { 50 t.Run(string(tc.ewkt), func(t *testing.T) { 51 so, err := parseEWKT(tc.ewkt, geopb.DefaultGeometrySRID, DefaultSRIDIsHint) 52 require.NoError(t, err) 53 encoded, err := EWKBToEWKT(so.EWKB) 54 require.NoError(t, err) 55 require.Equal(t, tc.expected, encoded) 56 }) 57 } 58 } 59 60 func TestEWKBToWKB(t *testing.T) { 61 testCases := []struct { 62 ewkt geopb.EWKT 63 expected geopb.WKB 64 }{ 65 {"POINT(1.0 1.0)", []byte("\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x3f\x00\x00\x00\x00\x00\x00\xf0\x3f")}, 66 {"SRID=4;POINT(1.0 1.0)", []byte("\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x3f\x00\x00\x00\x00\x00\x00\xf0\x3f")}, 67 } 68 69 for _, tc := range testCases { 70 t.Run(string(tc.ewkt), func(t *testing.T) { 71 so, err := parseEWKT(tc.ewkt, geopb.DefaultGeometrySRID, DefaultSRIDIsHint) 72 require.NoError(t, err) 73 encoded, err := EWKBToWKB(so.EWKB, DefaultEWKBEncodingFormat) 74 require.NoError(t, err) 75 require.Equal(t, tc.expected, encoded) 76 }) 77 } 78 } 79 80 func TestEWKBToGeoJSON(t *testing.T) { 81 testCases := []struct { 82 ewkt geopb.EWKT 83 expected string 84 }{ 85 {"POINT(1.0 1.0)", `{"type":"Feature","geometry":{"type":"Point","coordinates":[1,1]},"properties":null}`}, 86 {"SRID=4;POINT(1.0 1.0)", `{"type":"Feature","geometry":{"type":"Point","coordinates":[1,1]},"properties":null}`}, 87 } 88 89 for _, tc := range testCases { 90 t.Run(string(tc.ewkt), func(t *testing.T) { 91 so, err := parseEWKT(tc.ewkt, geopb.DefaultGeometrySRID, DefaultSRIDIsHint) 92 require.NoError(t, err) 93 encoded, err := EWKBToGeoJSON(so.EWKB) 94 require.NoError(t, err) 95 require.Equal(t, tc.expected, string(encoded)) 96 }) 97 } 98 } 99 100 func TestEWKBToWKBHex(t *testing.T) { 101 testCases := []struct { 102 ewkt geopb.EWKT 103 expected string 104 }{ 105 {"POINT(1.0 1.0)", "0101000000000000000000F03F000000000000F03F"}, 106 {"SRID=4;POINT(1.0 1.0)", "0101000000000000000000F03F000000000000F03F"}, 107 } 108 109 for _, tc := range testCases { 110 t.Run(string(tc.ewkt), func(t *testing.T) { 111 so, err := parseEWKT(tc.ewkt, geopb.DefaultGeometrySRID, DefaultSRIDIsHint) 112 require.NoError(t, err) 113 encoded, err := EWKBToWKBHex(so.EWKB) 114 require.NoError(t, err) 115 require.Equal(t, tc.expected, encoded) 116 }) 117 } 118 } 119 120 func TestEWKBToKML(t *testing.T) { 121 testCases := []struct { 122 ewkt geopb.EWKT 123 expected string 124 }{ 125 {"POINT(1.0 1.0)", `<?xml version="1.0" encoding="UTF-8"?> 126 <Point><coordinates>1,1</coordinates></Point>`}, 127 {"SRID=4;POINT(1.0 1.0)", `<?xml version="1.0" encoding="UTF-8"?> 128 <Point><coordinates>1,1</coordinates></Point>`}, 129 } 130 131 for _, tc := range testCases { 132 t.Run(string(tc.ewkt), func(t *testing.T) { 133 so, err := parseEWKT(tc.ewkt, geopb.DefaultGeometrySRID, DefaultSRIDIsHint) 134 require.NoError(t, err) 135 encoded, err := EWKBToKML(so.EWKB) 136 require.NoError(t, err) 137 require.Equal(t, tc.expected, encoded) 138 }) 139 } 140 }