Files
999/test/culture_branches_test.dart
T

49 lines
2.2 KiB
Dart

import 'dart:convert';
import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:words999/models/culture_branch.dart';
import 'package:words999/models/word_model.dart';
void main() {
final kb = json.decode(File('assets/data/oracle_kb.json').readAsStringSync()) as Map<String, dynamic>;
test('Cyrillic word boundaries work (Dart \\b is ASCII-only)', () {
final sumer = kCultureBranches.firstWhere((b) => b.id == 'sumer');
expect(sumer.matches(' В Шумере знак UD '), isTrue);
expect(sumer.matches(' безутешный '), isFalse); // "уту" inside a word must not match
});
test('ДЕНЬ is decomposed into many human traditions', () {
final w = const WordItem(id: 6, word: 'день', partOfSpeech: '', frequency: 1)
.enrichWithKb(kb['день'] as Map<String, dynamic>);
final c = w.resolvedCultures;
for (final name in [
'Шумер и Месопотамия',
'Древний Египет',
'Иудейская традиция и Каббала',
'Античность (Греция и Рим)',
'Кельты и друиды',
'Древний Китай',
'Полинезия и Океания',
'Мезоамерика и Анды',
'Алхимия и герметизм',
]) {
expect(c.containsKey(name), isTrue, reason: 'missing $name; got ${c.keys}');
}
});
test('НОЧЬ covers Islamic/Sufi and Sumerian layers', () {
final w = const WordItem(id: 7, word: 'ночь', partOfSpeech: '', frequency: 1)
.enrichWithKb(kb['ночь'] as Map<String, dynamic>);
final c = w.resolvedCultures;
expect(c.keys, containsAll(['Ислам и суфизм', 'Шумер и Месопотамия', 'Древний Египет', 'Древний Китай']));
});
test('explicit cultures override auto-extraction and survive toMap/fromMap', () {
const w = WordItem(id: 1, word: 'x', partOfSpeech: '', frequency: 1, cultures: {'Славянская традиция': 'Навь'});
final back = WordItem.fromMap(w.toMap());
expect(back.resolvedCultures, {'Славянская традиция': 'Навь'});
});
}