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)
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)