def test_multiple_replace(self):
        def test_y(self):
            return "test y"

        def test_z():
            return "test z"

        compare(sample1.z(), "original z")
        compare(sample1.X().y(), "original y")

        @replace("testfixtures.tests.sample1.z", test_z)
        @replace("testfixtures.tests.sample1.X.y", test_y)
        def test_something(passed_test_y, passed_test_z):
            compare(test_z, passed_test_z)
            compare(test_y, passed_test_y)
            compare(sample1.z(), "test z")
            compare(sample1.X().y(), "test y")

        compare(sample1.z(), "original z")
        compare(sample1.X().y(), "original y")

        test_something()

        compare(sample1.z(), "original z")
        compare(sample1.X().y(), "original y")
    def test_multiple_replace(self):

        def test_y(self):
            return 'test y'

        def test_z():
            return 'test z'

        compare(sample1.z(),'original z')
        compare(sample1.X().y(),'original y')

        @replace('testfixtures.tests.sample1.z',test_z)
        @replace('testfixtures.tests.sample1.X.y',test_y)
        def test_something(passed_test_y,passed_test_z):
            compare(test_z,passed_test_z)
            compare(test_y,passed_test_y)
            compare(sample1.z(),'test z')
            compare(sample1.X().y(),'test y')

        compare(sample1.z(),'original z')
        compare(sample1.X().y(),'original y')

        test_something()

        compare(sample1.z(),'original z')
        compare(sample1.X().y(),'original y')
    def test_function(self):
        def test_z():
            return "replacement z"

        compare(sample1.z(), "original z")

        @replace("testfixtures.tests.sample1.z", test_z)
        def test_something():
            compare(sample1.z(), "replacement z")

        compare(sample1.z(), "original z")

        test_something()

        compare(sample1.z(), "original z")
    def test_function(self):

        def test_z():
            return 'replacement z'

        compare(sample1.z(),'original z')

        @replace('testfixtures.tests.sample1.z',test_z)
        def test_something():
            compare(sample1.z(),'replacement z')

        compare(sample1.z(),'original z')

        test_something()

        compare(sample1.z(),'original z')
    def test_raises(self):
        def test_z():
            return "replacement z"

        compare(sample1.z(), "original z")

        @replace("testfixtures.tests.sample1.z", test_z)
        def test_something():
            compare(sample1.z(), "replacement z")
            raise Exception()

        compare(sample1.z(), "original z")

        should_raise(test_something)()

        compare(sample1.z(), "original z")
    def test_raises(self):

        def test_z():
            return 'replacement z'

        compare(sample1.z(),'original z')

        @replace('testfixtures.tests.sample1.z',test_z)
        def test_something():
            compare(sample1.z(),'replacement z')
            raise Exception()

        compare(sample1.z(),'original z')

        should_raise(test_something)()

        compare(sample1.z(),'original z')
    def test_gotcha(self):
        # Just because you replace an object in one context,
        # doesn't meant that it's replaced in all contexts!

        def test_z():
            return 'test z'
        
        compare(sample1.z(),'original z')
        compare(sample2.z(),'original z')
        
        @replace('testfixtures.tests.sample1.z',test_z)
        def test_something():
            compare(sample1.z(),'test z')
            compare(sample2.z(),'original z')
            
        compare(sample1.z(),'original z')
        compare(sample2.z(),'original z')
    
        test_something()

        compare(sample1.z(),'original z')
        compare(sample2.z(),'original z')
 def test_something(passed_test_y,passed_test_z):
     compare(test_z,passed_test_z)
     compare(test_y,passed_test_y)
     compare(sample1.z(),'test z')
     compare(sample1.X().y(),'test y')
 def test_something():
     compare(sample1.z(),'replacement z')
 def test_something():
     compare(sample1.z(),'replacement z')
     raise Exception()
 def test_something():
     compare(sample1.z(),'test z')
     compare(sample2.z(),'original z')
 def test_something():
     compare(sample1.z(), "test z")
     compare(sample2.z(), "original z")