instrumentation: add next-share/
[cs-p2p-next.git] / instrumentation / next-share / BaseLib / Test / Core / Subtitles / MetadataDomainObjects / test_Langugages.py
1 # Written by Andrea Reale
2 # see LICENSE.txt for license information
3
4 import unittest
5 from BaseLib.Core.Subtitles.MetadataDomainObjects.Languages import *
6 from BaseLib.Core.Subtitles.MetadataDomainObjects.Languages \
7 import _loadLanguages
8 import os.path
9
10 RES_DIR = os.path.join('..','..','..','subtitles_test_res')
11
12
13 class LanguagesTest(unittest.TestCase):
14
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"
21
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)
28         
29         self.assertRaises(ValueError,_loadLanguages, \
30             os.path.join(RES_DIR, LanguagesTest.PATH_TO_TEST_LANGUAGES_WRONG1))
31         
32         self.assertRaises(ValueError,_loadLanguages, \
33             os.path.join(RES_DIR, LanguagesTest.PATH_TO_TEST_LANGUAGES_WRONG2))
34         
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)
42         
43     def testCorrectMapping(self):
44         langInstance = Languages()
45         #checking if they are distinct is not sufficient since  they
46         #can be assigned wrong values
47         fullMask = 0
48         for mask in langInstance.langMappings.values():
49             fullMask = fullMask ^ mask
50         
51         #since I know there are 32 different language masks
52         self.assertEqual(0xFFFFFFFF, fullMask)
53         
54     def testLangCodesToMask(self):
55         langInstance = Languages()
56          
57         codes = ["eng", "nld", "ita"]
58         # eng is 0x40
59         # nld is 0x80000
60         # ita is 0x2000
61         mask = langInstance.langCodesToMask(codes)
62         self.assertEquals((0x40 | 0x80000 | 0x2000), mask)
63     
64     def testLangCodesToMaskEmpty(self):
65         langInstance = Languages()
66         codes = []
67         mask = langInstance.langCodesToMask(codes)
68         self.assertEquals(0,mask)
69
70         
71         
72     def testInvalidLangCodesToMask(self):
73         langInstance = Languages()
74         
75         #gne is an invalid language code 
76         codes = ["eng", "nld", "gne"]
77         
78         self.assertRaises(ValueError, langInstance.langCodesToMask, codes)
79     
80     def testMaskToLangCodes(self):
81         langInstance = Languages()
82       
83         eng, nld, ita = 0x40, 0x80000, 0x2000
84         mask = eng | nld | ita
85         
86         codes = langInstance.maskToLangCodes(mask)
87         
88         self.assertEquals(set(codes), set(["eng","nld","ita"]))
89         
90         remask = 0
91         for code in codes:
92             remask = remask | langInstance.langMappings[code]
93         
94         self.assertEquals(mask, remask)
95         
96     def testMaskToLangCodesLongerMask(self):
97         langInstance = Languages()
98         mask = 0x1FFFFFFFF #36 bits!
99         
100         self.assertRaises(AssertionError, langInstance.maskToLangCodes,(mask,))
101         
102
103
104 def suite():
105     return unittest.TestLoader().loadTestsFromTestCase(LanguagesTest)
106
107 if __name__ == "__main__":
108     #import sys;sys.argv = ['', 'Test.test_loadLangugas']
109     unittest.main()