test_path.py (5852B)
1 # This Source Code Form is subject to the terms of the Mozilla Public 2 # License, v. 2.0. If a copy of the MPL was not distributed with this 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5 import os 6 import unittest 7 8 import mozunit 9 10 from mozpack.path import ( 11 basedir, 12 basename, 13 commonprefix, 14 dirname, 15 join, 16 match, 17 normpath, 18 rebase, 19 relpath, 20 split, 21 splitext, 22 ) 23 24 25 class TestPath(unittest.TestCase): 26 SEP = os.sep 27 28 def test_relpath(self): 29 self.assertEqual(relpath("foo", "foo"), "") 30 self.assertEqual(relpath(self.SEP.join(("foo", "bar")), "foo/bar"), "") 31 self.assertEqual(relpath(self.SEP.join(("foo", "bar")), "foo"), "bar") 32 self.assertEqual( 33 relpath(self.SEP.join(("foo", "bar", "baz")), "foo"), "bar/baz" 34 ) 35 self.assertEqual(relpath(self.SEP.join(("foo", "bar")), "foo/bar/baz"), "..") 36 self.assertEqual(relpath(self.SEP.join(("foo", "bar")), "foo/baz"), "../bar") 37 self.assertEqual(relpath("foo/", "foo"), "") 38 self.assertEqual(relpath("foo/bar/", "foo"), "bar") 39 40 def test_join(self): 41 self.assertEqual(join("foo", "bar", "baz"), "foo/bar/baz") 42 self.assertEqual(join("foo", "", "bar"), "foo/bar") 43 self.assertEqual(join("", "foo", "bar"), "foo/bar") 44 self.assertEqual(join("", "foo", "/bar"), "/bar") 45 46 def test_normpath(self): 47 self.assertEqual( 48 normpath(self.SEP.join(("foo", "bar", "baz", "..", "qux"))), "foo/bar/qux" 49 ) 50 51 def test_dirname(self): 52 self.assertEqual(dirname("foo/bar/baz"), "foo/bar") 53 self.assertEqual(dirname("foo/bar"), "foo") 54 self.assertEqual(dirname("foo"), "") 55 self.assertEqual(dirname("foo/bar/"), "foo/bar") 56 57 def test_commonprefix(self): 58 self.assertEqual( 59 commonprefix([ 60 self.SEP.join(("foo", "bar", "baz")), 61 "foo/qux", 62 "foo/baz/qux", 63 ]), 64 "foo/", 65 ) 66 self.assertEqual( 67 commonprefix([self.SEP.join(("foo", "bar", "baz")), "foo/qux", "baz/qux"]), 68 "", 69 ) 70 71 def test_basename(self): 72 self.assertEqual(basename("foo/bar/baz"), "baz") 73 self.assertEqual(basename("foo/bar"), "bar") 74 self.assertEqual(basename("foo"), "foo") 75 self.assertEqual(basename("foo/bar/"), "") 76 77 def test_split(self): 78 self.assertEqual( 79 split(self.SEP.join(("foo", "bar", "baz"))), ["foo", "bar", "baz"] 80 ) 81 82 def test_splitext(self): 83 self.assertEqual( 84 splitext(self.SEP.join(("foo", "bar", "baz.qux"))), ("foo/bar/baz", ".qux") 85 ) 86 87 def test_basedir(self): 88 foobarbaz = self.SEP.join(("foo", "bar", "baz")) 89 self.assertEqual(basedir(foobarbaz, ["foo", "bar", "baz"]), "foo") 90 self.assertEqual(basedir(foobarbaz, ["foo", "foo/bar", "baz"]), "foo/bar") 91 self.assertEqual(basedir(foobarbaz, ["foo/bar", "foo", "baz"]), "foo/bar") 92 self.assertEqual(basedir(foobarbaz, ["foo", "bar", ""]), "foo") 93 self.assertEqual(basedir(foobarbaz, ["bar", "baz", ""]), "") 94 95 def test_match(self): 96 self.assertTrue(match("foo", "")) 97 self.assertTrue(match("foo/bar/baz.qux", "foo/bar")) 98 self.assertTrue(match("foo/bar/baz.qux", "foo")) 99 self.assertTrue(match("foo", "*")) 100 self.assertTrue(match("foo/bar/baz.qux", "foo/bar/*")) 101 self.assertTrue(match("foo/bar/baz.qux", "foo/bar/*")) 102 self.assertTrue(match("foo/bar/baz.qux", "foo/bar/*")) 103 self.assertTrue(match("foo/bar/baz.qux", "foo/bar/*")) 104 self.assertTrue(match("foo/bar/baz.qux", "foo/*/baz.qux")) 105 self.assertTrue(match("foo/bar/baz.qux", "*/bar/baz.qux")) 106 self.assertTrue(match("foo/bar/baz.qux", "*/*/baz.qux")) 107 self.assertTrue(match("foo/bar/baz.qux", "*/*/*")) 108 self.assertTrue(match("foo/bar/baz.qux", "foo/*/*")) 109 self.assertTrue(match("foo/bar/baz.qux", "foo/*/*.qux")) 110 self.assertTrue(match("foo/bar/baz.qux", "foo/b*/*z.qux")) 111 self.assertTrue(match("foo/bar/baz.qux", "foo/b*r/ba*z.qux")) 112 self.assertFalse(match("foo/bar/baz.qux", "foo/b*z/ba*r.qux")) 113 self.assertTrue(match("foo/bar/baz.qux", "**")) 114 self.assertTrue(match("foo/bar/baz.qux", "**/baz.qux")) 115 self.assertTrue(match("foo/bar/baz.qux", "**/bar/baz.qux")) 116 self.assertTrue(match("foo/bar/baz.qux", "foo/**/baz.qux")) 117 self.assertTrue(match("foo/bar/baz.qux", "foo/**/*.qux")) 118 self.assertTrue(match("foo/bar/baz.qux", "**/foo/bar/baz.qux")) 119 self.assertTrue(match("foo/bar/baz.qux", "foo/**/bar/baz.qux")) 120 self.assertTrue(match("foo/bar/baz.qux", "foo/**/bar/*.qux")) 121 self.assertTrue(match("foo/bar/baz.qux", "foo/**/*.qux")) 122 self.assertTrue(match("foo/bar/baz.qux", "**/*.qux")) 123 self.assertFalse(match("foo/bar/baz.qux", "**.qux")) 124 self.assertFalse(match("foo/bar", "foo/*/bar")) 125 self.assertTrue(match("foo/bar/baz.qux", "foo/**/bar/**")) 126 self.assertFalse(match("foo/nobar/baz.qux", "foo/**/bar/**")) 127 self.assertTrue(match("foo/bar", "foo/**/bar/**")) 128 129 def test_rebase(self): 130 self.assertEqual(rebase("foo", "foo/bar", "bar/baz"), "baz") 131 self.assertEqual(rebase("foo", "foo", "bar/baz"), "bar/baz") 132 self.assertEqual(rebase("foo/bar", "foo", "baz"), "bar/baz") 133 134 135 if os.altsep: 136 137 class TestAltPath(TestPath): 138 SEP = os.altsep 139 140 class TestReverseAltPath(TestPath): 141 def setUp(self): 142 sep = os.sep 143 os.sep = os.altsep 144 os.altsep = sep 145 146 def tearDown(self): 147 self.setUp() 148 149 class TestAltReverseAltPath(TestReverseAltPath): 150 SEP = os.altsep 151 152 153 if __name__ == "__main__": 154 mozunit.main()