Fri, 16 Jan 2015 18:13:44 +0100
Integrate suggestion from review to improve consistency with existing code.
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/.
5 from mozpack.path import (
6 relpath,
7 join,
8 normpath,
9 dirname,
10 commonprefix,
11 basename,
12 split,
13 splitext,
14 basedir,
15 match,
16 rebase,
17 )
18 import unittest
19 import mozunit
20 import os
23 class TestPath(unittest.TestCase):
24 def test_relpath(self):
25 self.assertEqual(relpath('foo', 'foo'), '')
26 self.assertEqual(relpath(os.path.join('foo', 'bar'), 'foo/bar'), '')
27 self.assertEqual(relpath(os.path.join('foo', 'bar'), 'foo'), 'bar')
28 self.assertEqual(relpath(os.path.join('foo', 'bar', 'baz'), 'foo'),
29 'bar/baz')
30 self.assertEqual(relpath(os.path.join('foo', 'bar'), 'foo/bar/baz'),
31 '..')
32 self.assertEqual(relpath(os.path.join('foo', 'bar'), 'foo/baz'),
33 '../bar')
34 self.assertEqual(relpath('foo/', 'foo'), '')
35 self.assertEqual(relpath('foo/bar/', 'foo'), 'bar')
37 def test_join(self):
38 self.assertEqual(join('foo', 'bar', 'baz'), 'foo/bar/baz')
39 self.assertEqual(join('foo', '', 'bar'), 'foo/bar')
40 self.assertEqual(join('', 'foo', 'bar'), 'foo/bar')
41 self.assertEqual(join('', 'foo', '/bar'), '/bar')
43 def test_normpath(self):
44 self.assertEqual(normpath(os.path.join('foo', 'bar', 'baz',
45 '..', 'qux')), 'foo/bar/qux')
47 def test_dirname(self):
48 self.assertEqual(dirname('foo/bar/baz'), 'foo/bar')
49 self.assertEqual(dirname('foo/bar'), 'foo')
50 self.assertEqual(dirname('foo'), '')
51 self.assertEqual(dirname('foo/bar/'), 'foo/bar')
53 def test_commonprefix(self):
54 self.assertEqual(commonprefix([os.path.join('foo', 'bar', 'baz'),
55 'foo/qux', 'foo/baz/qux']), 'foo/')
56 self.assertEqual(commonprefix([os.path.join('foo', 'bar', 'baz'),
57 'foo/qux', 'baz/qux']), '')
59 def test_basename(self):
60 self.assertEqual(basename('foo/bar/baz'), 'baz')
61 self.assertEqual(basename('foo/bar'), 'bar')
62 self.assertEqual(basename('foo'), 'foo')
63 self.assertEqual(basename('foo/bar/'), '')
65 def test_split(self):
66 self.assertEqual(split(os.path.join('foo', 'bar', 'baz')),
67 ['foo', 'bar', 'baz'])
69 def test_splitext(self):
70 self.assertEqual(splitext(os.path.join('foo', 'bar', 'baz.qux')),
71 ('foo/bar/baz', '.qux'))
73 def test_basedir(self):
74 foobarbaz = os.path.join('foo', 'bar', 'baz')
75 self.assertEqual(basedir(foobarbaz, ['foo', 'bar', 'baz']), 'foo')
76 self.assertEqual(basedir(foobarbaz, ['foo', 'foo/bar', 'baz']),
77 'foo/bar')
78 self.assertEqual(basedir(foobarbaz, ['foo/bar', 'foo', 'baz']),
79 'foo/bar')
80 self.assertEqual(basedir(foobarbaz, ['foo', 'bar', '']), 'foo')
81 self.assertEqual(basedir(foobarbaz, ['bar', 'baz', '']), '')
83 def test_match(self):
84 self.assertTrue(match('foo', ''))
85 self.assertTrue(match('foo/bar/baz.qux', 'foo/bar'))
86 self.assertTrue(match('foo/bar/baz.qux', 'foo'))
87 self.assertTrue(match('foo', '*'))
88 self.assertTrue(match('foo/bar/baz.qux', 'foo/bar/*'))
89 self.assertTrue(match('foo/bar/baz.qux', 'foo/bar/*'))
90 self.assertTrue(match('foo/bar/baz.qux', 'foo/bar/*'))
91 self.assertTrue(match('foo/bar/baz.qux', 'foo/bar/*'))
92 self.assertTrue(match('foo/bar/baz.qux', 'foo/*/baz.qux'))
93 self.assertTrue(match('foo/bar/baz.qux', '*/bar/baz.qux'))
94 self.assertTrue(match('foo/bar/baz.qux', '*/*/baz.qux'))
95 self.assertTrue(match('foo/bar/baz.qux', '*/*/*'))
96 self.assertTrue(match('foo/bar/baz.qux', 'foo/*/*'))
97 self.assertTrue(match('foo/bar/baz.qux', 'foo/*/*.qux'))
98 self.assertTrue(match('foo/bar/baz.qux', 'foo/b*/*z.qux'))
99 self.assertTrue(match('foo/bar/baz.qux', 'foo/b*r/ba*z.qux'))
100 self.assertFalse(match('foo/bar/baz.qux', 'foo/b*z/ba*r.qux'))
101 self.assertTrue(match('foo/bar/baz.qux', '**'))
102 self.assertTrue(match('foo/bar/baz.qux', '**/baz.qux'))
103 self.assertTrue(match('foo/bar/baz.qux', '**/bar/baz.qux'))
104 self.assertTrue(match('foo/bar/baz.qux', 'foo/**/baz.qux'))
105 self.assertTrue(match('foo/bar/baz.qux', 'foo/**/*.qux'))
106 self.assertTrue(match('foo/bar/baz.qux', '**/foo/bar/baz.qux'))
107 self.assertTrue(match('foo/bar/baz.qux', 'foo/**/bar/baz.qux'))
108 self.assertTrue(match('foo/bar/baz.qux', 'foo/**/bar/*.qux'))
109 self.assertTrue(match('foo/bar/baz.qux', 'foo/**/*.qux'))
110 self.assertTrue(match('foo/bar/baz.qux', '**/*.qux'))
111 self.assertFalse(match('foo/bar/baz.qux', '**.qux'))
112 self.assertFalse(match('foo/bar', 'foo/*/bar'))
113 self.assertTrue(match('foo/bar/baz.qux', 'foo/**/bar/**'))
114 self.assertFalse(match('foo/nobar/baz.qux', 'foo/**/bar/**'))
115 self.assertTrue(match('foo/bar', 'foo/**/bar/**'))
117 def test_rebase(self):
118 self.assertEqual(rebase('foo', 'foo/bar', 'bar/baz'), 'baz')
119 self.assertEqual(rebase('foo', 'foo', 'bar/baz'), 'bar/baz')
120 self.assertEqual(rebase('foo/bar', 'foo', 'baz'), 'bar/baz')
122 if __name__ == '__main__':
123 mozunit.main()