testing/mozbase/manifestdestiny/tests/test_convert_symlinks.py

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:a65d88b0b5ff
1 #!/usr/bin/env python
2
3 # This Source Code Form is subject to the terms of the Mozilla Public
4 # License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 # You can obtain one at http://mozilla.org/MPL/2.0/.
6
7 import os
8 import shutil
9 import tempfile
10 import unittest
11
12 from manifestparser import convert
13
14 class TestSymlinkConversion(unittest.TestCase):
15 """
16 test conversion of a directory tree with symlinks to a manifest structure
17 """
18
19 # Currently broken: see
20 # https://bugzilla.mozilla.org/show_bug.cgi?id=902610
21 # https://bugzilla.mozilla.org/show_bug.cgi?id=920938
22
23 def create_stub(self, directory=None):
24 """stub out a directory with files in it"""
25
26 files = ('foo', 'bar', 'fleem')
27 if directory is None:
28 directory = tempfile.mkdtemp()
29 for i in files:
30 file(os.path.join(directory, i), 'w').write(i)
31 subdir = os.path.join(directory, 'subdir')
32 os.mkdir(subdir)
33 file(os.path.join(subdir, 'subfile'), 'w').write('baz')
34 return directory
35
36 def test_relpath(self):
37 """test convert `relative_to` functionality"""
38
39 oldcwd = os.getcwd()
40 stub = self.create_stub()
41 try:
42 # subdir with in-memory manifest
43 files = ['../bar', '../fleem', '../foo', 'subfile']
44 subdir = os.path.join(stub, 'subdir')
45 os.chdir(subdir)
46 parser = convert([stub], relative_to='.')
47 self.assertEqual([i['name'] for i in parser.tests],
48 files)
49 except:
50 raise
51 finally:
52 shutil.rmtree(stub)
53 os.chdir(oldcwd)
54
55 def test_relpath_symlink(self):
56 """
57 Ensure `relative_to` works in a symlink.
58 Not available on windows.
59 """
60
61 symlink = getattr(os, 'symlink', None)
62 if symlink is None:
63 return # symlinks unavailable on this platform
64
65 oldcwd = os.getcwd()
66 workspace = tempfile.mkdtemp()
67 try:
68 tmpdir = os.path.join(workspace, 'directory')
69 os.makedirs(tmpdir)
70 linkdir = os.path.join(workspace, 'link')
71 symlink(tmpdir, linkdir)
72 self.create_stub(tmpdir)
73
74 # subdir with in-memory manifest
75 files = ['../bar', '../fleem', '../foo', 'subfile']
76 subdir = os.path.join(linkdir, 'subdir')
77 os.chdir(os.path.realpath(subdir))
78 for directory in (tmpdir, linkdir):
79 parser = convert([directory], relative_to='.')
80 self.assertEqual([i['name'] for i in parser.tests],
81 files)
82 finally:
83 shutil.rmtree(workspace)
84 os.chdir(oldcwd)
85
86 # a more complicated example
87 oldcwd = os.getcwd()
88 workspace = tempfile.mkdtemp()
89 try:
90 tmpdir = os.path.join(workspace, 'directory')
91 os.makedirs(tmpdir)
92 linkdir = os.path.join(workspace, 'link')
93 symlink(tmpdir, linkdir)
94 self.create_stub(tmpdir)
95 files = ['../bar', '../fleem', '../foo', 'subfile']
96 subdir = os.path.join(linkdir, 'subdir')
97 subsubdir = os.path.join(subdir, 'sub')
98 os.makedirs(subsubdir)
99 linksubdir = os.path.join(linkdir, 'linky')
100 linksubsubdir = os.path.join(subsubdir, 'linky')
101 symlink(subdir, linksubdir)
102 symlink(subdir, linksubsubdir)
103 for dest in (subdir,):
104 os.chdir(dest)
105 for directory in (tmpdir, linkdir):
106 parser = convert([directory], relative_to='.')
107 self.assertEqual([i['name'] for i in parser.tests],
108 files)
109 finally:
110 shutil.rmtree(workspace)
111 os.chdir(oldcwd)
112
113
114 if __name__ == '__main__':
115 unittest.main()

mercurial