1 # Written by Andrea Reale
2 # see LICENSE.txt for license information
5 from BaseLib.Core.Subtitles.MetadataDomainObjects.Languages import *
6 from BaseLib.Core.Subtitles.MetadataDomainObjects.Languages \
10 RES_DIR = os.path.join('..','..','..','subtitles_test_res')
13 class LanguagesTest(unittest.TestCase):
15 #32 correct language mappings
16 PATH_TO_TEST_LANGUAGES = 'subs_languages.csv'
17 #one description is missing in the csv file
18 PATH_TO_TEST_LANGUAGES_WRONG1 = 'wrong_subs_languages.1.csv'
19 #one character code is invalid in the csv file
20 PATH_TO_TEST_LANGUAGES_WRONG2 = "wrong_subs_languages.2.csv"
22 def test_loadLangugas(self):
23 listOfLanguages = _loadLanguages(os.path.join(RES_DIR, LanguagesTest.PATH_TO_TEST_LANGUAGES))
24 self.assertTrue(len(listOfLanguages) == 32)
25 for key, val in listOfLanguages.iteritems():
26 self.assertTrue(len(key) == 3)
27 self.assertTrue(val is not None)
29 self.assertRaises(ValueError,_loadLanguages, \
30 os.path.join(RES_DIR, LanguagesTest.PATH_TO_TEST_LANGUAGES_WRONG1))
32 self.assertRaises(ValueError,_loadLanguages, \
33 os.path.join(RES_DIR, LanguagesTest.PATH_TO_TEST_LANGUAGES_WRONG2))
35 def testLanguageInstance(self):
36 langInstance = Languages()
37 self.assertTrue(len(langInstance.supportedLanguages) == 32)
38 self.assertTrue(len(langInstance.langMappings) == 32)
39 #check if the mappings are all distinct values
40 bitmasksSet = set(langInstance.langMappings.values())
41 self.assertTrue(len(bitmasksSet) == 32)
43 def testCorrectMapping(self):
44 langInstance = Languages()
45 #checking if they are distinct is not sufficient since they
46 #can be assigned wrong values
48 for mask in langInstance.langMappings.values():
49 fullMask = fullMask ^ mask
51 #since I know there are 32 different language masks
52 self.assertEqual(0xFFFFFFFF, fullMask)
54 def testLangCodesToMask(self):
55 langInstance = Languages()
57 codes = ["eng", "nld", "ita"]
61 mask = langInstance.langCodesToMask(codes)
62 self.assertEquals((0x40 | 0x80000 | 0x2000), mask)
64 def testLangCodesToMaskEmpty(self):
65 langInstance = Languages()
67 mask = langInstance.langCodesToMask(codes)
68 self.assertEquals(0,mask)
72 def testInvalidLangCodesToMask(self):
73 langInstance = Languages()
75 #gne is an invalid language code
76 codes = ["eng", "nld", "gne"]
78 self.assertRaises(ValueError, langInstance.langCodesToMask, codes)
80 def testMaskToLangCodes(self):
81 langInstance = Languages()
83 eng, nld, ita = 0x40, 0x80000, 0x2000
84 mask = eng | nld | ita
86 codes = langInstance.maskToLangCodes(mask)
88 self.assertEquals(set(codes), set(["eng","nld","ita"]))
92 remask = remask | langInstance.langMappings[code]
94 self.assertEquals(mask, remask)
96 def testMaskToLangCodesLongerMask(self):
97 langInstance = Languages()
98 mask = 0x1FFFFFFFF #36 bits!
100 self.assertRaises(AssertionError, langInstance.maskToLangCodes,(mask,))
105 return unittest.TestLoader().loadTestsFromTestCase(LanguagesTest)
107 if __name__ == "__main__":
108 #import sys;sys.argv = ['', 'Test.test_loadLangugas']