49 lines
2.2 KiB
Dart
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, {'Славянская традиция': 'Навь'});
|
|
});
|
|
}
|