kana.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { test } from 'uvu';
  2. import * as assert from 'uvu/assert';
  3. import { normalizeInput, KanaInputState } from '../src/kana';
  4. import { TransitionResult } from '../src/state';
  5. function testInput(input: string, line: string) {
  6. const inputState = new KanaInputState(line);
  7. inputState.map((_, m) => {
  8. m.addObserver((result, _boundary) => {
  9. assert.is(
  10. result,
  11. TransitionResult.SUCCESS,
  12. `Expected ${input} to match ${line}`
  13. );
  14. });
  15. });
  16. for (const c of input.split('')) {
  17. inputState.handleInput(c);
  18. }
  19. }
  20. test('normalizeInput', () => {
  21. assert.is(normalizeInput('ABCdef'), 'abcdef');
  22. assert.is(normalizeInput('フェスティバル'), 'ふぇすてぃばる');
  23. assert.is(normalizeInput('  '), ' ');
  24. });
  25. test('multiple romanization single kana', () => {
  26. testInput('si', 'し');
  27. testInput('shi', 'し');
  28. testInput('ji', 'じ');
  29. testInput('zi', 'じ');
  30. testInput('ti', 'ち');
  31. testInput('chi', 'ち');
  32. testInput('tu', 'つ');
  33. testInput('tsu', 'つ');
  34. testInput('fu', 'ふ');
  35. testInput('hu', 'ふ');
  36. });
  37. test('multiple romanization double kana', () => {
  38. testInput('sha', 'しゃ');
  39. testInput('sya', 'しゃ');
  40. // testInput('shilya', 'しゃ');
  41. // testInput('silya', 'しゃ');
  42. testInput('cha', 'ちゃ');
  43. testInput('tya', 'ちゃ');
  44. // testInput('chilya', 'ちゃ');
  45. // testInput('tilya', 'ちゃ');
  46. testInput('ja', 'じゃ');
  47. testInput('jya', 'じゃ');
  48. testInput('zya', 'じゃ');
  49. // testInput('jilya', 'じゃ');
  50. // testInput('zilya', 'じゃ');
  51. testInput('fe', 'ふぇ');
  52. // testInput('fule', 'ふぇ');
  53. });
  54. test('small tsu', () => {
  55. testInput('katto', 'カット');
  56. // testInput('kaltsuto', 'かっと');
  57. // testInput('kaltuto', 'かっと');
  58. testInput('ejji', 'エッジ');
  59. testInput('ezzi', 'エッジ');
  60. // testInput('extuji', 'エッジ');
  61. // testInput('extsuzi', 'エッジ');
  62. testInput('hassha', 'はっしゃ');
  63. testInput('hassya', 'はっしゃ');
  64. // testInput('haltusha', 'はっしゃ');
  65. // testInput('haltusya', 'はっしゃ');
  66. });
  67. test.run();