Mercurial > treepkg
diff test/filesupport.py @ 84:98a7d70746a9
Make BinaryPackager remove all files that do not belong to the binary
package from the pkg/<rev>/binary directory after pbuilder finished.
Also, add tests for this and some corresponding test support code.
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Mon, 10 Sep 2007 17:13:33 +0000 |
parents | |
children | 7f6fb8103db0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/filesupport.py Mon Sep 10 17:13:33 2007 +0000 @@ -0,0 +1,92 @@ +# Copyright (C) 2007 by Intevation GmbH +# Authors: +# Bernhard Herzog <bh@intevation.de> +# +# This program is free software under the GPL (>=v2) +# Read the file COPYING coming with the software for details. + +"""Support code for the test cases""" + +import os +import shutil +from treepkg.util import writefile + + +def create_temp_dir(): + """Create a temporary directory for the test-suite and return its name. + + The temporary directory is always called temp and is created in the + directory where the support module is located. + + If the temp directory already exists, just return the name. + """ + name = os.path.abspath(os.path.join(os.path.dirname(__file__), "temp")) + + # if the directory already exists, we're done + if os.path.isdir(name): + return name + + # create the directory + os.mkdir(name) + return name + + +class FileTestMixin: + + """Mixin class for tests that use files in the temporary directory + """ + + def temp_file_name(self, basename, remove=False): + """Returns the full name of the file named basename in the temp. dir. + If the remove parameter is true, the file is removed if already exists. + """ + filename = os.path.join(create_temp_dir(), basename) + if remove and os.path.exists(filename): + os.remove(filename) + return filename + + def create_temp_file(self, basename, contents, mode = None): + """Creates a file in the temp directory with the given contents. + The optional parameter mode should either be None (the default) + or an int specifying the file permissions (same format as the + second parameter of os.chmod). The method returns the absolute + name of the created file. + """ + filename = self.temp_file_name(basename) + file = open(filename, "w") + file.write(contents) + file.close() + if mode is not None: + os.chmod(filename, mode) + return filename + + def create_temp_dir(self, basename, remove=True): + """Creates the directory basename in the temporary directory. + If the optional parameter remove is true (the default), the + directory and all its contents are deleted with shutil.rmtree. + The method returns the absolute name of the created directory. + """ + dirname = os.path.join(create_temp_dir(), basename) + if remove and os.path.exists(dirname): + shutil.rmtree(dirname) + os.mkdir(dirname) + return dirname + + def create_files(self, directory, filedesc): + """Creates a hieararchy of directories and files in directory. + The filedesc parameter should be a sequence of (name, contents) + pairs. Each pair describes one entry of the directory. If + contents is an instance of list, the entry is a subdirectory and + the contents is a list in the same format as filedesc and passed + recursively to the create_files method. If contents is a + string, the new directory entry is a normal file and contents is + the contents of the file. + """ + for name, contents in filedesc: + if isinstance(contents, list): + # a list as contents indicates a directory + newdir = os.path.join(directory, name) + os.mkdir(newdir) + self.create_files(newdir, contents) + else: + writefile(os.path.join(directory, name), contents)