99963d002a
* Improve code coverage of `@atproto/lex-data` tests * Improve typing of `@atproto/syntax` type assertion utilities * Improve performance of `@atproto/lex-schema ` string format checking * Remove `assertX` string format assertion utilities * tidy * tidy * Rename `isLanguageString` to `validateLanguage` * add string format utils * tidy * Refactor uri validation to use `@atproto/syntax` * More language validation to @atproto/syntax
89 lines
2.7 KiB
TypeScript
89 lines
2.7 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { isValidLanguage, parseLanguageString } from '../src'
|
|
|
|
describe(isValidLanguage, () => {
|
|
it('validates BCP 47', () => {
|
|
// valid
|
|
expect(isValidLanguage('de')).toEqual(true)
|
|
expect(isValidLanguage('de-CH')).toEqual(true)
|
|
expect(isValidLanguage('de-DE-1901')).toEqual(true)
|
|
expect(isValidLanguage('es-419')).toEqual(true)
|
|
expect(isValidLanguage('sl-IT-nedis')).toEqual(true)
|
|
expect(isValidLanguage('mn-Cyrl-MN')).toEqual(true)
|
|
expect(isValidLanguage('x-fr-CH')).toEqual(true)
|
|
expect(
|
|
isValidLanguage('en-GB-boont-r-extended-sequence-x-private'),
|
|
).toEqual(true)
|
|
expect(isValidLanguage('sr-Cyrl')).toEqual(true)
|
|
expect(isValidLanguage('hy-Latn-IT-arevela')).toEqual(true)
|
|
expect(isValidLanguage('i-klingon')).toEqual(true)
|
|
// invalid
|
|
expect(isValidLanguage('')).toEqual(false)
|
|
expect(isValidLanguage('x')).toEqual(false)
|
|
expect(isValidLanguage('de-CH-')).toEqual(false)
|
|
expect(isValidLanguage('i-bad-grandfathered')).toEqual(false)
|
|
})
|
|
})
|
|
|
|
describe(parseLanguageString, () => {
|
|
it('parses BCP 47', () => {
|
|
// valid
|
|
expect(parseLanguageString('de')).toEqual({
|
|
language: 'de',
|
|
})
|
|
expect(parseLanguageString('de-CH')).toEqual({
|
|
language: 'de',
|
|
region: 'CH',
|
|
})
|
|
expect(parseLanguageString('de-DE-1901')).toEqual({
|
|
language: 'de',
|
|
region: 'DE',
|
|
variant: '1901',
|
|
})
|
|
expect(parseLanguageString('es-419')).toEqual({
|
|
language: 'es',
|
|
region: '419',
|
|
})
|
|
expect(parseLanguageString('sl-IT-nedis')).toEqual({
|
|
language: 'sl',
|
|
region: 'IT',
|
|
variant: 'nedis',
|
|
})
|
|
expect(parseLanguageString('mn-Cyrl-MN')).toEqual({
|
|
language: 'mn',
|
|
script: 'Cyrl',
|
|
region: 'MN',
|
|
})
|
|
expect(parseLanguageString('x-fr-CH')).toEqual({
|
|
privateUse: 'x-fr-CH',
|
|
})
|
|
expect(
|
|
parseLanguageString('en-GB-boont-r-extended-sequence-x-private'),
|
|
).toEqual({
|
|
language: 'en',
|
|
region: 'GB',
|
|
variant: 'boont',
|
|
extension: 'r-extended-sequence',
|
|
privateUse: 'x-private',
|
|
})
|
|
expect(parseLanguageString('sr-Cyrl')).toEqual({
|
|
language: 'sr',
|
|
script: 'Cyrl',
|
|
})
|
|
expect(parseLanguageString('hy-Latn-IT-arevela')).toEqual({
|
|
language: 'hy',
|
|
script: 'Latn',
|
|
region: 'IT',
|
|
variant: 'arevela',
|
|
})
|
|
expect(parseLanguageString('i-klingon')).toEqual({
|
|
grandfathered: 'i-klingon',
|
|
})
|
|
// invalid
|
|
expect(parseLanguageString('')).toEqual(null)
|
|
expect(parseLanguageString('x')).toEqual(null)
|
|
expect(parseLanguageString('de-CH-')).toEqual(null)
|
|
expect(parseLanguageString('i-bad-grandfathered')).toEqual(null)
|
|
})
|
|
})
|