Skip to content

Commit 24057ad

Browse files
committed
Source Code structure refactor test.
1 parent aa8faa7 commit 24057ad

File tree

15 files changed

+554
-163
lines changed

15 files changed

+554
-163
lines changed

SDKIntegrationTestApps/iOSReleaseTest-SPM/iOSReleaseTestTests/TestObserver.swift renamed to SDKIntegrationTestApps/Source/TestObserver.swift

File renamed without changes.

SDKIntegrationTestApps/iOSReleaseTest-SPM/iOSReleaseTestTests/iOSReleaseTestTests.swift renamed to SDKIntegrationTestApps/Source/iOSReleaseTestTests.swift

File renamed without changes.

SDKIntegrationTestApps/iOSReleaseTest-Carthage/iOSReleaseTest.xcodeproj/project.pbxproj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
C119B02127ADC85E00E8C7BF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C119B02027ADC85E00E8C7BF /* Assets.xcassets */; };
1515
C119B02427ADC85E00E8C7BF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C119B02227ADC85E00E8C7BF /* LaunchScreen.storyboard */; };
1616
C119B02C27ADC92A00E8C7BF /* iOSReleaseTest.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = C119B02B27ADC8FB00E8C7BF /* iOSReleaseTest.entitlements */; };
17+
E72CA88B2EA19F0400805780 /* TestObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = E72CA88A2EA19F0400805780 /* TestObserver.swift */; };
1718
E75C0E192975391F0001D5D7 /* BranchSDK.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E763E99C29354DA40053F490 /* BranchSDK.xcframework */; };
1819
E75C0E1A2975391F0001D5D7 /* BranchSDK.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E763E99C29354DA40053F490 /* BranchSDK.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
1920
E7939C0429749D3C00B90B82 /* iOSReleaseTestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7939C0329749D3C00B90B82 /* iOSReleaseTestTests.swift */; };
@@ -53,9 +54,10 @@
5354
C119B02327ADC85E00E8C7BF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
5455
C119B02527ADC85E00E8C7BF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
5556
C119B02B27ADC8FB00E8C7BF /* iOSReleaseTest.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iOSReleaseTest.entitlements; sourceTree = "<group>"; };
57+
E72CA88A2EA19F0400805780 /* TestObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestObserver.swift; sourceTree = "<group>"; };
5658
E763E99C29354DA40053F490 /* BranchSDK.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BranchSDK.xcframework; path = Carthage/Build/BranchSDK.xcframework; sourceTree = "<group>"; };
5759
E7939C0129749D3C00B90B82 /* iOSReleaseTestTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iOSReleaseTestTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
58-
E7939C0329749D3C00B90B82 /* iOSReleaseTestTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSReleaseTestTests.swift; sourceTree = "<group>"; };
60+
E7939C0329749D3C00B90B82 /* iOSReleaseTestTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = iOSReleaseTestTests.swift; path = ../../Source/iOSReleaseTestTests.swift; sourceTree = "<group>"; };
5961
/* End PBXFileReference section */
6062

