{ "info": { "author": "Zope Foundation and Contributors", "author_email": "zope-dev@zope.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Framework :: Zope3", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "z3c.testsetup: easy test setup for zope 3 and python projects\n*************************************************************\n\nSetting up tests for Zope 3 projects sometimes tends to be cumbersome. You\noften have to prepare complex things like test layers, setup functions,\nteardown functions and much more. Often these steps have to be done again and\nagain. ``z3c.testsetup`` jumps in here, to support much flatter test\nsetups. The package supports normal Python `unit tests\n`_ and `doctests\n`_.\n\nDoctests and test modules are found throughout a whole package and registered\nwith sensible, modifiable defaults. This saves a lot of manual work!\n\nSee `README.txt` and the other .txt files in the src/z3c/testsetup\ndirectory for API documentation. (Or further down this page when reading this\non pypi).\n\n\n.. contents::\n\n\n\nDetailed documentation\n**********************\n\nThe package works in two steps:\n\n1) It looks for testfiles in a given package.\n\n2) It registers the tests according to your specifications.\n\n\nInitial notes\n=============\n\n* Between version 0.2 and 0.3 of ``z3c.testsetup`` a new set of testfile\n markers was introduced. If you are still using ``Test-Layer: unit`` or\n similar, please read the README.txt in the source directory carefully to\n learn how to switch to the new names. (Or see further down this page when\n reading it on pypi).\n\n* Zope integration note: if you want zope integration or functional tests, you\n have to make sure, that the ``zope.app.testing`` and ``zope.component``\n packages are available during test runs. ``z3c.testsetup`` does **not**\n depend on it to make it usable for plain python packages. If you want zope\n integration/functional tests, this is almost always already the case, so you\n don't need to care about this.\n\n* If you download the source code, you can look at the examples used for\n testing and at text files that test technical aspects of z3c.testsetup.\n This can be handy when you want detailed knowledge about specific features.\n\n\nBasic Example\n=============\n\nBefore we can find, register and execute tests, we first have to write them\ndown. z3c.testsetup includes examples used for testing (you can find them all\nin the ``tests/`` subdirectory if you've downloaded the source code):\n\n >>> import os\n >>> import z3c.testsetup\n >>> pkgpath = os.path.dirname(z3c.testsetup.__file__)\n >>> cavepath = os.path.join(pkgpath, 'tests', 'othercave')\n\n\nRegistering doctests\n--------------------\n\nIn this example directory, there is a simple doctest ``doctest01.txt`` (please\nignore the pipes on the left):\n\n >>> print_file(os.path.join(cavepath, 'doctest01.txt'))\n | A doctest\n | =========\n |\n | :doctest:\n |\n | This is a simple doctest.\n |\n | >>> 1+1\n | 2\n |\n\nImportant to note: the doctest is marked by a special marker that tells the\ntestsetup machinery that the file contains doctest examples that should be\nregistered during test runs::\n\n :doctest:\n\nWithout this marker, a testfile won't be registered during tests! This is the\nonly difference compared to 'normal' doctests when you use z3c.testsetup. If\nyou want to disable a test, just turn ``:doctest:`` into ``:nodoctest:`` (or\nsomething else) and the file will be ignored.\n\n.. note:: How to disable markers or make them invisible\n\n All markers can be written as restructured text comments (two leading dots\n followed by whitespace) like this::\n\n .. :doctest:\n\n and will still work. This way you can make the markers disappear\n from autogenerated docs etc.\n\n\nRunning the tests\n-----------------\n\nNow that we have a doctest available, we can write a testsetup routine that\ncollects all tests, registers them and passes them to the testrunner:\n\n >>> print(open(os.path.join(cavepath, 'simplesetup01.py')).read())\n import z3c.testsetup\n test_suite = z3c.testsetup.register_all_tests(\n 'z3c.testsetup.tests.othercave',\n allow_teardown=True)\n\nThis is all we need in simple cases. We use\n``register_all_tests()`` to tell the setup machinery,\nwhere to look for test files. The ``allow_teardown`` parameter tells,\nthat we allow tearing down functional tests, so that they don't have\nto be run in an isolated subprocess. Note that also files in\nsubpackages will be found, registered and executed when they are\nmarked approriately.\n\nLet's start the testrunner and see what it gives:\n\n >>> import sys\n >>> sys.argv = [sys.argv[0],]\n >>> defaults = [\n ... '--path', cavepath,\n ... '--tests-pattern', '^simplesetup01$',\n ... ]\n >>> from z3c.testsetup import testrunner\n >>> testrunner.run(defaults)\n Running zope...testrunner.layer.UnitTests tests:\n Set up zope...testrunner.layer.UnitTests in 0.000 seconds.\n Custom setUp for \n Custom tearDown for \n Ran 4 tests with 0 failures and 0 errors in N.NNN seconds.\n Running z3c...layer.DefaultZCMLLayer [...ftesting.zcml] tests:\n Tear down zope...testrunner.layer.UnitTests in N.NNN seconds.\n Set up z3c...layer.DefaultZCMLLayer [...ftesting.zcml] in N.NNN seconds.\n Ran 3 tests with 0 failures and 0 errors in N.NNN seconds.\n Running z3c...layer.DefaultZCMLLayer [...ftesting2.zcml] tests:\n Tear down z3c...DefaultZCMLLayer [...ftesting.zcml] in N.NNN seconds.\n Set up z3c...layer.DefaultZCMLLayer [...ftesting2.zcml] in N.NNN seconds.\n Ran 1 tests with 0 failures and 0 errors in N.NNN seconds.\n Running z3c.testsetup.tests.othercave.testing.FunctionalLayer1 tests:\n Tear down z3c...DefaultZCMLLayer [...ftesting2.zcml] in N.NNN seconds.\n Set up z3c....othercave.testing.FunctionalLayer1 in N.NNN seconds.\n Ran 1 tests with 0 failures and 0 errors in N.NNN seconds.\n Running z3c.testsetup.tests.othercave.testing.UnitLayer2 tests:\n Tear down z3c...othercave.testing.FunctionalLayer1 in N.NNN seconds.\n Set up z3c.testsetup.tests.othercave.testing.UnitLayer1 in N.NNN seconds.\n Set up z3c.testsetup.tests.othercave.testing.UnitLayer2 in N.NNN seconds.\n Running testSetUp of UnitLayer1\n Running testSetUp of UnitLayer2\n Running testTearDown of UnitLayer2\n Running testTearDown of UnitLayer1\n Ran 1 tests with 0 failures and 0 errors in N.NNN seconds.\n Tearing down left over layers:\n Tear down z3c...othercave.testing.UnitLayer2 in N.NNN seconds.\n Tear down z3c...othercave.testing.UnitLayer1 in N.NNN seconds.\n Total: 10 tests, 0 failures, 0 errors in N.NNN seconds.\n False\n\nAs we can see, there were regular unittests as well as functional tests\nrun. Some of the unittests used their own layer (``UnitLayer1``). Layers are\nshown in the output. In this example, the functional tests use different\nZCML-files for configuration which results in separate test layers.\n\n\nFinding doctests in Python modules\n----------------------------------\n\nThe doctest file described above was a pure .txt file. By default\n``z3c.testsetup`` looks for doctests in files with filename extension\n``.txt``, ``.rst`` and ``.py``. This means, that also doctests in\nPython modules are found just fine as in the following example:\n\n >>> print_file(os.path.join(cavepath, 'doctest08.py'))\n | \"\"\"\n | Doctests in a Python module\n | ===========================\n |\n | We can place doctests also in Python modules.\n |\n | :doctest:\n |\n | Here the Cave class is defined::\n |\n | >>> from z3c.testsetup.tests.othercave.doctest08 import Cave\n | >>> Cave\n | \n |\n | \"\"\"\n |\n |\n | class Cave(object):\n | \"\"\"A Cave.\n |\n | A cave has a number::\n |\n | >>> hasattr(Cave, 'number')\n | True\n |\n | \"\"\"\n | number = None\n |\n | def __init__(self, number):\n | \"\"\"Create a Cave.\n |\n | We have to give a number if we create a cave::\n |\n | >>> c = Cave(12)\n | >>> c.number\n | 12\n |\n | \"\"\"\n | self.number = number\n |\n\nHere we placed the marker string ``:doctest:`` into the docstring of\nthe module. Without it, the module would not have been considered a\ntestfile.\n\nNote that you have to import the entities (classes, functions, etc.)\nfrom the very same file if you want to use them.\n\n\nRegistering regular python unittests\n------------------------------------\n\n``z3c.testsetup`` provides also (limited) support for regular\n``unittest`` deployments as usually written in Python. An example file\nlooks like this:\n\n >>> print_file(os.path.join(cavepath, 'pythontest1.py'))\n | \"\"\"\n | Tests with real TestCase objects.\n |\n | :unittest:\n |\n | \"\"\"\n | import unittest\n |\n |\n | class TestTest(unittest.TestCase):\n |\n | def setUp(self):\n | pass\n |\n | def testFoo(self):\n | self.assertEqual(2, 1+1)\n |\n\nThe module contains a marker ``:unittest:`` in its module docstring instead of\nthe ``:doctest:`` marker used in the other examples above. This means that\nthe file is registered as a regular unittest. (It is also the replacement for\nthe formely used ``:Test-Layer: python`` marker.)\n\nIf you use unittests instead of doctests, then you are mainly on your\nown with setting up and tearing down tests. All this should be done by\nthe test cases themselves.\n\nThe only advantage of using ``z3c.testsetup`` here is, that those\ntests are found and run automatically when they provide the marker.\n\n\nRegistering the tests: ``register_all_tests()``\n===============================================\n\nThe ``register_all_tests`` function mentioned above accepts a bunch of\nkeyword parameters::\n\n register_all_tests(pkg_or_dotted_name [, extensions] [, encoding]\n [, checker] [, globs] [, optionflags]\n [, setup] [, teardown]\n [, zcml_config] [, layer_name] [, layer])\n\nwhere all but the first parameter are keyword paramters and all but\nthe package parameter are optional.\n\nWhile the ``extensions`` parameter determines the set of testfiles to be\nfound, the other paramters tell how to setup single tests.\n\nThe last five parameters are only fallbacks, that should better be\nconfigured in doctest files themselves via marker strings.\n\n- **extensions**:\n\n a list of filename extensions to be considered during doctest\n search. Default value for doctests is ``['.txt', '.rst',\n '.py']``. Python tests are not touched by this (they have to be\n regular Python modules with '.py' extension).\n\n If we want to register .foo files, we can do so:\n\n >>> import z3c.testsetup\n >>> test_suite = z3c.testsetup.register_all_tests(\n ... 'z3c.testsetup.tests.cave',\n ... extensions=['.foo'])\n >>> suite = test_suite()\n >>> get_basenames_from_suite(suite)\n ['file1.py', 'notatest1.foo', 'notatest1.foo']\n\n Note, that only files that contain an appropriate marker are\n found, regardless of the filename extension.\n\n\n- **encoding**:\n\n the encoding of testfiles. 'utf-8' by default. Setting this to ``None``\n means using the default value. We've hidden one doctest file, that\n contains umlauts. If we set the encoding to ``ascii``, we will get\n some `UnicodeDecodeError`.\n\n\n We cannot easily show that here, as this parameter is not\n supported for Python 2.4 and all examples in here have to work\n for each supported Python version.\n\n .. note:: `encoding` parameter is not supported for Python 2.4.\n\n You can pass the encoding parameter, but it will be\n ignored when building test suites.\n\n For Python >= 2.5 the result would look like this::\n\n test_suite = z3c.testsetup.register_all_tests(\n 'z3c.testsetup.tests.cave',\n encoding='ascii')\n suite = test_suite()\n Traceback (most recent call last):\n ...\n UnicodeDecodeError: 'ascii' codec can't decode ...: ordinal\n not in range(128)\n\n While using 'latin-1' will work:\n\n >>> test_suite = z3c.testsetup.register_all_tests(\n ... 'z3c.testsetup.tests.cave',\n ... encoding='latin-1')\n >>> suite = test_suite()\n\n No traceback here.\n\n You can always overwrite an encoding setting for a certain file by\n following PEP 0263 ( http://www.python.org/dev/peps/pep-0263/ ).\n\n\n- **checker**:\n\n An output normalizer for doctests. ``None`` by default. A typical output\n checker can be created like this:\n\n >>> import re\n >>> from zope.testing import renormalizing\n >>> mychecker = renormalizing.RENormalizing([\n ... (re.compile('[0-9]*[.][0-9]* seconds'),\n ... ' seconds'),\n ... (re.compile('at 0x[0-9a-f]+'), 'at '),\n ... ])\n\n This would match for example output like ``0.123 seconds`` if you\n write in your doctest::\n\n seconds\n\n Define this checker in your testrunner .py file and add a\n ``checker=mychecker`` option to the ``register_all_tests()`` call. Since\n version 0.5 checkers are applied to both regular and functional doctests\n (pre-0.5: only functional ones).\n\n\n- **globs**:\n\n A dictionary of things that should be available immediately\n (without imports) during tests. Default is an empty dict, which\n might be populated by appropriate layers (see below). ZCML layers\n for example get you the ``getRootFolder`` method automatically.\n\n This parameter is a fallback which can be overriden by testfile\n markers specifying a certain layer (see below).\n\n The ``globs`` parameter applies only to doctests, not to plain python\n unittests.\n\n\n- **optionflags**:\n\n Optionflags influence the behaviour of the testrunner. They are\n logically or'd so that you can add them arithmetically. See\n\n http://svn.zope.org/zope.testing/trunk/src/zope/testing/doctest.py\n\n for details.\n\n\n- **setup**:\n\n A callable that takes a ``test`` argument and is executed before\n every single doctest.\n\n The default function does nothing.\n\n This parameter is a fallback which can be overriden by testfile\n markers specifying a certain layer (see below).\n\n Specifying setup functions in a layer is also the recommended way.\n\n\n- **teardown**:\n\n The equivalent to ``setup``.\n\n The default function runs\n\n zope.testing.cleanup.cleanUp()\n\n unless overriden by a layer.\n\n Specifying teardown functions in a layer is also the recommended\n way.\n\n\n- **allow_teardown**:\n\n A boolean whether teardown of zcml layers is allowed (*added in 0.5*). In\n rare corner cases (like programmatically slapping an interface on a\n class), a full safe teardown of the zope component architecture is\n impossible. Zope.testing has a default setting for allow_teardown of\n False, which means it uses the safe default of running every zcml layer in\n a separate process, which ensures full teardown.\n\n The drawback is that profiling and coverage tools cannot combine the\n profile/coverage data from separate processes. z3c.testsetup has a\n default of False (since 0.5.1, True in 0.5). If you want correct\n coverage/profiling output and your tests allow it, you'll have to set\n ``allow_teardown=False`` in your ``register_all_tests()`` call.\n\n\n- **zcml_config**:\n\n A filepath of a ZCML file which is registered with functional\n doctests. In the ZCML file you can for example register principals\n (users) usable by functional doctests.\n\n By default any ``ftesting.zcml`` file from the root of the given\n package is taken. If this does not exist, an empty ZCML file of\n the z3c.testsetup package is used (``ftesting.zcml``).\n\n This parameter has no effect, if also a ``layer`` parameter is\n given or a docfile specifies its own layer/ZCML config (see below).\n\n This is a fallback parameter. Use of docfile specific layer markers\n is recommended.\n\n\n- **layer_name**:\n\n You can name your layer, to distinguish different setups of\n functional doctests. The layer name can be an arbitrary string.\n\n This parameter has no effect, if also a ``layer`` parameter is\n given or a docfile specifies its own layer/ZCML config (see\n below).\n\n This is a fallback parameter. Use of per-doctest-file specific layer\n markers is recommended.\n\n- **layer**:\n\n You can register a ZCML layer yourself and pass it as the\n ``layer`` parameter. If you only have a filepath to the according\n ZCML file, use the ``zcml_config`` paramter instead.\n\n This parameter overrides any ``zcml_config`` and ``layer_name``\n parameter.\n\n This is a fallback parameter and has no effect for docfiles\n specifying their own layer or ZCML config.\n\n\n.. note::\n\n For more elaborate setups, you can use so-called TestGetters and\n TestCollectors. They are explained in ``testgetter.txt`` in the source code\n (so you'll need to look there if you want to use it).\n\n\n\nAvailable markers for configuring the tests\n===========================================\n\nWe already saw the ``:doctest:`` marker above. Other markers detected by\n``z3c.testsetup`` are:\n\n- ``:unittest:``\n\n A replacement for ``:doctest:``, marking a Python module as containing\n unittests to run. (Replaces old ``Test-Layer: python`` marker.)\n\n- ``:setup: ``\n\n Execute the given setup function before running doctests in this\n file.\n\n- ``:teardown: ``\n\n Execute the given teardown function after running doctests in this\n file.\n\n- ``:layer: ``\n\n Use the given layer definition for tests in this file. If the layer\n given is derived from ``zope.testing.functional.ZCMLLayer``, the test\n is registered using ``zope.app.testing.functional.FunctionalDocFileSuite``.\n\n- ``:zcml-layer: ``\n\n Use the given ZCML file and run tests in this file on a ZCML\n layer. Tests are registered using ``doctest.DocFileSuite``.\n\n- ``:functional-zcml-layer: ``\n\n Use the given ZCML file and run tests in this file registered with\n ``zope.app.testing.functional.FunctionalDocFileSuite``.\n\nMarkers are case-insensitive.\n\nSee further below for explanations of the respective markers.\n\n\nSetting up a self-defined layer: ``:layer:``\n--------------------------------------------\n\nStarting with ``z3c.testsetup`` 0.3 there is reasonable support for setting up\nlayers per testfile. This way you can easily create setup-functions that are\nonly run before/after certain sets tests.\n\nOverall, use of layers is the recommended way from now on.\n\nWe can tell ``z3c.testsetup`` to use a certain layer using the ``:layer:``\nmarker as in the following example (see ``tests/othercave/doctest02.txt``)::\n\n A doctests with layer\n =====================\n \n :doctest:\n :layer: z3c.testsetup.tests.othercave.testing.UnitLayer2\n \n >>> 1+1\n 2\n\nThe ``:doctest:`` marker was used here as well, because without it the\nfile would not have been detected as a registerable doctest file (we\nwant developers to be explicit about that).\n\nThe ``:layer: `` marker then tells, where the\ntestsetup machinery can find the layer definition. It is given in dotted name\nnotation and points to a layer you defined yourself.\n\nHow does the layer definition look like? It is defined as regualr\nPython code:\n\n >>> print(open(os.path.join(cavepath, 'testing.py')).read())\n import os\n ...\n class UnitLayer1(object):\n \"\"\"This represents a layer.\n A layer is a way to have common setup and teardown that happens\n once for a whole group of tests.\n \n It must be an object with a `setUp` and a `tearDown` method, which\n are run once before or after all the tests applied to a layer\n respectively.\n \n Optionally you can additionally define `testSetUp` and\n `testTearDown` methods, which are run before and after each single\n test.\n \n This class is not instantiated. Therefore we use classmethods.\n \"\"\"\n \n @classmethod\n def setUp(self):\n \"\"\"This gets run once for the whole test run, or at most once per\n TestSuite that depends on the layer.\n (The latter can happen if multiple suites depend on the layer\n and the testrunner decides to tear down the layer after first\n suite finishes.)\n \"\"\"\n \n @classmethod\n def tearDown(self):\n \"\"\"This gets run once for the whole test run, or at most\n once per TestSuite that depends on the layer,\n after all tests in the suite have finished.\n \"\"\"\n \n @classmethod\n def testSetUp(self):\n \"\"\"This method is run before each single test in the current\n layer. It is optional.\n \"\"\"\n print(\" Running testSetUp of UnitLayer1\")\n \n @classmethod\n def testTearDown(self):\n \"\"\"This method is run before each single test in the current\n layer. It is optional.\n \"\"\"\n print(\" Running testTearDown of UnitLayer1\")\n \n class UnitLayer2(UnitLayer1):\n \"\"\"This Layer inherits ``UnitLayer1``.\n \n This way we define nested setups. During test runs the testrunner\n will first call the setup methods of ``UnitTest1`` and then those\n of this class. Handling of teardown-methods will happen the other\n way round.\n \"\"\"\n \n @classmethod\n def setUp(self):\n pass\n \n @classmethod\n def testSetUp(self):\n print(\" Running testSetUp of UnitLayer2\")\n \n @classmethod\n def testTearDown(self):\n print(\" Running testTearDown of UnitLayer2\")\n\nIn a layer you can do all the special stuff that is needed to run a\ncertain group of tests properly. Our setup here is special in that we\ndefined a nested one: ``UnitLayer2`` inherits ``UnitLayer1`` so that\nduring test runs the appropriate setup and teardown methods are called\n(see testrunner output above).\n\nMore about test layers can be found at the documentation of\n`testrunner layers API\n`_.\n\nSpecifying a ZCML file: ``:zcml-layer:``\n----------------------------------------\n\nWhen it comes to integration tests which use zope's component architecture, we\nneed to specify a ZCML file which configures the test environment for us. We\ncan do that using the\n\n ``:zcml-layer: ``\n\nmarker. It expects a ZCML filename as argument and sets up a\nZCML-layered testsuite for us. An example setup might look like so (see\n``tests/othercave/doctest03.txt``)::\n\n A doctest with a ZCML-layer\n ===========================\n\n :doctest:\n :zcml-layer: ftesting.zcml\n\n >>> 1+1\n 2\n\n.. note:: Requires ``zope.app.testing``\n\n If you use ``:zcml-layer``, the ``zope.app.testing`` package must\n be available when running the tests and during test setup. This\n package is not fetched by default by ``z3c.testsetup``.\n\nHere we say that the the local file ``ftesting.zcml`` should be used as ZCML\nconfiguration. As we can see in the above output of testruner, this file is\nindeed read during test runs and used by a ZCML layer called\n``DefaultZCMLLayer``. This layer is in fact only a\n``zope.app.testing.functional.ZCMLLayer``.\n\nThe ZCML file is looked up in the same directory as the doctest file. (You can\nuse relative paths like ``../ftesting.zcml`` just fine, btw).\n\nWhen using the ``:zcml-layer:`` marker, the concerned tests are set up\nvia special methods and functions from ``zope.app.testing``. This way\nyou get 'functional' or 'integration' tests out of the box: in the\nbeginning an empty ZODB db is setup, ``getRootFolder``, ``sync`` and\nother functions are pulled into the test namespace and several things\nmore.\n\nIf you want a plain setup instead then use your own layer definition\nusing ``:layer:`` and remove the ``:zcml-layer:`` marker.\n\n\nSetting up a functional ZCML layer: ``:functional-zcml-layer:``\n---------------------------------------------------------------\n\nSometimes we want tests to be registered using the\n``FunctionalDocFileSuite`` function from\n``zope.app.testing.functional`` (other tests are set up using\n``doctest.DocFileSuite``). This function pulls in even\nmore functions into ``globs``, like ``http`` (a ``HTTPCaller``\ninstance), wraps your ``setUp`` and ``tearDown`` methods into\nZODB-setups and several things more. See the definition in\nhttp://svn.zope.org/zope.app.testing/trunk/src/zope/app/testing/functional.py?view=auto.\n\nThis setup needs also a ZCML configuration file, which can be\nspecified via::\n\n :functional-zcml-layer: \n\nIf a functional ZCML layer is specified in a testfile this way, it\nwill override any simple ``:zcml-layer:`` or ``:layer:`` definition.\n\nAn example setup might look like this (see\n``tests/othercave/doctest04.txt``):\n\n >>> print_file(os.path.join(cavepath, 'doctest04.txt'))\n | A functional doctest with ZCML-layer\n | ====================================\n |\n | :doctest:\n | :functional-zcml-layer: ftesting.zcml\n |\n | We didn't define a real environment in ftesting.zcml, but in\n | functional tests certain often needed functions should be available\n | automatically::\n |\n | >>> getRootFolder()\n | \n |\n\nThe placeholder between ``zope`` and ``folder`` was used because the\nlocation of the Folder class changed recently. This way we cover\nsetups with old packages as well as recent ones.\n\n.. note:: Requires ``zope.app.testing``\n\n If you use ``:zcml-layer``, the ``zope.app.testing`` package must\n be available when running the tests and during test setup. This\n package is not fetched by default by ``z3c.testsetup``.\n\n\nSpecifying test setup/teardown methods: ``:setup:`` and ``:teardown:``\n----------------------------------------------------------------------\n\nWe can specify a ``setUp(test)`` and ``tearDown(test)`` method for the\nexamples in a doctest file, which will be executed once for the whole\ndoctest file. This can be done using::\n\n :setup: \n :teardown: \n\nThe callables denoted by the dotted names must accept a ``test``\nparameter which will be the whole test suite of examples in the\ncurrent doctest file. setup/teardown can be used to set up (and remove) a\ntemporary directory, to monkeypatch a mailer, etcetera.\n\nAn example can be found in ``doctest05.txt``:\n\n >>> print_file(os.path.join(cavepath, 'doctest05.txt'))\n | A doctest with custom setup/teardown functions\n | ==============================================\n |\n | :doctest:\n | :setup: z3c.testsetup.tests.othercave.testing.setUp\n | :teardown: z3c.testsetup.tests.othercave.testing.tearDown\n |\n | >>> 1+1\n | 2\n |\n | We make use of a function registered during custom setup::\n |\n | >>> myfunc(2)\n | 4\n |\n\nThe setup/teardown functions denoted in the example look like this:\n\n >>> print(open(os.path.join(cavepath, 'testing.py'), 'r').read())\n import os\n ...\n def setUp(test):\n print(\" Custom setUp for %s\" % test)\n # We register a function that will be available during tests.\n test.globs['myfunc'] = lambda x: 2*x\n \n def tearDown(test):\n print(\" Custom tearDown for %s\" % test)\n del test.globs['myfunc'] # unregister function\n ...\n\nAs we can see, there is a function ``myfunc`` pulled into the\nnamespace of the doctest. We could, however, do arbitrary other things\nhere, set up a relational test database or whatever.\n\n\nHow to upgrade from `z3c.testsetup` < 0.3\n=========================================\n\nWith the 0.3 release of `z3c.testsetup` the set of valid marker\nstrings changed, introducing support for file-dependent setups,\nlayers, etc.\n\n\nDeprecated ``:Test-Layer:`` marker\n----------------------------------\n\nIf you still mark your testfiles with the ``:Test-Layer:`` marker,\nupdate your testfiles as follows:\n\n- ``:Test-Layer: unit``\n\n Change to: ``:doctest:``\n\n- ``:Test-Layer: python``\n\n Change to: ``:unittest:``\n\n- ``:Test-Layer: functional``\n\n Change to: ``:functional-zcml-layer: ``\n\n The ZCML file must explicitly be given.\n\nIf you used custom setups passed to ``register_all_tests``, consider\ndeclaring those setup/teardown functions in the appropriate doctest\nfiles using ``:setup:`` and ``:teardown:``.\n\nYou might also get better structured test suites when using the new\nlayer markers ``:layer:``, ``:zcml-layer:`` and\n``functional-zcml-layer:``.\n\n\nDeprectated parameters for ``register_all_tests()``\n---------------------------------------------------\n\nThe following ``register_all_tests``-parameters are deprecated,\nstarting with ``z3c.testsetup`` 0.3:\n\n- **filter_func**\n\n and related (``ufilter_func``, ``pfilter_func``, etc.)\n\n- All testtype specific parameters\n\n Support for testfile specific parameters (``uextensions``,\n ``fextensions``, etc.) is running out and its use deprecated.\n\n\nChangelog for z3c.testsetup\n***************************\n\n0.8.4 (2015-05-27)\n==================\n\n- Added util.got_working_zope_app_testing() to determine whether we\n have not only zope.app.testing installed, but it is also in a\n usable state.\n\n- Make the package compatible with Python3. Please note that at the\n time of writing, there is no working `zope.app.testing` available\n for Python 3.x. While `z3c.testsetup` can cope with that, some\n functionality (from `zope.app.testing.functional`) will not be\n available during tests. That depends on tests in your project.\n\n- Support for Python 3.3, Python 3.4, and PyPy2.\n\n- As part of the \"go-python3\" project, internal tests have been\n reorganized. From now on we will test things in Python code, not in\n doctests any more. Existing doctests will be transformed into\n `Sphinx` docs.\n\n- Fix keyword parsing of methods: accept methods that accept no\n keyword parameters.\n\n- Close files properly when looking for marker strings.\n\n- Cope with unforeseeable file encodings. We do now expect utf-8 but\n will not break otherwise.\n\n\n0.8.3 (2010-09-15)\n==================\n\n- Fixed tests on windows related to testrunner problems with multiple\n layers run in subprocesses.\n\n- Fixed some tests on windows, mostly because of path separator issues\n\n\n0.8.2 (2010-07-30)\n==================\n\n- Fixed tests not to fail when some buildbot takes minutes to run the\n tests.\n\n- Fix tests to work also under Python 2.7.\n\n0.8.1 (2010-07-25)\n==================\n\n- The ``encoding`` parameter is ignored under Python 2.4. This was\n already true for the 0.8 release, but now we silently ignore it\n instead of raising exceptions. For Python >= 2.5 nothing changed.\n\n0.8 (2010-07-24)\n================\n\n- Use standard lib doctest instead of zope.testing.doctest.\n\n- `z3c.testsetup` now looks in `zope.testrunner` for testrunner first\n (which was ripped out of `zope.testing`). Using testrunner from\n `zope.testing` is still supported. See bottom of ``testrunner.txt``\n in sources for details.\n\n- Fix tests to stay compatible with more recent zope testrunners. This\n should us keep compatible with ZTK 1.0a2.\n\n0.7 (2010-05-17)\n================\n\n- Fix NameError bug in the warning message in case zope.app.testing is not\n availble when trying to run a functional doc test. This error presented\n itself as a highly cryptic ImportError when actually running tests.\n\n0.6.1 (2009-11-19)\n==================\n\n- Test files that we attempt to read but that do not exist raise an error\n instead of passing silently.\n\n- Internal refactoring: regex caching.\n\n0.6 (2009-11-19)\n================\n\n- Python unittest modules with an import error now result in a visible\n warning. Previously, such problems would be hidden. Also the python\n testrunner could not report them as broken as we did not pass those test\n files to the testrunner.\n\n- Fixed regex for detecting the old \":test-layer: python\" marker: it did not\n work when prefixed with restructuredtext's \"..\" comment marker.\n\n0.5.1 (2009-10-22)\n==================\n\n* Reverted allow_teardown default back to False to prevent confusion.\n\n0.5 (2009-09-23)\n================\n\nBug fixes\n---------\n\n* Checkers are now applied to non-functional doctests too. Thanks to\n Jonathan Ballet for patches.\n\n* Normal UnitTest layers are now registered correctly.\n\n* ``:layer:`` now detects functional ZCML layers. If the defined layer is\n derived from `zope.testing.functional.ZCMLLayer`, then the test is\n set up with the same kind of testcase as ``:functional-zcml-layer:``.\n\n* Reordered and cleaned up the documentation.\n\nFeature changes\n---------------\n\n* By default, functional layer tests now use the allow_teardown=True option of\n the ZCMLLayer. This prevents the zcml layer from running in a subprocess\n which throws off profiling and thus code coverage tools. Running it in a\n subprocess is only normally needed when you do things like adding an\n interface to a class after the fact in your code. You can overrid it in the\n register_all_tests() call by setting allow_teardown=False.\n\n\n0.4 (2009-06-11)\n================\n\nBug fixes\n---------\n\n* Made ``z3c.testsetup`` selftests work with ``zope.testing`` >=\n 3.7.3. Thanks to Jonathan Ballet for pointing to that problem.\n\n* Ignore \\*nix hidden test files (i.e. such starting with a dot in\n filename) by default. Thanks to Jonathan Ballet for patch.\n\n* ZCML files registered via the default layer are now separated from\n each other, even if they own the same filename. Therefore you can now\n register a default layer with an ``ftesting.zcml`` in one subpackage\n while having another ``ftesting.zcml`` in another package. This was\n not handled correctly before. Many thanks go to Jonathan Ballet who\n contributed a patch.\n\nFeature Changes\n---------------\n\n* Added ``z3c.testsetup.testrunner`` that provides wrappers for\n ``zope.testing.testrunner``s ``run()`` and ``run_internal()``\n functions. Using it, one can make sure that running testrunners\n inside tests will work regardless of which version of\n ``zope.testing`` is used during testruns.\n\n0.3 (2009-02-23)\n================\n\nBug fixes\n---------\n\n* Updated doctest examples to reflect new ``zope.testing`` behaviour.\n\n* ``z3c.testsetup`` really shouldn't require ``zope.app.testing`` any\n more. If you use it in an environment without this package, then you\n cannot register functional tests, which is determined when loading\n ``register_all_tests`` from ``z3c.testsetup``.\n\n* Broken modules are ignored while scanning for tests.\n\n* Modules are not loaded anymore if their source code does not provide\n a suitable marker string. For this to work, the default checker\n method ``isTestModule`` now expects a ``martian.scan.ModuleInfo`` as\n argument and not a real module. Module infos can be easily created\n by using ``module_info_from_dotted_name`` and\n ``module_info_from_package`` from the ``martian.scan`` package.\n\nFeature Changes\n---------------\n\n* New set of testfile markers:\n\n - `:doctest:`\n\n marks a testfile as a doctest.\n\n - `:unittest:`\n\n marks a testfile as a regular unittest.\n\n - `:layer: dotted.name.to.layer.def`\n\n applies the given layer definition to the tests in the doctest\n file.\n\n - `:zcml-layer: filename.zcml`\n\n sets up a ZCML layer with the given filename and applies this\n layer to the doctests in the doctest file.\n\n - `:functional-zcml-layer: filename.zcml`\n\n sets up a ZCML layer with the given filename and applies this\n layer to the doctests in the doctest file. Furthermore the tests\n are set up as functional doc tests.\n\n - `:setup: dotted.name.to.setup.function`\n\n applies the setUp function denoted by the dotted name to the tests\n in the doctest file.\n\n - `:teardown: dotted.name.to.teardown.function`\n\n applies the tearDown function denoted by the dotted name to the\n tests in the doctests file.\n\n See the examples in `tests/othercave` and README.txt to learn more\n about using these new directives.\n\n The old `:test-layer:` marker is still supported but it is\n deprecated now and will vanish at least with the 0.5 version of\n `z3c.testsetup`.\n\n\n0.2.2 (2008-02-29)\n==================\n\nBug fixes\n---------\n\n* ``z3c.testsetup`` now does not require ``zope.component`` nor\n ``zope.app.testing`` for usage in other packages. You must take\n care, that those packages are available during tests, for example by\n adding those packages to your `setup.py`.\n\n0.2.1 (2008-02-18)\n==================\n\nBug fixes\n---------\n\n* Fix faulty upload egg.\n\n\n0.2 (2008-02-17)\n================\n\nFeature Changes\n---------------\n\n* An `ftesting.zcml` in the root of a handled package is now taken as\n default layer for functional doctests if it exists.\n\nBug fixes\n---------\n\n\n0.1 (2008-02-15)\n================\n\nFeature changes\n---------------\n\n- Initial Release\n\n\nDownload\n********", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/pypi/z3c.testsetup", "keywords": "zope3 zope tests unittest doctest testsetup", "license": "ZPL 2.1", "maintainer": null, "maintainer_email": null, "name": "z3c.testsetup", "package_url": "https://pypi.org/project/z3c.testsetup/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/z3c.testsetup/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://pypi.python.org/pypi/z3c.testsetup" }, "release_url": "https://pypi.org/project/z3c.testsetup/0.8.4/", "requires_dist": null, "requires_python": null, "summary": "Easier test setup for Zope 3 projects and other Python packages.", "version": "0.8.4" }, "last_serial": 1564886, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "316b80af7282f76af7dfbd63910acdd1", "sha256": "a541317025d8febbc4f300f9102ae4a6ce48348ad4373e932ae90e664a78ecc2" }, "downloads": -1, "filename": "z3c.testsetup-0.1.0-py2.4.egg", "has_sig": false, "md5_digest": "316b80af7282f76af7dfbd63910acdd1", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 78147, "upload_time": "2008-02-15T15:02:02", "url": "https://files.pythonhosted.org/packages/37/e0/76ac405531dfaa96b025d32ea85dc22e0e2547d6d3f7cd0c86125be4aab7/z3c.testsetup-0.1.0-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "b9f71c9359b87e16080ae8dd0e2f23fb", "sha256": "f4ad0fd654769e585c3fdfe5f7ec5467ea86aee26ade0f5a63da1452f5db3a5a" }, "downloads": -1, "filename": "z3c.testsetup-0.1.0.tar.gz", "has_sig": false, "md5_digest": "b9f71c9359b87e16080ae8dd0e2f23fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47629, "upload_time": "2008-02-15T14:30:51", "url": "https://files.pythonhosted.org/packages/51/2b/57ca43ad08ab61ebc349247d306e25efff6ec2972b50ed520ae14f597b85/z3c.testsetup-0.1.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "cdea369763f51f3f8cfedddc29fdd785", "sha256": "4c612a8c1ce332603273c9804c04281ecdd75af4a4b36c44c7c048fce013fd67" }, "downloads": -1, "filename": "z3c.testsetup-0.1.0.zip", "has_sig": false, "md5_digest": "cdea369763f51f3f8cfedddc29fdd785", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 72577, "upload_time": "2008-02-15T14:30:48", "url": "https://files.pythonhosted.org/packages/d0/bc/a1a8022962e77284816437dba7d079f1d0af6e65a1d53d3079b36d46105b/z3c.testsetup-0.1.0.zip" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "0d4943862ad8e90d177d9540d9412fce", "sha256": "8ca07e832e727f26e0cc5021885a3ea8a369e7a37175e205a8fe80373e7f88bf" }, "downloads": -1, "filename": "z3c.testsetup-0.2.0-py2.4.egg", "has_sig": false, "md5_digest": "0d4943862ad8e90d177d9540d9412fce", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 79164, "upload_time": "2008-02-17T01:51:44", "url": "https://files.pythonhosted.org/packages/fe/2b/bf713e410c5646f13faa52505ad63630eea9f8f85e65d202cdf505ba4ffc/z3c.testsetup-0.2.0-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "ab8ad7c3b5cd1554af5494a3efe64ce7", "sha256": "0fa46dbeef14428d748f0ecbc7ddfb5a8ef851145dd361c5cfe0ede2774ec69c" }, "downloads": -1, "filename": "z3c.testsetup-0.2.0-py2.5.egg", "has_sig": false, "md5_digest": "ab8ad7c3b5cd1554af5494a3efe64ce7", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 79016, "upload_time": "2008-02-17T02:07:18", "url": "https://files.pythonhosted.org/packages/0a/fd/9603759faeeb13a98a8de070a65ed37f68cb42e6382822c24836c2d8f6cc/z3c.testsetup-0.2.0-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "e147f6c7ab8590f6cf71e137543ed76f", "sha256": "74b54ced20f2356bdddb4310dbc284d8bfee375cdde87686a975ee6f7e3cfa98" }, "downloads": -1, "filename": "z3c.testsetup-0.2.0.tar.gz", "has_sig": false, "md5_digest": "e147f6c7ab8590f6cf71e137543ed76f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48535, "upload_time": "2008-02-17T01:51:38", "url": "https://files.pythonhosted.org/packages/74/4b/b729c9107b6550e340d2497a60323f81cfed8281bed8a4749b32809215bc/z3c.testsetup-0.2.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "6db724d9a392e5214bb10d940618ae56", "sha256": "47a2c1432e79bf4e2362e93449459299d8d1fb62ccdbfde36d607a6c8ee12137" }, "downloads": -1, "filename": "z3c.testsetup-0.2.0.zip", "has_sig": false, "md5_digest": "6db724d9a392e5214bb10d940618ae56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 74153, "upload_time": "2008-02-17T01:51:35", "url": "https://files.pythonhosted.org/packages/76/38/37b547f839dc24d6cb1190abe888b7ac0631af1e64eb92663228f92e8c62/z3c.testsetup-0.2.0.zip" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "9af5c13507816ff9e84b9ab299e45e71", "sha256": "6bb8b30453e600729e3aeedd19afa965121600196329db936123078cc3f60f96" }, "downloads": -1, "filename": "z3c.testsetup-0.2.1-py2.4.egg", "has_sig": false, "md5_digest": "9af5c13507816ff9e84b9ab299e45e71", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 79700, "upload_time": "2008-02-18T01:31:10", "url": "https://files.pythonhosted.org/packages/db/cd/f2281050f569a188e3d413624a5f99df24d85a09cd6a33d742e41a00c1c7/z3c.testsetup-0.2.1-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "f28403070c5199703de0fb321a6eba39", "sha256": "dce27d88f60fbc2e8d1810423434d2329bf142a09908c553c23952bd728d156f" }, "downloads": -1, "filename": "z3c.testsetup-0.2.1.tar.gz", "has_sig": false, "md5_digest": "f28403070c5199703de0fb321a6eba39", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48585, "upload_time": "2008-02-18T01:31:03", "url": "https://files.pythonhosted.org/packages/5b/11/742fbde1186ac69cca72e4f6830c7f642941785c2707e02ed9230cbdd941/z3c.testsetup-0.2.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "0377b37a48a02cf80f9f2613f4457a95", "sha256": "06c3a4f8b53be96b6b76b6513a41c22b1c5d7c9aec16169160889ce5cb1eaa5f" }, "downloads": -1, "filename": "z3c.testsetup-0.2.1.zip", "has_sig": false, "md5_digest": "0377b37a48a02cf80f9f2613f4457a95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 74220, "upload_time": "2008-02-18T01:31:01", "url": "https://files.pythonhosted.org/packages/7d/b3/4acab960cdf6a069450680568988894567c4abf79e0f3549b3bb99477b49/z3c.testsetup-0.2.1.zip" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "dc9191c26feb6a6a55c306aac86725bc", "sha256": "4a0954cd51f41f5eacdc24e547c9dc2b1db03fdf967abc632f63f980423181cb" }, "downloads": -1, "filename": "z3c.testsetup-0.2.2-py2.4.egg", "has_sig": false, "md5_digest": "dc9191c26feb6a6a55c306aac86725bc", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 80050, "upload_time": "2008-02-29T12:30:55", "url": "https://files.pythonhosted.org/packages/76/9c/daf46e41b73cdb0bd61f96d0ae57bac402d259a05a3239409aff685a50cd/z3c.testsetup-0.2.2-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "e53ca84808aeefa3f3f0c55c08f5288d", "sha256": "2406fa27dc62a7ad947b42f66da64b44c0bbaed2ebff1c9c73303ce77dc41b0f" }, "downloads": -1, "filename": "z3c.testsetup-0.2.2-py2.5.egg", "has_sig": false, "md5_digest": "e53ca84808aeefa3f3f0c55c08f5288d", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 79924, "upload_time": "2008-02-29T12:31:38", "url": "https://files.pythonhosted.org/packages/07/cf/00b2a7b45fae3bd94df2e7947568d1082b82d57bedfa7910279ff09e79b0/z3c.testsetup-0.2.2-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "3e9178407d845a91998697ee02d12f39", "sha256": "9e71fc4a5bcd13fdab6bfdaeec2fb92aa09114d63253f342856e35467d15f1f5" }, "downloads": -1, "filename": "z3c.testsetup-0.2.2.tar.gz", "has_sig": false, "md5_digest": "3e9178407d845a91998697ee02d12f39", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49423, "upload_time": "2008-02-29T12:30:48", "url": "https://files.pythonhosted.org/packages/6e/5c/b192acf23fd868dda893a9055e63839f50edd75a562177ed9cc6af897904/z3c.testsetup-0.2.2.tar.gz" }, { "comment_text": "", "digests": { "md5": "8d41e74a5a3159408bc598fbaf7ed9e7", "sha256": "71ae038402f9f37e7ab1a0a1ea69d691cf1538fb22b17768216cda6c630c9104" }, "downloads": -1, "filename": "z3c.testsetup-0.2.2.zip", "has_sig": false, "md5_digest": "8d41e74a5a3159408bc598fbaf7ed9e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75452, "upload_time": "2008-02-29T12:30:45", "url": "https://files.pythonhosted.org/packages/9b/b0/4718b3b56770236867c4c75422c82b6f368f2b8f3188fcf459e2e3f740d4/z3c.testsetup-0.2.2.zip" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "cb33b77ca7f8d69eb999432f017c8a21", "sha256": "7197e1c1149d2dad0df482abcb701dc4059ef814813976a28ede05d0b5b4c879" }, "downloads": -1, "filename": "z3c.testsetup-0.2.3.tar.gz", "has_sig": false, "md5_digest": "cb33b77ca7f8d69eb999432f017c8a21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53034, "upload_time": "2008-06-25T15:46:20", "url": "https://files.pythonhosted.org/packages/b6/d7/7d5b24dd50c158709a6f1b9f4ac0c08c5d1a303143e150ab93d3806db3e9/z3c.testsetup-0.2.3.tar.gz" }, { "comment_text": "", "digests": { "md5": "2a4501e4635389acc04e718bea2f07b0", "sha256": "dfc9ba6e9f476e37c7fedbaf9a2bda7a956293d575169c14c7b880ddf8ba2e82" }, "downloads": -1, "filename": "z3c.testsetup-0.2.3.zip", "has_sig": false, "md5_digest": "2a4501e4635389acc04e718bea2f07b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79899, "upload_time": "2008-06-25T15:46:18", "url": "https://files.pythonhosted.org/packages/d5/82/c95f8a36bf444cc7eec473b36f7cdeacf809ff3e176f4a290c35ae57d5f2/z3c.testsetup-0.2.3.zip" } ], "0.2.3dev-r84433": [ { "comment_text": "", "digests": { "md5": "5473ac3e0c5dfe1417eb89fd6dc2c16e", "sha256": "fbb6d21713eb0a48fddf9750c8e45b45d64a80c27fe3f8762c80b92df44aa213" }, "downloads": -1, "filename": "z3c.testsetup-0.2.3dev_r84433-py2.4.egg", "has_sig": false, "md5_digest": "5473ac3e0c5dfe1417eb89fd6dc2c16e", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 90259, "upload_time": "2008-03-03T02:44:49", "url": "https://files.pythonhosted.org/packages/d6/ee/c9a42e103dcf0aca1fd7ab9d45a8baadb495e4c6bfe68d296bef05b70334/z3c.testsetup-0.2.3dev_r84433-py2.4.egg" } ], "0.2.3dev-r84450": [ { "comment_text": "", "digests": { "md5": "9c5aff31b0c8d9e82288573bdf4697cb", "sha256": "5cdd3062c4096db7875ff3ef90862e1914e0302e9b638a32296cb03119127244" }, "downloads": -1, "filename": "z3c.testsetup-0.2.3dev_r84450-py2.4.egg", "has_sig": false, "md5_digest": "9c5aff31b0c8d9e82288573bdf4697cb", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 90260, "upload_time": "2008-03-03T23:28:38", "url": "https://files.pythonhosted.org/packages/15/9b/a3ab44bf614b04b49415134cf26ed16e8b97f97c5c6d6d029003db525665/z3c.testsetup-0.2.3dev_r84450-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "de551ea9aed69031a6af9269e802ee0b", "sha256": "4ba9654c6f50ecf863980cdea36fc512805623b676b8ac454a5c9d80fb2d7afb" }, "downloads": -1, "filename": "z3c.testsetup-0.2.3dev-r84450.tar.gz", "has_sig": false, "md5_digest": "de551ea9aed69031a6af9269e802ee0b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53090, "upload_time": "2008-03-03T23:28:31", "url": "https://files.pythonhosted.org/packages/9e/61/916ae3b59e048ca18dde5824d384f631e0fa1fd5986d57dd201260549773/z3c.testsetup-0.2.3dev-r84450.tar.gz" }, { "comment_text": "", "digests": { "md5": "0747e39d31b7f0dcfc7d8380d0f4076b", "sha256": "1d25f03a9787959e31302fbee3ae24b9ed6ad4650839ccdd5b09e120d8e5247d" }, "downloads": -1, "filename": "z3c.testsetup-0.2.3dev-r84450.zip", "has_sig": false, "md5_digest": "0747e39d31b7f0dcfc7d8380d0f4076b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 82959, "upload_time": "2008-03-03T23:28:28", "url": "https://files.pythonhosted.org/packages/c7/84/389c158a40a6963e79e61803f405021210366dbe5758f2396ca78bd0fb98/z3c.testsetup-0.2.3dev-r84450.zip" } ], "0.2.3dev-r84470": [ { "comment_text": "", "digests": { "md5": "1fc489366835b0b2ce63c9d6918f4002", "sha256": "f8c56ae209052b0277fec9b409f0ce9eb35b6fd1fcca2b0755e4ccc79720f3fa" }, "downloads": -1, "filename": "z3c.testsetup-0.2.3dev_r84470-py2.4.egg", "has_sig": false, "md5_digest": "1fc489366835b0b2ce63c9d6918f4002", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 80095, "upload_time": "2008-03-05T15:37:53", "url": "https://files.pythonhosted.org/packages/79/9c/799d19082689590a3026eb61765b4a7237fb6bc5d8543d2812fc2f1b2fbf/z3c.testsetup-0.2.3dev_r84470-py2.4.egg" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "64654fc943a4fc55f05c436a137e5217", "sha256": "b806ef66c905f0bd11556780f7b28f637db632988592898c02a98e155f737b12" }, "downloads": -1, "filename": "z3c.testsetup-0.3.tar.gz", "has_sig": false, "md5_digest": "64654fc943a4fc55f05c436a137e5217", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 72878, "upload_time": "2009-02-23T20:29:56", "url": "https://files.pythonhosted.org/packages/77/08/9445fe9aef65d22cd4f31c8e113e8ce1566aa87418c5d2925abd49647fb6/z3c.testsetup-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "e28387ac50efd0db92dad111d6031dea", "sha256": "41fa895d6592a94b00def7e2ac02f7768095e321b02982ff9737b7fd7deca372" }, "downloads": -1, "filename": "z3c.testsetup-0.4.tar.gz", "has_sig": false, "md5_digest": "e28387ac50efd0db92dad111d6031dea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 84313, "upload_time": "2009-06-11T13:26:42", "url": "https://files.pythonhosted.org/packages/1a/e0/18c3d56dc8659f3e078b670c7ab14e6b1c5bb0601d6922b0bb7cc2e8f129/z3c.testsetup-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "e1abc6132d5c840ed42302f9cf067fad", "sha256": "aed855185ec362b1023e2d7b1e1ec2841cffc9b537c739f5f8defa8b2bf74ec8" }, "downloads": -1, "filename": "z3c.testsetup-0.5.tar.gz", "has_sig": false, "md5_digest": "e1abc6132d5c840ed42302f9cf067fad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 78956, "upload_time": "2009-09-23T13:00:58", "url": "https://files.pythonhosted.org/packages/fe/f1/dc0d0526a8c62819194c90052f1d9cb548cb1aaf4ab1acf772358dbc9244/z3c.testsetup-0.5.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "85fadb1df995db2c118a9e19819f5c20", "sha256": "129d5d11f8455a39286f530ee678b2c5f27d53bb73e848599df6531b6e938d29" }, "downloads": -1, "filename": "z3c.testsetup-0.5.1.tar.gz", "has_sig": false, "md5_digest": "85fadb1df995db2c118a9e19819f5c20", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79550, "upload_time": "2009-10-22T15:21:36", "url": "https://files.pythonhosted.org/packages/48/80/05aa9e43ddc3bdc52dc1754b3aedff0ff78c7f6f9edbcb57e9e0c2409953/z3c.testsetup-0.5.1.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "d1256f6e73ec5e15324f916f6672ca9f", "sha256": "31db3165e8f212f9b70c412d0721ba8ed3b6efdd39afcc4990ad1c3b4b7ac246" }, "downloads": -1, "filename": "z3c.testsetup-0.6.tar.gz", "has_sig": false, "md5_digest": "d1256f6e73ec5e15324f916f6672ca9f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 80940, "upload_time": "2009-11-19T11:02:34", "url": "https://files.pythonhosted.org/packages/1b/ed/7c5b8b7d187b972522e920ca1898f502b627c353b595bc8e1458d6c6bc3f/z3c.testsetup-0.6.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "68db7ab500a945bbe5cf28133651d825", "sha256": "39c3de54ae442105141ed620c51b37400cec98c9bd174feab659ac8e7f1bb2d9" }, "downloads": -1, "filename": "z3c.testsetup-0.6.1.tar.gz", "has_sig": false, "md5_digest": "68db7ab500a945bbe5cf28133651d825", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 81366, "upload_time": "2009-11-19T12:37:16", "url": "https://files.pythonhosted.org/packages/96/d0/66c8517ae25fa43fe744e92aa768fcd1be29fc09ad1c76bee10ff2b1ee03/z3c.testsetup-0.6.1.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "033158667cfc6ea3c3bec6a3265c6f3e", "sha256": "b6068608447320f58a82e4c530fb0d2d54d4094baf0308c9cf41c5d1ebc5b752" }, "downloads": -1, "filename": "z3c.testsetup-0.7.tar.gz", "has_sig": false, "md5_digest": "033158667cfc6ea3c3bec6a3265c6f3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83097, "upload_time": "2010-05-17T18:15:44", "url": "https://files.pythonhosted.org/packages/d1/77/82448762f1e4f4c2453fd6b9859a97deb8b27a11323497512f79545e678d/z3c.testsetup-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "359e3d2ac74ec6fc515b81b06a5aa387", "sha256": "9c0bfac979b83712104e5fe51b8487a4950c0f2f4e5d091eda6cc5ce8ff02f2b" }, "downloads": -1, "filename": "z3c.testsetup-0.8.tar.gz", "has_sig": false, "md5_digest": "359e3d2ac74ec6fc515b81b06a5aa387", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83204, "upload_time": "2010-07-24T03:18:33", "url": "https://files.pythonhosted.org/packages/15/ae/7b90447422058122ec03fba14f44563337021ed67820cbd5a59c9c6df240/z3c.testsetup-0.8.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "1c90c1a53adabe5aefbc1394974675f9", "sha256": "82ea43e441af44dbcfbed0d683be3541d6a8c47183ed3cc5c52b199d4c8a7ba5" }, "downloads": -1, "filename": "z3c.testsetup-0.8.1.tar.gz", "has_sig": false, "md5_digest": "1c90c1a53adabe5aefbc1394974675f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83482, "upload_time": "2010-07-25T17:34:59", "url": "https://files.pythonhosted.org/packages/01/56/aa9c21bf4e78b3b18f6aa5fd234e43451ae5c1411357ac6bd53b392e3647/z3c.testsetup-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "ada55d1441f441356311a09b1c4aca8d", "sha256": "6108b6a2a6c13d5f5f13fee4e976233965dc6b3ced9770372adcf733c9c5fd7b" }, "downloads": -1, "filename": "z3c.testsetup-0.8.2.tar.gz", "has_sig": false, "md5_digest": "ada55d1441f441356311a09b1c4aca8d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83722, "upload_time": "2010-07-30T20:01:31", "url": "https://files.pythonhosted.org/packages/22/b0/f3d924d3e11773ddb1714d6296b932407a8fac0204ffaf4b34f809cde64e/z3c.testsetup-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "22bc1d51c5d3e8278d853fabaffaa357", "sha256": "83427f14593817d96b104599066b6179adaa96a68c3ae781fab2c0a61c954a86" }, "downloads": -1, "filename": "z3c.testsetup-0.8.3.tar.gz", "has_sig": false, "md5_digest": "22bc1d51c5d3e8278d853fabaffaa357", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 84363, "upload_time": "2010-09-15T10:58:58", "url": "https://files.pythonhosted.org/packages/60/ec/6e2951eee958993e975485a679e955f0b67380cd4277d0565dc4de8d597f/z3c.testsetup-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "9b925a0e66daf0440f68478e6d9cadc3", "sha256": "f44b09c7fea54dcd37661f8926dd59a987562e9eab999745be3377300cacf6fb" }, "downloads": -1, "filename": "z3c.testsetup-0.8.4.tar.gz", "has_sig": false, "md5_digest": "9b925a0e66daf0440f68478e6d9cadc3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 91358, "upload_time": "2015-05-27T15:31:10", "url": "https://files.pythonhosted.org/packages/5a/2c/b167ef93266400c778d8ecde6926f6799035441a67344d11eceb66681057/z3c.testsetup-0.8.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9b925a0e66daf0440f68478e6d9cadc3", "sha256": "f44b09c7fea54dcd37661f8926dd59a987562e9eab999745be3377300cacf6fb" }, "downloads": -1, "filename": "z3c.testsetup-0.8.4.tar.gz", "has_sig": false, "md5_digest": "9b925a0e66daf0440f68478e6d9cadc3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 91358, "upload_time": "2015-05-27T15:31:10", "url": "https://files.pythonhosted.org/packages/5a/2c/b167ef93266400c778d8ecde6926f6799035441a67344d11eceb66681057/z3c.testsetup-0.8.4.tar.gz" } ] }