8000 [refactoring] Implement qck_suspendObservation in Swift by ikesyo · Pull Request #859 · Quick/Quick · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

[refactoring] Implement qck_suspendObservation in Swift #859

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 15, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
branches:
only:
- master

language: generic
matrix:
include:
Expand Down
30 changes: 14 additions & 16 deletions Quick.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -128,15 +128,15 @@
8D010A571C11726F00633E2B /* DescribeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D010A561C11726F00633E2B /* DescribeTests.swift */; };
8D010A581C11726F00633E2B /* DescribeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D010A561C11726F00633E2B /* DescribeTests.swift */; };
8D010A591C11726F00633E2B /* DescribeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D010A561C11726F00633E2B /* DescribeTests.swift */; };
AE4E58131C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; };
AE4E58141C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; };
AE4E58151C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; };
AE4E58161C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; };
AE4E58171C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; };
AE4E58181C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; };
AED9C8631CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */; };
AED9C8641CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */; };
AED9C8651CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */; };
CD1F6503226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD1F6502226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift */; };
CD1F6504226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD1F6502226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift */; };
CD1F6505226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD1F6502226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift */; };
CD1F6506226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD1F6502226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift */; };
CD1F6507226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD1F6502226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift */; };
CD1F6508226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD1F6502226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift */; };
CD264DBD1DDA147A0038B0EB /* AfterSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 64076D241D6D80B500E2B499 /* AfterSuiteTests+ObjC.m */; };
CD564DA020B5B09C00C15E6B /* QuickSpec+QuickSpec_MethodList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */; };
CD564DA120B5B09D00C15E6B /* QuickSpec+QuickSpec_MethodList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */; };
Expand Down Expand Up @@ -498,8 +498,8 @@
8D010A561C11726F00633E2B /* DescribeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DescribeTests.swift; sourceTree = "<group>"; };
96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "QuickSpec+QuickSpec_MethodList.h"; sourceTree = "<group>"; };
96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "QuickSpec+QuickSpec_MethodList.m"; sourceTree = "<group>"; };
AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestObservationCenter+QCKSuspendObservation.m"; sourceTree = "<group>"; };
AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrossReferencingSpecs.swift; sourceTree = "<group>"; };
CD1F6502226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCTestObservationCenter+QCKSuspendObservation.swift"; sourceTree = "<group>"; };
CD261AC81DEC8B0000A8863C /* QuickConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuickConfiguration.swift; sourceTree = "<group>"; };
CD3451461E4703D4000C8633 /* QuickMain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuickMain.swift; sourceTree = "<group>"; };
CD3451471E4703D4000C8633 /* QuickSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuickSpec.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -532,7 +532,6 @@
DA8F919519F31680006F6675 /* QCKSpecRunner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QCKSpecRunner.h; sourceTree = "<group>"; };
DA8F919619F31680006F6675 /* QCKSpecRunner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QCKSpecRunner.m; sourceTree = "<group>"; };
DA8F919719F31680006F6675 /* QuickTestsBridgingHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickTestsBridgingHeader.h; sourceTree = "<group>"; };
DA8F919819F31680006F6675 /* XCTestObservationCenter+QCKSuspendObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "XCTestObservationCenter+QCKSuspendObservation.h"; sourceTree = "<group>"; };
DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "FailureTests+ObjC.m"; sourceTree = "<group>"; };
DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeforeSuiteTests.swift; sourceTree = "<group>"; };
DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharedExamplesTests.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -768,10 +767,9 @@
DA8F919519F31680006F6675 /* QCKSpecRunner.h */,
DA8F919619F31680006F6675 /* QCKSpecRunner.m */,
34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */,
DA8F919819F31680006F6675 /* XCTestObservationCenter+QCKSuspendObservation.h */,
96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */,
96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */,
AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */,
CD1F6502226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift */,
);
path = Helpers;
sourceTree = "<group>";
Expand Down Expand Up @@ -1463,6 +1461,7 @@
CE4A57911EA7252E0063C0D4 /* FunctionalTests_BehaviorTests_Behaviors.swift in Sources */,
DED303 10000 7F1DF6CF140041394E /* BundleModuleNameTests.swift in Sources */,
1F118D0F1BDCA54B005013A2 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */,
CD1F6507226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift in Sources */,
1F118D101BDCA556005013A2 /* Configuration+AfterEach.swift in Sources */,
1F118D1A1BDCA556005013A2 /* PendingTests.swift in Sources */,
1F118D171BDCA556005013A2 /* BeforeEachTests+ObjC.m in Sources */,
Expand All @@ -1471,7 +1470,6 @@
1F118D131BDCA556005013A2 /* ItTests+ObjC.m in Sources */,
1F118D191BDCA556005013A2 /* AfterEachTests+ObjC.m in Sources */,
1F118D221BDCA556005013A2 /* SharedExamples+BeforeEachTests.swift in Sources */,
AE4E58171C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */,
AED9C8651CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */,
1F118D211BDCA556005013A2 /* SharedExamplesTests+ObjC.m in Sources */,
1F118D201BDCA556005013A2 /* SharedExamplesTests.swift in Sources */,
Expand All @@ -1493,11 +1491,11 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
CD1F6508226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift in Sources */,
1F118D0D1BDCA547005013A2 /* QCKSpecRunner.m in Sources */,
34C586061C4ABD4100D4F057 /* XCTestCaseProvider.swift in Sources */,
1F118D241BDCA561005013A2 /* FocusedTests.swift in Sources */,
1F118D251BDCA561005013A2 /* FocusedTests+ObjC.m in Sources */,
AE4E58181C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -1546,6 +1544,7 @@
DA05D61119F73A3800771050 /* AfterEachTests.swift in Sources */,
DAB0137019FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */,
DA8F91A619F3208B006F6675 /* BeforeSuiteTests.swift in Sources */,
CD1F6505226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift in Sources */,
DA8C00221A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */,
CE4A578A1EA5DC270063C0D4 /* BehaviorTests.swift in Sources */,
DAA63EA419F7637300CD0A3B /* PendingTests.swift in Sources */,
Expand All @@ -1555,7 +1554,6 @@
CE4A578E1EA7251C0063C0D4 /* FunctionalTests_BehaviorTests_Behaviors.swift in Sources */,
DA8F91AF19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */,
DAE714FB19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */,
AE4E58151C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */,
AED9C8641CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */,
471590411A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */,
DA8F919E19F31921006F6675 /* FailureTests+ObjC.m in Sources */,
Expand Down Expand Up @@ -1603,23 +1601,23 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
CD1F6504226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift in Sources */,
DA07722E1A4E5B7B0098839D /* QCKSpecRunner.m in Sources */,
34C586021C4ABD3F00D4F057 /* XCTestCaseProvider.swift in Sources */,
DA5663F41A4C8D9A00193C88 /* FocusedTests.swift in Sources */,
DAF28BC31A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */,
AE4E58141C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
DA9876AE1A4C70EB0004AA17 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
CD1F6506226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift in Sources */,
DA07722F1A4E5B7C0098839D /* QCKSpecRunner.m in Sources */,
34C586041C4ABD4000D4F057 /* XCTestCaseProvider.swift in Sources */,
DA9876C11A4C87200004AA17 /* FocusedTests.swift in Sources */,
DAF28BC41A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */,
AE4E58161C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -1668,6 +1666,7 @@
CE4A57921EA725300063C0D4 /* FunctionalTests_BehaviorTests_Behaviors.swift in Sources */,
DED3037D1DF6CF140041394E /* BundleModuleNameTests.swift in Sources */,
DA05D61019F73A3800771050 /* AfterEachTests.swift in Sources */,
CD1F6503226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift in Sources */,
DAB0136F19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */,
DA8F91A519F3208B006F6675 /* BeforeSuiteTests.swift in Sources */,
DA8C00211A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */,
Expand All @@ -1677,7 +1676,6 @@
4748E8941A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */,
DA8F91AE19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */,
DAE714FA19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */,
AE4E58131C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */,
AED9C8631CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */,
471590401A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */,
DA8F919D19F31921006F6675 /* FailureTests+ObjC.m in Sources */,
Expand Down
11 changes: 5 additions & 6 deletions Tests/QuickTests/QuickTests/Helpers/QCKSpecRunner.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
#endif

