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); }); }