halkyon/halkyon_learn_flutter/test/feature/kanji/model/hangul_test.dart
Tizian 「ティツィアーン」 5479b973fc
feat(dictionary): characters of Chinese, Korean and Greek, written by hand; pinyin typed
Parity with Japanese's kanji and kana:

- The characters' tab is named by its language (Hanzi, Hangul & Hanja,
  Alphabet), its groups too: HSK levels and the characters in common use
  (Hong Kong's grades for traditional ones); Hangul and the Hanja taught
  in schools; Greek's letters. Radicals for Chinese and Korean in their
  own forms (讠 for 言 in simplified Chinese), none for Greek.
- A character's readings are named as its language names them: On and
  Kun, Pinyin, Eum and Hun (음, 훈); a letter means its sound and name.
- How characters are written comes by language: Chinese from Make Me a
  Hanzi (its medians in KanjiVG's square, Arphic Public License, a data
  file beside the app, never in cards), the Hangul letters drawn by the
  curator; a Korean word is written letter by letter (닭: ㄷ ㅏ ㄺ). Words
  of alphabets (German, Greek) aren't written by hand.
- A Chinese word's pinyin is typed in a session, tone numbers turning
  into marks (ni3 → nǐ); KRDict's levels (초급, 중급, 고급) tag Korean
  words; a Korean word's pronunciation shows in brackets ([가치]).
- Smaller: Look up in the composer keeps a noun's article; the Watch
  filter names its level list; hints and placeholders by language.

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

26 lines
1 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

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:flutter_test/flutter_test.dart';
import 'package:halkyon_learn_flutter/src/feature/kanji/model/hangul.dart';
void main() {
test('a Hangul syllable is written with its letters: the opening '
'consonant, the vowel and the closing one or cluster', () {
expect(hangulLetters('가'), ['ㄱ', 'ㅏ']);
expect(hangulLetters('닭'), ['ㄷ', 'ㅏ', 'ㄺ']);
expect(hangulLetters('쓰'), ['ㅆ', 'ㅡ']);
expect(hangulLetters('왜'), ['ㅇ', 'ㅙ']);
expect(hangulLetters('힣'), ['ㅎ', 'ㅣ', 'ㅎ']);
// What is no syllable stays as it is.
expect(hangulLetters('ㄱ'), ['ㄱ']);
expect(hangulLetters('食'), ['食']);
});
test('scripts whose strokes are drawn: Han characters, kana, Hangul; '
'not the alphabets', () {
expect(hasDrawnScript('食べる'), isTrue);
expect(hasDrawnScript('学习'), isTrue);
expect(hasDrawnScript('학교'), isTrue);
expect(hasDrawnScript('ㄱ'), isTrue);
expect(hasDrawnScript('das Haus'), isFalse);
expect(hasDrawnScript('Β β'), isFalse);
});
}