Adjust the way that test observation suspension works. #486
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.
When I updated the Nimble submodule to fix compilation on Xcode 7.3, I discovered that the changes made in Quick/Nimble#244 break the Quick tests because of the way that we use
+[XCTestObservationCenter _suspendObservationForBlock:]
to enable runningXCTestSuite
instances during the middle of an existing run. The problem is that Nimble now relies on a test observer of its own in order to be able to report failures to XCTest (see the CI failure here).This PR changes the
QCKSpecRunner
behavior so that, instead of using private API on XCTestObservationCenter, it swizzles public methods to keep track of XCTest's own observers, then temporarily removes them from the center to implement the suspension behavior. I'm not convinced that this is necessarily any more future-proof than the old mechanism, because it relies on being able to add and remove observers at arbitrary times during an ongoing test run, but it does work with current XCTest versions, at least.Any concerns, @Quick/contributors?