# 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/. from mozpack.path import ( relpath, join, normpath, dirname, commonprefix, basename, split, splitext, basedir, match, rebase, ) import unittest import mozunit import os class TestPath(unittest.TestCase): def test_relpath(self): self.assertEqual(relpath('foo', 'foo'), '') self.assertEqual(relpath(os.path.join('foo', 'bar'), 'foo/bar'), '') self.assertEqual(relpath(os.path.join('foo', 'bar'), 'foo'), 'bar') self.assertEqual(relpath(os.path.join('foo', 'bar', 'baz'), 'foo'), 'bar/baz') self.assertEqual(relpath(os.path.join('foo', 'bar'), 'foo/bar/baz'), '..') self.assertEqual(relpath(os.path.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(os.path.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([os.path.join('foo', 'bar', 'baz'), 'foo/qux', 'foo/baz/qux']), 'foo/') self.assertEqual(commonprefix([os.path.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(os.path.join('foo', 'bar', 'baz')), ['foo', 'bar', 'baz']) def test_splitext(self): self.assertEqual(splitext(os.path.join('foo', 'bar', 'baz.qux')), ('foo/bar/baz', '.qux')) def test_basedir(self): foobarbaz = os.path.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 __name__ == '__main__': mozunit.main()