from chrysacase import ChrysalideTestCase from pychrysalide.common import pathname class TestPathnames(ChrysalideTestCase): """TestCase for common.pathname*""" @classmethod def setUpClass(cls): super(TestPathnames, cls).setUpClass() cls._tests = [ { 'ref' : '/a/b/d', 'target' : '/a/b/e/f', 'relative' : 'e/f' }, { 'ref' : '/a/b/c/d', 'target' : '/a/b/f', 'relative' : '../f' }, { 'ref' : '/a/b/c/d', 'target' : '/a/b/c/e', 'relative' : 'e' }, { 'ref' : '/a/bb/c/d', 'target' : '/a/b/e/f', 'relative' : '../../b/e/f' }, { 'ref' : '/a/b/c/d', 'target' : '/a/bb/e/f', 'relative' : '../../bb/e/f' }, { 'ref' : '/a/b/c/d', 'target' : '/f', 'relative' : '../../../f' }, { 'ref' : '/z/b/c/d', 'target' : '/a/b/e/f', 'relative' : '../../../a/b/e/f' }, { 'ref' : '/a/bbb/c/d', 'target' : '/a/bbc/e/f', 'relative' : '../../bbc/e/f' } ] def testBuildingRelative(self): """Build valid relative paths.""" build_relative = pathname.build_relative_filename for tst in self._tests: got = build_relative(tst['ref'], tst['target']) self.assertEqual(got, tst['relative']) def testBuildingAbsolute(self): """Build valid absolute paths.""" build_absolute = pathname.build_absolute_filename for tst in self._tests: got = build_absolute(tst['ref'], tst['relative']) self.assertEqual(got, tst['target']) def testBuildingWrongAbsolute(self): """Build invalid absolute paths.""" build_absolute = pathname.build_absolute_filename with self.assertRaisesRegex(Exception, 'Relative path is too deep.'): got = build_absolute('/a/b', '../../c') def testPathnameConstructor(self): """Check that no constructor is available for the pathname class.""" with self.assertRaisesRegex(NotImplementedError, 'Chrysalide does not allow building this kind of object from Python'): instance = pathname() def testPathnameSamples(self): """Play with some path samples.""" filename = pathname.build_absolute_filename('/tmp/deep', '../myfile') self.assertEqual(filename, '/myfile') filename = pathname.build_absolute_filename('/tmp/deep/', '../myfile') self.assertEqual(filename, '/tmp/myfile') filename = pathname.build_relative_filename('/tmp/deep', '/myfile') self.assertEqual(filename, '../myfile')