make toPuny work better in testing

This commit is contained in:
dakkar 2025-04-21 14:58:22 +01:00
parent 58c0ac6c89
commit fda71c4147
2 changed files with 32 additions and 2 deletions

View file

@ -106,13 +106,22 @@ export class UtilityService {
@bindThis @bindThis
public toPuny(host: string): string { public toPuny(host: string): string {
return domainToASCII(host.toLowerCase()); // domainToASCII will return an empty string if we give it a
// string like `name:123`, but `host` may well be in that form
// (e.g. when testing locally, you'll get `localhost:3000`); split
// the port off, and add it back later
const hostParts = host.toLowerCase().match(/^(.+?)(:.+)?$/);
if (!hostParts) return '';
const hostname = hostParts[1];
const port = hostParts[2] ?? '';
return domainToASCII(hostname) + port;
} }
@bindThis @bindThis
public toPunyNullable(host: string | null | undefined): string | null { public toPunyNullable(host: string | null | undefined): string | null {
if (host == null) return null; if (host == null) return null;
return domainToASCII(host.toLowerCase()); return this.toPuny(host);
} }
@bindThis @bindThis

View file

@ -22,6 +22,12 @@ describe('UtilityService', () => {
test('japanese', () => { test('japanese', () => {
assert.equal(utilityService.punyHost('http://www.新聞.com'), 'www.xn--efvv70d.com'); assert.equal(utilityService.punyHost('http://www.新聞.com'), 'www.xn--efvv70d.com');
}); });
test('simple, with port', () => {
assert.equal(utilityService.punyHost('http://www.foo.com:3000'), 'www.foo.com:3000');
});
test('japanese, with port', () => {
assert.equal(utilityService.punyHost('http://www.新聞.com:3000'), 'www.xn--efvv70d.com:3000');
});
}); });
describe('punyHostPSLDomain', () => { describe('punyHostPSLDomain', () => {
@ -31,6 +37,12 @@ describe('UtilityService', () => {
test('japanese', () => { test('japanese', () => {
assert.equal(utilityService.punyHostPSLDomain('http://www.新聞.com'), 'xn--efvv70d.com'); assert.equal(utilityService.punyHostPSLDomain('http://www.新聞.com'), 'xn--efvv70d.com');
}); });
test('simple, with port', () => {
assert.equal(utilityService.punyHostPSLDomain('http://www.foo.com:3000'), 'foo.com:3000');
});
test('japanese, with port', () => {
assert.equal(utilityService.punyHostPSLDomain('http://www.新聞.com:3000'), 'xn--efvv70d.com:3000');
});
test('lower', () => { test('lower', () => {
assert.equal(utilityService.punyHostPSLDomain('http://foo.github.io'), 'foo.github.io'); assert.equal(utilityService.punyHostPSLDomain('http://foo.github.io'), 'foo.github.io');
assert.equal(utilityService.punyHostPSLDomain('http://foo.bar.github.io'), 'bar.github.io'); assert.equal(utilityService.punyHostPSLDomain('http://foo.bar.github.io'), 'bar.github.io');
@ -40,4 +52,13 @@ describe('UtilityService', () => {
assert.equal(utilityService.punyHostPSLDomain('http://foo.bar.masto.host'), 'bar.masto.host'); assert.equal(utilityService.punyHostPSLDomain('http://foo.bar.masto.host'), 'bar.masto.host');
}); });
}); });
describe('toPuny', () => {
test('without port ', () => {
assert.equal(utilityService.toPuny('www.foo.com'), 'www.foo.com');
});
test('with port ', () => {
assert.equal(utilityService.toPuny('www.foo.com:3000'), 'www.foo.com:3000');
});
});
}); });