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>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-19 20:08:06 +02:00
commit 649499be23
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -0,0 +1,45 @@
import 'dart:convert';
import 'package:halkyon_learn_curator/src/sources/alphabets.dart';
import 'package:test/test.dart';
void main() {
test('the Greek alphabet in its order, each letter with its capital, '
'names, transliteration and sound', () {
final [header, ...letters] = [
for (final line in greekAlphabet())
jsonDecode(line) as Map<String, Object?>,
];
expect(header['source'], 'greek-alphabet');
expect(header['kind'], 'characters');
expect(header['language'], 'el');
expect(letters, hasLength(24));
expect(letters.first['headword'], 'Α α');
final sigma = letters.singleWhere((letter) => letter['id'] == 'σ');
expect(sigma['headword'], 'Σ σ ς');
expect(sigma['keys'], containsAll(['ς', 'σίγμα', 'sigma', 's']));
expect(letters[1]['entry'], {
'romaji': 'v',
'script': 'greek',
'name': 'βήτα',
'englishName': 'beta',
'sound': 'v',
});
// Found by a name typed without its accent.
expect(letters.last['keys'], contains('ωμεγα'));
});
test('the Hangul letters in the order schools teach them, found by sound '
'and name', () {
final letters = hangulEntries();
expect(letters, hasLength(40));
expect(letters.first.headword, 'ㄱ');
expect(letters.first.keys, containsAll(['ㄱ', '기역', 'g', 'k']));
// ㅇ is silent opening a syllable: no key for its sound there.
final ieung = letters.singleWhere((letter) => letter.id == 'ㅇ');
expect(ieung.keys, ['ㅇ', '이응', 'ng']);
expect(letters.last.headword, 'ㅢ');
});
}