package gogeouri import ( "reflect" "testing" ) func TestParse(t *testing.T) { type args struct { uri string } type testCase struct { name string args args want *Geo wantErr bool } tests := []testCase{ // Positive { name: "Simple", args: args{"geo:37.786971,-122.399677"}, want: &Geo{ Latitude: 37.786971, Longitude: -122.399677, Parameters: map[string][]string{}, }, wantErr: false, }, { name: "Altitude", args: args{"geo:37.786971,-122.399677,-123.456"}, want: &Geo{ Latitude: 37.786971, Longitude: -122.399677, Altitude: -123.456, Parameters: map[string][]string{}, }, wantErr: false, }, { name: "Indigenous", args: args{"geo:51.5258325,-0.1359825,0.0;name=london;url=https://hwclondon.co.uk"}, want: &Geo{ Latitude: 51.5258325, Longitude: -0.1359825, Altitude: 0.0, Parameters: map[string][]string{ "name": {"london"}, "url": {"https://hwclondon.co.uk"}, }, }, wantErr: false, }, { name: "Parameter without value", args: args{"geo:51.5258325,-0.1359825,0.0;name"}, want: &Geo{ Latitude: 51.5258325, Longitude: -0.1359825, Altitude: 0.0, Parameters: map[string][]string{ "name": {}, }, }, wantErr: false, }, // Negative { name: "Missing scheme", args: args{"37.786971,-122.399677"}, wantErr: true, }, { name: "Missing path", args: args{"geo:"}, wantErr: true, }, { name: "1 coordinate", args: args{"geo:37.786971"}, wantErr: true, }, { name: "4 coordinates", args: args{"geo:123,123,123,123"}, wantErr: true, }, { name: "Malformed latitude", args: args{"geo:12x,123"}, wantErr: true, }, { name: "Malformed longitude", args: args{"geo:123,12x"}, wantErr: true, }, { name: "Malformed altitude", args: args{"geo:123,123,12x"}, wantErr: true, }, { name: "Malformed parameter", args: args{"geo:123,123;a=a=a"}, wantErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := Parse(tt.args.uri) if (err != nil) != tt.wantErr { t.Errorf("Parse() error = %v, wantErr %v", err, tt.wantErr) return } if !reflect.DeepEqual(got, tt.want) { t.Errorf("Parse() = %v, want %v", got, tt.want) } }) } }