precis-js
Version:
A JavaScript implementation of RFC 7564 (The PRECIS Framework).
68 lines (55 loc) • 4.07 kB
text/coffeescript
CodepointPropertyReader = require '../../src/unicode/CodepointPropertyReader'
DirectionalityValidator = require '../../src/unicode/DirectionalityValidator'
EmptyStringError = require '../../src/error/EmptyStringError'
InvalidCodepointError = require '../../src/error/InvalidCodepointError'
InvalidDirectionalityError = require '../../src/error/InvalidDirectionalityError'
NicknameProfile = require '../../src/profile/NicknameProfile'
Normalizer = require '../../src/unicode/Normalizer'
OpaqueStringProfile = require '../../src/profile/OpaqueStringProfile'
precis = require '../../src/prepare'
PrecisPreparer = require '../../src/PrecisPreparer'
UsernameCaseMappedProfile = require '../../src/profile/UsernameCaseMappedProfile'
UsernameCasePreservedProfile = require '../../src/profile/UsernameCasePreservedProfile'
WidthMapper = require '../../src/unicode/WidthMapper'
describe 'prepare', ->
it 'produces the correct exports', ->
assert.instanceOf precis.preparer, PrecisPreparer
assert.instanceOf precis.propertyReader, CodepointPropertyReader
assert.strictEqual precis.PrecisPreparer, PrecisPreparer
assert.strictEqual precis.error.EmptyStringError, EmptyStringError
assert.strictEqual precis.error.InvalidCodepointError, InvalidCodepointError
assert.strictEqual precis.error.InvalidDirectionalityError, InvalidDirectionalityError
assert.strictEqual precis.profile.NicknameProfile, NicknameProfile
assert.strictEqual precis.profile.OpaqueStringProfile, OpaqueStringProfile
assert.strictEqual precis.profile.UsernameCaseMappedProfile, UsernameCaseMappedProfile
assert.strictEqual precis.profile.UsernameCasePreservedProfile, UsernameCasePreservedProfile
assert.strictEqual precis.unicode.CodepointPropertyReader, CodepointPropertyReader
assert.strictEqual precis.unicode.DirectionalityValidator, DirectionalityValidator
assert.strictEqual precis.unicode.Normalizer, Normalizer
assert.strictEqual precis.unicode.WidthMapper, WidthMapper
describe 'prepare()', ->
it 'throws an error if the string class is not implemented', ->
assert.throws (-> precis.prepare stringClass: 111, ''), 'PRECIS string class not implemented.'
describe 'for FreeformClass string class profiles', ->
beforeEach ->
= stringClass: precis.STRING_CLASS.FREEFORM
it 'allows characters in the FreeformClass string class', ->
assert.deepEqual precis.prepare(, ' !'), [0x0020, 0x0021]
it 'rejects characters outside the FreeformClass string class', ->
assert.throws (=> precis.prepare , "\u0000"), InvalidCodepointError
assert.throws (=> precis.prepare , "\u007F"), InvalidCodepointError
assert.throws (=> precis.prepare , "\u00B7"), InvalidCodepointError
assert.throws (=> precis.prepare , "\u0378"), InvalidCodepointError
assert.throws (=> precis.prepare , "\u200C"), InvalidCodepointError
describe 'for IdentifierClass string class profiles', ->
beforeEach ->
= stringClass: precis.STRING_CLASS.IDENTIFIER
it 'allows characters in the IdentifierClass string class', ->
assert.deepEqual precis.prepare(, '!'), [0x0021]
it 'rejects characters outside the IdentifierClass string class', ->
assert.throws (=> precis.prepare , "\u0000"), InvalidCodepointError
assert.throws (=> precis.prepare , "\u0020"), InvalidCodepointError
assert.throws (=> precis.prepare , "\u007F"), InvalidCodepointError
assert.throws (=> precis.prepare , "\u00B7"), InvalidCodepointError
assert.throws (=> precis.prepare , "\u0378"), InvalidCodepointError
assert.throws (=> precis.prepare , "\u200C"), InvalidCodepointError