fix: #61 & #65 addressing issues w/ url.URL implmentation which regre… · npm/hosted-git-info@5038b18
@@ -2,23 +2,25 @@ var HostedGitInfo = require('../')
2233var tap = require('tap')
44var url = require('url')
5-6-// Auth credentials with special characters (colon and/or at-sign) should remain correctly escaped
7-var parsedInfo = HostedGitInfo.fromUrl('https://user%3An%40me:p%40ss%3Aword@github.com/npm/hosted-git-info.git')
8-tap.equal(parsedInfo.auth, 'user%3An%40me:p%40ss%3Aword')
5+var parsedInfo
96107// Node.js' built-in `url` module should be able to parse the resulting url
11-var parsedUrl = new url.URL(parsedInfo.toString())
12-tap.equal(parsedUrl.username, 'user%3An%40me')
13-tap.equal(parsedUrl.password, 'p%40ss%3Aword')
14-tap.equal(parsedUrl.hostname, 'github.com')
15-16-// For full backwards-compatibility; support auth where only username or only password is provided
17-tap.equal(HostedGitInfo.fromUrl('https://user%3An%40me@github.com/npm/hosted-git-info.git').auth, 'user%3An%40me')
18-tap.equal(HostedGitInfo.fromUrl('https://:p%40ss%3Aword@github.com/npm/hosted-git-info.git').auth, ':p%40ss%3Aword')
19-208// don't try to url.URL parse it if url.URL is not available
219// ie, node <6.13. This is broken, but at least it doesn't throw.
22-url.URL = null
23-var parsedInfoNoURL = HostedGitInfo.fromUrl('https://user%3An%40me:p%40ss%3Aword@github.com/npm/xyz.git')
24-tap.equal(parsedInfoNoURL.auth, 'user:n@me:p@ss:word')
10+if (typeof url.URL === 'function') {
11+// Auth credentials with special characters (colon and/or at-sign) should remain correctly escaped
12+parsedInfo = HostedGitInfo.fromUrl('https://user%3An%40me:p%40ss%3Aword@github.com/npm/hosted-git-info.git')
13+tap.equal(parsedInfo.auth, 'user%3An%40me:p%40ss%3Aword')
14+15+var parsedUrl = new url.URL(parsedInfo.toString())
16+tap.equal(parsedUrl.username, 'user%3An%40me')
17+tap.equal(parsedUrl.password, 'p%40ss%3Aword')
18+tap.equal(parsedUrl.hostname, 'github.com')
19+20+// For full backwards-compatibility; support auth where only username or only password is provided
21+tap.equal(HostedGitInfo.fromUrl('https://user%3An%40me@github.com/npm/hosted-git-info.git').auth, 'user%3An%40me')
22+tap.equal(HostedGitInfo.fromUrl('https://:p%40ss%3Aword@github.com/npm/hosted-git-info.git').auth, ':p%40ss%3Aword')
23+} else {
24+parsedInfo = HostedGitInfo.fromUrl('https://user%3An%40me:p%40ss%3Aword@github.com/npm/hosted-git-info.git')
25+tap.equal(parsedInfo.auth, 'user:n@me:p@ss:word')
26+}