import { getTestRunner } from './mod.ts'; import { chars, ctrl_key, is_ascii, is_control, noop, ord, strlen, truncate, } from './utils.ts'; getTestRunner().then((t) => { t.test('noop fn', () => { t.assertExists(noop); t.assertEquals(noop(), undefined); }); // --------------------------------------------------------------------------- // Strings // --------------------------------------------------------------------------- t.test('ord fn returns 256 on invalid string', () => { t.assertEquals(ord(''), 256); }); 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.assertFalse(is_ascii('ab😺ac')); }); 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 ascii strings', () => { t.assertEquals(strlen('abc'), 'abc'.length); }); 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), 'πŸ‘¨β€πŸ‘©β€πŸ‘§'); }); });