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  }