Coverage for tests/test_schemeless.py: 9%

51 statements  

« prev     ^ index     » next       coverage.py v7.4.1, created at 2024-02-01 11:14 +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. 

11 

12import unittest 

13 

14from lsst.resources import ResourcePath 

15 

16 

17class SchemelessTestCase(unittest.TestCase): 

18 """Test the behavior of a schemeless URI.""" 

19 

20 def test_creation(self) -> None: 

21 """Test creation from schemeless URI.""" 

22 relative = "a/b/c.txt" 

23 abspath = "/a/b/c.txt" 

24 

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() 

30 

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) 

36 

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()) 

41 

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") 

47 

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}") 

53 

54 # Fragments should be fine. 

55 relative_uri = ResourcePath(relative + "#frag", forceAbsolute=False) 

56 self.assertEqual(str(relative_uri), f"{relative}#frag") 

57 

58 file_uri = ResourcePath(relative + "#frag", root=prefix_uri) 

59 self.assertEqual(str(file_uri), f"file://{prefix_uri.ospath}{relative}#frag") 

60 

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") 

64 

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") 

68 

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 ) 

74 

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") 

77 

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) 

84 

85 self.assertFalse(f.scheme) 

86 self.assertTrue(f.exists()) 

87 self.assertIsNone(f.dirLike) 

88 self.assertFalse(f.isdir()) 

89 

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) 

93 

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) 

100 

101 

102if __name__ == "__main__": 

103 unittest.main()