tests.py 3.58 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
##############################################################################
#
# Copyright (c) 2004 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""XXX short summary goes here.

$Id$
"""

19
import os, re, shutil, sys, unittest
Jim Fulton's avatar
Jim Fulton committed
20
from zope.testing import doctest, renormalizing
Jim Fulton's avatar
Jim Fulton committed
21
import zc.buildout.testing
22

23 24 25 26 27 28 29 30
def buildout_error_handling():
    r'''Buildout error handling

Asking for a section that doesn't exist, yields a key error:

    >>> import os
    >>> os.chdir(sample_buildout)
    >>> import zc.buildout.buildout
31
    >>> buildout = zc.buildout.buildout.Buildout('buildout.cfg', [])
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
    >>> buildout['eek']
    Traceback (most recent call last):
    ...
    KeyError: 'eek'

Asking for an option that doesn't exist, a MissingOption error is raised:

    >>> buildout['buildout']['eek']
    Traceback (most recent call last):
    ...
    MissingOption: ('Missing option', 'buildout', 'eek')

It is an error to create a variable-reference cycle:

    >>> write(sample_buildout, 'buildout.cfg',
    ... """
    ... [buildout]
    ... develop = recipes
    ... parts = data_dir debug
    ... x = ${buildout:y}
    ... y = ${buildout:z}
    ... z = ${buildout:x}
    ... """)

    >>> print system(os.path.join(sample_buildout, 'bin', 'buildout')),
    ... # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS
    Traceback (most recent call last):
    ...
    ValueError: ('Circular references',
           [('buildout', 'y'), ('buildout', 'z'), ('buildout', 'x')],
           ('buildout', 'y'))

64
'''    
Jim Fulton's avatar
Jim Fulton committed
65 66 67

def linkerSetUp(test):
    zc.buildout.testing.buildoutSetUp(test)
68
    zc.buildout.testing.create_sample_eggs(test)
Jim Fulton's avatar
Jim Fulton committed
69 70 71 72
        
def linkerTearDown(test):
    shutil.rmtree(test.globs['_sample_eggs_container'])
    zc.buildout.testing.buildoutTearDown(test)
73

74
def buildoutTearDown(test):
75 76 77
    shutil.rmtree(test.globs['extensions'])
    shutil.rmtree(test.globs['home'])
    zc.buildout.testing.buildoutTearDown(test)
Jim Fulton's avatar
Jim Fulton committed
78
    
79 80 81 82
def test_suite():
    return unittest.TestSuite((
        doctest.DocFileSuite(
            'buildout.txt',
Jim Fulton's avatar
Jim Fulton committed
83
            setUp=zc.buildout.testing.buildoutSetUp,
84
            tearDown=buildoutTearDown,
Jim Fulton's avatar
Jim Fulton committed
85 86 87
            checker=renormalizing.RENormalizing([
               (re.compile('__buildout_signature__ = recipes-\S+'),
                '__buildout_signature__ = recipes-SSSSSSSSSSS'),
88 89 90
               (re.compile('\S+sample-(\w+)%s(\S+)' % os.path.sep),
                r'/sample-\1/\2'),
                ])
91
            ),
Jim Fulton's avatar
Jim Fulton committed
92
        doctest.DocFileSuite(
93
            'egglinker.txt', 'easy_install.txt', 
Jim Fulton's avatar
Jim Fulton committed
94 95 96 97 98 99 100
            setUp=linkerSetUp, tearDown=linkerTearDown,
            checker=renormalizing.RENormalizing([
               (re.compile('(\S+[/%(sep)s]| )'
                           '(\\w+-)[^ \t\n%(sep)s/]+.egg'
                           % dict(sep=os.path.sep)
                           ),
                '\\2-VVV-egg'),
101
               (re.compile('\S+%spython(\d.\d)?' % os.path.sep), 'python')
Jim Fulton's avatar
Jim Fulton committed
102 103
               ]),
            ),
104
        doctest.DocTestSuite(
Jim Fulton's avatar
Jim Fulton committed
105 106
            setUp=zc.buildout.testing.buildoutSetUp,
            tearDown=zc.buildout.testing.buildoutTearDown),
107 108 109 110 111
        ))

if __name__ == '__main__':
    unittest.main(defaultTest='test_suite')