fix: #61 & #65 addressing issues w/ url.URL implmentation which regre… · npm/hosted-git-info@5038b18

@@ -2,23 +2,25 @@ var HostedGitInfo = require('../')

2233

var tap = require('tap')

44

var 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+

}