Ticket #6137: ticket_6137_3.diff

File ticket_6137_3.diff, 4.5 KB (added by Peter Stringfield, 4 years ago)
  • twisted/python/test/test_dist.py

    diff --git twisted/python/test/test_dist.py twisted/python/test/test_dist.py
    index 34c6789..28a575d 100644
    Tests for parts of our release automation system. 
    88
    99import os
    1010import sys
     11from collections import Counter
    1112
    1213from distutils.core import Distribution
    1314
    version = versions.Version("twisted.blat", 9, 8, 10) 
    198199
    199200
    200201
     202class GetAllScriptsTest(TestCase):
     203    """
     204    Tests for L{dist.getAllScripts} which lists all the scripts that should be
     205    included in a complete distribution of Twisted, with its subprojects.
     206    """
     207
     208
     209    # getAllScripts relies on a list in twisted.python.dist.twisted_subprojects
     210    # to tell it what subprojects might have scripts it needs to get. It
     211    # searches recursively in bin/, at the root of the Twisted distribution, for
     212    # directories that have the same name as a listed subproject. It then calls
     213    # getScripts on these directories to extract the scripts from them. It also
     214    # tries to extract scripts from bin/ itself, because Twisted core stores
     215    # scripts there.
     216    #
     217    # Thus testing it relies on manipulating the contents of that list and
     218    # directory.
     219
     220
     221    def setUp(self):
     222        # A mock up of Twisted's root directory.
     223        basedir = FilePath(self.mktemp())
     224        self.script_directory = basedir.child("bin")
     225        self.script_directory.makedirs()
     226        # The temporary directories will be deleted by Trial.
     227
     228        # getAllScripts uses a hardcoded relative path.
     229        self.addCleanup(os.chdir, os.getcwd())
     230        os.chdir(basedir.path)
     231
     232
     233    def test_getsCorrectScripts(self):
     234        """
     235        L{getAllScripts} lists exactly the scripts in Twisted and its
     236        subprojects that should be included in a distribution. It may encounter
     237        additional scripts, files, or directories, but it will not list them
     238        unless they are part of a Twisted subproject (see
     239        twisted.dist.twisted_subprojects) or Twisted core.
     240        """
     241        # Replace getScripts with a stub that records its interactions
     242        # with getAllScripts. The real getScripts is tested separately.
     243        directoriesQueried = []
     244        scriptsGiven = []
     245        def stubGetScripts(projname, basedir=''):
     246            directoriesQueried.append(projname)
     247            scripts = ["dummyScript", "dummyScript2"]
     248            scriptsGiven.extend(scripts)
     249            return scripts
     250        self.patch(dist, "getScripts", stubGetScripts)
     251
     252        # Create some directories that represent dummy subprojects for
     253        # getAllScripts to look at. Get all scripts should ask getScripts to
     254        # get scripts from these directories.
     255        dummySubprojects = ["random", "subproject", "names", "kitty_kat"]
     256        # Create some more directories in bin that aren't listed as
     257        # subprojects. getAllScripts should ignore them.
     258        redHerringDirectories = ["some", "directories", "meow"]
     259        # Create some files that match the names of subprojects. getAllScripts
     260        # should ignore these as well.
     261        redHerringFiles = ["a", "few", "files"]
     262        # Just for kicks: files that do NOT match the name of a subproject.
     263        # These should also be ignored.
     264        completelyUnrelatedFiles = ["unrelated", "file"]
     265
     266        self.patch(
     267            dist, "twisted_subprojects", dummySubprojects + redHerringFiles)
     268
     269        for name in dummySubprojects + redHerringDirectories:
     270            self.script_directory.child(name).makedirs()
     271        for name in redHerringFiles + completelyUnrelatedFiles:
     272            self.script_directory.child(name).touch()
     273        # These are in Trial's temp directory, so we don't have to worry about
     274        # deleting them.
     275
     276        scriptsReturned = dist.getAllScripts()
     277
     278        # getAllScripts should call getScripts once on each directory which
     279        # corresponds to a subproject, and also on the current directory (for
     280        # the core subproject). It may do this in any order.
     281        self.assertEqual(Counter(directoriesQueried),
     282                         Counter(dummySubprojects + ['']))
     283        # getAllScripts should collect all the scripts returned by getScripts,
     284        # in any order.
     285        self.assertEqual(Counter(scriptsReturned),
     286                         Counter(scriptsGiven))
     287
     288
     289
    201290class GetScriptsTest(TestCase):
    202291    """
    203292    Tests for L{dist.getScripts} which returns the scripts which should be