#import "QCKSpecRunner.h"
#import "XCTestObservationCenter+QCKSuspendObservation.h"

@interface XCTest (Redeclaration)
- (XCTestRun *)run;
Expand All @@ -16,11 +15,11 @@ - (XCTestRun *)run;
XCTestRun * _Nullable qck_runSuite(XCTestSuite * _Nonnull suite) {
[World sharedWorld].isRunningAdditionalSuites = YES;

__block XCTestRun *result = nil;
[[XCTestObservationCenter sharedTestObservationCenter] qck_suspendObservationForBlock:^{
[suite runTest];
result = suite.testRun;
}];
XCTestRun *result = [[XCTestObservationCenter sharedTestObservationCenter]
qck_suspendObservationForBlock:^XCTestRun * _Nullable{
[suite runTest];
return suite.testRun;
}];
return result;
}

Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import Foundation
import XCTest

/// This allows us to only suspend observation for observers by provided by Apple
/// as a part of the XCTest framework. In particular it is important that we not
/// suspend the observer added by Nimble, otherwise it is unable to properly
/// report assertion failures.
private func isFromApple(observer: XCTestObservation) -> Bool {
guard let bundleIdentifier = Bundle(for: type(of: observer)).bundleIdentifier else {
return false
}
return bundleIdentifier.contains("com.apple.dt.XCTest")
}

/**
Add the ability to temporarily disable internal XCTest execution observation in
order to run isolated XCTestSuite instances while the QuickTests test suite is running.
*/
extension XCTestObservationCenter {
/**
Suspends test suite observation for XCTest-provided observers for the duration that
the block is executing. Any test suites that are executed within the block do not
generate any log output. Failures are still reported.

Use this method to run XCTestSuite objects while another XCTestSuite is running.
Without this method, tests fail with the message: "Timed out waiting for IDE
barrier message to complete" or "Unexpected TestSuiteDidStart".
*/
@objc func qck_suspendObservation(forBlock block: () -> XCTestRun?) -> XCTestRun? {
let originalObservers = value(forKey: "observers") as? [XCTestObservation] ?? []
var suspendedObservers = [XCTestObservation]()

for observer in originalObservers where isFromApple(observer: observer) {
suspendedObservers.append(observer)
removeTestObserver(observer)
}
defer {
for observer in suspendedObservers {
addTestObserver(observer)
}
}

return block()
}
}
0