浏览代码

Fix transition boundary for small tsu

Fixes https://github.com/thatsmydoing/typingfreaks/issues/6
Thomas Dy 3 年之前
父节点
当前提交
865eb1dd0f
共有 2 个文件被更改,包括 13 次插入3 次删除
  1. 2 2
      src/kana.ts
  2. 11 1
      tests/kana.ts

+ 2 - 2
src/kana.ts

@@ -116,10 +116,10 @@ function smallTsu(base: StateMachine): StateMachine {
 
   let newState = new State(display.charAt(0) + display);
   Object.keys(transitions).forEach((k) => {
-    let [nextState, _] = transitions[k];
+    let [nextState, boundary] = transitions[k];
     let intermediateDisplay = k + nextState.display;
     let intermediateState = new State(intermediateDisplay);
-    intermediateState.addTransition(k, nextState);
+    intermediateState.addTransition(k, nextState, boundary);
     newState.addTransition(k, intermediateState, true);
   });
 

+ 11 - 1
tests/kana.ts

@@ -6,8 +6,12 @@ import { TransitionResult } from '../src/state';
 
 function testInput(input: string, line: string) {
   const inputState = new KanaInputState(line);
+  let kanaCount = 0;
   inputState.map((_, m) => {
-    m.addObserver((result, _boundary) => {
+    m.addObserver((result, boundary) => {
+      if (boundary) {
+        kanaCount += 1;
+      }
       assert.is(
         result,
         TransitionResult.SUCCESS,
@@ -18,6 +22,12 @@ function testInput(input: string, line: string) {
   for (const c of input.split('')) {
     inputState.handleInput(c);
   }
+  assert.ok(inputState.isFinished(), `Expected inputState to be finished`);
+  assert.is(
+    kanaCount,
+    line.length,
+    `Expected ${line.length} boundaries, got ${kanaCount}`
+  );
 }
 
 function testFail(input: string, line: string) {