1import unittest 2 3from Cython.Compiler import Code, UtilityCode 4 5 6def strip_2tup(tup): 7 return tup[0] and tup[0].strip(), tup[1] and tup[1].strip() 8 9class TestUtilityLoader(unittest.TestCase): 10 """ 11 Test loading UtilityCodes 12 """ 13 14 expected = "test {{loader}} prototype", "test {{loader}} impl" 15 16 required = "req {{loader}} proto", "req {{loader}} impl" 17 18 context = dict(loader='Loader') 19 20 name = "TestUtilityLoader" 21 filename = "TestUtilityLoader.c" 22 cls = Code.UtilityCode 23 24 def test_load_as_string(self): 25 got = strip_2tup(self.cls.load_as_string(self.name)) 26 self.assertEquals(got, self.expected) 27 28 got = strip_2tup(self.cls.load_as_string(self.name, self.filename)) 29 self.assertEquals(got, self.expected) 30 31 def test_load(self): 32 utility = self.cls.load(self.name) 33 got = strip_2tup((utility.proto, utility.impl)) 34 self.assertEquals(got, self.expected) 35 36 required, = utility.requires 37 got = strip_2tup((required.proto, required.impl)) 38 self.assertEquals(got, self.required) 39 40 utility = self.cls.load(self.name, from_file=self.filename) 41 got = strip_2tup((utility.proto, utility.impl)) 42 self.assertEquals(got, self.expected) 43 44 utility = self.cls.load_cached(self.name, from_file=self.filename) 45 got = strip_2tup((utility.proto, utility.impl)) 46 self.assertEquals(got, self.expected) 47 48 49class TestTempitaUtilityLoader(TestUtilityLoader): 50 """ 51 Test loading UtilityCodes with Tempita substitution 52 """ 53 expected_tempita = (TestUtilityLoader.expected[0].replace('{{loader}}', 'Loader'), 54 TestUtilityLoader.expected[1].replace('{{loader}}', 'Loader')) 55 56 required_tempita = (TestUtilityLoader.required[0].replace('{{loader}}', 'Loader'), 57 TestUtilityLoader.required[1].replace('{{loader}}', 'Loader')) 58 59 cls = Code.TempitaUtilityCode 60 61 def test_load_as_string(self): 62 got = strip_2tup(self.cls.load_as_string(self.name, context=self.context)) 63 self.assertEquals(got, self.expected_tempita) 64 65 def test_load(self): 66 utility = self.cls.load(self.name, context=self.context) 67 got = strip_2tup((utility.proto, utility.impl)) 68 self.assertEquals(got, self.expected_tempita) 69 70 required, = utility.requires 71 got = strip_2tup((required.proto, required.impl)) 72 self.assertEquals(got, self.required_tempita) 73 74 utility = self.cls.load(self.name, from_file=self.filename, context=self.context) 75 got = strip_2tup((utility.proto, utility.impl)) 76 self.assertEquals(got, self.expected_tempita) 77 78 79class TestCythonUtilityLoader(TestTempitaUtilityLoader): 80 """ 81 Test loading CythonUtilityCodes 82 """ 83 84 # Just change the attributes and run the same tests 85 expected = None, "test {{cy_loader}} impl" 86 expected_tempita = None, "test CyLoader impl" 87 88 required = None, "req {{cy_loader}} impl" 89 required_tempita = None, "req CyLoader impl" 90 91 context = dict(cy_loader='CyLoader') 92 93 name = "TestCyUtilityLoader" 94 filename = "TestCyUtilityLoader.pyx" 95 cls = UtilityCode.CythonUtilityCode 96 97 # Small hack to pass our tests above 98 cls.proto = None 99 100 test_load = TestUtilityLoader.test_load 101 test_load_tempita = TestTempitaUtilityLoader.test_load 102