@naandalist/honocoroko
Version:
A TypeScript library for transliterating text between Latin and Javanese script (Aksara Jawa/Hanacaraka)
127 lines (126 loc) • 6.34 kB
JavaScript
// Tests for honocoroko package
import { describe, it } from 'node:test';
import assert from 'node:assert';
import { toHonocoroko, fromHonocoroko, transliterate } from '../index.js';
describe('honocoroko', () => {
describe('toHonocoroko', () => {
it('should transliterate basic consonants', () => {
assert.strictEqual(toHonocoroko('ha'), 'ꦲ');
assert.strictEqual(toHonocoroko('na'), 'ꦤ');
assert.strictEqual(toHonocoroko('ca'), 'ꦕ');
assert.strictEqual(toHonocoroko('ra'), 'ꦫ');
assert.strictEqual(toHonocoroko('ka'), 'ꦏ');
});
it('should transliterate numbers', () => {
assert.strictEqual(toHonocoroko('0'), '꧐');
assert.strictEqual(toHonocoroko('1'), '꧑');
assert.strictEqual(toHonocoroko('123'), '꧑꧒꧓');
assert.strictEqual(toHonocoroko('9876543210'), '꧙꧘꧗꧖꧕꧔꧓꧒꧑꧐');
});
it('should transliterate punctuation', () => {
assert.strictEqual(toHonocoroko(','), '꧈');
assert.strictEqual(toHonocoroko('.'), '꧉');
assert.strictEqual(toHonocoroko(':'), '꧇');
});
it('should handle mixed text', () => {
const result = toHonocoroko('hana 123');
assert.ok(result.includes('ꦲ'));
assert.ok(result.includes('ꦤ'));
assert.ok(result.includes('꧑꧒꧓'));
});
it('should preserve spaces', () => {
const result = toHonocoroko('ha na ca ra');
assert.ok(result.includes(' '));
});
it('should handle empty string', () => {
assert.strictEqual(toHonocoroko(''), '');
});
it('should use phonetic approximations', () => {
assert.strictEqual(toHonocoroko('f'), 'ꦥ꦳');
assert.strictEqual(toHonocoroko('v'), 'ꦮ꦳');
assert.strictEqual(toHonocoroko('z'), 'ꦗ꦳');
});
it('should preserve special characters by default', () => {
// By default, special characters should be preserved (except those with existing mappings)
assert.strictEqual(toHonocoroko('hana?'), 'ꦲꦤ?');
assert.strictEqual(toHonocoroko('cara!'), 'ꦕꦫ!');
assert.strictEqual(toHonocoroko('test@domain'), 'ꦠꦼꦱ꧀ꦠ@ꦢꦺꦴꦩꦆꦤ');
});
it('should convert special characters when convertSpecialChars is true', () => {
const options = { convertSpecialChars: true };
const result1 = toHonocoroko('test?', options);
const result2 = toHonocoroko('email@domain', options);
// With convertSpecialChars: true, these should be processed (might produce warnings or stay as-is)
// The exact behavior depends on whether we have mappings for these chars
assert.ok(typeof result1 === 'string');
assert.ok(typeof result2 === 'string');
});
it('should work without options (preserves special chars by default)', () => {
const result = toHonocoroko('hello? world!');
assert.ok(result.includes('?'));
assert.ok(result.includes('!'));
});
});
describe('fromHonocoroko', () => {
it('should transliterate Javanese consonants back to Latin', () => {
assert.strictEqual(fromHonocoroko('ꦲ'), 'ha');
assert.strictEqual(fromHonocoroko('ꦤ'), 'na');
assert.strictEqual(fromHonocoroko('ꦕ'), 'ca');
assert.strictEqual(fromHonocoroko('ꦫ'), 'ra');
assert.strictEqual(fromHonocoroko('ꦏ'), 'ka');
});
it('should transliterate Javanese numbers back to Latin', () => {
assert.strictEqual(fromHonocoroko('꧐'), '0');
assert.strictEqual(fromHonocoroko('꧑'), '1');
assert.strictEqual(fromHonocoroko('꧑꧒꧓'), '123');
});
it('should handle empty string', () => {
assert.strictEqual(fromHonocoroko(''), '');
});
it('should preserve spaces', () => {
const javanese = 'ꦲ ꦤ ꦕ';
const result = fromHonocoroko(javanese);
assert.ok(result.includes(' '));
});
it('should preserve special characters by default when transliterating from Javanese', () => {
// By default, special characters should be preserved in both directions
assert.strictEqual(fromHonocoroko('ꦲꦤ?'), 'hana?');
assert.strictEqual(fromHonocoroko('ꦕꦫ!'), 'cara!');
assert.strictEqual(fromHonocoroko('ꦲ@ꦧ'), 'ha@ba');
});
});
describe('transliterate', () => {
it('should work with toHonocoroko direction', () => {
const result = transliterate('hana', 'toHonocoroko');
assert.strictEqual(result, toHonocoroko('hana'));
});
it('should work with fromHonocoroko direction', () => {
const javanese = 'ꦲꦤ';
const result = transliterate(javanese, 'fromHonocoroko');
assert.strictEqual(result, fromHonocoroko(javanese));
});
it('should work with convertSpecialChars option in both directions', () => {
const options = { convertSpecialChars: true };
// Test toHonocoroko with options
const toJavanese = transliterate('hana?', 'toHonocoroko', options);
assert.ok(typeof toJavanese === 'string');
// Test fromHonocoroko with options
const toLatin = transliterate('ꦲꦤ!', 'fromHonocoroko', options);
assert.ok(typeof toLatin === 'string');
});
});
describe('round-trip transliteration', () => {
it('should preserve text in round-trip for basic consonants', () => {
const original = 'hanacara';
const javanese = toHonocoroko(original);
const backToLatin = fromHonocoroko(javanese);
assert.strictEqual(backToLatin, original);
});
it('should preserve numbers in round-trip', () => {
const original = '1234567890';
const javanese = toHonocoroko(original);
const backToLatin = fromHonocoroko(javanese);
assert.strictEqual(backToLatin, original);
});
});
});