CCText/tests/t_api.py
2024-04-11 23:25:09 +03:00

93 lines
3.9 KiB
Python

''' Unit tests: api. '''
import unittest
import cctext as cc
class TestConceptAPI(unittest.TestCase):
'''Test class for Concept API.'''
def _assert_tags(self, actual: str, expected: str):
self.assertEqual(set(cc.split_grams(actual)), set(cc.split_grams(expected)))
def test_parse(self):
''' Test parsing. '''
self._assert_tags(cc.parse(''), '')
self._assert_tags(cc.parse('1'), 'NUMB,intg')
self._assert_tags(cc.parse('слон', require_grams='masc'), 'NOUN,anim,masc,sing,nomn')
def test_normalize_word(self):
''' Test normalize for single word. '''
self.assertEqual(cc.normalize(''), '')
self.assertEqual(cc.normalize('первого'), 'первый')
self.assertEqual(cc.normalize('диких людей'), 'дикий человек')
def test_generate_lexeme(self):
''' Test all lexical forms. '''
self.assertEqual(cc.generate_lexeme(''), [])
forms = cc.generate_lexeme('наверное')
self.assertEqual(len(forms), 1)
self.assertEqual(forms[0][0], 'наверное')
self._assert_tags(forms[0][1], 'CONJ,Prnt')
forms = cc.generate_lexeme('молодой человек')
self.assertEqual(len(forms), 19)
self.assertEqual(forms[0][0], 'молодой человек')
self._assert_tags(forms[0][1], 'nomn,masc,sing,anim,NOUN')
def test_inflect(self):
''' Test inflection. '''
self.assertEqual(cc.inflect('', ''), '')
self.assertEqual(cc.inflect('слона', 'nomn'), 'слон')
self.assertEqual(cc.inflect('слона', 'ADJF'), 'слона')
self.assertEqual(cc.inflect('слона', 'nomn,plur'), 'слоны')
self.assertEqual(cc.inflect('слона', 'nomn, plur'), 'слоны')
self.assertEqual(cc.inflect('шкала оценок', 'loct,plur'), 'шкалах оценок')
def test_find_substr(self):
'''Test substring search'''
self.assertEqual(cc.find_substr('', ''), (0, 0))
self.assertEqual(cc.find_substr('сложного красивого слона', 'красивые слоном'), (9, 24))
def test_inflect_context(self):
'''Test context inflection'''
self.assertEqual(cc.inflect_context('', '', ''), '')
self.assertEqual(cc.inflect_context('красивый', '', 'чашка'), 'красивая')
def test_inflect_substitute(self):
'''Test substitute inflection'''
self.assertEqual(cc.inflect_substitute('', ''), '')
self.assertEqual(cc.inflect_substitute('', 'слон'), '')
self.assertEqual(cc.inflect_substitute('слон', ''), 'слон')
self.assertEqual(cc.inflect_substitute('красивый бантик', 'кошкой'), 'красивым бантиком')
def test_inflect_dependant(self):
''' Test coordination inflection. '''
self.assertEqual(cc.inflect_dependant('', ''), '')
self.assertEqual(cc.inflect_dependant('', 'слон'), '')
self.assertEqual(cc.inflect_dependant('слон', ''), 'слон')
self.assertEqual(cc.inflect_dependant('общий', 'мать'), 'общая')
self.assertEqual(cc.inflect_dependant('синий', 'слонов'), 'синих')
def test_match_all_morpho(self):
''' Test extracting matching morpho. '''
self.assertEqual(cc.match_all_morpho('', ''), [])
self.assertEqual(cc.match_all_morpho('горит город', ''), [])
self.assertEqual(cc.match_all_morpho('горит город', 'NOUN'), [[6, 11]])
self.assertEqual(cc.match_all_morpho('горит город', 'VERB'), [[0, 5]])
self.assertEqual(cc.match_all_morpho('столица страны', 'NOUN'), [[0, 7], [8, 14]])
self.assertEqual(cc.match_all_morpho('столица страны', 'NOUN,sing,nomn'), [[0, 7]])
if __name__ == '__main__':
unittest.main()