whatcanGOwrong

This commit is contained in:
2024-09-19 21:38:24 -04:00
commit d0ae4d841d
17908 changed files with 4096831 additions and 0 deletions
@@ -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)
}
})
}
}