Coverage for tests/test_schemeless.py: 11%
34 statements
« prev ^ index » next coverage.py v7.3.2, created at 2023-11-30 11:34 +0000
« prev ^ index » next coverage.py v7.3.2, created at 2023-11-30 11:34 +0000
1# This file is part of lsst-resources.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (https://www.lsst.org).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
8#
9# Use of this source code is governed by a 3-clause BSD-style
10# license that can be found in the LICENSE file.
12import unittest
14from lsst.resources import ResourcePath
17class SchemelessTestCase(unittest.TestCase):
18 """Test the behavior of a schemeless URI."""
20 def test_creation(self) -> None:
21 """Test creation from schemeless URI."""
22 relative = "a/b/c.txt"
23 abspath = "/a/b/c.txt"
25 relative_uri = ResourcePath(relative, forceAbsolute=False)
26 self.assertFalse(relative_uri.scheme)
27 self.assertFalse(relative_uri.isabs())
28 self.assertEqual(relative_uri.ospath, relative)
30 # Converted to a file URI.
31 abs_uri = ResourcePath(relative, forceAbsolute=True)
32 self.assertEqual(abs_uri.scheme, "file")
33 self.assertTrue(abs_uri.isabs())
35 # An absolute path is converted to a file URI.
36 file_uri = ResourcePath(abspath)
37 self.assertEqual(file_uri.scheme, "file")
38 self.assertTrue(file_uri.isabs())
40 # Use a prefix root.
41 prefix = "/a/b/"
42 abs_uri = ResourcePath(relative, root=prefix)
43 self.assertEqual(abs_uri.ospath, f"{prefix}{relative}")
44 self.assertEqual(abs_uri.scheme, "file")
46 # Use a file prefix.
47 prefix = "file://localhost/a/b/"
48 prefix_uri = ResourcePath(prefix)
49 file_uri = ResourcePath(relative, root=prefix_uri)
50 self.assertEqual(str(file_uri), f"file://{prefix_uri.ospath}{relative}")
52 # Fragments should be fine.
53 relative_uri = ResourcePath(relative + "#frag", forceAbsolute=False)
54 self.assertEqual(str(relative_uri), f"{relative}#frag")
56 file_uri = ResourcePath(relative + "#frag", root=prefix_uri)
57 self.assertEqual(str(file_uri), f"file://{prefix_uri.ospath}{relative}#frag")
59 # Fragments should not be encoded.
60 relative_uri = ResourcePath(relative + "#a,b", forceAbsolute=False)
61 self.assertEqual(str(relative_uri), f"{relative}#a,b")
63 # file URI with # in directory name does not encode fragment.
64 file_uri = ResourcePath("./relati#ve/file.yaml#a,v", root=prefix_uri)
65 self.assertEqual(str(file_uri), f"file://{prefix_uri.ospath}relati%23ve/file.yaml#a,v")
67 # For historical reasons a a root can not be anything other
68 # than a file. This does not really make sense in the general
69 # sense but can be implemented using uri.join().
70 with self.assertRaises(ValueError):
71 ResourcePath(relative, root=ResourcePath("resource://lsst.resources/something.txt"))
74if __name__ == "__main__":
75 unittest.main()