188 lines
8.3 KiB
JavaScript
188 lines
8.3 KiB
JavaScript
const test = require('tape')
|
||
const isValidDomain = require('../')
|
||
const sldMap = require('../data/sldMap.json')
|
||
|
||
test('tld and simple subdomains', function (t) {
|
||
t.plan(14)
|
||
t.equal(isValidDomain('example.com'), true)
|
||
t.equal(isValidDomain('foo.example.com'), true)
|
||
t.equal(isValidDomain('bar.foo.example.com'), true)
|
||
t.equal(isValidDomain('exa-mple.co.uk'), true)
|
||
t.equal(isValidDomain('a.com'), true)
|
||
t.equal(isValidDomain('a.b'), true)
|
||
t.equal(isValidDomain('foo.bar.baz'), true)
|
||
t.equal(isValidDomain('foo-bar.ba-z.qux'), true)
|
||
t.equal(isValidDomain('hello.world'), true)
|
||
t.equal(isValidDomain('ex-am-ple.com'), true)
|
||
t.equal(isValidDomain('xn--80ak6aa92e.com'), true)
|
||
t.equal(isValidDomain('example.a9'), true)
|
||
t.equal(isValidDomain('example.9a'), true)
|
||
t.equal(isValidDomain('example.99'), false)
|
||
})
|
||
|
||
test('more subdomains', function (t) {
|
||
t.plan(22)
|
||
t.equal(isValidDomain('example.com'), true)
|
||
t.equal(isValidDomain('foo.example.com'), true)
|
||
t.equal(isValidDomain('example.com', { subdomain: true }), true)
|
||
t.equal(isValidDomain('foo.example.com', { subdomain: true }), true)
|
||
t.equal(isValidDomain('foo.example.com', { subdomain: false }), false)
|
||
t.equal(isValidDomain('-foo.example.com', { subdomain: true }), false)
|
||
t.equal(isValidDomain('foo-.example.com', { subdomain: true }), false)
|
||
t.equal(isValidDomain('-foo-.example.com', { subdomain: true }), false)
|
||
t.equal(isValidDomain('-foo.example.com'), false)
|
||
t.equal(isValidDomain('foo-.example.com'), false)
|
||
t.equal(isValidDomain('-foo-.example.com'), false)
|
||
t.equal(isValidDomain('foo-.bar.example.com'), false)
|
||
t.equal(isValidDomain('-foo.bar.example.com'), false)
|
||
t.equal(isValidDomain('-foo-.bar.example.com'), false)
|
||
t.equal(isValidDomain('-foo-.bar.example.com', { subdomain: true }), false)
|
||
t.equal(isValidDomain('foo-.bar.example.com', { subdomain: true }), false)
|
||
t.equal(isValidDomain('-foo-.bar.example.com', { subdomain: true }), false)
|
||
t.equal(isValidDomain('-foo-.-bar-.example.com', { subdomain: true }), false)
|
||
t.equal(isValidDomain('example.com', { subdomain: false }), true)
|
||
t.equal(isValidDomain('*.example.com', { subdomain: true }), false)
|
||
t.equal(isValidDomain('abcd--def.example.com', { subdomain: true }), true)
|
||
t.equal(isValidDomain('ab--cd.ab--cd.example.com', { subdomain: true }), true)
|
||
})
|
||
|
||
test('sld', function (t) {
|
||
t.plan(5)
|
||
t.equal(isValidDomain('example.co.uk'), true)
|
||
t.equal(isValidDomain('exampl1.co.uk', { subdomain: false }), true)
|
||
t.equal(isValidDomain('abc.example.co.uk', { subdomain: false }), false)
|
||
t.equal(isValidDomain('*.example.co.uk', { subdomain: true }), false)
|
||
t.equal(isValidDomain('*.example.co.uk', { subdomain: true, wildcard: true }), true)
|
||
})
|
||
|
||
test('slds from map file', function (t) {
|
||
t.plan(Object.keys(sldMap).length)
|
||
for (const sld in sldMap) {
|
||
t.equal(isValidDomain(`example.${sld}`), true)
|
||
}
|
||
})
|
||
|
||
test('punycode', function (t) {
|
||
t.plan(15)
|
||
t.equal(isValidDomain('xn--6qq79v.xn--fiqz9s'), true)
|
||
t.equal(isValidDomain('xn--ber-goa.com'), true)
|
||
t.equal(isValidDomain('xn--a--ber-goa.com'), false)
|
||
t.equal(isValidDomain('xn--c1yn36f.example.com'), true)
|
||
t.equal(isValidDomain('xn--addas-o4a.de'), true)
|
||
t.equal(isValidDomain('xn--p8j9a0d9c9a.xn--q9jyb4c'), true)
|
||
t.equal(isValidDomain('привет-мир.рф', { allowUnicode: true }), true)
|
||
t.equal(isValidDomain('test-me.рф', { allowUnicode: true }), true)
|
||
t.equal(isValidDomain('test--me.рф', { allowUnicode: true }), false)
|
||
t.equal(isValidDomain('приветмир.com', { allowUnicode: true }), true)
|
||
t.equal(isValidDomain('xn--b1aghctohfp.xn--p1ai', { allowUnicode: false }), true)
|
||
t.equal(isValidDomain('привет-мир.com', { allowUnicode: true }), true)
|
||
t.equal(isValidDomain('привет-мир.рф', { allowUnicode: true }), true)
|
||
t.equal(isValidDomain('дядя-ваня.рф', { allowUnicode: true }), true)
|
||
t.equal(isValidDomain('дядя-ваня.ru.com', { allowUnicode: true }), true)
|
||
})
|
||
|
||
test('unicode', function (t) {
|
||
t.plan(4)
|
||
t.equal(isValidDomain('はじめよう.みんな'), false)
|
||
t.equal(isValidDomain('名がドメイン.com'), false)
|
||
t.equal(isValidDomain('はじめよう.みんな', { allowUnicode: true }), true)
|
||
t.equal(isValidDomain('名がドメイン.com', { allowUnicode: true }), true)
|
||
})
|
||
|
||
test('country code tld', function (t) {
|
||
t.plan(7)
|
||
t.equal(isValidDomain('ai.'), false)
|
||
t.equal(isValidDomain('ai'), false)
|
||
t.equal(isValidDomain('ai.', { topLevel: true }), true)
|
||
t.equal(isValidDomain('ai', { topLevel: true }), true)
|
||
t.equal(isValidDomain('ae.'), false)
|
||
t.equal(isValidDomain('ae.', { topLevel: true }), true)
|
||
t.equal(isValidDomain('xx.', { topLevel: true }), false)
|
||
})
|
||
|
||
test('invalid tld and subdomain', function (t) {
|
||
t.plan(23)
|
||
t.equal(isValidDomain('localhost'), false)
|
||
t.equal(isValidDomain('127.0.0.1'), false)
|
||
t.equal(isValidDomain('bar.q-ux'), false)
|
||
t.equal(isValidDomain('exa_mple.com'), false)
|
||
t.equal(isValidDomain('example'), false)
|
||
t.equal(isValidDomain('ex*mple.com'), false)
|
||
t.equal(isValidDomain('@#$@#$%fd'), false)
|
||
t.equal(isValidDomain('_example.com'), false)
|
||
t.equal(isValidDomain('-example.com'), false)
|
||
t.equal(isValidDomain('xn–pple-43d.com'), false)
|
||
t.equal(isValidDomain('foo._example.com'), false)
|
||
t.equal(isValidDomain('foo.-example.com'), false)
|
||
t.equal(isValidDomain('foo.example-.co.uk'), false)
|
||
t.equal(isValidDomain('example-.com'), false)
|
||
t.equal(isValidDomain('example_.com'), false)
|
||
t.equal(isValidDomain('foo.example-.com'), false)
|
||
t.equal(isValidDomain('foo.example_.com'), false)
|
||
t.equal(isValidDomain('example.com-'), false)
|
||
t.equal(isValidDomain('example.com_'), false)
|
||
t.equal(isValidDomain('-foo.example.com_'), false)
|
||
t.equal(isValidDomain('_foo.example.com_'), false)
|
||
t.equal(isValidDomain('*.com_'), false)
|
||
t.equal(isValidDomain('*.*.com_'), false)
|
||
})
|
||
|
||
test('subdomain underscores', function (t) {
|
||
t.plan(5)
|
||
t.equal(isValidDomain('_dnslink.ipfs.io'), true)
|
||
t.equal(isValidDomain('_dnslink.ip_fs.io'), false)
|
||
t.equal(isValidDomain('_foo.example.com'), true)
|
||
t.equal(isValidDomain('xn--_eamop.donata.com'), true)
|
||
t.equal(isValidDomain('__foo.example.com'), true)
|
||
})
|
||
|
||
test('wildcard', function (t) {
|
||
t.plan(9)
|
||
t.equal(isValidDomain('*.example.com'), false)
|
||
t.equal(isValidDomain('*.example.com', { wildcard: false }), false)
|
||
t.equal(isValidDomain('*.example.com', { wildcard: true }), true)
|
||
t.equal(isValidDomain('*.*.com', { wildcard: true }), false)
|
||
t.equal(isValidDomain('*.com', { wildcard: true }), false)
|
||
t.equal(isValidDomain('example.com', { wildcard: true }), true)
|
||
t.equal(isValidDomain('example.com', { subdomain: true, wildcard: true }), true)
|
||
t.equal(isValidDomain('*.example.com', { subdomain: true, wildcard: true }), true)
|
||
t.equal(isValidDomain('*.example.com', { subdomain: false, wildcard: true }), false)
|
||
})
|
||
|
||
test('length', function (t) {
|
||
t.plan(3)
|
||
t.equal(isValidDomain(`${'a'.repeat(63)}.${'b'.repeat(63)}.${'c'.repeat(63)}.${'c'.repeat(61)}`), true)
|
||
t.equal(isValidDomain(`${'a'.repeat(63)}.${'b'.repeat(63)}.${'c'.repeat(63)}.${'c'.repeat(61)}.`), true)
|
||
t.equal(isValidDomain(`${'a'.repeat(63)}.${'b'.repeat(63)}.${'c'.repeat(63)}.${'c'.repeat(62)}`), false)
|
||
})
|
||
|
||
test('invalid types', function (t) {
|
||
t.plan(4)
|
||
t.equal(isValidDomain(3434), false)
|
||
t.equal(isValidDomain(''), false)
|
||
t.equal(isValidDomain({}), false)
|
||
t.equal(isValidDomain(function () {}), false)
|
||
})
|
||
|
||
test('invalid values', function (t) {
|
||
t.plan(10)
|
||
t.equal(isValidDomain('foo.example.com*'), false)
|
||
t.equal(isValidDomain('foo.example.com*', { wildcard: true }), false)
|
||
t.equal(isValidDomain('google.com"\'\"\""\\"\\\'test test'), false)
|
||
t.equal(isValidDomain('google.com.au\'"\'\"\""\\"\\\'test'), false)
|
||
t.equal(isValidDomain('...'), false)
|
||
t.equal(isValidDomain('example..com'), false)
|
||
t.equal(isValidDomain('.example.'), false)
|
||
t.equal(isValidDomain('.example.com'), false)
|
||
t.equal(isValidDomain('"example.com"'), false)
|
||
t.equal(isValidDomain('http://xn--addas-o4a.de'), false)
|
||
})
|
||
|
||
test('thai domains', function (t) {
|
||
t.plan(5)
|
||
t.equal(isValidDomain('universal-acceptance-test.international'), true)
|
||
t.equal(isValidDomain('universal-acceptance-test.icu'), true)
|
||
t.equal(isValidDomain('ยูเอทดสอบ.ไทย'), true)
|
||
t.equal(isValidDomain('ทีเอชนิค.องค์กร.ไทย'), true)
|
||
t.equal(isValidDomain('เราไม่ทิ้งกัน.com'), true)
|
||
})
|