suggested fix for issue #1785: overloading and __set bug #1800
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
Stub::*
methods all tend to set a__mocked
property on the mocked classes. When attempting to mock a class that implements a__set
method that doesn't allow (as PHP calls it) "overloading", this results in a PHPUnit exception.This PR addresses this issue by checking the class for an existing
__set
method. If such a method exists, the__mocked
flag is not set.This check is also used when attempting to add a non-existent property to classes with a
__set
method. These properties will be added, but aPHPUnit_Framework_Exception
will be thrown if this fails.The
__mocked
flag was primarily (only?) used in theStub::update
call (to change the mock's behavior on the fly). the__mocked
property check has been replaced with aninstanceof PHPUnit_Framework_MockObject_MockObject
check. If this check fails, the behavior remains unchanged: callingStub::update
on anything that is not an instance of theMockObject
class cause aLogicException
to be thrown.