michael@0: # This Source Code Form is subject to the terms of the Mozilla Public michael@0: # License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: # file, You can obtain one at http://mozilla.org/MPL/2.0/. michael@0: michael@0: from mozpack.path import ( michael@0: relpath, michael@0: join, michael@0: normpath, michael@0: dirname, michael@0: commonprefix, michael@0: basename, michael@0: split, michael@0: splitext, michael@0: basedir, michael@0: match, michael@0: rebase, michael@0: ) michael@0: import unittest michael@0: import mozunit michael@0: import os michael@0: michael@0: michael@0: class TestPath(unittest.TestCase): michael@0: def test_relpath(self): michael@0: self.assertEqual(relpath('foo', 'foo'), '') michael@0: self.assertEqual(relpath(os.path.join('foo', 'bar'), 'foo/bar'), '') michael@0: self.assertEqual(relpath(os.path.join('foo', 'bar'), 'foo'), 'bar') michael@0: self.assertEqual(relpath(os.path.join('foo', 'bar', 'baz'), 'foo'), michael@0: 'bar/baz') michael@0: self.assertEqual(relpath(os.path.join('foo', 'bar'), 'foo/bar/baz'), michael@0: '..') michael@0: self.assertEqual(relpath(os.path.join('foo', 'bar'), 'foo/baz'), michael@0: '../bar') michael@0: self.assertEqual(relpath('foo/', 'foo'), '') michael@0: self.assertEqual(relpath('foo/bar/', 'foo'), 'bar') michael@0: michael@0: def test_join(self): michael@0: self.assertEqual(join('foo', 'bar', 'baz'), 'foo/bar/baz') michael@0: self.assertEqual(join('foo', '', 'bar'), 'foo/bar') michael@0: self.assertEqual(join('', 'foo', 'bar'), 'foo/bar') michael@0: self.assertEqual(join('', 'foo', '/bar'), '/bar') michael@0: michael@0: def test_normpath(self): michael@0: self.assertEqual(normpath(os.path.join('foo', 'bar', 'baz', michael@0: '..', 'qux')), 'foo/bar/qux') michael@0: michael@0: def test_dirname(self): michael@0: self.assertEqual(dirname('foo/bar/baz'), 'foo/bar') michael@0: self.assertEqual(dirname('foo/bar'), 'foo') michael@0: self.assertEqual(dirname('foo'), '') michael@0: self.assertEqual(dirname('foo/bar/'), 'foo/bar') michael@0: michael@0: def test_commonprefix(self): michael@0: self.assertEqual(commonprefix([os.path.join('foo', 'bar', 'baz'), michael@0: 'foo/qux', 'foo/baz/qux']), 'foo/') michael@0: self.assertEqual(commonprefix([os.path.join('foo', 'bar', 'baz'), michael@0: 'foo/qux', 'baz/qux']), '') michael@0: michael@0: def test_basename(self): michael@0: self.assertEqual(basename('foo/bar/baz'), 'baz') michael@0: self.assertEqual(basename('foo/bar'), 'bar') michael@0: self.assertEqual(basename('foo'), 'foo') michael@0: self.assertEqual(basename('foo/bar/'), '') michael@0: michael@0: def test_split(self): michael@0: self.assertEqual(split(os.path.join('foo', 'bar', 'baz')), michael@0: ['foo', 'bar', 'baz']) michael@0: michael@0: def test_splitext(self): michael@0: self.assertEqual(splitext(os.path.join('foo', 'bar', 'baz.qux')), michael@0: ('foo/bar/baz', '.qux')) michael@0: michael@0: def test_basedir(self): michael@0: foobarbaz = os.path.join('foo', 'bar', 'baz') michael@0: self.assertEqual(basedir(foobarbaz, ['foo', 'bar', 'baz']), 'foo') michael@0: self.assertEqual(basedir(foobarbaz, ['foo', 'foo/bar', 'baz']), michael@0: 'foo/bar') michael@0: self.assertEqual(basedir(foobarbaz, ['foo/bar', 'foo', 'baz']), michael@0: 'foo/bar') michael@0: self.assertEqual(basedir(foobarbaz, ['foo', 'bar', '']), 'foo') michael@0: self.assertEqual(basedir(foobarbaz, ['bar', 'baz', '']), '') michael@0: michael@0: def test_match(self): michael@0: self.assertTrue(match('foo', '')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/bar')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo')) michael@0: self.assertTrue(match('foo', '*')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/bar/*')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/bar/*')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/bar/*')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/bar/*')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/*/baz.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', '*/bar/baz.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', '*/*/baz.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', '*/*/*')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/*/*')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/*/*.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/b*/*z.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/b*r/ba*z.qux')) michael@0: self.assertFalse(match('foo/bar/baz.qux', 'foo/b*z/ba*r.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', '**')) michael@0: self.assertTrue(match('foo/bar/baz.qux', '**/baz.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', '**/bar/baz.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/**/baz.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/**/*.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', '**/foo/bar/baz.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/**/bar/baz.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/**/bar/*.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/**/*.qux')) michael@0: self.assertTrue(match('foo/bar/baz.qux', '**/*.qux')) michael@0: self.assertFalse(match('foo/bar/baz.qux', '**.qux')) michael@0: self.assertFalse(match('foo/bar', 'foo/*/bar')) michael@0: self.assertTrue(match('foo/bar/baz.qux', 'foo/**/bar/**')) michael@0: self.assertFalse(match('foo/nobar/baz.qux', 'foo/**/bar/**')) michael@0: self.assertTrue(match('foo/bar', 'foo/**/bar/**')) michael@0: michael@0: def test_rebase(self): michael@0: self.assertEqual(rebase('foo', 'foo/bar', 'bar/baz'), 'baz') michael@0: self.assertEqual(rebase('foo', 'foo', 'bar/baz'), 'bar/baz') michael@0: self.assertEqual(rebase('foo/bar', 'foo', 'baz'), 'bar/baz') michael@0: michael@0: if __name__ == '__main__': michael@0: mozunit.main()