frindlymap/test/kinship_side_test.dart

56 lines
2.0 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:friendly_map/modules/kinship/kinship.dart';
const M = Gender.male, F = Gender.female;
void main() {
KinGraph tree() {
final g = KinGraph();
for (final (id, gen) in [('me', M), ('dad', M), ('mom', F), ('gf', M), ('mgf', M), ('uncle', M), ('cousin', F), ('sis', F), ('wife', F), ('wifeDad', M), ('auntInLaw', F), ('son', M), ('x', M), ('p', Gender.unknown), ('pp', M)]) {
g.put(KinPerson(id, gender: gen));
}
g.addParent('me', 'dad');
g.addParent('me', 'mom');
g.addParent('sis', 'dad');
g.addParent('dad', 'gf');
g.addParent('mom', 'mgf');
g.addParent('uncle', 'gf');
g.addParent('cousin', 'uncle');
g.addSpouse('uncle', 'auntInLaw');
g.addSpouse('me', 'wife');
g.addParent('wife', 'wifeDad');
g.addParent('son', 'me');
return g;
}
test('가까운 가족: 부모·형제·배우자·자녀', () {
final g = tree();
for (final id in ['dad', 'mom', 'sis', 'wife', 'son']) {
expect(familySide(g, 'me', id), FamilySide.close, reason: id);
}
});
test('아버지 쪽은 친가, 어머니 쪽은 외가', () {
final g = tree();
expect(familySide(g, 'me', 'gf'), FamilySide.paternal);
expect(familySide(g, 'me', 'uncle'), FamilySide.paternal);
expect(familySide(g, 'me', 'cousin'), FamilySide.paternal);
expect(familySide(g, 'me', 'mgf'), FamilySide.maternal);
});
test('배우자 쪽은 처가·시가, 내 혈족의 배우자는 그 혈족의 쪽', () {
final g = tree();
expect(familySide(g, 'me', 'wifeDad'), FamilySide.inlaw);
expect(familySide(g, 'me', 'auntInLaw'), FamilySide.paternal);
});
test('부모 성별을 모르면 쪽을 모름, 이어지지 않으면 none', () {
final g = tree();
g.addParent('x', 'p');
g.addParent('p', 'pp');
expect(familySide(g, 'x', 'pp'), FamilySide.unknown);
expect(familySide(g, 'me', 'x'), FamilySide.none);
expect(familySide(g, 'me', 'me'), FamilySide.none);
});
}