Source code for zope.testing.module

##############################################################################
#
# Copyright (c) 2004 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (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.
#
##############################################################################
"""Fake module support.

See :doc:`../module` for documentation.
"""

import sys


__all__ = [
    'setUp',
    'tearDown',
]


class FakeModule:
    def __init__(self, dict):
        self.__dict = dict

    def __getattr__(self, name):
        try:
            return self.__dict[name]
        except KeyError:
            raise AttributeError(name)

    def __dir__(self):
        return self.__dict.keys()


[docs] def setUp(test, name='__main__'): """ Replace the module named *name* with a fake version. """ dict = test.globs dict['__name__'] = name module = FakeModule(dict) sys.modules[name] = module if '.' in name: name = name.split('.') parent = sys.modules['.'.join(name[:-1])] setattr(parent, name[-1], module)
[docs] def tearDown(test, name=None): """ Remove the (fake) module named *name*. """ if name is None: name = test.globs['__name__'] del test.globs['__name__'] del sys.modules[name] if '.' in name: name = name.split('.') parent = sys.modules['.'.join(name[:-1])] delattr(parent, name[-1])