whatcanGOwrong
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
package url
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var errNoScheme = errors.New("no scheme")
|
||||
var errEmptyURL = errors.New("URL cannot be empty")
|
||||
|
||||
// schemeFromURL returns the scheme from a URL string
|
||||
func SchemeFromURL(url string) (string, error) {
|
||||
if url == "" {
|
||||
return "", errEmptyURL
|
||||
}
|
||||
|
||||
i := strings.Index(url, ":")
|
||||
|
||||
// No : or : is the first character.
|
||||
if i < 1 {
|
||||
return "", errNoScheme
|
||||
}
|
||||
|
||||
return url[0:i], nil
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package url
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSchemeFromUrl(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
urlStr string
|
||||
expected string
|
||||
expectErr error
|
||||
}{
|
||||
{
|
||||
name: "Simple",
|
||||
urlStr: "protocol://path",
|
||||
expected: "protocol",
|
||||
},
|
||||
{
|
||||
// See issue #264
|
||||
name: "MySQLWithPort",
|
||||
urlStr: "mysql://user:pass@tcp(host:1337)/db",
|
||||
expected: "mysql",
|
||||
},
|
||||
{
|
||||
name: "Empty",
|
||||
urlStr: "",
|
||||
expectErr: errEmptyURL,
|
||||
},
|
||||
{
|
||||
name: "NoScheme",
|
||||
urlStr: "hello",
|
||||
expectErr: errNoScheme,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
s, err := SchemeFromURL(tc.urlStr)
|
||||
if err != tc.expectErr {
|
||||
t.Fatalf("expected %q, but received %q", tc.expectErr, err)
|
||||
}
|
||||
if s != tc.expected {
|
||||
t.Fatalf("expected %q, but received %q", tc.expected, s)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user