Bug 845050 - FileCopier support for symlinks; r=glandium
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
from mozpack.files import (
|
||||
AbsoluteSymlinkFile,
|
||||
Dest,
|
||||
File,
|
||||
GeneratedFile,
|
||||
@@ -216,6 +217,112 @@ class TestFile(TestWithTmpDir):
|
||||
self.assertEqual('fooo', open(dest, 'rb').read())
|
||||
|
||||
|
||||
class TestAbsoluteSymlinkFile(TestWithTmpDir):
|
||||
def setUp(self):
|
||||
TestWithTmpDir.setUp(self)
|
||||
|
||||
self.symlink_supported = False
|
||||
|
||||
if not hasattr(os, 'symlink'):
|
||||
return
|
||||
|
||||
dummy_path = self.tmppath('dummy_file')
|
||||
with open(dummy_path, 'a'):
|
||||
pass
|
||||
|
||||
try:
|
||||
os.symlink(dummy_path, self.tmppath('dummy_symlink'))
|
||||
os.remove(self.tmppath('dummy_symlink'))
|
||||
except EnvironmentError:
|
||||
pass
|
||||
finally:
|
||||
os.remove(dummy_path)
|
||||
|
||||
def test_absolute_relative(self):
|
||||
AbsoluteSymlinkFile('/foo')
|
||||
|
||||
with self.assertRaisesRegexp(ValueError, 'Symlink target not absolute'):
|
||||
AbsoluteSymlinkFile('./foo')
|
||||
|
||||
def test_symlink_file(self):
|
||||
source = self.tmppath('test_path')
|
||||
with open(source, 'wt') as fh:
|
||||
fh.write('Hello world')
|
||||
|
||||
s = AbsoluteSymlinkFile(source)
|
||||
dest = self.tmppath('symlink')
|
||||
self.assertTrue(s.copy(dest))
|
||||
|
||||
if self.symlink_supported:
|
||||
self.assertTrue(os.path.islink(dest))
|
||||
link = os.readlink(dest)
|
||||
self.assertEqual(link, source)
|
||||
else:
|
||||
self.assertTrue(os.path.isfile(dest))
|
||||
content = open(dest).read()
|
||||
self.assertEqual(content, 'Hello world')
|
||||
|
||||
def test_replace_file_with_symlink(self):
|
||||
# If symlinks are supported, an existing file should be replaced by a
|
||||
# symlink.
|
||||
source = self.tmppath('test_path')
|
||||
with open(source, 'wt') as fh:
|
||||
fh.write('source')
|
||||
|
||||
dest = self.tmppath('dest')
|
||||
with open(dest, 'a'):
|
||||
pass
|
||||
|
||||
s = AbsoluteSymlinkFile(source)
|
||||
s.copy(dest, skip_if_older=False)
|
||||
|
||||
if self.symlink_supported:
|
||||
self.assertTrue(os.path.islink(dest))
|
||||
link = os.readlink(dest)
|
||||
self.assertEqual(link, source)
|
||||
else:
|
||||
self.assertTrue(os.path.isfile(dest))
|
||||
content = open(dest).read()
|
||||
self.assertEqual(content, 'source')
|
||||
|
||||
def test_replace_symlink(self):
|
||||
if not self.symlink_supported:
|
||||
return
|
||||
|
||||
source= self.tmppath('source')
|
||||
dest = self.tmppath('dest')
|
||||
|
||||
os.symlink(self.tmppath('bad'), dest)
|
||||
self.assertTrue(os.path.islink(dest))
|
||||
|
||||
s = AbsoluteSymlinkFile(source)
|
||||
self.assertTrue(s.copy(dest))
|
||||
|
||||
self.assertTrue(os.path.islink(dest))
|
||||
link = os.readlink(dest)
|
||||
self.assertEqual(link, source)
|
||||
|
||||
def test_noop(self):
|
||||
if not hasattr(os, 'symlink'):
|
||||
return
|
||||
|
||||
source = self.tmppath('source')
|
||||
dest = self.tmppath('dest')
|
||||
|
||||
with open(source, 'a'):
|
||||
pass
|
||||
|
||||
os.symlink(source, dest)
|
||||
link = os.readlink(dest)
|
||||
self.assertEqual(link, source)
|
||||
|
||||
s = AbsoluteSymlinkFile(source)
|
||||
self.assertFalse(s.copy(dest))
|
||||
|
||||
link = os.readlink(dest)
|
||||
self.assertEqual(link, source)
|
||||
|
||||
|
||||
class TestGeneratedFile(TestWithTmpDir):
|
||||
def test_generated_file(self):
|
||||
'''
|
||||
|
||||
Reference in New Issue
Block a user