halkyon/apps/learn/halkyon_learn_curator/test/kana_test.dart
Tizian 「ティツィアーン」 649499be23
chore: Halkyon Learn moves into apps/learn
Its server, client, app and curator, and the tools that write its
assets (maps, Anki fixtures, icons), as they are; paths are fixed in
the commits that follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-22 18:11:02 +02:00

37 lines
1.4 KiB
Dart
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:halkyon_learn_curator/src/japanese/kana.dart';
import 'package:test/test.dart';
void main() {
test('katakana becomes hiragana; the rest stays', () {
expect(toHiragana('テレビ'), 'てれび');
expect(toHiragana('カード'), 'かーど');
expect(toHiragana('食べる'), '食べる');
});
test('kana become Hepburn romaji, as people type them', () {
expect(toRomaji('たべる'), 'taberu');
expect(toRomaji('とうきょう'), 'toukyou');
expect(toRomaji('しゃしん'), 'shashin');
expect(toRomaji('きって'), 'kitte');
expect(toRomaji('まっちゃ'), 'matcha');
expect(toRomaji('カード'), 'kaado');
expect(toRomaji('パーティー'), 'paatii');
expect(toRomaji('ふぁいる'), 'fairu');
expect(toRomaji('ぢ'), 'ji');
expect(toRomaji('デュエット'), 'dyuetto');
expect(toRomaji('フュージョン'), 'fyuujon');
});
test('long vowels written once, where that differs', () {
expect(withShortVowels('toukyou'), 'tokyo');
expect(withShortVowels('kaado'), 'kado');
expect(withShortVowels('oniisan'), 'onisan');
expect(withShortVowels('taberu'), isNull);
});
test('full-width letters and digits become the ones people type', () {
expect(halfWidth('Tシャツ'), 'Tシャツ');
expect(halfWidth('3D CD'), '3D CD');
expect(halfWidth('東京'), '東京');
});
}