import os.path import lxml.etree as lxml import unittest from conversion_utils.jos_msds_and_properties import SpecificationsBuilder, MsdToProperties class JosMsdToPropertiesTestCase(unittest.TestCase): def setUp(self): specifications_file_name = os.path.join(os.path.dirname(__file__), '../resources/msd-sl.spc.xml') builder = SpecificationsBuilder() self.specifications = builder.build(specifications_file_name) self.converter = MsdToProperties() def test_en_en(self): properties = self.converter.convert(self.specifications, 'miza', 'Ncfpd', 'en', 'en') self.assertEqual(properties.language, 'en') self.assertEqual(properties.category, 'noun') self.assertEqual(properties.lexeme_feature_map, {'type':'common', 'gender':'feminine'}) self.assertEqual(properties.form_feature_map, {'number':'plural', 'case':'dative'}) def test_en_sl(self): properties = self.converter.convert(self.specifications, 'miza', 'Ncfpd', 'en', 'sl') self.assertEqual(properties.language, 'sl') self.assertEqual(properties.category, 'samostalnik') self.assertEqual(properties.lexeme_feature_map, {'vrsta':'občno_ime', 'spol':'ženski'}) self.assertEqual(properties.form_feature_map, {'število':'množina', 'sklon':'dajalnik'}) def test_sl_en(self): properties = self.converter.convert(self.specifications, 'miza', 'Sozmd', 'sl', 'en') self.assertEqual(properties.language, 'en') self.assertEqual(properties.category, 'noun') self.assertEqual(properties.lexeme_feature_map, {'type':'common', 'gender':'feminine'}) self.assertEqual(properties.form_feature_map, {'number':'plural', 'case':'dative'}) def test_sl_sl(self): properties = self.converter.convert(self.specifications, 'miza', 'Sozmd', 'sl', 'sl') self.assertEqual(properties.language, 'sl') self.assertEqual(properties.category, 'samostalnik') self.assertEqual(properties.lexeme_feature_map, {'vrsta':'občno_ime', 'spol':'ženski'}) self.assertEqual(properties.form_feature_map, {'število':'množina', 'sklon':'dajalnik'}) def test_exception_feature_level(self): # testing level exception: ('pronoun', 8, 'ti') properties = self.converter.convert(self.specifications, 'ti', 'Pp2-sd--y', 'en', 'sl') self.assertEqual(properties.language, 'sl') self.assertEqual(properties.category, 'zaimek') self.assertEqual(properties.lexeme_feature_map, {'vrsta':'osebni', 'oseba':'druga'}) self.assertEqual(properties.form_feature_map, {'število':'ednina', 'sklon':'dajalnik', 'naslonskost':'klitična'}) def test_normal_feature_level(self): # invalid msd, but useful for testing contrast with previous test properties = self.converter.convert(self.specifications, 'vi', 'Pp2-pd--y', 'en', 'sl') self.assertEqual(properties.language, 'sl') self.assertEqual(properties.category, 'zaimek') self.assertEqual(properties.lexeme_feature_map, {'vrsta':'osebni', 'oseba':'druga', 'naslonskost':'klitična'}) self.assertEqual(properties.form_feature_map, {'število':'množina', 'sklon':'dajalnik'}) def test_featureless(self): properties = self.converter.convert(self.specifications, 'in', 'V', 'sl', 'en') self.assertEqual(properties.language, 'en') self.assertEqual(properties.category, 'conjunction') self.assertEqual(properties.lexeme_feature_map, {}) self.assertEqual(properties.form_feature_map, {})