15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import unittest 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from Cython.Compiler import Code, UtilityCode 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)def strip_2tup(tup): 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return tup[0] and tup[0].strip(), tup[1] and tup[1].strip() 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class TestUtilityLoader(unittest.TestCase): 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) """ 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Test loading UtilityCodes 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) """ 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected = "test {{loader}} prototype", "test {{loader}} impl" 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) required = "req {{loader}} proto", "req {{loader}} impl" 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) context = dict(loader='Loader') 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) name = "TestUtilityLoader" 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) filename = "TestUtilityLoader.c" 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cls = Code.UtilityCode 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def test_load_as_string(self): 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) got = strip_2tup(self.cls.load_as_string(self.name)) 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(got, self.expected) 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) got = strip_2tup(self.cls.load_as_string(self.name, self.filename)) 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(got, self.expected) 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def test_load(self): 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility = self.cls.load(self.name) 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) got = strip_2tup((utility.proto, utility.impl)) 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(got, self.expected) 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) required, = utility.requires 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) got = strip_2tup((required.proto, required.impl)) 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(got, self.required) 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility = self.cls.load(self.name, from_file=self.filename) 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) got = strip_2tup((utility.proto, utility.impl)) 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(got, self.expected) 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility = self.cls.load_cached(self.name, from_file=self.filename) 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) got = strip_2tup((utility.proto, utility.impl)) 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(got, self.expected) 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class TestTempitaUtilityLoader(TestUtilityLoader): 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) """ 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Test loading UtilityCodes with Tempita substitution 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) """ 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected_tempita = (TestUtilityLoader.expected[0].replace('{{loader}}', 'Loader'), 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestUtilityLoader.expected[1].replace('{{loader}}', 'Loader')) 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) required_tempita = (TestUtilityLoader.required[0].replace('{{loader}}', 'Loader'), 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestUtilityLoader.required[1].replace('{{loader}}', 'Loader')) 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cls = Code.TempitaUtilityCode 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def test_load_as_string(self): 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) got = strip_2tup(self.cls.load_as_string(self.name, context=self.context)) 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(got, self.expected_tempita) 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def test_load(self): 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility = self.cls.load(self.name, context=self.context) 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) got = strip_2tup((utility.proto, utility.impl)) 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(got, self.expected_tempita) 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) required, = utility.requires 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) got = strip_2tup((required.proto, required.impl)) 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(got, self.required_tempita) 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility = self.cls.load(self.name, from_file=self.filename, context=self.context) 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) got = strip_2tup((utility.proto, utility.impl)) 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(got, self.expected_tempita) 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class TestCythonUtilityLoader(TestTempitaUtilityLoader): 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) """ 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Test loading CythonUtilityCodes 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) """ 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # Just change the attributes and run the same tests 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected = None, "test {{cy_loader}} impl" 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected_tempita = None, "test CyLoader impl" 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) required = None, "req {{cy_loader}} impl" 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) required_tempita = None, "req CyLoader impl" 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) context = dict(cy_loader='CyLoader') 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) name = "TestCyUtilityLoader" 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) filename = "TestCyUtilityLoader.pyx" 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cls = UtilityCode.CythonUtilityCode 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # Small hack to pass our tests above 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cls.proto = None 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) test_load = TestUtilityLoader.test_load 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) test_load_tempita = TestTempitaUtilityLoader.test_load 102