1
# Copyright (C) 2005 by Canonical Ltd
1
# Copyright (C) 2005, 2006 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
78
81
self.assertEqual(type(result), str)
79
82
self.assertContainsRe(result, r'^[a-z0-9]{100}$')
84
def test_is_inside(self):
85
is_inside = osutils.is_inside
86
self.assertTrue(is_inside('src', 'src/foo.c'))
87
self.assertFalse(is_inside('src', 'srccontrol'))
88
self.assertTrue(is_inside('src', 'src/a/a/a/foo.c'))
89
self.assertTrue(is_inside('foo.c', 'foo.c'))
90
self.assertFalse(is_inside('foo.c', ''))
91
self.assertTrue(is_inside('', 'foo.c'))
82
93
def test_rmtree(self):
83
94
# Check to remove tree with read-only files/dirs
186
197
self.assertFormatedDelta('1 second in the future', -1)
187
198
self.assertFormatedDelta('2 seconds in the future', -2)
200
def test_dereference_path(self):
201
if not osutils.has_symlinks():
202
raise TestSkipped('Symlinks are not supported on this platform')
203
cwd = osutils.realpath('.')
205
bar_path = osutils.pathjoin(cwd, 'bar')
206
# Using './' to avoid bug #1213894 (first path component not
207
# dereferenced) in Python 2.4.1 and earlier
208
self.assertEqual(bar_path, osutils.realpath('./bar'))
209
os.symlink('bar', 'foo')
210
self.assertEqual(bar_path, osutils.realpath('./foo'))
212
# Does not dereference terminal symlinks
213
foo_path = osutils.pathjoin(cwd, 'foo')
214
self.assertEqual(foo_path, osutils.dereference_path('./foo'))
216
# Dereferences parent symlinks
218
baz_path = osutils.pathjoin(bar_path, 'baz')
219
self.assertEqual(baz_path, osutils.dereference_path('./foo/baz'))
221
# Dereferences parent symlinks that are the first path element
222
self.assertEqual(baz_path, osutils.dereference_path('foo/baz'))
224
# Dereferences parent symlinks in absolute paths
225
foo_baz_path = osutils.pathjoin(foo_path, 'baz')
226
self.assertEqual(baz_path, osutils.dereference_path(foo_baz_path))
190
229
class TestSafeUnicode(TestCase):
311
350
except (IOError, OSError), e:
312
351
self.assertEqual(errno.ENOENT, e.errno)
353
def test_splitpath(self):
354
def check(expected, path):
355
self.assertEqual(expected, osutils.splitpath(path))
358
check(['a', 'b'], 'a/b')
359
check(['a', 'b'], 'a/./b')
360
check(['a', '.b'], 'a/.b')
361
check(['a', '.b'], 'a\\.b')
363
self.assertRaises(errors.BzrError, osutils.splitpath, 'a/../b')
315
366
class TestMacFuncsDirs(TestCaseInTempDir):
316
367
"""Test mac special functions that require directories."""
336
387
os.chdir(u'Ba\u030agfors')
337
388
self.assertEndsWith(osutils._mac_getcwd(), u'B\xe5gfors')
339
391
class TestSplitLines(TestCase):
341
393
def test_split_unicode(self):
480
532
def test_copy_basic_tree(self):
481
533
self.build_tree(['source/', 'source/a', 'source/b/', 'source/b/c'])
482
534
osutils.copy_tree('source', 'target')
483
self.assertEqual(['a', 'b'], os.listdir('target'))
535
self.assertEqual(['a', 'b'], sorted(os.listdir('target')))
484
536
self.assertEqual(['c'], os.listdir('target/b'))
486
538
def test_copy_tree_target_exists(self):
487
539
self.build_tree(['source/', 'source/a', 'source/b/', 'source/b/c',
489
541
osutils.copy_tree('source', 'target')
490
self.assertEqual(['a', 'b'], os.listdir('target'))
542
self.assertEqual(['a', 'b'], sorted(os.listdir('target')))
491
543
self.assertEqual(['c'], os.listdir('target/b'))
493
545
def test_copy_tree_symlinks(self):