You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					77 lines
				
				2.1 KiB
			
		
		
			
		
	
	
					77 lines
				
				2.1 KiB
			| 
											3 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | const saslprep = require('..'); | ||
|  | 
 | ||
|  | const chr = String.fromCodePoint; | ||
|  | 
 | ||
|  | test('should work with liatin letters', () => { | ||
|  |   const str = 'user'; | ||
|  |   expect(saslprep(str)).toEqual(str); | ||
|  | }); | ||
|  | 
 | ||
|  | test('should work be case preserved', () => { | ||
|  |   const str = 'USER'; | ||
|  |   expect(saslprep(str)).toEqual(str); | ||
|  | }); | ||
|  | 
 | ||
|  | test('should work with high code points (> U+FFFF)', () => { | ||
|  |   const str = '\uD83D\uDE00'; | ||
|  |   expect(saslprep(str, { allowUnassigned: true })).toEqual(str); | ||
|  | }); | ||
|  | 
 | ||
|  | test('should remove `mapped to nothing` characters', () => { | ||
|  |   expect(saslprep('I\u00ADX')).toEqual('IX'); | ||
|  | }); | ||
|  | 
 | ||
|  | test('should replace `Non-ASCII space characters` with space', () => { | ||
|  |   expect(saslprep('a\u00A0b')).toEqual('a\u0020b'); | ||
|  | }); | ||
|  | 
 | ||
|  | test('should normalize as NFKC', () => { | ||
|  |   expect(saslprep('\u00AA')).toEqual('a'); | ||
|  |   expect(saslprep('\u2168')).toEqual('IX'); | ||
|  | }); | ||
|  | 
 | ||
|  | test('should throws when prohibited characters', () => { | ||
|  |   // C.2.1 ASCII control characters
 | ||
|  |   expect(() => saslprep('a\u007Fb')).toThrow(); | ||
|  | 
 | ||
|  |   // C.2.2 Non-ASCII control characters
 | ||
|  |   expect(() => saslprep('a\u06DDb')).toThrow(); | ||
|  | 
 | ||
|  |   // C.3 Private use
 | ||
|  |   expect(() => saslprep('a\uE000b')).toThrow(); | ||
|  | 
 | ||
|  |   // C.4 Non-character code points
 | ||
|  |   expect(() => saslprep(`a${chr(0x1fffe)}b`)).toThrow(); | ||
|  | 
 | ||
|  |   // C.5 Surrogate codes
 | ||
|  |   expect(() => saslprep('a\uD800b')).toThrow(); | ||
|  | 
 | ||
|  |   // C.6 Inappropriate for plain text
 | ||
|  |   expect(() => saslprep('a\uFFF9b')).toThrow(); | ||
|  | 
 | ||
|  |   // C.7 Inappropriate for canonical representation
 | ||
|  |   expect(() => saslprep('a\u2FF0b')).toThrow(); | ||
|  | 
 | ||
|  |   // C.8 Change display properties or are deprecated
 | ||
|  |   expect(() => saslprep('a\u200Eb')).toThrow(); | ||
|  | 
 | ||
|  |   // C.9 Tagging characters
 | ||
|  |   expect(() => saslprep(`a${chr(0xe0001)}b`)).toThrow(); | ||
|  | }); | ||
|  | 
 | ||
|  | test('should not containt RandALCat and LCat bidi', () => { | ||
|  |   expect(() => saslprep('a\u06DD\u00AAb')).toThrow(); | ||
|  | }); | ||
|  | 
 | ||
|  | test('RandALCat should be first and last', () => { | ||
|  |   expect(() => saslprep('\u0627\u0031\u0628')).not.toThrow(); | ||
|  |   expect(() => saslprep('\u0627\u0031')).toThrow(); | ||
|  | }); | ||
|  | 
 | ||
|  | test('should handle unassigned code points', () => { | ||
|  |   expect(() => saslprep('a\u0487')).toThrow(); | ||
|  |   expect(() => saslprep('a\u0487', { allowUnassigned: true })).not.toThrow(); | ||
|  | }); |