94
87
# TODO: test fancy_rename using a MemoryTransport
96
def test_rename_change_case(self):
97
# on Windows we should be able to change filename case by rename
98
self.build_tree(['a', 'b/'])
99
osutils.rename('a', 'A')
100
osutils.rename('b', 'B')
101
# we can't use failUnlessExists on case-insensitive filesystem
102
# so try to check shape of the tree
103
shape = sorted(os.listdir('.'))
104
self.assertEquals(['A', 'B'], shape)
106
89
def test_01_rand_chars_empty(self):
107
90
result = osutils.rand_chars(0)
108
91
self.assertEqual(result, '')
122
105
self.assertFalse(is_inside('foo.c', ''))
123
106
self.assertTrue(is_inside('', 'foo.c'))
125
def test_is_inside_any(self):
126
SRC_FOO_C = pathjoin('src', 'foo.c')
127
for dirs, fn in [(['src', 'doc'], SRC_FOO_C),
128
(['src'], SRC_FOO_C),
131
self.assert_(is_inside_any(dirs, fn))
132
for dirs, fn in [(['src'], 'srccontrol'),
133
(['src'], 'srccontrol/foo')]:
134
self.assertFalse(is_inside_any(dirs, fn))
136
def test_is_inside_or_parent_of_any(self):
137
for dirs, fn in [(['src', 'doc'], 'src/foo.c'),
138
(['src'], 'src/foo.c'),
139
(['src/bar.c'], 'src'),
140
(['src/bar.c', 'bla/foo.c'], 'src'),
143
self.assert_(is_inside_or_parent_of_any(dirs, fn))
145
for dirs, fn in [(['src'], 'srccontrol'),
146
(['srccontrol/foo.c'], 'src'),
147
(['src'], 'srccontrol/foo')]:
148
self.assertFalse(is_inside_or_parent_of_any(dirs, fn))
150
108
def test_rmtree(self):
151
109
# Check to remove tree with read-only files/dirs
260
218
self.assertFormatedDelta('1 second in the future', -1)
261
219
self.assertFormatedDelta('2 seconds in the future', -2)
263
def test_format_date(self):
264
self.assertRaises(errors.UnsupportedTimezoneFormat,
265
osutils.format_date, 0, timezone='foo')
267
221
def test_dereference_path(self):
268
self.requireFeature(SymlinkFeature)
222
if not osutils.has_symlinks():
223
raise TestSkipped('Symlinks are not supported on this platform')
269
224
cwd = osutils.realpath('.')
271
226
bar_path = osutils.pathjoin(cwd, 'bar')
291
246
foo_baz_path = osutils.pathjoin(foo_path, 'baz')
292
247
self.assertEqual(baz_path, osutils.dereference_path(foo_baz_path))
294
def test_changing_access(self):
295
f = file('file', 'w')
299
# Make a file readonly
300
osutils.make_readonly('file')
301
mode = os.lstat('file').st_mode
302
self.assertEqual(mode, mode & 0777555)
304
# Make a file writable
305
osutils.make_writable('file')
306
mode = os.lstat('file').st_mode
307
self.assertEqual(mode, mode | 0200)
309
if osutils.has_symlinks():
310
# should not error when handed a symlink
311
os.symlink('nonexistent', 'dangling')
312
osutils.make_readonly('dangling')
313
osutils.make_writable('dangling')
315
250
def test_kind_marker(self):
316
251
self.assertEqual("", osutils.kind_marker("file"))
490
424
# osutils.getcwd() renormalize the path.
491
425
self.assertEndsWith(osutils._win32_getcwd(), u'mu-\xb5')
493
def test_minimum_path_selection(self):
494
self.assertEqual(set(),
495
osutils.minimum_path_selection([]))
496
self.assertEqual(set(['a', 'b']),
497
osutils.minimum_path_selection(['a', 'b']))
498
self.assertEqual(set(['a/', 'b']),
499
osutils.minimum_path_selection(['a/', 'b']))
500
self.assertEqual(set(['a/', 'b']),
501
osutils.minimum_path_selection(['a/c', 'a/', 'b']))
503
427
def test_mkdtemp(self):
504
428
tmpdir = osutils._win32_mkdtemp(dir='.')
505
429
self.assertFalse('\\' in tmpdir)
1025
950
So Unicode strings must be encoded.
1027
uni_val, env_val = probe_unicode_in_user_encoding()
952
# Try a few different characters, to see if we can get
953
# one that will be valid in the user_encoding
954
possible_vals = [u'm\xb5', u'\xe1', u'\u0410']
955
for uni_val in possible_vals:
957
env_val = uni_val.encode(bzrlib.user_encoding)
958
except UnicodeEncodeError:
959
# Try a different character
1029
964
raise TestSkipped('Cannot find a unicode character that works in'
1030
965
' encoding %s' % (bzrlib.user_encoding,))
1061
996
self.assertTrue(isinstance(offset, int))
1062
997
eighteen_hours = 18 * 3600
1063
998
self.assertTrue(-eighteen_hours < offset < eighteen_hours)
1066
class TestShaFileByName(TestCaseInTempDir):
1068
def test_sha_empty(self):
1069
self.build_tree_contents([('foo', '')])
1070
expected_sha = osutils.sha_string('')
1071
self.assertEqual(expected_sha, osutils.sha_file_by_name('foo'))
1073
def test_sha_mixed_endings(self):
1074
text = 'test\r\nwith\nall\rpossible line endings\r\n'
1075
self.build_tree_contents([('foo', text)])
1076
expected_sha = osutils.sha_string(text)
1077
self.assertEqual(expected_sha, osutils.sha_file_by_name('foo'))
1081
r'''# Copyright (C) 2005, 2006 Canonical Ltd
1083
# This program is free software; you can redistribute it and/or modify
1084
# it under the terms of the GNU General Public License as published by
1085
# the Free Software Foundation; either version 2 of the License, or
1086
# (at your option) any later version.
1088
# This program is distributed in the hope that it will be useful,
1089
# but WITHOUT ANY WARRANTY; without even the implied warranty of
1090
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1091
# GNU General Public License for more details.
1093
# You should have received a copy of the GNU General Public License
1094
# along with this program; if not, write to the Free Software
1095
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
1098
# NOTE: If update these, please also update the help for global-options in
1099
# bzrlib/help_topics/__init__.py
1102
"""Set of flags that enable different debug behaviour.
1104
These are set with eg ``-Dlock`` on the bzr command line.
1108
* auth - show authentication sections used
1109
* error - show stack traces for all top level exceptions
1110
* evil - capture call sites that do expensive or badly-scaling operations.
1111
* fetch - trace history copying between repositories
1112
* hashcache - log every time a working file is read to determine its hash
1113
* hooks - trace hook execution
1114
* hpss - trace smart protocol requests and responses
1115
* http - trace http connections, requests and responses
1116
* index - trace major index operations
1117
* knit - trace knit operations
1118
* lock - trace when lockdir locks are taken or released
1119
* merge - emit information for debugging merges
1120
* pack - emit information about pack operations
1121
* selftest_debug - do not disable all debug flags when running selftest
1127
class TestResourceLoading(TestCaseInTempDir):
1129
def test_resource_string(self):
1130
# test resource in bzrlib
1131
text = osutils.resource_string('bzrlib', 'debug.py')
1132
self.assertEquals(_debug_text, text)
1133
# test resource under bzrlib
1134
text = osutils.resource_string('bzrlib.ui', 'text.py')
1135
self.assertContainsRe(text, "class TextUIFactory")
1136
# test unsupported package
1137
self.assertRaises(errors.BzrError, osutils.resource_string, 'zzzz',
1139
# test unknown resource
1140
self.assertRaises(IOError, osutils.resource_string, 'bzrlib', 'yyy.xx')