Mercurial > treepkg
annotate test/filesupport.py @ 310:26c15a0f0e52
When stopping because of an error, do not raise the exception again as
it leads to confusing double tracebacks in the log. Instead, simply log
the reason for the stopping and stop in the same way a stop instruction
is handled.
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Wed, 02 Dec 2009 14:46:37 +0000 |
parents | e3ab8aca2b08 |
children |
rev | line source |
---|---|
120
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
1 # Copyright (C) 2007, 2008 by Intevation GmbH |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
2 # Authors: |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
3 # Bernhard Herzog <bh@intevation.de> |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
4 # |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
5 # This program is free software under the GPL (>=v2) |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
6 # Read the file COPYING coming with the software for details. |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
7 |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
8 """Support code for the test cases""" |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
9 |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
10 import os |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
11 import shutil |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
12 from treepkg.util import writefile |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
13 |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
14 |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
15 def create_temp_dir(): |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
16 """Create a temporary directory for the test-suite and return its name. |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
17 |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
18 The temporary directory is always called temp and is created in the |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
19 directory where the support module is located. |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
20 |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
21 If the temp directory already exists, just return the name. |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
22 """ |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
23 name = os.path.abspath(os.path.join(os.path.dirname(__file__), "temp")) |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
24 |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
25 # if the directory already exists, we're done |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
26 if os.path.isdir(name): |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
27 return name |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
28 |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
29 # create the directory |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
30 os.mkdir(name) |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
31 return name |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
32 |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
33 |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
34 class FileTestMixin: |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
35 |
185
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
36 """Mixin class for tests that use temporary files. |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
37 |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
38 Instances of this class create a test-specific sub-directory under |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
39 the main test temp directory. The name of the sub-directory is the |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
40 return value of the test's id() method. |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
41 """ |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
42 |
185
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
43 _test_specific_directory_created = False |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
44 |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
45 def create_test_specific_temp_dir(self): |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
46 """Creates the test specific directory and returns its absolute name. |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
47 When this method is called for the first time and the directory |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
48 exists, if is removed, so that a specific test instance always |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
49 starts with an empty directory. |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
50 """ |
185
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
51 dirname = os.path.join(create_temp_dir(), self.id()) |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
52 if not self._test_specific_directory_created: |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
53 if os.path.exists(dirname): |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
54 shutil.rmtree(dirname) |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
55 os.mkdir(dirname) |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
56 self._test_specific_directory_created = True |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
57 return dirname |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
58 |
185
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
59 def temp_file_name(self, basename): |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
60 """Returns the full name of the file named basename in the temp. dir. |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
61 """ |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
62 return os.path.join(self.create_test_specific_temp_dir(), basename) |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
63 |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
64 def create_temp_file(self, basename, contents, permissions=None): |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
65 """Creates a file in the temp directory with the given contents. |
185
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
66 The optional parameter permissions should either be None (the |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
67 default) or an int specifying the file permissions (same format |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
68 as the second parameter of os.chmod). The method returns the |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
69 absolute name of the created file. |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
70 """ |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
71 filename = self.temp_file_name(basename) |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
72 file = open(filename, "w") |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
73 file.write(contents) |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
74 file.close() |
185
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
75 if permissions is not None: |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
76 os.chmod(filename, permissions) |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
77 return filename |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
78 |
185
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
79 def create_temp_dir(self, basename): |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
80 """Creates the directory basename in the temporary directory. |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
81 The method returns the absolute name of the created directory. |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
82 """ |
185
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
83 dirname = self.temp_file_name(basename) |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
84 os.mkdir(dirname) |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
85 return dirname |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
86 |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
87 def create_files(self, directory, filedesc): |
120
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
88 """Creates a hierarchy of directories and files in directory. |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
89 The filedesc parameter should be a sequence of (name, contents) |
120
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
90 pairs or (name, permissions, contents) triples. Each item of |
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
91 the sequence describes one entry of the directory. If contents |
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
92 is an instance of list, the entry is a subdirectory and the |
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
93 contents is a list in the same format as filedesc and passed |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
94 recursively to the create_files method. If contents is a |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
95 string, the new directory entry is a normal file and contents is |
120
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
96 the contents of the file. The permissions if present, should be |
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
97 an int specifying the files permissions (setting permissions |
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
98 doesn't work yet for directories). |
185
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
99 |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
100 The method returns the absolute name of the toplevel directory |
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
101 created by the method. |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
102 """ |
185
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
103 directory = self.temp_file_name(directory) |
120
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
104 os.makedirs(directory) |
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
105 for item in filedesc: |
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
106 if len(item) == 3: |
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
107 name, permissions, contents = item |
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
108 else: |
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
109 name, contents = item |
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
110 permissions = None # use default permissions |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
111 if isinstance(contents, list): |
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
112 # a list as contents indicates a directory |
185
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
113 self.create_files(os.path.join(directory, name), contents) |
84
98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
114 else: |
120
007d7f2aa184
Extend/Modify FileTestMixin.create_files:
Bernhard Herzog <bh@intevation.de>
parents:
111
diff
changeset
|
115 writefile(os.path.join(directory, name), contents, permissions) |
185
e1c7cd896310
Rework test/filesupport.py so that test cases always use their own
Bernhard Herzog <bh@intevation.de>
parents:
120
diff
changeset
|
116 return directory |
111
7f6fb8103db0
Move the sed-like replacement code from enterprise/kdepim.py to treepkg/util.py
Bernhard Herzog <bh@intevation.de>
parents:
84
diff
changeset
|
117 |
195
e3ab8aca2b08
Make filesupport.py more PEP8 conformant. Rename method
Bernhard Herzog <bh@intevation.de>
parents:
185
diff
changeset
|
118 def check_file_contents(self, filename, contents): |
111
7f6fb8103db0
Move the sed-like replacement code from enterprise/kdepim.py to treepkg/util.py
Bernhard Herzog <bh@intevation.de>
parents:
84
diff
changeset
|
119 """check the contents of a file""" |
7f6fb8103db0
Move the sed-like replacement code from enterprise/kdepim.py to treepkg/util.py
Bernhard Herzog <bh@intevation.de>
parents:
84
diff
changeset
|
120 self.assertEquals(open(filename).read(), contents) |