Coverage for tests/test_schemeless.py: 9%
51 statements
« prev ^ index » next coverage.py v7.4.3, created at 2024-03-13 09:59 +0000
« prev ^ index » next coverage.py v7.4.3, created at 2024-03-13 09:59 +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)
29 rel_to_abs = relative_uri.abspath()
31 # Converted to a file URI.
32 abs_uri = ResourcePath(relative, forceAbsolute=True)
33 self.assertEqual(abs_uri.scheme, "file")
34 self.assertTrue(abs_uri.isabs())
35 self.assertEqual(abs_uri, rel_to_abs)
37 # An absolute path is converted to a file URI.
38 file_uri = ResourcePath(abspath)
39 self.assertEqual(file_uri.scheme, "file")
40 self.assertTrue(file_uri.isabs())
42 # Use a prefix root.
43 prefix = "/a/b/"
44 abs_uri = ResourcePath(relative, root=prefix)
45 self.assertEqual(abs_uri.ospath, f"{prefix}{relative}")
46 self.assertEqual(abs_uri.scheme, "file")
48 # Use a file prefix.
49 prefix = "file://localhost/a/b/"
50 prefix_uri = ResourcePath(prefix)
51 file_uri = ResourcePath(relative, root=prefix_uri)
52 self.assertEqual(str(file_uri), f"file://{prefix_uri.ospath}{relative}")
54 # Fragments should be fine.
55 relative_uri = ResourcePath(relative + "#frag", forceAbsolute=False)
56 self.assertEqual(str(relative_uri), f"{relative}#frag")
58 file_uri = ResourcePath(relative + "#frag", root=prefix_uri)
59 self.assertEqual(str(file_uri), f"file://{prefix_uri.ospath}{relative}#frag")
61 # Fragments should not be encoded.
62 relative_uri = ResourcePath(relative + "#a,b", forceAbsolute=False)
63 self.assertEqual(str(relative_uri), f"{relative}#a,b")
65 # file URI with # in directory name does not encode fragment.
66 file_uri = ResourcePath("./relati#ve/file.yaml#a,v", root=prefix_uri)
67 self.assertEqual(str(file_uri), f"file://{prefix_uri.ospath}relati%23ve/file.yaml#a,v")
69 # Can not have a root that refers to a file.
70 with self.assertRaises(ValueError):
71 ResourcePath(
72 relative, root=ResourcePath("resource://lsst.resources/something.txt", forceDirectory=False)
73 )
75 with_root = ResourcePath(relative, root=ResourcePath("resource://lsst.resources/d/"))
76 self.assertEqual(with_root.geturl(), "resource://lsst.resources/d/a/b/c.txt")
78 def test_isdir(self):
79 """Test that isdir() can check the file system."""
80 # Get the relative path for the current test file.
81 file = ResourcePath(__file__)
82 cwd = ResourcePath(".")
83 f = ResourcePath(file.relative_to(cwd), forceAbsolute=False)
85 self.assertFalse(f.scheme)
86 self.assertTrue(f.exists())
87 self.assertIsNone(f.dirLike)
88 self.assertFalse(f.isdir())
90 # Check that the dirLike has not been updated since we know that
91 # cwd could change so caching is bad.
92 self.assertIsNone(f.dirLike)
94 # Check that a file that does not exist does not update the dirLike
95 # flag.
96 f = ResourcePath("a/b/c_not_here.txt", forceAbsolute=False)
97 self.assertFalse(f.scheme)
98 self.assertFalse(f.isdir())
99 self.assertIsNone(f.dirLike)
102if __name__ == "__main__":
103 unittest.main()