summaryrefslogtreecommitdiffstats
path: root/python/mozbuild/mozpack/test/test_path.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozbuild/mozpack/test/test_path.py')
-rw-r--r--python/mozbuild/mozpack/test/test_path.py151
1 files changed, 151 insertions, 0 deletions
diff --git a/python/mozbuild/mozpack/test/test_path.py b/python/mozbuild/mozpack/test/test_path.py
new file mode 100644
index 0000000000..daee5df0e4
--- /dev/null
+++ b/python/mozbuild/mozpack/test/test_path.py
@@ -0,0 +1,151 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import os
+import unittest
+
+import mozunit
+from mozpack.path import (
+ basedir,
+ basename,
+ commonprefix,
+ dirname,
+ join,
+ match,
+ normpath,
+ rebase,
+ relpath,
+ split,
+ splitext,
+)
+
+
+class TestPath(unittest.TestCase):
+ SEP = os.sep
+
+ def test_relpath(self):
+ self.assertEqual(relpath("foo", "foo"), "")
+ self.assertEqual(relpath(self.SEP.join(("foo", "bar")), "foo/bar"), "")
+ self.assertEqual(relpath(self.SEP.join(("foo", "bar")), "foo"), "bar")
+ self.assertEqual(
+ relpath(self.SEP.join(("foo", "bar", "baz")), "foo"), "bar/baz"
+ )
+ self.assertEqual(relpath(self.SEP.join(("foo", "bar")), "foo/bar/baz"), "..")
+ self.assertEqual(relpath(self.SEP.join(("foo", "bar")), "foo/baz"), "../bar")
+ self.assertEqual(relpath("foo/", "foo"), "")
+ self.assertEqual(relpath("foo/bar/", "foo"), "bar")
+
+ def test_join(self):
+ self.assertEqual(join("foo", "bar", "baz"), "foo/bar/baz")
+ self.assertEqual(join("foo", "", "bar"), "foo/bar")
+ self.assertEqual(join("", "foo", "bar"), "foo/bar")
+ self.assertEqual(join("", "foo", "/bar"), "/bar")
+
+ def test_normpath(self):
+ self.assertEqual(
+ normpath(self.SEP.join(("foo", "bar", "baz", "..", "qux"))), "foo/bar/qux"
+ )
+
+ def test_dirname(self):
+ self.assertEqual(dirname("foo/bar/baz"), "foo/bar")
+ self.assertEqual(dirname("foo/bar"), "foo")
+ self.assertEqual(dirname("foo"), "")
+ self.assertEqual(dirname("foo/bar/"), "foo/bar")
+
+ def test_commonprefix(self):
+ self.assertEqual(
+ commonprefix(
+ [self.SEP.join(("foo", "bar", "baz")), "foo/qux", "foo/baz/qux"]
+ ),
+ "foo/",
+ )
+ self.assertEqual(
+ commonprefix([self.SEP.join(("foo", "bar", "baz")), "foo/qux", "baz/qux"]),
+ "",
+ )
+
+ def test_basename(self):
+ self.assertEqual(basename("foo/bar/baz"), "baz")
+ self.assertEqual(basename("foo/bar"), "bar")
+ self.assertEqual(basename("foo"), "foo")
+ self.assertEqual(basename("foo/bar/"), "")
+
+ def test_split(self):
+ self.assertEqual(
+ split(self.SEP.join(("foo", "bar", "baz"))), ["foo", "bar", "baz"]
+ )
+
+ def test_splitext(self):
+ self.assertEqual(
+ splitext(self.SEP.join(("foo", "bar", "baz.qux"))), ("foo/bar/baz", ".qux")
+ )
+
+ def test_basedir(self):
+ foobarbaz = self.SEP.join(("foo", "bar", "baz"))
+ self.assertEqual(basedir(foobarbaz, ["foo", "bar", "baz"]), "foo")
+ self.assertEqual(basedir(foobarbaz, ["foo", "foo/bar", "baz"]), "foo/bar")
+ self.assertEqual(basedir(foobarbaz, ["foo/bar", "foo", "baz"]), "foo/bar")
+ self.assertEqual(basedir(foobarbaz, ["foo", "bar", ""]), "foo")
+ self.assertEqual(basedir(foobarbaz, ["bar", "baz", ""]), "")
+
+ def test_match(self):
+ self.assertTrue(match("foo", ""))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/bar"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo"))
+ self.assertTrue(match("foo", "*"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/bar/*"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/bar/*"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/bar/*"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/bar/*"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/*/baz.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "*/bar/baz.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "*/*/baz.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "*/*/*"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/*/*"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/*/*.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/b*/*z.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/b*r/ba*z.qux"))
+ self.assertFalse(match("foo/bar/baz.qux", "foo/b*z/ba*r.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "**"))
+ self.assertTrue(match("foo/bar/baz.qux", "**/baz.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "**/bar/baz.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/**/baz.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/**/*.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "**/foo/bar/baz.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/**/bar/baz.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/**/bar/*.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/**/*.qux"))
+ self.assertTrue(match("foo/bar/baz.qux", "**/*.qux"))
+ self.assertFalse(match("foo/bar/baz.qux", "**.qux"))
+ self.assertFalse(match("foo/bar", "foo/*/bar"))
+ self.assertTrue(match("foo/bar/baz.qux", "foo/**/bar/**"))
+ self.assertFalse(match("foo/nobar/baz.qux", "foo/**/bar/**"))
+ self.assertTrue(match("foo/bar", "foo/**/bar/**"))
+
+ def test_rebase(self):
+ self.assertEqual(rebase("foo", "foo/bar", "bar/baz"), "baz")
+ self.assertEqual(rebase("foo", "foo", "bar/baz"), "bar/baz")
+ self.assertEqual(rebase("foo/bar", "foo", "baz"), "bar/baz")
+
+
+if os.altsep:
+
+ class TestAltPath(TestPath):
+ SEP = os.altsep
+
+ class TestReverseAltPath(TestPath):
+ def setUp(self):
+ sep = os.sep
+ os.sep = os.altsep
+ os.altsep = sep
+
+ def tearDown(self):
+ self.setUp()
+
+ class TestAltReverseAltPath(TestReverseAltPath):
+ SEP = os.altsep
+
+
+if __name__ == "__main__":
+ mozunit.main()