Metadata-Version: 1.0
Name: redef
Version: 1.1
Summary: Test utility for redefining functions
Home-page: http://github.com/joeheyming/redef
Author: Joe Heyming
Author-email: joeheyming@gmail.com
License: GNU GPLv3, Python License
Download-URL: https://github.com/joeheyming/redef/zipball/master
Description: To install, just run:
        python ./setup.py build
        python ./setup.py install
        
        See test_redef.py under your install path for examples.
        
        Redef is inteded to create lexically scope variables that when destroyed undo mock behavior.
        It was inspired by a perl module, Test::Resub - http://search.cpan.org/~airwave/Test-Resub-1.02/lib/Test/Resub.pm
        
        The best examples use unittest, but it should work with any testing framework.
        
        import unittest
        from redef import redef
        
        class MyClass:
        def lame_function(self):
        return "something I don't want"
        
        def MyTest(unittest.TestCase):
        def test1(self):
        myobj = MyClass()
        self.assertEqual(myobj.lame_function(), "something I don't want")
        want = 'something I want'
        rd_lf = redef(MyClass, 'lame_function', lambda s: want)
        self.assertEqual(myobj.lame_function(), want)
        
        # after test1, rd_lf gets deleted and resets
        
        def test2(self):
        myobj = MyClass()
        # test2 is uneffected by test1
        self.assertEqual(myobj.lame_function(), "something I don't want")
        
        This doesn't have to be a function, you can also redefine attributes directly on an object.
        
        class MyClass:
        unpredictable = 'random string'
        
        my_global_object = MyClass()
        ...
        def test3(self):
        rd_u = redef(my_global_object, 'unpredictable', 'unit testable string')
        # ... test something awesome!
        self.assertEqual(my_global_object.unpredictable, 'unit testable string')
        def test4(self):
        # hey, my_global_object is back to being unpredictable
        self.assertEqual(my_global_object.unpredictable, 'unpredictable')
        
        There are other useful functions provided on the redef object itself:
        Class Redef:
        
        called():
        Stores how many times a redef'd function was called.
        method_args():
        Stores the most recent *args to the redef'd function.
        named_method_args():
        Stores the most recent **kwargs to the redef'd function.
        
        reset():
        Sets called, method_args, and name_method_args back to the default state of 0, None, None
        
        Redef also provides a freebie static functions:
        redef(obj, key, value):
        Static constructor of a Redef object
        
        # these static functions were provieded to show the usefulness of redef:
        #   for example, you could capture stdout of a function call, and after capturing it,
        #   sys.stdout goes back to normal
        Class WriteCapturer:
        Has 2 variables you want: output, returned
        
        stdout_of(func, *args, **kwargs):
        Call a function and capture the stdout
        Returns a WriteCapturerobject that has the stdout and the return value of calling func
        
        stderr_of(func, *args, **kwargs):
        Call a function and capture the stderr
        Returns a WriteCapturerobject that has the stderr and the return value of calling func
        
        
Platform: any
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.4
Classifier: Programming Language :: Python :: 2.5
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: Testing