6163
/* Begin PBXFrameworksBuildPhase section */
@@ -122,6 +124,7 @@
122124
E7939C0229749D3C00B90B82 /* iOSReleaseTestTests */ = {
123125
isa = PBXGroup;
124126
children = (
127+
E72CA88A2EA19F0400805780 /* TestObserver.swift */,
125128
E7939C0329749D3C00B90B82 /* iOSReleaseTestTests.swift */,
126129
);
127130
path = iOSReleaseTestTests;
@@ -241,6 +244,7 @@
241244
buildActionMask = 2147483647;
242245
files = (
243246
E7939C0429749D3C00B90B82 /* iOSReleaseTestTests.swift in Sources */,
247+
E72CA88B2EA19F0400805780 /* TestObserver.swift in Sources */,
244248
);
245249
runOnlyForDeploymentPostprocessing = 0;
246250
};
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
import XCTest
2+
import Foundation
3+
4+
class TestObserver: NSObject, XCTestObservation {
5+
6+
private let dateFormatter: DateFormatter = {
7+
let formatter = DateFormatter()
8+
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
9+
return formatter
10+
}()
11+
12+
func testBundleWillStart(_ testBundle: Bundle) {
13+
logMessage("Test Bundle Will Start: \(testBundle.bundleIdentifier ?? "Unknown")")
14+
logMessage("Bundle Path: \(testBundle.bundlePath)")
15+
}
16+
17+
func testBundleDidFinish(_ testBundle: Bundle) {
18+
logMessage("Test Bundle Did Finish: \(testBundle.bundleIdentifier ?? "Unknown")")
19+
}
20+
21+
func testSuiteWillStart(_ testSuite: XCTestSuite) {
22+
logMessage("Test Suite Will Start: \(testSuite.name)")
23+
logMessage("Test Count: \(testSuite.testCaseCount)")
24+
}
25+
26+
func testSuiteDidFinish(_ testSuite: XCTestSuite) {
27+
let duration = String(format: "%.3f", testSuite.testRun?.totalDuration ?? 0)
28+
let failures = testSuite.testRun?.failureCount ?? 0
29+
let unexpected = testSuite.testRun?.unexpectedExceptionCount ?? 0
30+
31+
logMessage("Test Suite Did Finish: \(testSuite.name)")
32+
logMessage("Duration: \(duration)s")
33+
logMessage("Failures: \(failures)")
34+
logMessage("Unexpected Exceptions: \(unexpected)")
35+
36+
if failures > 0 || unexpected > 0 {
37+
logMessage("SUITE FAILED: \(testSuite.name)")
38+
} else {
39+
logMessage("SUITE PASSED: \(testSuite.name)")
40+
}
41+
}
42+
43+
func testCaseWillStart(_ testCase: XCTestCase) {
44+
logMessage("Test Case Will Start: \(testCase.name)")
45+
logMessage("Class: \(String(describing: type(of: testCase)))")
46+
}
47+
48+
func testCaseDidFinish(_ testCase: XCTestCase) {
49+
guard let testRun = testCase.testRun else {
50+
logMessage("Test Case Did Finish (No Run Info): \(testCase.name)")
51+
return
52+
}
53+
54+
let duration = String(format: "%.3f", testRun.totalDuration)
55+
let failures = testRun.failureCount
56+
let unexpected = testRun.unexpectedExceptionCount
57+
58+
logMessage("Test Case Did Finish: \(testCase.name)")
59+
logMessage("Duration: \(duration)s")
60+
61+
if testRun.hasSucceeded {
62+
logMessage("PASSED: \(testCase.name)")
63+
} else {
64+
logMessage("FAILED: \(testCase.name)")
65+
logMessage("Failures: \(failures)")
66+
logMessage("Unexpected Exceptions: \(unexpected)")
67+
}
68+
}
69+
70+
func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {
71+
logMessage("TEST FAILURE:")
72+
logMessage("Test: \(testCase.name)")
73+
logMessage("Description: \(description)")
74+
75+
if let filePath = filePath {
76+
let fileName = URL(fileURLWithPath: filePath).lastPathComponent
77+
logMessage("File: \(fileName):\(lineNumber)")
78+
}
79+
logMessage(String(repeating: "=", count: 80))
80+
}
81+
82+
func testCase(_ testCase: XCTestCase, didRecord issue: XCTIssue) {
83+
logMessage("TEST ISSUE RECORDED:")
84+
logMessage("Test: \(testCase.name)")
85+
logMessage("Description: \(issue.compactDescription)")
86+
logMessage("Type: \(issue.type.description)")
87+
88+
if let location = issue.sourceCodeContext.location {
89+
if #available(iOS 16.0, *) {
90+
let fileName = URL(fileURLWithPath: location.fileURL.path()).lastPathComponent
91+
logMessage("Location: \(fileName):\(location.lineNumber)")
92+
} else {
93+
logMessage("Location: Available on iOS versions - iOS 16+")
94+
}
95+
96+
}
97+
98+
// Add detailed description if available
99+
if ((issue.detailedDescription?.isEmpty) == nil) && issue.detailedDescription != issue.compactDescription {
100+
logMessage("Details: \(String(describing: issue.detailedDescription))")
101+
}
102+
}
103+
104+
// MARK: - Helper Methods
105+
106+
private func logMessage(_ message: String) {
107+
let timestamp = dateFormatter.string(from: Date())
108+
let logLine = "[\(timestamp)] [TestObserver] \(message)"
109+
print(logLine)
110+
fflush(stdout)
111+
}
112+
}
113+
114+
extension XCTIssue.IssueType {
115+
var description: String {
116+
switch self {
117+
case .assertionFailure:
118+
return "Assertion Failure"
119+
case .performanceRegression:
120+
return "Performance Regression"
121+
case .system:
122+
return "System Issue"
123+
case .thrownError:
124+
return "Thrown Error"
125+
case .uncaughtException:
126+
return "Uncaught Exception"
127+
case .unmatchedExpectedFailure:
128+
return "Unmatched Expected Failure"
129+
@unknown default:
130+
return "Unknown Issue Type"
131+
}
132+
}
133+
}

