diff options
-rw-r--r-- | internal/url/url.go | 2 | ||||
-rwxr-xr-x | internal/url/url_test.go | 60 |
2 files changed, 61 insertions, 1 deletions
diff --git a/internal/url/url.go b/internal/url/url.go index 0f0d709..14cf133 100644 --- a/internal/url/url.go +++ b/internal/url/url.go @@ -6,7 +6,7 @@ import ( var ( isSchemeRegExp = regexp.MustCompile(`^[^:]+://`) - scpLikeUrlRegExp = regexp.MustCompile(`^(?:(?P<user>[^@]+)@)?(?P<host>[^:\s]+):(?:(?P<port>[0-9]{1,5})/)?(?P<path>[^\\].*)$`) + scpLikeUrlRegExp = regexp.MustCompile(`^(?:(?P<user>[^@]+)@)?(?P<host>[^:\s]+):(?:(?P<port>[0-9]{1,5})(?:\/|:))?(?P<path>[^\\].*\/[^\\].*)$`) ) // MatchesScheme returns true if the given string matches a URL-like diff --git a/internal/url/url_test.go b/internal/url/url_test.go new file mode 100755 index 0000000..d168db6 --- /dev/null +++ b/internal/url/url_test.go @@ -0,0 +1,60 @@ +package url + +import ( + "testing" + + . "gopkg.in/check.v1" +) + +func Test(t *testing.T) { TestingT(t) } + +type URLSuite struct{} + +var _ = Suite(&URLSuite{}) + +func (s *URLSuite) TestMatchesScpLike(c *C) { + examples := []string{ + "git@github.com:james/bond", + "git@github.com:007/bond", + "git@github.com:22:james/bond", + "git@github.com:22:007/bond", + } + + for _, url := range examples { + c.Check(MatchesScpLike(url), Equals, true) + } +} + +func (s *URLSuite) TestFindScpLikeComponents(c *C) { + url := "git@github.com:james/bond" + user, host, port, path := FindScpLikeComponents(url) + + c.Check(user, Equals, "git") + c.Check(host, Equals, "github.com") + c.Check(port, Equals, "") + c.Check(path, Equals, "james/bond") + + url = "git@github.com:007/bond" + user, host, port, path = FindScpLikeComponents(url) + + c.Check(user, Equals, "git") + c.Check(host, Equals, "github.com") + c.Check(port, Equals, "") + c.Check(path, Equals, "007/bond") + + url = "git@github.com:22:james/bond" + user, host, port, path = FindScpLikeComponents(url) + + c.Check(user, Equals, "git") + c.Check(host, Equals, "github.com") + c.Check(port, Equals, "22") + c.Check(path, Equals, "james/bond") + + url = "git@github.com:22:007/bond" + user, host, port, path = FindScpLikeComponents(url) + + c.Check(user, Equals, "git") + c.Check(host, Equals, "github.com") + c.Check(port, Equals, "22") + c.Check(path, Equals, "007/bond") +} |