Files
Matthieu Sieben 99963d002a lex SDK improvements (#4571)
* 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
2026-01-21 16:15:47 +01:00

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)
})
})