SDKIntegrationTestApps/iOSReleaseTest-Carthage/iOSReleaseTestTests/iOSReleaseTestTests.swift

Lines changed: 0 additions & 41 deletions
This file was deleted.

SDKIntegrationTestApps/iOSReleaseTest-Cocoapods/iOSReleaseTest.xcodeproj/project.pbxproj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
C119B02127ADC85E00E8C7BF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C119B02027ADC85E00E8C7BF /* Assets.xcassets */; };
1717
C119B02427ADC85E00E8C7BF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C119B02227ADC85E00E8C7BF /* LaunchScreen.storyboard */; };
1818
C119B02C27ADC92A00E8C7BF /* iOSReleaseTest.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = C119B02B27ADC8FB00E8C7BF /* iOSReleaseTest.entitlements */; };
19+
E72CA8872EA19EA500805780 /* TestObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = E72CA8862EA19EA500805780 /* TestObserver.swift */; };
1920
E7939C0429749D3C00B90B82 /* iOSReleaseTestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7939C0329749D3C00B90B82 /* iOSReleaseTestTests.swift */; };
2021
/* End PBXBuildFile section */
2122

@@ -44,8 +45,9 @@
4445
C119B02B27ADC8FB00E8C7BF /* iOSReleaseTest.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iOSReleaseTest.entitlements; sourceTree = "<group>"; };
4546
CB25BCCA817F45C9E229676E /* Pods_iOSReleaseTest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iOSReleaseTest.framework; sourceTree = BUILT_PRODUCTS_DIR; };
4647
D347EDD199CA7E6A4A677D5A /* Pods-iOSReleaseTestTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iOSReleaseTestTests.release.xcconfig"; path = "Target Support Files/Pods-iOSReleaseTestTests/Pods-iOSReleaseTestTests.release.xcconfig"; sourceTree = "<group>"; };
48+
E72CA8862EA19EA500805780 /* TestObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestObserver.swift; sourceTree = "<group>"; };
4749
E7939C0129749D3C00B90B82 /* iOSReleaseTestTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iOSReleaseTestTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
48-
E7939C0329749D3C00B90B82 /* iOSReleaseTestTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSReleaseTestTests.swift; sourceTree = "<group>"; };
50+
E7939C0329749D3C00B90B82 /* iOSReleaseTestTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = iOSReleaseTestTests.swift; path = ../../Source/iOSReleaseTestTests.swift; sourceTree = "<group>"; };
4951
FD6F9153F98F7AA38E9A2DCF /* Pods_iOSReleaseTestTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iOSReleaseTestTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5052
/* End PBXFileReference section */
5153

