import { capitalize, escapeXml, graphemeSplit } from './lang_string'; describe('lang_string', () => { describe('string.graphemeSplit', () => { it('correctly splits strings including emojis into graphemes', () => { expect(graphemeSplit('foo')).toEqual(['f', 'o', 'o']); expect(graphemeSplit('f🙂o')).toEqual(['f', '🙂', 'o']); }); it('correctly splits strings including flag emojis into graphmes', () => { expect(graphemeSplit('f🇱🇹🇱🇹o')).toEqual(['f', '🇱🇹', '🇱🇹', 'o']); }); it('correctly splits strings including new emojis into graphmes', () => { expect(graphemeSplit('f🧚đŸŋâ€â™‚ī¸o')).toEqual(['f', '🧚đŸŋâ€â™‚ī¸', 'o']); }); }); describe('string.escapeXml', () => { it('properly escapes XML special characters in strings', () => { // borrowed from Prototype.js expect(escapeXml('foo bar')).toBe('foo bar'); expect(escapeXml('foo bar')).toBe( 'foo <span>bar</span>', ); expect( escapeXml( 'ablubb
cdef!!!!g', ), ).toBe( 'a<a href="blah">blub</a>b<span><div></div></span>cdef<strong>!!!!</strong>g', ); expect(escapeXml('1\n2')).toBe('1\n2'); }); }); describe('string.capitalize', () => { it('correctly capitalizes strings', () => { expect(capitalize('foo')).toBe('Foo'); expect(capitalize('')).toBe(''); expect(capitalize('Foo')).toBe('Foo'); expect(capitalize('foo-bar-baz')).toBe('Foo-bar-baz'); expect(capitalize('FOO')).toBe('Foo'); expect(capitalize('FoobaR')).toBe('Foobar'); expect(capitalize('2foo')).toBe('2foo'); }); }); });