81 lines
3.9 KiB
Python
81 lines
3.9 KiB
Python
import unittest
|
|
|
|
from conversion_utils.jos_msds_and_properties import Converter, Properties, MsdException, Msd, MsdState
|
|
|
|
class JosPropertiesToMsdTestCase(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.converter = Converter()
|
|
|
|
def test_en_en(self):
|
|
msd = self.converter.properties_to_msd(Properties('noun', {'type':'common', 'gender':'feminine'}, {'number':'dual', 'case':'nominative'}, 'en'), 'en')
|
|
self.assertEqual(msd.language, 'en')
|
|
self.assertEqual(msd.code, 'Ncfdn')
|
|
|
|
def test_en_sl(self):
|
|
msd = self.converter.properties_to_msd(Properties('noun', {'type':'common', 'gender':'feminine'}, {'number':'dual', 'case':'nominative'}, 'en'), 'sl')
|
|
self.assertEqual(msd.language, 'sl')
|
|
self.assertEqual(msd.code, 'Sozdi')
|
|
|
|
def test_sl_en(self):
|
|
msd = self.converter.properties_to_msd(Properties('samostalnik', {'vrsta':'občno_ime', 'spol':'ženski'}, {'število':'dvojina', 'sklon':'imenovalnik'}, 'sl'), 'en')
|
|
self.assertEqual(msd.language, 'en')
|
|
self.assertEqual(msd.code, 'Ncfdn')
|
|
|
|
def test_sl_sl(self):
|
|
msd = self.converter.properties_to_msd(Properties('samostalnik', {'vrsta':'občno_ime', 'spol':'ženski'}, {'število':'dvojina', 'sklon':'imenovalnik'}, 'sl'), 'sl')
|
|
self.assertEqual(msd.language, 'sl')
|
|
self.assertEqual(msd.code, 'Sozdi')
|
|
|
|
def test_exception_feature_level(self):
|
|
msd = self.converter.properties_to_msd(Properties('zaimek', {'vrsta':'osebni', 'oseba':'druga'}, {'število':'ednina', 'sklon':'dajalnik', 'naslonskost':'klitična'}, 'sl'), 'en')
|
|
self.assertEqual(msd.language, 'en')
|
|
self.assertEqual(msd.code, 'Pp2-sd--y')
|
|
|
|
def test_normal_feature_level(self):
|
|
msd = self.converter.properties_to_msd(Properties('zaimek', {'vrsta':'povratni', 'naslonskost':'klitična'}, {}, 'sl'), 'en')
|
|
self.assertEqual(msd.language, 'en')
|
|
self.assertEqual(msd.code, 'Px------y')
|
|
|
|
def test_featureless(self):
|
|
msd = self.converter.properties_to_msd(Properties('punctuation', {}, {}, 'en'), 'sl')
|
|
self.assertEqual(msd.language, 'sl')
|
|
self.assertEqual(msd.code, 'U')
|
|
|
|
def test_good_msd_with_require_valid(self):
|
|
msd = self.converter.properties_to_msd(Properties('noun', {'type':'common', 'gender':'feminine'}, {'number':'dual', 'case':'nominative'}, 'en'), 'en', require_valid=True)
|
|
self.assertEqual(msd.language, 'en')
|
|
self.assertEqual(msd.code, 'Ncfdn')
|
|
|
|
def test_bad_msd(self):
|
|
msd = self.converter.properties_to_msd(Properties('noun', {'type':'common'}, {'number':'dual'}, 'en'), 'en', expected_state=MsdState.UNKNOWN)
|
|
self.assertEqual(msd.language, 'en')
|
|
self.assertEqual(msd.code, 'Nc-d')
|
|
|
|
def test_msd_to_jos(self):
|
|
ud = self.converter.msd_to_ud(Msd('Ppnzei', 'sl'), 'slovenski')
|
|
self.assertEqual(ud.pos, 'ADJ')
|
|
self.assertEqual(ud.to_full_string(), 'UposTag=ADJ|Case=Nom|Degree=Pos|Gender=Fem|Number=Sing')
|
|
self.assertEqual(ud.to_features_string(), 'Case=Nom|Degree=Pos|Gender=Fem|Number=Sing')
|
|
|
|
ud = self.converter.msd_to_ud(Msd('Sommr', 'sl'), 'dečko')
|
|
self.assertEqual(ud.pos, 'NOUN')
|
|
self.assertEqual(ud.to_full_string(), 'UposTag=NOUN|Case=Gen|Gender=Masc|Number=Plur')
|
|
self.assertEqual(ud.to_features_string(), 'Case=Gen|Gender=Masc|Number=Plur')
|
|
|
|
def test_msd_to_jos_partial_msd(self):
|
|
try:
|
|
self.converter.msd_to_ud(Msd('Soz', 'sl', expected_state=MsdState.PARTIAL), 'vlada')
|
|
fails = False
|
|
except MsdException:
|
|
fails = True
|
|
self.assertEqual(fails, True)
|
|
|
|
def test_bad_msd_with_require_valid(self):
|
|
try:
|
|
self.converter.properties_to_msd(Properties('noun', {'type':'common'}, {'number':'dual'}, 'en'), 'en', require_valid=True)
|
|
fails = False
|
|
except MsdException:
|
|
fails = True
|
|
self.assertEqual(fails, True)
|