@@ -127,6 +129,7 @@
127129
E7939C0229749D3C00B90B82 /* iOSReleaseTestTests */ = {
128130
isa = PBXGroup;
129131
children = (
132+
E72CA8862EA19EA500805780 /* TestObserver.swift */,
130133
E7939C0329749D3C00B90B82 /* iOSReleaseTestTests.swift */,
131134
);
132135
path = iOSReleaseTestTests;
@@ -338,6 +341,7 @@
338341
buildActionMask = 2147483647;
339342
files = (
340343
E7939C0429749D3C00B90B82 /* iOSReleaseTestTests.swift in Sources */,
344+
E72CA8872EA19EA500805780 /* TestObserver.swift in Sources */,
341345
);
342346
runOnlyForDeploymentPostprocessing = 0;
343347
};
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
import XCTest
2+
import Foundation
3+
4+
class TestObserver: NSObject, XCTestObservation {
5+
6+
private let dateFormatter: DateFormatter = {
7+
let formatter = DateFormatter()
8+
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
9+
return formatter
10+
}()
11+
12+
func testBundleWillStart(_ testBundle: Bundle) {
13+
logMessage("Test Bundle Will Start: \(testBundle.bundleIdentifier ?? "Unknown")")
14+
logMessage("Bundle Path: \(testBundle.bundlePath)")
15+
}
16+
17+
func testBundleDidFinish(_ testBundle: Bundle) {
18+
logMessage("Test Bundle Did Finish: \(testBundle.bundleIdentifier ?? "Unknown")")
19+
}
20+
21+
func testSuiteWillStart(_ testSuite: XCTestSuite) {
22+
logMessage("Test Suite Will Start: \(testSuite.name)")
23+
logMessage("Test Count: \(testSuite.testCaseCount)")
24+
}
25+
26+
func testSuiteDidFinish(_ testSuite: XCTestSuite) {
27+
let duration = String(format: "%.3f", testSuite.testRun?.totalDuration ?? 0)
28+
let failures = testSuite.testRun?.failureCount ?? 0
29+
let unexpected = testSuite.testRun?.unexpectedExceptionCount ?? 0
30+
31+
logMessage("Test Suite Did Finish: \(testSuite.name)")
32+
logMessage("Duration: \(duration)s")
33+
logMessage("Failures: \(failures)")
34+
logMessage("Unexpected Exceptions: \(unexpected)")
35+
36+
if failures > 0 || unexpected > 0 {
37+
logMessage("SUITE FAILED: \(testSuite.name)")
38+
} else {
39+
logMessage("SUITE PASSED: \(testSuite.name)")
40+
}
41+
}
42+
43+
func testCaseWillStart(_ testCase: XCTestCase) {
44+
logMessage("Test Case Will Start: \(testCase.name)")
45+
logMessage("Class: \(String(describing: type(of: testCase)))")
46+
}
47+
48+
func testCaseDidFinish(_ testCase: XCTestCase) {
49+
guard let testRun = testCase.testRun else {
50+
logMessage("Test Case Did Finish (No Run Info): \(testCase.name)")
51+
return
52+
}
53+
54+
let duration = String(format: "%.3f", testRun.totalDuration)
55+
let failures = testRun.failureCount
56+
let unexpected = testRun.unexpectedExceptionCount
57+
58+
logMessage("Test Case Did Finish: \(testCase.name)")
59+
logMessage("Duration: \(duration)s")
60+
61+
if testRun.hasSucceeded {
62+
logMessage("PASSED: \(testCase.name)")
63+
} else {
64+
logMessage("FAILED: \(testCase.name)")
65+
logMessage("Failures: \(failures)")
66+
logMessage("Unexpected Exceptions: \(unexpected)")
67+
}
68+
}
69+
70+
func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {
71+
logMessage("TEST FAILURE:")
72+
logMessage("Test: \(testCase.name)")
73+
logMessage("Description: \(description)")
74+
75+
if let filePath = filePath {
76+
let fileName = URL(fileURLWithPath: filePath).lastPathComponent
77+
logMessage("File: \(fileName):\(lineNumber)")
78+
}
79+
logMessage(String(repeating: "=", count: 80))
80+
}
81+
82+
func testCase(_ testCase: XCTestCase, didRecord issue: XCTIssue) {
83+
logMessage("TEST ISSUE RECORDED:")
84+
logMessage("Test: \(testCase.name)")
85+
logMessage("Description: \(issue.compactDescription)")
86+
logMessage("Type: \(issue.type.description)")
87+
88+
if let location = issue.sourceCodeContext.location {
89+
if #available(iOS 16.0, *) {
90+
let fileName = URL(fileURLWithPath: location.fileURL.path()).lastPathComponent
91+
logMessage("Location: \(fileName):\(location.lineNumber)")
92+
} else {
93+
logMessage("Location: Available on iOS versions - iOS 16+")
94+
}
95+
96+
}
97+
98+
// Add detailed description if available
99+
if ((issue.detailedDescription?.isEmpty) == nil) && issue.detailedDescription != issue.compactDescription {
100+
logMessage("Details: \(String(describing: issue.detailedDescription))")
101+
}
102+
}
103+
104+
// MARK: - Helper Methods
105+
106+
private func logMessage(_ message: String) {
107+
let timestamp = dateFormatter.string(from: Date())
108+
let logLine = "[\(timestamp)] [TestObserver] \(message)"
109+
print(logLine)
110+
fflush(stdout)
111+
}
112+
}
113+
114+
extension XCTIssue.IssueType {
115+
var description: String {
116+
switch self {
117+
case .assertionFailure:
118+
return "Assertion Failure"
119+
case .performanceRegression:
120+
return "Performance Regression"
121+
case .system:
122+
return "System Issue"
123+
case .thrownError:
124+
return "Thrown Error"
125+
case .uncaughtException:
126+
return "Uncaught Exception"
127+
case .unmatchedExpectedFailure:
128+
return "Unmatched Expected Failure"
129+
@unknown default:
130+
return "Unknown Issue Type"
131+
}
132+
}
133+
}

0 commit comments

Comments
 (0)