import { importDefaultForRuntime, ITestBase } from './mod.ts'; import { chars, ctrl_key, is_ascii, is_control, strlen, truncate, } from './utils.ts'; const t: ITestBase = await importDefaultForRuntime('test_base'); // --------------------------------------------------------------------------------------------------------------------- // Strings // --------------------------------------------------------------------------------------------------------------------- t.test('chars fn properly splits strings into unicode characters', () => { t.assertEquals(chars('😺😸😹'), ['😺', '😸', '😹']); }); t.test('ctrl_key fn returns expected values', () => { const ctrl_a = ctrl_key('a'); t.assertTrue(is_control(ctrl_a)); t.assertEquals(ctrl_a, String.fromCodePoint(0x01)); const invalid = ctrl_key('😺'); t.assertFalse(is_control(invalid)); t.assertEquals(invalid, '😺'); }); t.test('is_ascii properly discerns ascii chars', () => { t.assertTrue(is_ascii('asjyverkjhsdf1928374')); t.assertFalse(is_ascii('😺acalskjsdf')); }); t.test('is_control fn works as expected', () => { t.assertFalse(is_control('abc')); t.assertTrue(is_control(String.fromCodePoint(0x01))); t.assertFalse(is_control('😺')); }); t.test('strlen fn returns expected length for multibyte characters', () => { t.assertEquals(strlen('😺😸😹'), 3); t.assertNotEquals('😺😸😹'.length, strlen('😺😸😹')); // Skin tone modifier + base character t.assertEquals(strlen('🀰🏼'), 2); t.assertNotEquals('🀰🏼'.length, strlen('🀰🏼')); // This has 4 sub-characters, and 3 zero-width-joiners t.assertEquals(strlen('πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦'), 7); t.assertNotEquals('πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦'.length, strlen('πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦')); }); t.test('truncate shortens strings', () => { t.assertEquals(truncate('😺😸😹', 1), '😺'); t.assertEquals(truncate('😺😸😹', 5), '😺😸😹'); t.assertEquals(truncate('πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦', 5), 'πŸ‘¨β€πŸ‘©β€πŸ‘§'); });